[Lighthouse] Roll Lighthouse 11.0.0

This release removes "legacy navigation" mode

Bug: 772558
Change-Id: Ic10453d7bdbdb2ee7f5893bef645713ba2832fd7
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4749726
Reviewed-by: Connor Clark <cjamcl@chromium.org>
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
Commit-Queue: Adam Raine <asraine@chromium.org>
diff --git a/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts b/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts
index eb0fae6..5106536 100644
--- a/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts
+++ b/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts
@@ -11,35 +11,6 @@
 }
 
 /**
- * LegacyPort is provided to Lighthouse as the CDP connection in legacyNavigation mode.
- * Its complement is https://github.com/GoogleChrome/lighthouse/blob/v9.3.1/lighthouse-core/gather/connections/raw.js
- * It speaks pure CDP via notifyFrontendViaWorkerMessage
- *
- * Any message that comes back from Lighthouse has to go via a so-called "port".
- * This class holds the relevant callbacks that Lighthouse provides and that
- * can be called in the onmessage callback of the worker, so that the frontend
- * can communicate to Lighthouse. Lighthouse itself communicates to the frontend
- * via status updates defined below.
- */
-class LegacyPort {
-  onMessage?: (message: string) => void;
-  onClose?: () => void;
-  on(eventName: string, callback: (arg?: string) => void): void {
-    if (eventName === 'message') {
-      this.onMessage = callback;
-    } else if (eventName === 'close') {
-      this.onClose = callback;
-    }
-  }
-
-  send(message: string): void {
-    notifyFrontendViaWorkerMessage('sendProtocolMessage', {message});
-  }
-  close(): void {
-  }
-}
-
-/**
  * ConnectionProxy is a SDK interface, but the implementation has no knowledge it's a parallelConnection.
  * The CDP traffic is smuggled back and forth by the system described in LighthouseProtocolService
  */
@@ -81,7 +52,6 @@
   }
 }
 
-const legacyPort = new LegacyPort();
 let cdpConnection: ConnectionProxy|undefined;
 let endTimespan: (() => unknown)|undefined;
 
@@ -128,14 +98,6 @@
     const config = args.config || self.createConfig(args.categoryIDs, flags.formFactor);
     const url = args.url;
 
-    // Handle legacy Lighthouse runner path.
-    if (action === 'navigation' && flags.legacyNavigation) {
-      // @ts-expect-error https://github.com/GoogleChrome/lighthouse/issues/11628
-      const connection = self.setUpWorkerConnection(legacyPort);
-      // @ts-expect-error https://github.com/GoogleChrome/lighthouse/issues/11628
-      return await self.runLighthouse(url, flags, config, connection);
-    }
-
     const {mainFrameId, mainTargetId, mainSessionId, targetInfos} = args;
     cdpConnection = new ConnectionProxy(mainSessionId);
     puppeteerHandle = await PuppeteerService.PuppeteerConnection.PuppeteerConnectionHelper.connectPuppeteerToConnection({
@@ -263,7 +225,6 @@
     }
     case 'dispatchProtocolMessage': {
       cdpConnection?.onMessage?.(messageFromFrontend.args.message);
-      legacyPort.onMessage?.(JSON.stringify(messageFromFrontend.args.message));
       break;
     }
     default: {
diff --git a/front_end/panels/lighthouse/LighthouseController.ts b/front_end/panels/lighthouse/LighthouseController.ts
index 1683b63..69aec8a 100644
--- a/front_end/panels/lighthouse/LighthouseController.ts
+++ b/front_end/panels/lighthouse/LighthouseController.ts
@@ -170,14 +170,6 @@
    */
   clearStorage: 'Clear storage',
   /**
-   * @description Text of checkbox to use the legacy Lighthouse navigation mode
-   */
-  legacyNavigation: 'Legacy navigation',
-  /**
-   * @description Tooltip text that appears when hovering over the 'Legacy navigation' checkbox in the settings pane opened by clicking the setting cog in the start view of the audits panel. "Navigation mode" is a Lighthouse mode that analyzes a page navigation.
-   */
-  useLegacyNavigation: 'Analyze the page using classic Lighthouse when in navigation mode.',
-  /**
    * @description Tooltip text of checkbox to reset storage features prior to running audits in
    * Lighthouse. Resetting the storage clears/empties it to a neutral state.
    */
@@ -397,7 +389,6 @@
 
   getFlags(): {
     formFactor: (string|undefined),
-    legacyNavigation: boolean,
     mode: string,
   } {
     const flags = {};
@@ -406,7 +397,6 @@
     }
     return flags as {
       formFactor: (string | undefined),
-      legacyNavigation: boolean,
       mode: string,
     };
   }
@@ -455,16 +445,12 @@
     });
   }
 
-  private recordMetrics(flags: {mode: string, legacyNavigation: boolean}): void {
+  private recordMetrics(flags: {mode: string}): void {
     Host.userMetrics.actionTaken(Host.UserMetrics.Action.LighthouseStarted);
 
     switch (flags.mode) {
       case 'navigation':
-        if (flags.legacyNavigation) {
-          Host.userMetrics.lighthouseModeRun(Host.UserMetrics.LighthouseModeRun.LegacyNavigation);
-        } else {
-          Host.userMetrics.lighthouseModeRun(Host.UserMetrics.LighthouseModeRun.Navigation);
-        }
+        Host.userMetrics.lighthouseModeRun(Host.UserMetrics.LighthouseModeRun.Navigation);
         break;
       case 'timespan':
         Host.userMetrics.lighthouseModeRun(Host.UserMetrics.LighthouseModeRun.Timespan);
@@ -770,17 +756,6 @@
     options: undefined,
     learnMore: undefined,
   },
-  {
-    setting: Common.Settings.Settings.instance().createSetting(
-        'lighthouse.legacy_navigation', false, Common.Settings.SettingStorageType.Synced),
-    title: i18nLazyString(UIStrings.legacyNavigation),
-    description: i18nLazyString(UIStrings.useLegacyNavigation),
-    setFlags: (flags: Flags, value: string|boolean): void => {
-      flags.legacyNavigation = value;
-    },
-    options: undefined,
-    learnMore: undefined,
-  },
 ];
 
 // TODO(crbug.com/1167717): Make this a const enum again
diff --git a/front_end/panels/lighthouse/LighthouseStartView.ts b/front_end/panels/lighthouse/LighthouseStartView.ts
index f455547..a2fa6e1 100644
--- a/front_end/panels/lighthouse/LighthouseStartView.ts
+++ b/front_end/panels/lighthouse/LighthouseStartView.ts
@@ -170,7 +170,6 @@
   }
 
   private render(): void {
-    this.populateRuntimeSettingAsToolbarCheckbox('lighthouse.legacy_navigation', this.settingsToolbarInternal);
     this.populateRuntimeSettingAsToolbarCheckbox('lighthouse.clear_storage', this.settingsToolbarInternal);
     this.populateRuntimeSettingAsToolbarDropdown('lighthouse.throttling', this.settingsToolbarInternal);
 
diff --git a/front_end/third_party/lighthouse/lighthouse-dt-bundle.js b/front_end/third_party/lighthouse/lighthouse-dt-bundle.js
index 51e52fe..b53101b 100644
--- a/front_end/third_party/lighthouse/lighthouse-dt-bundle.js
+++ b/front_end/third_party/lighthouse/lighthouse-dt-bundle.js
@@ -1,5 +1,5 @@
 /**
- * Lighthouse v10.4.0 (Jul 10 2023)
+ * Lighthouse v10.4.0-55-gcd3d3a4c7 (Aug 03 2023)
  *
  * Automated auditing, performance metrics, and best practices for the web.
  *
@@ -7,1309 +7,464 @@
  * @author   The Lighthouse Authors
  * @license  Apache-2.0
  */
-!function(){"use strict";var e="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t=[],n=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,r=!1;function init$1(){r=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,o=e.length;a<o;++a)t[a]=e[a],n[e.charCodeAt(a)]=a;n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63}function encodeChunk(e,n,a){for(var r,o,i=[],s=n;s<a;s+=3)r=(e[s]<<16)+(e[s+1]<<8)+e[s+2],i.push(t[(o=r)>>18&63]+t[o>>12&63]+t[o>>6&63]+t[63&o]);return i.join("")}function fromByteArray(e){var n;r||init$1();for(var a=e.length,o=a%3,i="",s=[],c=16383,l=0,u=a-o;l<u;l+=c)s.push(encodeChunk(e,l,l+c>u?u:l+c));return 1===o?(n=e[a-1],i+=t[n>>2],i+=t[n<<4&63],i+="=="):2===o&&(n=(e[a-2]<<8)+e[a-1],i+=t[n>>10],i+=t[n>>4&63],i+=t[n<<2&63],i+="="),s.push(i),s.join("")}function read(e,t,n,a,r){var o,i,s=8*r-a-1,c=(1<<s)-1,l=c>>1,u=-7,d=n?r-1:0,m=n?-1:1,p=e[t+d];for(d+=m,o=p&(1<<-u)-1,p>>=-u,
-u+=s;u>0;o=256*o+e[t+d],d+=m,u-=8);for(i=o&(1<<-u)-1,o>>=-u,u+=a;u>0;i=256*i+e[t+d],d+=m,u-=8);if(0===o)o=1-l;else{if(o===c)return i?NaN:1/0*(p?-1:1);i+=Math.pow(2,a),o-=l}return(p?-1:1)*i*Math.pow(2,o-a)}function write(e,t,n,a,r,o){var i,s,c,l=8*o-r-1,u=(1<<l)-1,d=u>>1,m=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,p=a?0:o-1,h=a?1:-1,f=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-i))<1&&(i--,c*=2),(t+=i+d>=1?m/c:m*Math.pow(2,1-d))*c>=2&&(i++,c/=2),i+d>=u?(s=0,i=u):i+d>=1?(s=(t*c-1)*Math.pow(2,r),i+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,r),i=0));r>=8;e[n+p]=255&s,p+=h,s/=256,r-=8);for(i=i<<r|s,l+=r;l>0;e[n+p]=255&i,p+=h,i/=256,l-=8);e[n+p-h]|=128*f}var o={}.toString,i=Array.isArray||function(e){return"[object Array]"==o.call(e)};function kMaxLength(){return Buffer$1.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function createBuffer(e,t){if(kMaxLength()<t)throw new RangeError("Invalid typed array length")
-;return Buffer$1.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=Buffer$1.prototype:(null===e&&(e=new Buffer$1(t)),e.length=t),e}function Buffer$1(e,t,n){if(!(Buffer$1.TYPED_ARRAY_SUPPORT||this instanceof Buffer$1))return new Buffer$1(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return allocUnsafe(this,e)}return from(this,e,t,n)}function from(e,t,n,a){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function fromArrayBuffer(e,t,n,a){if(t.byteLength,n<0||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(a||0))throw new RangeError("'length' is out of bounds");t=void 0===n&&void 0===a?new Uint8Array(t):void 0===a?new Uint8Array(t,n):new Uint8Array(t,n,a);Buffer$1.TYPED_ARRAY_SUPPORT?(e=t).__proto__=Buffer$1.prototype:e=fromArrayLike(e,t);return e
-}(e,t,n,a):"string"==typeof t?function fromString(e,t,n){"string"==typeof n&&""!==n||(n="utf8");if(!Buffer$1.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var a=0|byteLength(t,n),r=(e=createBuffer(e,a)).write(t,n);r!==a&&(e=e.slice(0,r));return e}(e,t,n):function fromObject(e,t){if(internalIsBuffer(t)){var n=0|checked(t.length);return 0===(e=createBuffer(e,n)).length||t.copy(e,0,0,n),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||function isnan(e){return e!=e}(t.length)?createBuffer(e,0):fromArrayLike(e,t);if("Buffer"===t.type&&i(t.data))return fromArrayLike(e,t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function assertSize(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function allocUnsafe(e,t){
-if(assertSize(t),e=createBuffer(e,t<0?0:0|checked(t)),!Buffer$1.TYPED_ARRAY_SUPPORT)for(var n=0;n<t;++n)e[n]=0;return e}function fromArrayLike(e,t){var n=t.length<0?0:0|checked(t.length);e=createBuffer(e,n);for(var a=0;a<n;a+=1)e[a]=255&t[a];return e}function checked(e){if(e>=kMaxLength())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength().toString(16)+" bytes");return 0|e}function internalIsBuffer(e){return!(null==e||!e._isBuffer)}function byteLength(e,t){if(internalIsBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var a=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return utf8ToBytes(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":
-return base64ToBytes(e).length;default:if(a)return utf8ToBytes(e).length;t=(""+t).toLowerCase(),a=!0}}function slowToString(e,t,n){var a=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return hexSlice(this,t,n);case"utf8":case"utf-8":return utf8Slice(this,t,n);case"ascii":return asciiSlice(this,t,n);case"latin1":case"binary":return latin1Slice(this,t,n);case"base64":return base64Slice(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,t,n);default:if(a)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),a=!0}}function swap(e,t,n){var a=e[t];e[t]=e[n],e[n]=a}function bidirectionalIndexOf(e,t,n,a,r){if(0===e.length)return-1;if("string"==typeof n?(a=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(r)return-1
-;n=e.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof t&&(t=Buffer$1.from(t,a)),internalIsBuffer(t))return 0===t.length?-1:arrayIndexOf(e,t,n,a,r);if("number"==typeof t)return t&=255,Buffer$1.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):arrayIndexOf(e,[t],n,a,r);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(e,t,n,a,r){var o,i=1,s=e.length,c=t.length;if(void 0!==a&&("ucs2"===(a=String(a).toLowerCase())||"ucs-2"===a||"utf16le"===a||"utf-16le"===a)){if(e.length<2||t.length<2)return-1;i=2,s/=2,c/=2,n/=2}function read(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(r){var l=-1;for(o=n;o<s;o++)if(read(e,o)===read(t,-1===l?0:o-l)){if(-1===l&&(l=o),o-l+1===c)return l*i}else-1!==l&&(o-=o-l),l=-1}else for(n+c>s&&(n=s-c),o=n;o>=0;o--){for(var u=!0,d=0;d<c;d++)if(read(e,o+d)!==read(t,d)){u=!1;break}if(u)return o}return-1}
-function hexWrite(e,t,n,a){n=Number(n)||0;var r=e.length-n;a?(a=Number(a))>r&&(a=r):a=r;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");a>o/2&&(a=o/2);for(var i=0;i<a;++i){var s=parseInt(t.substr(2*i,2),16);if(isNaN(s))return i;e[n+i]=s}return i}function utf8Write(e,t,n,a){return blitBuffer(utf8ToBytes(t,e.length-n),e,n,a)}function asciiWrite(e,t,n,a){return blitBuffer(function asciiToBytes(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,a)}function latin1Write(e,t,n,a){return asciiWrite(e,t,n,a)}function base64Write(e,t,n,a){return blitBuffer(base64ToBytes(t),e,n,a)}function ucs2Write(e,t,n,a){return blitBuffer(function utf16leToBytes(e,t){for(var n,a,r,o=[],i=0;i<e.length&&!((t-=2)<0);++i)a=(n=e.charCodeAt(i))>>8,r=n%256,o.push(r),o.push(a);return o}(t,e.length-n),e,n,a)}function base64Slice(e,t,n){return 0===t&&n===e.length?fromByteArray(e):fromByteArray(e.slice(t,n))}function utf8Slice(e,t,n){n=Math.min(e.length,n)
-;for(var a=[],r=t;r<n;){var o,i,c,l,u=e[r],d=null,m=u>239?4:u>223?3:u>191?2:1;if(r+m<=n)switch(m){case 1:u<128&&(d=u);break;case 2:128==(192&(o=e[r+1]))&&(l=(31&u)<<6|63&o)>127&&(d=l);break;case 3:o=e[r+1],i=e[r+2],128==(192&o)&&128==(192&i)&&(l=(15&u)<<12|(63&o)<<6|63&i)>2047&&(l<55296||l>57343)&&(d=l);break;case 4:o=e[r+1],i=e[r+2],c=e[r+3],128==(192&o)&&128==(192&i)&&128==(192&c)&&(l=(15&u)<<18|(63&o)<<12|(63&i)<<6|63&c)>65535&&l<1114112&&(d=l)}null===d?(d=65533,m=1):d>65535&&(d-=65536,a.push(d>>>10&1023|55296),d=56320|1023&d),a.push(d),r+=m}return function decodeCodePointsArray(e){var t=e.length;if(t<=s)return String.fromCharCode.apply(String,e);var n="",a=0;for(;a<t;)n+=String.fromCharCode.apply(String,e.slice(a,a+=s));return n}(a)}Buffer$1.TYPED_ARRAY_SUPPORT=void 0===e.TYPED_ARRAY_SUPPORT||e.TYPED_ARRAY_SUPPORT,Buffer$1.poolSize=8192,Buffer$1._augment=function(e){return e.__proto__=Buffer$1.prototype,e},Buffer$1.from=function(e,t,n){return from(null,e,t,n)},
-Buffer$1.TYPED_ARRAY_SUPPORT&&(Buffer$1.prototype.__proto__=Uint8Array.prototype,Buffer$1.__proto__=Uint8Array),Buffer$1.alloc=function(e,t,n){return function alloc(e,t,n,a){return assertSize(t),t<=0?createBuffer(e,t):void 0!==n?"string"==typeof a?createBuffer(e,t).fill(n,a):createBuffer(e,t).fill(n):createBuffer(e,t)}(null,e,t,n)},Buffer$1.allocUnsafe=function(e){return allocUnsafe(null,e)},Buffer$1.allocUnsafeSlow=function(e){return allocUnsafe(null,e)},Buffer$1.isBuffer=function isBuffer$3(e){return null!=e&&(!!e._isBuffer||isFastBuffer(e)||function isSlowBuffer(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&isFastBuffer(e.slice(0,0))}(e))},Buffer$1.compare=function compare(e,t){if(!internalIsBuffer(e)||!internalIsBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,a=t.length,r=0,o=Math.min(n,a);r<o;++r)if(e[r]!==t[r]){n=e[r],a=t[r];break}return n<a?-1:a<n?1:0},Buffer$1.isEncoding=function isEncoding(e){
-switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},Buffer$1.concat=function concat(e,t){if(!i(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return Buffer$1.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var a=Buffer$1.allocUnsafe(t),r=0;for(n=0;n<e.length;++n){var o=e[n];if(!internalIsBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(a,r),r+=o.length}return a},Buffer$1.byteLength=byteLength,Buffer$1.prototype._isBuffer=!0,Buffer$1.prototype.swap16=function swap16(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)swap(this,t,t+1);return this},Buffer$1.prototype.swap32=function swap32(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits")
-;for(var t=0;t<e;t+=4)swap(this,t,t+3),swap(this,t+1,t+2);return this},Buffer$1.prototype.swap64=function swap64(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)swap(this,t,t+7),swap(this,t+1,t+6),swap(this,t+2,t+5),swap(this,t+3,t+4);return this},Buffer$1.prototype.toString=function toString(){var e=0|this.length;return 0===e?"":0===arguments.length?utf8Slice(this,0,e):slowToString.apply(this,arguments)},Buffer$1.prototype.equals=function equals(e){if(!internalIsBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===Buffer$1.compare(this,e)},Buffer$1.prototype.inspect=function inspect(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},Buffer$1.prototype.compare=function compare(e,t,n,a,r){if(!internalIsBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),
-void 0===a&&(a=0),void 0===r&&(r=this.length),t<0||n>e.length||a<0||r>this.length)throw new RangeError("out of range index");if(a>=r&&t>=n)return 0;if(a>=r)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(r>>>=0)-(a>>>=0),i=(n>>>=0)-(t>>>=0),s=Math.min(o,i),c=this.slice(a,r),l=e.slice(t,n),u=0;u<s;++u)if(c[u]!==l[u]){o=c[u],i=l[u];break}return o<i?-1:i<o?1:0},Buffer$1.prototype.includes=function includes(e,t,n){return-1!==this.indexOf(e,t,n)},Buffer$1.prototype.indexOf=function indexOf(e,t,n){return bidirectionalIndexOf(this,e,t,n,!0)},Buffer$1.prototype.lastIndexOf=function lastIndexOf(e,t,n){return bidirectionalIndexOf(this,e,t,n,!1)},Buffer$1.prototype.write=function write(e,t,n,a){if(void 0===t)a="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)a=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(n)?(n|=0,void 0===a&&(a="utf8")):(a=n,n=void 0)}var r=this.length-t
-;if((void 0===n||n>r)&&(n=r),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");a||(a="utf8");for(var o=!1;;)switch(a){case"hex":return hexWrite(this,e,t,n);case"utf8":case"utf-8":return utf8Write(this,e,t,n);case"ascii":return asciiWrite(this,e,t,n);case"latin1":case"binary":return latin1Write(this,e,t,n);case"base64":return base64Write(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+a);a=(""+a).toLowerCase(),o=!0}},Buffer$1.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var s=4096;function asciiSlice(e,t,n){var a="";n=Math.min(e.length,n);for(var r=t;r<n;++r)a+=String.fromCharCode(127&e[r]);return a}function latin1Slice(e,t,n){var a="";n=Math.min(e.length,n);for(var r=t;r<n;++r)a+=String.fromCharCode(e[r]);return a}function hexSlice(e,t,n){var a=e.length;(!t||t<0)&&(t=0),
-(!n||n<0||n>a)&&(n=a);for(var r="",o=t;o<n;++o)r+=toHex(e[o]);return r}function utf16leSlice(e,t,n){for(var a=e.slice(t,n),r="",o=0;o<a.length;o+=2)r+=String.fromCharCode(a[o]+256*a[o+1]);return r}function checkOffset(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function checkInt(e,t,n,a,r,o){if(!internalIsBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||t<o)throw new RangeError('"value" argument is out of bounds');if(n+a>e.length)throw new RangeError("Index out of range")}function objectWriteUInt16(e,t,n,a){t<0&&(t=65535+t+1);for(var r=0,o=Math.min(e.length-n,2);r<o;++r)e[n+r]=(t&255<<8*(a?r:1-r))>>>8*(a?r:1-r)}function objectWriteUInt32(e,t,n,a){t<0&&(t=4294967295+t+1);for(var r=0,o=Math.min(e.length-n,4);r<o;++r)e[n+r]=t>>>8*(a?r:3-r)&255}function checkIEEE754(e,t,n,a,r,o){if(n+a>e.length)throw new RangeError("Index out of range")
-;if(n<0)throw new RangeError("Index out of range")}function writeFloat(e,t,n,a,r){return r||checkIEEE754(e,0,n,4),write(e,t,n,a,23,4),n+4}function writeDouble(e,t,n,a,r){return r||checkIEEE754(e,0,n,8),write(e,t,n,a,52,8),n+8}Buffer$1.prototype.slice=function slice(e,t){var n,a=this.length;if((e=~~e)<0?(e+=a)<0&&(e=0):e>a&&(e=a),(t=void 0===t?a:~~t)<0?(t+=a)<0&&(t=0):t>a&&(t=a),t<e&&(t=e),Buffer$1.TYPED_ARRAY_SUPPORT)(n=this.subarray(e,t)).__proto__=Buffer$1.prototype;else{var r=t-e;n=new Buffer$1(r,void 0);for(var o=0;o<r;++o)n[o]=this[o+e]}return n},Buffer$1.prototype.readUIntLE=function readUIntLE(e,t,n){e|=0,t|=0,n||checkOffset(e,t,this.length);for(var a=this[e],r=1,o=0;++o<t&&(r*=256);)a+=this[e+o]*r;return a},Buffer$1.prototype.readUIntBE=function readUIntBE(e,t,n){e|=0,t|=0,n||checkOffset(e,t,this.length);for(var a=this[e+--t],r=1;t>0&&(r*=256);)a+=this[e+--t]*r;return a},Buffer$1.prototype.readUInt8=function readUInt8(e,t){return t||checkOffset(e,1,this.length),this[e]},
-Buffer$1.prototype.readUInt16LE=function readUInt16LE(e,t){return t||checkOffset(e,2,this.length),this[e]|this[e+1]<<8},Buffer$1.prototype.readUInt16BE=function readUInt16BE(e,t){return t||checkOffset(e,2,this.length),this[e]<<8|this[e+1]},Buffer$1.prototype.readUInt32LE=function readUInt32LE(e,t){return t||checkOffset(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},Buffer$1.prototype.readUInt32BE=function readUInt32BE(e,t){return t||checkOffset(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},Buffer$1.prototype.readIntLE=function readIntLE(e,t,n){e|=0,t|=0,n||checkOffset(e,t,this.length);for(var a=this[e],r=1,o=0;++o<t&&(r*=256);)a+=this[e+o]*r;return a>=(r*=128)&&(a-=Math.pow(2,8*t)),a},Buffer$1.prototype.readIntBE=function readIntBE(e,t,n){e|=0,t|=0,n||checkOffset(e,t,this.length);for(var a=t,r=1,o=this[e+--a];a>0&&(r*=256);)o+=this[e+--a]*r;return o>=(r*=128)&&(o-=Math.pow(2,8*t)),o},
-Buffer$1.prototype.readInt8=function readInt8(e,t){return t||checkOffset(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},Buffer$1.prototype.readInt16LE=function readInt16LE(e,t){t||checkOffset(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},Buffer$1.prototype.readInt16BE=function readInt16BE(e,t){t||checkOffset(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},Buffer$1.prototype.readInt32LE=function readInt32LE(e,t){return t||checkOffset(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},Buffer$1.prototype.readInt32BE=function readInt32BE(e,t){return t||checkOffset(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},Buffer$1.prototype.readFloatLE=function readFloatLE(e,t){return t||checkOffset(e,4,this.length),read(this,e,!0,23,4)},Buffer$1.prototype.readFloatBE=function readFloatBE(e,t){return t||checkOffset(e,4,this.length),read(this,e,!1,23,4)},
-Buffer$1.prototype.readDoubleLE=function readDoubleLE(e,t){return t||checkOffset(e,8,this.length),read(this,e,!0,52,8)},Buffer$1.prototype.readDoubleBE=function readDoubleBE(e,t){return t||checkOffset(e,8,this.length),read(this,e,!1,52,8)},Buffer$1.prototype.writeUIntLE=function writeUIntLE(e,t,n,a){(e=+e,t|=0,n|=0,a)||checkInt(this,e,t,n,Math.pow(2,8*n)-1,0);var r=1,o=0;for(this[t]=255&e;++o<n&&(r*=256);)this[t+o]=e/r&255;return t+n},Buffer$1.prototype.writeUIntBE=function writeUIntBE(e,t,n,a){(e=+e,t|=0,n|=0,a)||checkInt(this,e,t,n,Math.pow(2,8*n)-1,0);var r=n-1,o=1;for(this[t+r]=255&e;--r>=0&&(o*=256);)this[t+r]=e/o&255;return t+n},Buffer$1.prototype.writeUInt8=function writeUInt8(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,1,255,0),Buffer$1.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},Buffer$1.prototype.writeUInt16LE=function writeUInt16LE(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,2,65535,0),Buffer$1.TYPED_ARRAY_SUPPORT?(this[t]=255&e,
-this[t+1]=e>>>8):objectWriteUInt16(this,e,t,!0),t+2},Buffer$1.prototype.writeUInt16BE=function writeUInt16BE(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,2,65535,0),Buffer$1.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):objectWriteUInt16(this,e,t,!1),t+2},Buffer$1.prototype.writeUInt32LE=function writeUInt32LE(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,4,4294967295,0),Buffer$1.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):objectWriteUInt32(this,e,t,!0),t+4},Buffer$1.prototype.writeUInt32BE=function writeUInt32BE(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,4,4294967295,0),Buffer$1.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):objectWriteUInt32(this,e,t,!1),t+4},Buffer$1.prototype.writeIntLE=function writeIntLE(e,t,n,a){if(e=+e,t|=0,!a){var r=Math.pow(2,8*n-1);checkInt(this,e,t,n,r-1,-r)}var o=0,i=1,s=0;for(this[t]=255&e;++o<n&&(i*=256);)e<0&&0===s&&0!==this[t+o-1]&&(s=1),this[t+o]=(e/i>>0)-s&255
-;return t+n},Buffer$1.prototype.writeIntBE=function writeIntBE(e,t,n,a){if(e=+e,t|=0,!a){var r=Math.pow(2,8*n-1);checkInt(this,e,t,n,r-1,-r)}var o=n-1,i=1,s=0;for(this[t+o]=255&e;--o>=0&&(i*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/i>>0)-s&255;return t+n},Buffer$1.prototype.writeInt8=function writeInt8(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,1,127,-128),Buffer$1.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},Buffer$1.prototype.writeInt16LE=function writeInt16LE(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,2,32767,-32768),Buffer$1.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):objectWriteUInt16(this,e,t,!0),t+2},Buffer$1.prototype.writeInt16BE=function writeInt16BE(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,2,32767,-32768),Buffer$1.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):objectWriteUInt16(this,e,t,!1),t+2},Buffer$1.prototype.writeInt32LE=function writeInt32LE(e,t,n){return e=+e,t|=0,
-n||checkInt(this,e,t,4,2147483647,-2147483648),Buffer$1.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):objectWriteUInt32(this,e,t,!0),t+4},Buffer$1.prototype.writeInt32BE=function writeInt32BE(e,t,n){return e=+e,t|=0,n||checkInt(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),Buffer$1.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):objectWriteUInt32(this,e,t,!1),t+4},Buffer$1.prototype.writeFloatLE=function writeFloatLE(e,t,n){return writeFloat(this,e,t,!0,n)},Buffer$1.prototype.writeFloatBE=function writeFloatBE(e,t,n){return writeFloat(this,e,t,!1,n)},Buffer$1.prototype.writeDoubleLE=function writeDoubleLE(e,t,n){return writeDouble(this,e,t,!0,n)},Buffer$1.prototype.writeDoubleBE=function writeDoubleBE(e,t,n){return writeDouble(this,e,t,!1,n)},Buffer$1.prototype.copy=function copy(e,t,n,a){if(n||(n=0),a||0===a||(a=this.length),t>=e.length&&(t=e.length),t||(t=0),a>0&&a<n&&(a=n),a===n)return 0
-;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(a<0)throw new RangeError("sourceEnd out of bounds");a>this.length&&(a=this.length),e.length-t<a-n&&(a=e.length-t+n);var r,o=a-n;if(this===e&&n<t&&t<a)for(r=o-1;r>=0;--r)e[r+t]=this[r+n];else if(o<1e3||!Buffer$1.TYPED_ARRAY_SUPPORT)for(r=0;r<o;++r)e[r+t]=this[r+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+o),t);return o},Buffer$1.prototype.fill=function fill(e,t,n,a){if("string"==typeof e){if("string"==typeof t?(a=t,t=0,n=this.length):"string"==typeof n&&(a=n,n=this.length),1===e.length){var r=e.charCodeAt(0);r<256&&(e=r)}if(void 0!==a&&"string"!=typeof a)throw new TypeError("encoding must be a string");if("string"==typeof a&&!Buffer$1.isEncoding(a))throw new TypeError("Unknown encoding: "+a)}else"number"==typeof e&&(e&=255)
-;if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;var o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o<n;++o)this[o]=e;else{var i=internalIsBuffer(e)?e:utf8ToBytes(new Buffer$1(e,a).toString()),s=i.length;for(o=0;o<n-t;++o)this[o+t]=i[o%s]}return this};var c=/[^+\/0-9A-Za-z-_]/g;function toHex(e){return e<16?"0"+e.toString(16):e.toString(16)}function utf8ToBytes(e,t){var n;t=t||1/0;for(var a=e.length,r=null,o=[],i=0;i<a;++i){if((n=e.charCodeAt(i))>55295&&n<57344){if(!r){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(i+1===a){(t-=3)>-1&&o.push(239,191,189);continue}r=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(t-=3)>-1&&o.push(239,191,189);if(r=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{
-if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function base64ToBytes(e){return function toByteArray(e){var t,o,i,s,c,l;r||init$1();var u=e.length;if(u%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===e[u-2]?2:"="===e[u-1]?1:0,l=new a(3*u/4-c),i=c>0?u-4:u;var d=0;for(t=0,o=0;t<i;t+=4,o+=3)s=n[e.charCodeAt(t)]<<18|n[e.charCodeAt(t+1)]<<12|n[e.charCodeAt(t+2)]<<6|n[e.charCodeAt(t+3)],l[d++]=s>>16&255,l[d++]=s>>8&255,l[d++]=255&s;return 2===c?(s=n[e.charCodeAt(t)]<<2|n[e.charCodeAt(t+1)]>>4,l[d++]=255&s):1===c&&(s=n[e.charCodeAt(t)]<<10|n[e.charCodeAt(t+1)]<<4|n[e.charCodeAt(t+2)]>>2,l[d++]=s>>8&255,l[d++]=255&s),l}(function base64clean(e){if((e=function stringtrim(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(c,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function blitBuffer(e,t,n,a){
-for(var r=0;r<a&&!(r+n>=t.length||r>=e.length);++r)t[r+n]=e[r];return r}function isFastBuffer(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}var l=defaultSetTimout,u=defaultClearTimeout;function runTimeout(e){if(l===setTimeout)return setTimeout(e,0);if((l===defaultSetTimout||!l)&&setTimeout)return l=setTimeout,setTimeout(e,0);try{return l(e,0)}catch(t){try{return l.call(null,e,0)}catch(t){return l.call(this,e,0)}}}"function"==typeof e.setTimeout&&(l=setTimeout),"function"==typeof e.clearTimeout&&(u=clearTimeout);var d,m=[],p=!1,h=-1;function cleanUpNextTick(){p&&d&&(p=!1,d.length?m=d.concat(m):h=-1,m.length&&drainQueue())}function drainQueue(){if(!p){var e=runTimeout(cleanUpNextTick);p=!0;for(var t=m.length;t;){for(d=m,m=[];++h<t;)d&&d[h].run();h=-1,t=m.length}d=null,p=!1,
-function runClearTimeout(e){if(u===clearTimeout)return clearTimeout(e);if((u===defaultClearTimeout||!u)&&clearTimeout)return u=clearTimeout,clearTimeout(e);try{return u(e)}catch(t){try{return u.call(null,e)}catch(t){return u.call(this,e)}}}(e)}}function nextTick(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];m.push(new Item(e,t)),1!==m.length||p||runTimeout(drainQueue)}function Item(e,t){this.fun=e,this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};function noop$1(){}var f=noop$1,y=noop$1,b=noop$1,v=noop$1,w=noop$1,D=noop$1,E=noop$1;var T=e.performance||{},C=T.now||T.mozNow||T.msNow||T.oNow||T.webkitNow||function(){return(new Date).getTime()};var S=new Date;var _={nextTick,title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:f,addListener:y,once:b,off:v,removeListener:w,removeAllListeners:D,emit:E,binding:function binding$1(e){throw new Error("process.binding is not supported")
-},cwd:function cwd(){return"/"},chdir:function chdir(e){throw new Error("process.chdir is not supported")},umask:function umask(){return 0},hrtime:function hrtime$1(e){var t=.001*C.call(T),n=Math.floor(t),a=Math.floor(t%1*1e9);return e&&(n-=e[0],(a-=e[1])<0&&(n--,a+=1e9)),[n,a]},platform:"browser",release:{},config:{},uptime:function uptime(){return(new Date-S)/1e3}};function EventHandlers(){}function EventEmitter(){EventEmitter.init.call(this)}function $getMaxListeners(e){return void 0===e._maxListeners?EventEmitter.defaultMaxListeners:e._maxListeners}function emitNone(e,t,n){if(t)e.call(n);else for(var a=e.length,r=arrayClone(e,a),o=0;o<a;++o)r[o].call(n)}function emitOne(e,t,n,a){if(t)e.call(n,a);else for(var r=e.length,o=arrayClone(e,r),i=0;i<r;++i)o[i].call(n,a)}function emitTwo(e,t,n,a,r){if(t)e.call(n,a,r);else for(var o=e.length,i=arrayClone(e,o),s=0;s<o;++s)i[s].call(n,a,r)}function emitThree(e,t,n,a,r,o){
-if(t)e.call(n,a,r,o);else for(var i=e.length,s=arrayClone(e,i),c=0;c<i;++c)s[c].call(n,a,r,o)}function emitMany(e,t,n,a){if(t)e.apply(n,a);else for(var r=e.length,o=arrayClone(e,r),i=0;i<r;++i)o[i].apply(n,a)}function _addListener(e,t,n,a){var r,o,i;if("function"!=typeof n)throw new TypeError('"listener" argument must be a function');if((o=e._events)?(o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),i=o[t]):(o=e._events=new EventHandlers,e._eventsCount=0),i){if("function"==typeof i?i=o[t]=a?[n,i]:[i,n]:a?i.unshift(n):i.push(n),!i.warned&&(r=$getMaxListeners(e))&&r>0&&i.length>r){i.warned=!0;var s=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");s.name="MaxListenersExceededWarning",s.emitter=e,s.type=t,s.count=i.length,function emitWarning(e){"function"==typeof console.warn?console.warn(e):console.log(e)}(s)}}else i=o[t]=n,++e._eventsCount;return e}
-function _onceWrap(e,t,n){var a=!1;function g(){e.removeListener(t,g),a||(a=!0,n.apply(e,arguments))}return g.listener=n,g}function listenerCount$1(e){var t=this._events;if(t){var n=t[e];if("function"==typeof n)return 1;if(n)return n.length}return 0}function arrayClone(e,t){for(var n=new Array(t);t--;)n[t]=e[t];return n}function getAugmentedNamespace(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:function(){return e[n]}})})),t}EventHandlers.prototype=Object.create(null),EventEmitter.EventEmitter=EventEmitter,EventEmitter.usingDomains=!1,EventEmitter.prototype.domain=void 0,EventEmitter.prototype._events=void 0,EventEmitter.prototype._maxListeners=void 0,EventEmitter.defaultMaxListeners=10,EventEmitter.init=function(){this.domain=null,EventEmitter.usingDomains&&undefined.active,
-this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new EventHandlers,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},EventEmitter.prototype.setMaxListeners=function setMaxListeners(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},EventEmitter.prototype.getMaxListeners=function getMaxListeners(){return $getMaxListeners(this)},EventEmitter.prototype.emit=function emit(e){var t,n,a,r,o,i,s,c="error"===e;if(i=this._events)c=c&&null==i.error;else if(!c)return!1;if(s=this.domain,c){if(t=arguments[1],!s){if(t instanceof Error)throw t;var l=new Error('Uncaught, unspecified "error" event. ('+t+")");throw l.context=t,l}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=s,t.domainThrown=!1,s.emit("error",t),!1}if(!(n=i[e]))return!1;var u="function"==typeof n;switch(a=arguments.length){case 1:emitNone(n,u,this);break
-;case 2:emitOne(n,u,this,arguments[1]);break;case 3:emitTwo(n,u,this,arguments[1],arguments[2]);break;case 4:emitThree(n,u,this,arguments[1],arguments[2],arguments[3]);break;default:for(r=new Array(a-1),o=1;o<a;o++)r[o-1]=arguments[o];emitMany(n,u,this,r)}return!0},EventEmitter.prototype.addListener=function addListener(e,t){return _addListener(this,e,t,!1)},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.prependListener=function prependListener(e,t){return _addListener(this,e,t,!0)},EventEmitter.prototype.once=function once(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.on(e,_onceWrap(this,e,t)),this},EventEmitter.prototype.prependOnceListener=function prependOnceListener(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.prependListener(e,_onceWrap(this,e,t)),this},EventEmitter.prototype.removeListener=function removeListener(e,t){
-var n,a,r,o,i;if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');if(!(a=this._events))return this;if(!(n=a[e]))return this;if(n===t||n.listener&&n.listener===t)0==--this._eventsCount?this._events=new EventHandlers:(delete a[e],a.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(r=-1,o=n.length;o-- >0;)if(n[o]===t||n[o].listener&&n[o].listener===t){i=n[o].listener,r=o;break}if(r<0)return this;if(1===n.length){if(n[0]=void 0,0==--this._eventsCount)return this._events=new EventHandlers,this;delete a[e]}else!function spliceOne(e,t){for(var n=t,a=n+1,r=e.length;a<r;n+=1,a+=1)e[n]=e[a];e.pop()}(n,r);a.removeListener&&this.emit("removeListener",e,i||t)}return this},EventEmitter.prototype.off=function(e,t){return this.removeListener(e,t)},EventEmitter.prototype.removeAllListeners=function removeAllListeners(e){var t,n;if(!(n=this._events))return this
-;if(!n.removeListener)return 0===arguments.length?(this._events=new EventHandlers,this._eventsCount=0):n[e]&&(0==--this._eventsCount?this._events=new EventHandlers:delete n[e]),this;if(0===arguments.length){for(var a,r=Object.keys(n),o=0;o<r.length;++o)"removeListener"!==(a=r[o])&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=new EventHandlers,this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(t)do{this.removeListener(e,t[t.length-1])}while(t[0]);return this},EventEmitter.prototype.listeners=function listeners(e){var t,n=this._events;return n&&(t=n[e])?"function"==typeof t?[t.listener||t]:function unwrapListeners(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(t):[]},EventEmitter.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):listenerCount$1.call(e,t)},EventEmitter.prototype.listenerCount=listenerCount$1,
-EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var A={exports:{}},k=1e3,x=60*k,F=60*x,R=24*F,I=7*R,M=365.25*R,ms=function(e,t){t=t||{};var n=typeof e;if("string"===n&&e.length>0)return function parse$1(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var n=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return n*M;case"weeks":case"week":case"w":return n*I;case"days":case"day":case"d":return n*R;case"hours":case"hour":case"hrs":case"hr":case"h":return n*F;case"minutes":case"minute":case"mins":case"min":case"m":return n*x;case"seconds":case"second":case"secs":case"sec":case"s":return n*k;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}(e)
-;if("number"===n&&isFinite(e))return t.long?function fmtLong(e){var t=Math.abs(e);if(t>=R)return plural(e,t,R,"day");if(t>=F)return plural(e,t,F,"hour");if(t>=x)return plural(e,t,x,"minute");if(t>=k)return plural(e,t,k,"second");return e+" ms"}(e):function fmtShort(e){var t=Math.abs(e);if(t>=R)return Math.round(e/R)+"d";if(t>=F)return Math.round(e/F)+"h";if(t>=x)return Math.round(e/x)+"m";if(t>=k)return Math.round(e/k)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function plural(e,t,n,a){var r=t>=1.5*n;return Math.round(e/n)+" "+a+(r?"s":"")}var L=function setup(e){function createDebug(e){let t,n,a,r=null;function debug(...e){if(!debug.enabled)return;const n=debug,a=Number(new Date),r=a-(t||a);n.diff=r,n.prev=t,n.curr=a,t=a,e[0]=createDebug.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let o=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((t,a)=>{if("%%"===t)return"%";o++;const r=createDebug.formatters[a]
-;if("function"==typeof r){const a=e[o];t=r.call(n,a),e.splice(o,1),o--}return t})),createDebug.formatArgs.call(n,e);(n.log||createDebug.log).apply(n,e)}return debug.namespace=e,debug.useColors=createDebug.useColors(),debug.color=createDebug.selectColor(e),debug.extend=extend,debug.destroy=createDebug.destroy,Object.defineProperty(debug,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==r?r:(n!==createDebug.namespaces&&(n=createDebug.namespaces,a=createDebug.enabled(e)),a),set:e=>{r=e}}),"function"==typeof createDebug.init&&createDebug.init(debug),debug}function extend(e,t){const n=createDebug(this.namespace+(void 0===t?":":t)+e);return n.log=this.log,n}function toNamespace(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return createDebug.debug=createDebug,createDebug.default=createDebug,createDebug.coerce=function coerce(e){if(e instanceof Error)return e.stack||e.message;return e},createDebug.disable=function disable(){
-const e=[...createDebug.names.map(toNamespace),...createDebug.skips.map(toNamespace).map((e=>"-"+e))].join(",");return createDebug.enable(""),e},createDebug.enable=function enable(e){let t;createDebug.save(e),createDebug.namespaces=e,createDebug.names=[],createDebug.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),a=n.length;for(t=0;t<a;t++)n[t]&&("-"===(e=n[t].replace(/\*/g,".*?"))[0]?createDebug.skips.push(new RegExp("^"+e.slice(1)+"$")):createDebug.names.push(new RegExp("^"+e+"$")))},createDebug.enabled=function enabled(e){if("*"===e[e.length-1])return!0;let t,n;for(t=0,n=createDebug.skips.length;t<n;t++)if(createDebug.skips[t].test(e))return!1;for(t=0,n=createDebug.names.length;t<n;t++)if(createDebug.names[t].test(e))return!0;return!1},createDebug.humanize=ms,createDebug.destroy=function destroy(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},
-Object.keys(e).forEach((t=>{createDebug[t]=e[t]})),createDebug.names=[],createDebug.skips=[],createDebug.formatters={},createDebug.selectColor=function selectColor(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return createDebug.colors[Math.abs(t)%createDebug.colors.length]},createDebug.enable(createDebug.load()),createDebug};!function(e,t){t.formatArgs=function formatArgs(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let a=0,r=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(a++,"%c"===e&&(r=a))})),t.splice(r,0,n)},t.save=function save(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function load(){let e;try{e=t.storage.getItem("debug")}catch(e){}!e&&void 0!==_&&"env"in _&&(e=_.env.DEBUG);return e},t.useColors=function useColors(){
-if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function localstorage(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,
-console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=L(t)
-;const{formatters:n}=e.exports;n.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}(A,A.exports);var N,P,O,B,U=A.exports,j="undefined"!=typeof performance&&performance,z=_.hrtime,getNanoSeconds=function(){var e=z();return 1e9*e[0]+e[1]},q=getNanoSeconds(),now=function(){return(getNanoSeconds()-q)/1e6};function throwIfEmpty(e){if(!e)throw new Error("name must be non-empty")}if(j&&j.mark&&j.getEntriesByName&&j.getEntriesByType&&j.clearMeasures)N=function(e){throwIfEmpty(e),j.mark("start "+e)},P=function(e){throwIfEmpty(e),j.mark("end "+e),j.measure(e,"start "+e,"end "+e);var t=j.getEntriesByName(e);return t[t.length-1]},O=function(){return j.getEntriesByType("measure")},B=function(){j.clearMarks(),j.clearMeasures()};else{var W={},$=[];N=function(e){throwIfEmpty(e);var t=now();W["$"+e]=t},P=function(e){throwIfEmpty(e);var t=now(),n=W["$"+e];if(!n)throw new Error("no known mark: "+e);var a={startTime:n,name:e,duration:t-n,
-entryType:"measure"};return function insertSorted(e,t){for(var n,a=0,r=e.length;a<r;)e[n=a+r>>>1].startTime<t.startTime?a=n+1:r=n;e.splice(a,0,t)}($,a),a},O=function(){return $},B=function(){W={},$=[]}}const V="win32"===_.platform,H=_.browser,G={red:H?"crimson":1,yellow:H?"gold":3,cyan:H?"darkturquoise":6,green:H?"forestgreen":2,blue:H?"steelblue":4,magenta:H?"palevioletred":5};U.colors=[G.cyan,G.green,G.blue,G.magenta];const Y={};let K;class Log{static _logToStdErr(e,t){Log.loggerfn(e)(...t)}static loggerfn(e){let t=Y[e=`LH:${e}`];return t||(t=U(e),Y[e]=t,e.endsWith("error")?t.color=G.red:e.endsWith("warn")&&(t.color=G.yellow)),t}static setLevel(e){switch(K=e,e){case"silent":U.enable("-LH:*");break;case"verbose":U.enable("LH:*");break;case"warn":U.enable("-LH:*, LH:*:warn, LH:*:error");break;case"error":U.enable("-LH:*, LH:*:error");break;default:U.enable("LH:*, -LH:*:verbose")}}static formatProtocol(e,t,n){
-const a=!_||_.browser?1/0:_.stdout.columns,r=t.method||"?????",o=a-r.length-e.length-25,i=t.params&&"IO.read"!==r?JSON.stringify(t.params).substr(0,o):"";Log._logToStdErr(`${e}:${n||""}`,[r,i])}static isVerbose(){return"verbose"===K}static time({msg:e,id:t,args:n=[]},a="log"){N(t),Log[a]("status",e,...n)}static timeEnd({msg:e,id:t,args:n=[]},a="verbose"){Log[a]("statusEnd",e,...n),P(t)}static log(e,...t){return Log.events.issueStatus(e,t),Log._logToStdErr(e,t)}static warn(e,...t){return Log.events.issueWarning(e,t),Log._logToStdErr(`${e}:warn`,t)}static error(e,...t){return Log._logToStdErr(`${e}:error`,t)}static verbose(e,...t){return Log.events.issueStatus(e,t),Log._logToStdErr(`${e}:verbose`,t)}static greenify(e){return`${Log.green}${e}${Log.reset}`}static redify(e){return`${Log.red}${e}${Log.reset}`}static get green(){return""}static get red(){return""}static get yellow(){return""}static get purple(){return""}static get reset(){return""}static get bold(){
-return""}static get dim(){return""}static get tick(){return V?"√":"✓"}static get cross(){return V?"×":"✘"}static get whiteSmallSquare(){return V?"·":"▫"}static get heavyHorizontal(){return V?"─":"━"}static get heavyVertical(){return V?"│ ":"┃ "}static get heavyUpAndRight(){return V?"└":"┗"}static get heavyVerticalAndRight(){return V?"├":"┣"}static get heavyDownAndHorizontal(){return V?"┬":"┳"}static get doubleLightHorizontal(){return"──"}}Log.events=new class Emitter extends EventEmitter{issueStatus(e,t){"status"!==e&&"statusEnd"!==e||this.emit(e,[e,...t])}issueWarning(e,t){this.emit("warning",[e,...t])}},Log.takeTimeEntries=()=>{const e=O();return B(),e},Log.getTimeEntries=()=>O();var J={},X=Object.freeze({__proto__:null,default:J});function normalizeArray(e,t){for(var n=0,a=e.length-1;a>=0;a--){var r=e[a];"."===r?e.splice(a,1):".."===r?(e.splice(a,1),n++):n&&(e.splice(a,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}
-var Z=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,splitPath=function(e){return Z.exec(e).slice(1)};function resolve(){for(var e="",t=!1,n=arguments.length-1;n>=-1&&!t;n--){var a=n>=0?arguments[n]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,t="/"===a.charAt(0))}return(t?"/":"")+(e=normalizeArray(filter(e.split("/"),(function(e){return!!e})),!t).join("/"))||"."}function normalize(e){var t=isAbsolute(e),n="/"===ee(e,-1);return(e=normalizeArray(filter(e.split("/"),(function(e){return!!e})),!t).join("/"))||t||(e="."),e&&n&&(e+="/"),(t?"/":"")+e}function isAbsolute(e){return"/"===e.charAt(0)}var Q={extname:function extname(e){return splitPath(e)[3]},basename:function basename(e,t){var n=splitPath(e)[2];return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},dirname:function dirname(e){var t=splitPath(e),n=t[0],a=t[1];return n||a?(a&&(a=a.substr(0,a.length-1)),n+a):"."},sep:"/",delimiter:":",
-relative:function relative(e,t){function trim(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-1;n>=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=resolve(e).substr(1),t=resolve(t).substr(1);for(var n=trim(e.split("/")),a=trim(t.split("/")),r=Math.min(n.length,a.length),o=r,i=0;i<r;i++)if(n[i]!==a[i]){o=i;break}var s=[];for(i=o;i<n.length;i++)s.push("..");return(s=s.concat(a.slice(o))).join("/")},join:function join(){var e=Array.prototype.slice.call(arguments,0);return normalize(filter(e,(function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},isAbsolute,normalize,resolve};function filter(e,t){if(e.filter)return e.filter(t);for(var n=[],a=0;a<e.length;a++)t(e[a],a,e)&&n.push(e[a]);return n}var ee="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)};var te=function listCacheClear$1(){this.__data__=[],this.size=0};var ne=function eq$2(e,t){
-return e===t||e!=e&&t!=t},ae=ne;var re=function assocIndexOf$4(e,t){for(var n=e.length;n--;)if(ae(e[n][0],t))return n;return-1},oe=re,ie=Array.prototype.splice;var se=re;var ce=re;var le=re;var ue=te,de=function listCacheDelete$1(e){var t=this.__data__,n=oe(t,e);return!(n<0)&&(n==t.length-1?t.pop():ie.call(t,n,1),--this.size,!0)},me=function listCacheGet$1(e){var t=this.__data__,n=se(t,e);return n<0?void 0:t[n][1]},pe=function listCacheHas$1(e){return ce(this.__data__,e)>-1},ge=function listCacheSet$1(e,t){var n=this.__data__,a=le(n,e);return a<0?(++this.size,n.push([e,t])):n[a][1]=t,this};function ListCache$4(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var a=e[t];this.set(a[0],a[1])}}ListCache$4.prototype.clear=ue,ListCache$4.prototype.delete=de,ListCache$4.prototype.get=me,ListCache$4.prototype.has=pe,ListCache$4.prototype.set=ge;var he=ListCache$4,fe=he;var ye=function stackClear$1(){this.__data__=new fe,this.size=0};var be=function stackDelete$1(e){
-var t=this.__data__,n=t.delete(e);return this.size=t.size,n};var ve=function stackGet$1(e){return this.__data__.get(e)};var we=function stackHas$1(e){return this.__data__.has(e)},De="object"==typeof e&&e&&e.Object===Object&&e,Ee=De,Te="object"==typeof self&&self&&self.Object===Object&&self,Ce=Ee||Te||Function("return this")(),Se=Ce.Symbol,_e=Se,Ae=Object.prototype,ke=Ae.hasOwnProperty,xe=Ae.toString,Fe=_e?_e.toStringTag:void 0;var Re=function getRawTag$1(e){var t=ke.call(e,Fe),n=e[Fe];try{e[Fe]=void 0;var a=!0}catch(e){}var r=xe.call(e);return a&&(t?e[Fe]=n:delete e[Fe]),r},Ie=Object.prototype.toString;var Me=Re,Le=function objectToString$2(e){return Ie.call(e)},Ne=Se?Se.toStringTag:void 0;var Pe=function baseGetTag$4(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Ne&&Ne in Object(e)?Me(e):Le(e)};var Oe=function isObject$3(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},Be=Pe,Ue=Oe;var je,ze=function isFunction$3(e){if(!Ue(e))return!1;var t=Be(e)
-;return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},qe=Ce["__core-js_shared__"],We=(je=/[^.]+$/.exec(qe&&qe.keys&&qe.keys.IE_PROTO||""))?"Symbol(src)_1."+je:"";var $e=function isMasked$1(e){return!!We&&We in e},Ve=Function.prototype.toString;var He=function toSource$2(e){if(null!=e){try{return Ve.call(e)}catch(e){}try{return e+""}catch(e){}}return""},Ge=ze,Ye=$e,Ke=Oe,Je=He,Xe=/^\[object .+?Constructor\]$/,Ze=Function.prototype,Qe=Object.prototype,et=Ze.toString,tt=Qe.hasOwnProperty,nt=RegExp("^"+et.call(tt).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var at=function baseIsNative$1(e){return!(!Ke(e)||Ye(e))&&(Ge(e)?nt:Xe).test(Je(e))},rt=function getValue$1(e,t){return null==e?void 0:e[t]};var ot=function getNative$6(e,t){var n=rt(e,t);return at(n)?n:void 0},it=ot(Ce,"Map"),st=ot(Object,"create"),ct=st;var lt=function hashClear$1(){
-this.__data__=ct?ct(null):{},this.size=0};var ut=function hashDelete$1(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},dt=st,mt=Object.prototype.hasOwnProperty;var pt=function hashGet$1(e){var t=this.__data__;if(dt){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return mt.call(t,e)?t[e]:void 0},gt=st,ht=Object.prototype.hasOwnProperty;var ft=st;var yt=lt,bt=ut,vt=pt,wt=function hashHas$1(e){var t=this.__data__;return gt?void 0!==t[e]:ht.call(t,e)},Dt=function hashSet$1(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=ft&&void 0===t?"__lodash_hash_undefined__":t,this};function Hash$1(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var a=e[t];this.set(a[0],a[1])}}Hash$1.prototype.clear=yt,Hash$1.prototype.delete=bt,Hash$1.prototype.get=vt,Hash$1.prototype.has=wt,Hash$1.prototype.set=Dt;var Et=Hash$1,Tt=he,Ct=it;var St=function isKeyable$1(e){var t=typeof e
-;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var _t=function getMapData$4(e,t){var n=e.__data__;return St(t)?n["string"==typeof t?"string":"hash"]:n.map},At=_t;var kt=_t;var xt=_t;var Ft=_t;var Rt=function mapCacheClear$1(){this.size=0,this.__data__={hash:new Et,map:new(Ct||Tt),string:new Et}},It=function mapCacheDelete$1(e){var t=At(this,e).delete(e);return this.size-=t?1:0,t},Mt=function mapCacheGet$1(e){return kt(this,e).get(e)},Lt=function mapCacheHas$1(e){return xt(this,e).has(e)},Nt=function mapCacheSet$1(e,t){var n=Ft(this,e),a=n.size;return n.set(e,t),this.size+=n.size==a?0:1,this};function MapCache$2(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var a=e[t];this.set(a[0],a[1])}}MapCache$2.prototype.clear=Rt,MapCache$2.prototype.delete=It,MapCache$2.prototype.get=Mt,MapCache$2.prototype.has=Lt,MapCache$2.prototype.set=Nt;var Pt=MapCache$2,Ot=he,Bt=it,Ut=Pt;var jt=he,zt=ye,Wt=be,$t=ve,Vt=we,Ht=function stackSet$1(e,t){
-var n=this.__data__;if(n instanceof Ot){var a=n.__data__;if(!Bt||a.length<199)return a.push([e,t]),this.size=++n.size,this;n=this.__data__=new Ut(a)}return n.set(e,t),this.size=n.size,this};function Stack$1(e){var t=this.__data__=new jt(e);this.size=t.size}Stack$1.prototype.clear=zt,Stack$1.prototype.delete=Wt,Stack$1.prototype.get=$t,Stack$1.prototype.has=Vt,Stack$1.prototype.set=Ht;var Gt=Stack$1;var Yt=Pt,Kt=function setCacheAdd$1(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Jt=function setCacheHas$1(e){return this.__data__.has(e)};function SetCache$1(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Yt;++t<n;)this.add(e[t])}SetCache$1.prototype.add=SetCache$1.prototype.push=Kt,SetCache$1.prototype.has=Jt;var Xt=SetCache$1,Zt=function arraySome$1(e,t){for(var n=-1,a=null==e?0:e.length;++n<a;)if(t(e[n],n,e))return!0;return!1},Qt=function cacheHas$1(e,t){return e.has(t)};var en=function equalArrays$2(e,t,n,a,r,o){var i=1&n,s=e.length,c=t.length
-;if(s!=c&&!(i&&c>s))return!1;var l=o.get(e),u=o.get(t);if(l&&u)return l==t&&u==e;var d=-1,m=!0,p=2&n?new Xt:void 0;for(o.set(e,t),o.set(t,e);++d<s;){var h=e[d],f=t[d];if(a)var y=i?a(f,h,d,t,e,o):a(h,f,d,e,t,o);if(void 0!==y){if(y)continue;m=!1;break}if(p){if(!Zt(t,(function(e,t){if(!Qt(p,t)&&(h===e||r(h,e,n,a,o)))return p.push(t)}))){m=!1;break}}else if(h!==f&&!r(h,f,n,a,o)){m=!1;break}}return o.delete(e),o.delete(t),m};var tn=Ce.Uint8Array,nn=ne,an=en,rn=function mapToArray$1(e){var t=-1,n=Array(e.size);return e.forEach((function(e,a){n[++t]=[a,e]})),n},on=function setToArray$1(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n},sn=Se?Se.prototype:void 0,cn=sn?sn.valueOf:void 0;var ln=function equalByTag$1(e,t,n,a,r,o,i){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!o(new tn(e),new tn(t)));case"[object Boolean]":
-case"[object Date]":case"[object Number]":return nn(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var s=rn;case"[object Set]":var c=1&a;if(s||(s=on),e.size!=t.size&&!c)return!1;var l=i.get(e);if(l)return l==t;a|=2,i.set(e,t);var u=an(s(e),s(t),a,r,o,i);return i.delete(e),u;case"[object Symbol]":if(cn)return cn.call(e)==cn.call(t)}return!1};var un=function arrayPush$1(e,t){for(var n=-1,a=t.length,r=e.length;++n<a;)e[r+n]=t[n];return e},dn=Array.isArray,mn=un,pn=dn;var gn=function baseGetAllKeys$1(e,t,n){var a=t(e);return pn(e)?a:mn(a,n(e))};var hn=function arrayFilter$1(e,t){for(var n=-1,a=null==e?0:e.length,r=0,o=[];++n<a;){var i=e[n];t(i,n,e)&&(o[r++]=i)}return o},fn=function stubArray$1(){return[]},yn=Object.prototype.propertyIsEnumerable,bn=Object.getOwnPropertySymbols,vn=bn?function(e){return null==e?[]:(e=Object(e),hn(bn(e),(function(t){return yn.call(e,t)})))}:fn
-;var wn=function baseTimes$1(e,t){for(var n=-1,a=Array(e);++n<e;)a[n]=t(n);return a};var Dn=function isObjectLike$4(e){return null!=e&&"object"==typeof e},En=Pe,Tn=Dn;var Cn=function baseIsArguments$1(e){return Tn(e)&&"[object Arguments]"==En(e)},Sn=Dn,_n=Object.prototype,An=_n.hasOwnProperty,kn=_n.propertyIsEnumerable,xn=Cn(function(){return arguments}())?Cn:function(e){return Sn(e)&&An.call(e,"callee")&&!kn.call(e,"callee")},Fn={exports:{}};var Rn=function stubFalse(){return!1};!function(e,t){var n=Ce,a=Rn,r=t&&!t.nodeType&&t,o=r&&e&&!e.nodeType&&e,i=o&&o.exports===r?n.Buffer:void 0,s=(i?i.isBuffer:void 0)||a;e.exports=s}(Fn,Fn.exports);var In=/^(?:0|[1-9]\d*)$/;var Mn=function isIndex$1(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&In.test(e))&&e>-1&&e%1==0&&e<t};var Ln=function isLength$2(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},Nn=Pe,Pn=Ln,On=Dn,Bn={}
-;Bn["[object Float32Array]"]=Bn["[object Float64Array]"]=Bn["[object Int8Array]"]=Bn["[object Int16Array]"]=Bn["[object Int32Array]"]=Bn["[object Uint8Array]"]=Bn["[object Uint8ClampedArray]"]=Bn["[object Uint16Array]"]=Bn["[object Uint32Array]"]=!0,Bn["[object Arguments]"]=Bn["[object Array]"]=Bn["[object ArrayBuffer]"]=Bn["[object Boolean]"]=Bn["[object DataView]"]=Bn["[object Date]"]=Bn["[object Error]"]=Bn["[object Function]"]=Bn["[object Map]"]=Bn["[object Number]"]=Bn["[object Object]"]=Bn["[object RegExp]"]=Bn["[object Set]"]=Bn["[object String]"]=Bn["[object WeakMap]"]=!1;var Un=function baseIsTypedArray$1(e){return On(e)&&Pn(e.length)&&!!Bn[Nn(e)]};var jn=function baseUnary$1(e){return function(t){return e(t)}},zn={exports:{}};!function(e,t){var n=De,a=t&&!t.nodeType&&t,r=a&&e&&!e.nodeType&&e,o=r&&r.exports===a&&n.process,i=function(){try{var e=r&&r.require&&r.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=i}(zn,zn.exports)
-;var qn=Un,Wn=jn,$n=zn.exports,Vn=$n&&$n.isTypedArray,Hn=Vn?Wn(Vn):qn,Gn=wn,Yn=xn,Kn=dn,Jn=Fn.exports,Xn=Mn,Zn=Hn,Qn=Object.prototype.hasOwnProperty;var ea=function arrayLikeKeys$1(e,t){var n=Kn(e),a=!n&&Yn(e),r=!n&&!a&&Jn(e),o=!n&&!a&&!r&&Zn(e),i=n||a||r||o,s=i?Gn(e.length,String):[],c=s.length;for(var l in e)!t&&!Qn.call(e,l)||i&&("length"==l||r&&("offset"==l||"parent"==l)||o&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||Xn(l,c))||s.push(l);return s},ta=Object.prototype;var na=function isPrototype$1(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||ta)};var aa=function overArg$1(e,t){return function(n){return e(t(n))}}(Object.keys,Object),ra=na,oa=aa,ia=Object.prototype.hasOwnProperty;var sa=ze,ca=Ln;var la=ea,ua=function baseKeys$1(e){if(!ra(e))return oa(e);var t=[];for(var n in Object(e))ia.call(e,n)&&"constructor"!=n&&t.push(n);return t},da=function isArrayLike$1(e){return null!=e&&ca(e.length)&&!sa(e)};var ma=gn,pa=vn,ga=function keys$2(e){
-return da(e)?la(e):ua(e)};var ha=function getAllKeys$1(e){return ma(e,ga,pa)},fa=Object.prototype.hasOwnProperty;var ya=function equalObjects$1(e,t,n,a,r,o){var i=1&n,s=ha(e),c=s.length;if(c!=ha(t).length&&!i)return!1;for(var l=c;l--;){var u=s[l];if(!(i?u in t:fa.call(t,u)))return!1}var d=o.get(e),m=o.get(t);if(d&&m)return d==t&&m==e;var p=!0;o.set(e,t),o.set(t,e);for(var h=i;++l<c;){var f=e[u=s[l]],y=t[u];if(a)var b=i?a(y,f,u,t,e,o):a(f,y,u,e,t,o);if(!(void 0===b?f===y||r(f,y,n,a,o):b)){p=!1;break}h||(h="constructor"==u)}if(p&&!h){var v=e.constructor,w=t.constructor;v==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof v&&v instanceof v&&"function"==typeof w&&w instanceof w||(p=!1)}return o.delete(e),o.delete(t),p},ba=ot(Ce,"DataView"),va=it,wa=ot(Ce,"Promise"),Da=ot(Ce,"Set"),Ea=ot(Ce,"WeakMap"),Ta=Pe,Ca=He,Sa="[object Map]",_a="[object Promise]",Aa="[object Set]",ka="[object WeakMap]",xa="[object DataView]",Fa=Ca(ba),Ra=Ca(va),Ia=Ca(wa),Ma=Ca(Da),La=Ca(Ea),Na=Ta
-;(ba&&Na(new ba(new ArrayBuffer(1)))!=xa||va&&Na(new va)!=Sa||wa&&Na(wa.resolve())!=_a||Da&&Na(new Da)!=Aa||Ea&&Na(new Ea)!=ka)&&(Na=function(e){var t=Ta(e),n="[object Object]"==t?e.constructor:void 0,a=n?Ca(n):"";if(a)switch(a){case Fa:return xa;case Ra:return Sa;case Ia:return _a;case Ma:return Aa;case La:return ka}return t});var Pa=Gt,Oa=en,Ba=ln,Ua=ya,ja=Na,za=dn,qa=Fn.exports,Wa=Hn,$a="[object Arguments]",Va="[object Array]",Ha="[object Object]",Ga=Object.prototype.hasOwnProperty;var Ya=function baseIsEqualDeep$1(e,t,n,a,r,o){var i=za(e),s=za(t),c=i?Va:ja(e),l=s?Va:ja(t),u=(c=c==$a?Ha:c)==Ha,d=(l=l==$a?Ha:l)==Ha,m=c==l;if(m&&qa(e)){if(!qa(t))return!1;i=!0,u=!1}if(m&&!u)return o||(o=new Pa),i||Wa(e)?Oa(e,t,n,a,r,o):Ba(e,t,c,n,a,r,o);if(!(1&n)){var p=u&&Ga.call(e,"__wrapped__"),h=d&&Ga.call(t,"__wrapped__");if(p||h){var f=p?e.value():e,y=h?t.value():t;return o||(o=new Pa),r(f,y,n,a,o)}}return!!m&&(o||(o=new Pa),Ua(e,t,n,a,r,o))},Ka=Dn;var Ja=function baseIsEqual$1(e,t,n,a,r){
-return e===t||(null==e||null==t||!Ka(e)&&!Ka(t)?e!=e&&t!=t:Ya(e,t,n,a,baseIsEqual$1,r))};var Xa=function isEqual(e,t){return Ja(e,t)};
-/**
-   * @license Copyright 2020 Google Inc. All Rights Reserved.
-   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-   */class Fetcher{constructor(e){this.session=e}async fetchResource(e,t={timeout:2e3}){return globalThis.isLightrider?this._wrapWithTimeout(this._fetchWithFetchApi(e),t.timeout):this._fetchResourceOverProtocol(e,t)}async _fetchWithFetchApi(e){const t=await fetch(e);let n=null;try{n=await t.text()}catch{}return{content:n,status:t.status}}async _readIOStream(e,t={timeout:2e3}){const n=Date.now();let a,r="";for(;!a||!a.eof;){if(Date.now()-n>t.timeout)throw new Error("Waiting for the end of the IO stream exceeded the allotted time.");a=await this.session.sendCommand("IO.read",{handle:e});const o=a.base64Encoded?Buffer.from(a.data,"base64").toString("utf-8"):a.data;r=r.concat(o)}return r}async _loadNetworkResource(e){const t=await this.session.sendCommand("Page.getFrameTree"),n=await this.session.sendCommand("Network.loadNetworkResource",{frameId:t.frameTree.frame.id,url:e,options:{disableCache:!0,includeCredentials:!0}});return{stream:n.resource.success&&n.resource.stream||null,
-status:n.resource.httpStatusCode||null}}async _fetchResourceOverProtocol(e,t){const n=Date.now(),a=await this._wrapWithTimeout(this._loadNetworkResource(e),t.timeout),r=a.status&&a.status>=200&&a.status<=299;if(!a.stream||!r)return{status:a.status,content:null};const o=t.timeout-(Date.now()-n),i=await this._readIOStream(a.stream,{timeout:o});return{status:a.status,content:i}}async _wrapWithTimeout(e,t){let n;const a=new Promise(((e,a)=>{n=setTimeout(a,t,new Error("Timed out fetching resource"))}));return await Promise.race([e,a]).finally((()=>clearTimeout(n)))}}const Za="…",Qa={PASS:{label:"pass",minScore:.9},AVERAGE:{label:"average",minScore:.5},FAIL:{label:"fail"},ERROR:{label:"error"}},er=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"];class Util{static get RATINGS(){return Qa}static get PASS_THRESHOLD(){return.9}static get MS_DISPLAY_VALUE(){return"%10d ms"}
-static getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error("Could not determine final displayed URL")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}static getFullPageScreenshot(e){if(e.fullPageScreenshot)return e.fullPageScreenshot;return e.audits["full-page-screenshot"]?.details}static splitMarkdownCodeSpans(e){const t=[],n=e.split(/`(.*?)`/g);for(let e=0;e<n.length;e++){const a=n[e];if(!a)continue;const r=e%2!=0;t.push({isCode:r,text:a})}return t}static splitMarkdownLink(e){const t=[],n=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;n.length;){const[e,a,r]=n.splice(0,3);e&&t.push({isLink:!1,text:e}),a&&r&&t.push({isLink:!0,text:a,linkHref:r})}return t}static truncate(e,t,n="…"){if(e.length<=t)return e;const a=new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(e)[Symbol.iterator]();let r=0;for(let o=0;o<=t-n.length;o++){const t=a.next();if(t.done)return e;r=t.value.index}
-for(let t=0;t<n.length;t++)if(a.next().done)return e;return e.slice(0,r)+n}static getURLDisplayName(e,t){const n=void 0!==(t=t||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0}).numPathParts?t.numPathParts:2,a=void 0===t.preserveQuery||t.preserveQuery,r=t.preserveHost||!1;let o;if("about:"===e.protocol||"data:"===e.protocol)o=e.href;else{o=e.pathname;const t=o.split("/").filter((e=>e.length));n&&t.length>n&&(o=Za+t.slice(-1*n).join("/")),r&&(o=`${e.host}/${o.replace(/^\//,"")}`),a&&(o=`${o}${e.search}`)}if("data:"!==e.protocol&&(o=o.slice(0,200),o=o.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,"$1…"),o=o.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,"$1…"),o=o.replace(/(\d{3})\d{6,}/g,"$1…"),o=o.replace(/\u2026+/g,Za),o.length>64&&o.includes("?")&&(o=o.replace(/\?([^=]*)(=)?.*/,"?$1$2…"),o.length>64&&(o=o.replace(/\?.*/,"?…")))),o.length>64){const e=o.lastIndexOf(".");o=e>=0?o.slice(0,63-(o.length-e))+`…${o.slice(e)}`:o.slice(0,63)+Za}
-return o}static getChromeExtensionOrigin(e){const t=new URL(e);return t.protocol+"//"+t.host}static parseURL(e){const t=new URL(e);return{file:Util.getURLDisplayName(t),hostname:t.hostname,origin:"chrome-extension:"===t.protocol?Util.getChromeExtensionOrigin(e):t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){const t=e.split(".").slice(-2);return er.includes(t[0])?`.${t.join(".")}`:`.${t[t.length-1]}`}static getRootDomain(e){const t=Util.createOrReturnURL(e).hostname,n=Util.getTld(t).split(".");return t.split(".").slice(-n.length).join(".")}static filterRelevantLines(e,t,n){if(0===t.length)return e.slice(0,2*n+1);const a=new Set;return(t=t.sort(((e,t)=>(e.lineNumber||0)-(t.lineNumber||0)))).forEach((({lineNumber:e})=>{let t=e-n,r=e+n;for(;t<1;)t++,r++;a.has(t-3-1)&&(t-=3);for(let e=t;e<=r;e++){const t=e;a.add(t)}})),e.filter((e=>a.has(e.lineNumber)))}}function getElementsInDocument(e){
-const t=window.__ElementMatches||window.Element.prototype.matches,n=[],_findAllElements=a=>{for(const r of a){if(!e||t.call(r,e)){const e=r;n.push(e)}r.shadowRoot&&_findAllElements(r.shadowRoot.querySelectorAll("*"))}};return _findAllElements(document.querySelectorAll("*")),n}function getOuterHTMLSnippet(e,t=[],n=500){const a=["autofill-information","autofill-prediction","title"];e instanceof ShadowRoot&&(e=e.host);try{const r=e.cloneNode();e.ownerDocument.createElement("template").content.append(r),t.concat(a).forEach((e=>{r.removeAttribute(e)}));let o=0;for(const t of r.getAttributeNames()){if(o>n){r.removeAttribute(t);continue}let a=r.getAttribute(t);if(null===a)continue;let i=!1;if("src"===t&&"currentSrc"in e){const t=e,n=t.currentSrc,r=t.ownerDocument.location.href;new URL(a,r).toString()!==n&&(a=n,i=!0)}const s=truncate(a,75);if(s!==a&&(i=!0),a=s,i)if("style"===t){r.style.cssText=a}else r.setAttribute(t,a);o+=t.length+a.length}const i=/^[\s\S]*?>/,[s]=r.outerHTML.match(i)||[]
-;return s&&o>n?s.slice(0,s.length-1)+" …>":s||""}catch(t){return`<${e.localName}>`}}function getNodePath(e){const isShadowRoot=e=>e.nodeType===Node.DOCUMENT_FRAGMENT_NODE,getNodeParent=e=>isShadowRoot(e)?e.host:e.parentNode;function getNodeIndex(e){if(isShadowRoot(e))return"a";let t,n=0;for(;t=e.previousSibling;)(e=t).nodeType===Node.TEXT_NODE&&0===(e.nodeValue||"").trim().length||n++;return n}let t=e;const n=[];for(;t&&getNodeParent(t);){const e=getNodeIndex(t);n.push([e,t.nodeName]),t=getNodeParent(t)}return n.reverse(),n.join(",")}function getNodeSelector(e){function getSelectorPart(e){let t=e.tagName.toLowerCase();return e.id?t+="#"+e.id:e.classList.length>0&&(t+="."+e.classList[0]),t}const t=[];for(;t.length<4&&(t.unshift(getSelectorPart(e)),e.parentElement)&&"HTML"!==(e=e.parentElement).tagName;);return t.join(" > ")}function isPositionFixed(e){function getStyleAttrValue(e,t){return e.style[t]||window.getComputedStyle(e)[t]}const t=document.querySelector("html")
-;if(!t)throw new Error("html element not found in document");if(t.scrollHeight<=t.clientHeight||!["scroll","auto","visible"].includes(getStyleAttrValue(t,"overflowY")))return!1;let n=e;for(;n;){const e=getStyleAttrValue(n,"position");if("fixed"===e||"sticky"===e)return!0;n=n.parentElement}return!1}function getNodeLabel(e){const t=e.tagName.toLowerCase();if("html"!==t&&"body"!==t){const t=e instanceof HTMLElement&&e.innerText||e.getAttribute("alt")||e.getAttribute("aria-label");if(t)return truncate(t,80);{const t=e.querySelector("[alt], [aria-label]");if(t)return getNodeLabel(t)}}return null}function getBoundingClientRect(e){const t=(window.__HTMLElementBoundingClientRect||window.HTMLElement.prototype.getBoundingClientRect).call(e);return{top:Math.round(t.top),bottom:Math.round(t.bottom),left:Math.round(t.left),right:Math.round(t.right),width:Math.round(t.width),height:Math.round(t.height)}}function getNodeDetails(e){
-window.__lighthouseNodesDontTouchOrAllVarianceGoesAway||(window.__lighthouseNodesDontTouchOrAllVarianceGoesAway=new Map);const t=getNodeSelector(e=e instanceof ShadowRoot?e.host:e);let n=window.__lighthouseNodesDontTouchOrAllVarianceGoesAway.get(e);n||(n=[void 0===window.__lighthouseExecutionContextUniqueIdentifier?"page":window.__lighthouseExecutionContextUniqueIdentifier,window.__lighthouseNodesDontTouchOrAllVarianceGoesAway.size,e.tagName].join("-"),window.__lighthouseNodesDontTouchOrAllVarianceGoesAway.set(e,n));return{lhId:n,devtoolsNodePath:getNodePath(e),selector:t,boundingRect:getBoundingClientRect(e),snippet:getOuterHTMLSnippet(e),nodeLabel:getNodeLabel(e)||t}}function truncate(e,t){return Util.truncate(e,t)}const tr=truncate.toString();truncate.toString=()=>`function truncate(string, characterLimit) {\n  const Util = { ${Util.truncate} };\n  return (${tr})(string, characterLimit);\n}`;const nr=getNodeLabel.toString()
-;getNodeLabel.toString=()=>`function getNodeLabel(element) {\n  ${truncate};\n  return (${nr})(element);\n}`;const ar=getOuterHTMLSnippet.toString();getOuterHTMLSnippet.toString=()=>`function getOuterHTMLSnippet(element, ignoreAttrs = [], snippetCharacterLimit = 500) {\n  ${truncate};\n  return (${ar})(element, ignoreAttrs, snippetCharacterLimit);\n}`;const rr=getNodeDetails.toString();getNodeDetails.toString=()=>`function getNodeDetails(element) {\n  ${truncate};\n  ${getNodePath};\n  ${getNodeSelector};\n  ${getBoundingClientRect};\n  ${ar};\n  ${nr};\n  return (${rr})(element);\n}`;const or={wrapRuntimeEvalErrorInBrowser:function wrapRuntimeEvalErrorInBrowser(e){return e&&"string"!=typeof e||(e=new Error(e)),{__failedInBrowser:!0,name:e.name||"Error",message:e.message||"unknown error",stack:e.stack}},getElementsInDocument,getOuterHTMLSnippet,computeBenchmarkIndex:function computeBenchmarkIndex(){return(function benchmarkIndexGC(){const e=Date.now();let t=0;for(;Date.now()-e<500;){
-let e="";for(let t=0;t<1e4;t++)e+="a";if(1===e.length)throw new Error("will never happen, but prevents compiler optimizations");t++}const n=(Date.now()-e)/1e3;return Math.round(t/10/n)}()+function benchmarkIndexNoGC(){const e=[],t=[];for(let n=0;n<1e5;n++)e[n]=t[n]=n;const n=Date.now();let a=0;for(;a%10!=0||Date.now()-n<500;){const n=a%2==0?e:t,r=a%2==0?t:e;for(let e=0;e<n.length;e++)r[e]=n[e];a++}const r=(Date.now()-n)/1e3;return Math.round(a/10/r)}())/2},getNodeDetails,getNodePath,getNodeSelector,getNodeLabel,isPositionFixed,wrapRequestIdleCallback:function wrapRequestIdleCallback(e){const t=Math.floor(40/e),n=window.requestIdleCallback;window.requestIdleCallback=(e,a)=>n((n=>{const a=Date.now();n.__timeRemaining=n.timeRemaining,n.timeRemaining=()=>{const e=n.__timeRemaining();return Math.min(e,Math.max(0,t-(Date.now()-a)))},n.timeRemaining.toString=()=>"function timeRemaining() { [native code] }",e(n)}),a),
-window.requestIdleCallback.toString=()=>"function requestIdleCallback() { [native code] }"},getBoundingClientRect,truncate};class ExecutionContext{constructor(e){this._session=e,this._executionContextId=void 0,this._executionContextIdentifiersCreated=0,e.on("Page.frameNavigated",(()=>this.clearContextId())),e.on("Runtime.executionContextDestroyed",(e=>{e.executionContextId===this._executionContextId&&this.clearContextId()}))}getContextId(){return this._executionContextId}clearContextId(){this._executionContextId=void 0}async _getOrCreateIsolatedContextId(){if("number"==typeof this._executionContextId)return this._executionContextId;await this._session.sendCommand("Page.enable"),await this._session.sendCommand("Runtime.enable");const e=(await this._session.sendCommand("Page.getFrameTree")).frameTree.frame.id,t=await this._session.sendCommand("Page.createIsolatedWorld",{frameId:e,worldName:"lighthouse_isolated_context"});return this._executionContextId=t.executionContextId,
-this._executionContextIdentifiersCreated++,t.executionContextId}async _evaluateInContext(e,t){const n=this._session.hasNextProtocolTimeout()?this._session.getNextProtocolTimeout():6e4,a=void 0===t?void 0:this._executionContextIdentifiersCreated,r={expression:`(function wrapInNativePromise() {\n        ${ExecutionContext._cachedNativesPreamble};\n        globalThis.__lighthouseExecutionContextUniqueIdentifier =\n          ${a};\n        return new Promise(function (resolve) {\n          return Promise.resolve()\n            .then(_ => ${e})\n            .catch(${or.wrapRuntimeEvalErrorInBrowser})\n            .then(resolve);\n        });\n      }())\n      //# sourceURL=_lighthouse-eval.js`,includeCommandLineAPI:!0,awaitPromise:!0,returnByValue:!0,timeout:n,contextId:t};this._session.setNextProtocolTimeout(n);const o=await this._session.sendCommand("Runtime.evaluate",r),i=o.exceptionDetails;if(i){
-const t=["Runtime.evaluate exception",`Expression: ${e.replace(/\s+/g," ").substring(0,100)}\n---- (elided)`,i.stackTrace?null:`Parse error at: ${i.lineNumber+1}:${i.columnNumber+1}`,i.exception?.description||i.text].filter(Boolean),n=new Error(t.join("\n"));return Promise.reject(n)}if(void 0===o.result)return Promise.reject(new Error('Runtime.evaluate response did not contain a "result" object'));const s=o.result.value;return s?.__failedInBrowser?Promise.reject(Object.assign(new Error,s)):s}async evaluateAsync(e,t={}){const n=t.useIsolation?await this._getOrCreateIsolatedContextId():void 0;try{return await this._evaluateInContext(e,n)}catch(t){if(n&&t.message.includes("Cannot find context")){this.clearContextId();const t=await this._getOrCreateIsolatedContextId();return this._evaluateInContext(e,t)}throw t}}evaluate(e,t){const n=ExecutionContext.serializeArguments(t.args),a=`(() => {\n      ${t.deps?t.deps.join("\n"):""}\n      return (${e})(${n});\n    })()`
-;return this.evaluateAsync(a,t)}async evaluateOnNewDocument(e,t){const n=ExecutionContext.serializeArguments(t.args),a=t.deps?t.deps.join("\n"):"",r=`(() => {\n      ${ExecutionContext._cachedNativesPreamble};\n      ${a};\n      (${e})(${n});\n    })()\n    //# sourceURL=_lighthouse-eval.js`;await this._session.sendCommand("Page.addScriptToEvaluateOnNewDocument",{source:r})}async cacheNativesOnNewDocument(){await this.evaluateOnNewDocument((()=>{window.__nativePromise=window.Promise,window.__nativeURL=window.URL,window.__nativePerformance=window.performance,window.__nativeFetch=window.fetch,window.__ElementMatches=window.Element.prototype.matches,window.__HTMLElementBoundingClientRect=window.HTMLElement.prototype.getBoundingClientRect}),{args:[]})}
-static _cachedNativesPreamble=["const Promise = globalThis.__nativePromise || globalThis.Promise","const URL = globalThis.__nativeURL || globalThis.URL","const performance = globalThis.__nativePerformance || globalThis.performance","const fetch = globalThis.__nativeFetch || globalThis.fetch"].join(";\n");static serializeArguments(e){return e.map((e=>void 0===e?"undefined":JSON.stringify(e))).join(",")}}var ir,sr={URL:globalThis.URL,fileURLToPath:e=>e},cr=function(){function peg$SyntaxError(e,t,n,a){this.message=e,this.expected=t,this.found=n,this.location=a,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,peg$SyntaxError)}return function peg$subclass(e,t){function ctor(){this.constructor=e}ctor.prototype=t.prototype,e.prototype=new ctor}(peg$SyntaxError,Error),peg$SyntaxError.buildMessage=function(e,t){var n={literal:function(e){return'"'+literalEscape(e.text)+'"'},class:function(e){var t,n=""
-;for(t=0;t<e.parts.length;t++)n+=e.parts[t]instanceof Array?classEscape(e.parts[t][0])+"-"+classEscape(e.parts[t][1]):classEscape(e.parts[t]);return"["+(e.inverted?"^":"")+n+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function hex(e){return e.charCodeAt(0).toString(16).toUpperCase()}function literalEscape(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+hex(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+hex(e)}))}function classEscape(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+hex(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+hex(e)}))}
-return"Expected "+function describeExpected(e){var t,a,r,o=new Array(e.length);for(t=0;t<e.length;t++)o[t]=(r=e[t],n[r.type](r));if(o.sort(),o.length>0){for(t=1,a=1;t<o.length;t++)o[t-1]!==o[t]&&(o[a]=o[t],a++);o.length=a}switch(o.length){case 1:return o[0];case 2:return o[0]+" or "+o[1];default:return o.slice(0,-1).join(", ")+", or "+o[o.length-1]}}(e)+" but "+function describeFound(e){return e?'"'+literalEscape(e)+'"':"end of input"}(t)+" found."},{SyntaxError:peg$SyntaxError,parse:function peg$parse(e,t){t=void 0!==t?t:{};var n,a={},r={start:peg$parsestart},o=peg$parsestart,peg$c3=function(e){return e.join("")
-},i=peg$literalExpectation("{",!1),s=",",c=peg$literalExpectation(",",!1),l=peg$literalExpectation("}",!1),u="number",d=peg$literalExpectation("number",!1),m="date",p=peg$literalExpectation("date",!1),h="time",f=peg$literalExpectation("time",!1),y="plural",b=peg$literalExpectation("plural",!1),v="selectordinal",w=peg$literalExpectation("selectordinal",!1),D="select",E=peg$literalExpectation("select",!1),T=peg$literalExpectation("=",!1),C="offset:",S=peg$literalExpectation("offset:",!1),_=peg$otherExpectation("whitespace"),A=/^[ \t\n\r]/,k=peg$classExpectation([" ","\t","\n","\r"],!1,!1),x=peg$otherExpectation("optionalWhitespace"),F=/^[0-9]/,R=peg$classExpectation([["0","9"]],!1,!1),I=/^[0-9a-f]/i,M=peg$classExpectation([["0","9"],["a","f"]],!1,!0),L=peg$literalExpectation("0",!1),N=/^[1-9]/,P=peg$classExpectation([["1","9"]],!1,!1),O="'",B=peg$literalExpectation("'",!1),U=/^[ \t\n\r,.+={}#]/,j=peg$classExpectation([" ","\t","\n","\r",",",".","+","=","{","}","#"],!1,!1),z={type:"any"
-},q=/^[^{}\\\0-\x1F\x7F \t\n\r]/,W=peg$classExpectation(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),$=peg$literalExpectation("\\\\",!1),V=peg$literalExpectation("\\#",!1),H=peg$literalExpectation("\\{",!1),G=peg$literalExpectation("\\}",!1),Y=peg$literalExpectation("\\u",!1),K=0,J=0,X=[{line:1,column:1}],Z=0,Q=[],ee=0;if("startRule"in t){if(!(t.startRule in r))throw new Error("Can't start parsing from rule \""+t.startRule+'".');o=r[t.startRule]}function location(){return peg$computeLocation(J,K)}function peg$literalExpectation(e,t){return{type:"literal",text:e,ignoreCase:t}}function peg$classExpectation(e,t,n){return{type:"class",parts:e,inverted:t,ignoreCase:n}}function peg$otherExpectation(e){return{type:"other",description:e}}function peg$computePosDetails(t){var n,a=X[t];if(a)return a;for(n=t-1;!X[n];)n--;for(a={line:(a=X[n]).line,column:a.column};n<t;)10===e.charCodeAt(n)?(a.line++,a.column=1):a.column++,n++;return X[t]=a,a}function peg$computeLocation(e,t){
-var n=peg$computePosDetails(e),a=peg$computePosDetails(t);return{start:{offset:e,line:n.line,column:n.column},end:{offset:t,line:a.line,column:a.column}}}function peg$fail(e){K<Z||(K>Z&&(Z=K,Q=[]),Q.push(e))}function peg$parsestart(){return peg$parsemessageFormatPattern()}function peg$parsemessageFormatPattern(){var e,t,n;for(e=K,t=[],n=peg$parsemessageFormatElement();n!==a;)t.push(n),n=peg$parsemessageFormatElement();return t!==a&&(J=e,t={type:"messageFormatPattern",elements:t,location:location()}),e=t}function peg$parsemessageFormatElement(){var t;return(t=function peg$parsemessageTextElement(){var t,n;t=K,(n=function peg$parsemessageText(){var t,n,r,o,i,s;t=K,n=[],r=K,(o=peg$parse_())!==a&&(i=peg$parsechars())!==a&&(s=peg$parse_())!==a?r=o=[o,i,s]:(K=r,r=a);if(r!==a)for(;r!==a;)n.push(r),r=K,(o=peg$parse_())!==a&&(i=peg$parsechars())!==a&&(s=peg$parse_())!==a?r=o=[o,i,s]:(K=r,r=a);else n=a;n!==a&&(J=t,n=n.reduce((function(e,t){return e.concat(t)}),[]).join(""));(t=n)===a&&(t=K,
-t=(n=peg$parsews())!==a?e.substring(t,K):n);return t}())!==a&&(J=t,n={type:"messageTextElement",value:n,location:location()});return t=n}())===a&&(t=function peg$parseargumentElement(){var t,n,r,o,T,C,S;t=K,123===e.charCodeAt(K)?(n="{",K++):(n=a,0===ee&&peg$fail(i));n!==a&&peg$parse_()!==a&&(r=function peg$parseargument(){var e,t,n;if((e=peg$parsenumber())===a){for(e=K,t=[],n=peg$parsequoteEscapedChar();n!==a;)t.push(n),n=peg$parsequoteEscapedChar();t!==a&&(J=e,t=peg$c3(t)),e=t}return e}())!==a&&peg$parse_()!==a?(o=K,44===e.charCodeAt(K)?(T=s,K++):(T=a,0===ee&&peg$fail(c)),T!==a&&(C=peg$parse_())!==a&&(S=function peg$parseelementFormat(){var t;(t=function peg$parsesimpleFormat(){var t,n,r,o,i,l;t=K,e.substr(K,6)===u?(n=u,K+=6):(n=a,0===ee&&peg$fail(d));n===a&&(e.substr(K,4)===m?(n=m,K+=4):(n=a,0===ee&&peg$fail(p)),n===a&&(e.substr(K,4)===h?(n=h,K+=4):(n=a,0===ee&&peg$fail(f))));n!==a&&peg$parse_()!==a?(r=K,44===e.charCodeAt(K)?(o=s,K++):(o=a,0===ee&&peg$fail(c)),
-o!==a&&(i=peg$parse_())!==a&&(l=peg$parsechars())!==a?r=o=[o,i,l]:(K=r,r=a),r===a&&(r=null),r!==a?(J=t,t=n={type:n+"Format",style:(y=r)&&y[2],location:location()}):(K=t,t=a)):(K=t,t=a);var y;return t}())===a&&(t=function peg$parsepluralFormat(){var t,n,r,o;t=K,e.substr(K,6)===y?(n=y,K+=6):(n=a,0===ee&&peg$fail(b));n!==a&&peg$parse_()!==a?(44===e.charCodeAt(K)?(r=s,K++):(r=a,0===ee&&peg$fail(c)),r!==a&&peg$parse_()!==a&&(o=peg$parsepluralStyle())!==a?(J=t,t=n={type:(i=o).type,ordinal:!1,offset:i.offset||0,options:i.options,location:location()}):(K=t,t=a)):(K=t,t=a);var i;return t}())===a&&(t=function peg$parseselectOrdinalFormat(){var t,n,r,o;t=K,e.substr(K,13)===v?(n=v,K+=13):(n=a,0===ee&&peg$fail(w));n!==a&&peg$parse_()!==a?(44===e.charCodeAt(K)?(r=s,K++):(r=a,0===ee&&peg$fail(c)),r!==a&&peg$parse_()!==a&&(o=peg$parsepluralStyle())!==a?(J=t,t=n={type:(i=o).type,ordinal:!0,offset:i.offset||0,options:i.options,location:location()}):(K=t,t=a)):(K=t,t=a);var i;return t
-}())===a&&(t=function peg$parseselectFormat(){var t,n,r,o,i;t=K,e.substr(K,6)===D?(n=D,K+=6):(n=a,0===ee&&peg$fail(E));if(n!==a)if(peg$parse_()!==a)if(44===e.charCodeAt(K)?(r=s,K++):(r=a,0===ee&&peg$fail(c)),r!==a)if(peg$parse_()!==a){if(o=[],(i=peg$parseoptionalFormatPattern())!==a)for(;i!==a;)o.push(i),i=peg$parseoptionalFormatPattern();else o=a;o!==a?(J=t,t=n=function(e){return{type:"selectFormat",options:e,location:location()}}(o)):(K=t,t=a)}else K=t,t=a;else K=t,t=a;else K=t,t=a;else K=t,t=a;return t}());return t}())!==a?o=T=[T,C,S]:(K=o,o=a),o===a&&(o=null),o!==a&&(T=peg$parse_())!==a?(125===e.charCodeAt(K)?(C="}",K++):(C=a,0===ee&&peg$fail(l)),C!==a?(J=t,t=n=function(e,t){return{type:"argumentElement",id:e,format:t&&t[2],location:location()}}(r,o)):(K=t,t=a)):(K=t,t=a)):(K=t,t=a);return t}()),t}function peg$parseoptionalFormatPattern(){var t,n,r,o,s;return t=K,peg$parse_()!==a&&(n=function peg$parseselector(){var t,n,r,o;return t=K,n=K,61===e.charCodeAt(K)?(r="=",K++):(r=a,
-0===ee&&peg$fail(T)),r!==a&&(o=peg$parsenumber())!==a?n=r=[r,o]:(K=n,n=a),(t=n!==a?e.substring(t,K):n)===a&&(t=peg$parsechars()),t}())!==a&&peg$parse_()!==a?(123===e.charCodeAt(K)?(r="{",K++):(r=a,0===ee&&peg$fail(i)),r!==a&&(o=peg$parsemessageFormatPattern())!==a?(125===e.charCodeAt(K)?(s="}",K++):(s=a,0===ee&&peg$fail(l)),s!==a?(J=t,t={type:"optionalFormatPattern",selector:n,value:o,location:location()}):(K=t,t=a)):(K=t,t=a)):(K=t,t=a),t}function peg$parsepluralStyle(){var t,n,r,o;if(t=K,(n=function peg$parseoffset(){var t,n,r;return t=K,e.substr(K,7)===C?(n=C,K+=7):(n=a,0===ee&&peg$fail(S)),n!==a&&peg$parse_()!==a&&(r=peg$parsenumber())!==a?(J=t,t=n=r):(K=t,t=a),t}())===a&&(n=null),n!==a)if(peg$parse_()!==a){if(r=[],(o=peg$parseoptionalFormatPattern())!==a)for(;o!==a;)r.push(o),o=peg$parseoptionalFormatPattern();else r=a;r!==a?(J=t,t=n=function(e,t){return{type:"pluralFormat",offset:e,options:t,location:location()}}(n,r)):(K=t,t=a)}else K=t,t=a;else K=t,t=a;return t}
-function peg$parsews(){var t,n;if(ee++,t=[],A.test(e.charAt(K))?(n=e.charAt(K),K++):(n=a,0===ee&&peg$fail(k)),n!==a)for(;n!==a;)t.push(n),A.test(e.charAt(K))?(n=e.charAt(K),K++):(n=a,0===ee&&peg$fail(k));else t=a;return ee--,t===a&&(n=a,0===ee&&peg$fail(_)),t}function peg$parse_(){var t,n,r;for(ee++,t=K,n=[],r=peg$parsews();r!==a;)n.push(r),r=peg$parsews();return t=n!==a?e.substring(t,K):n,ee--,t===a&&(n=a,0===ee&&peg$fail(x)),t}function peg$parsedigit(){var t;return F.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(R)),t}function peg$parsehexDigit(){var t;return I.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(M)),t}function peg$parsenumber(){var t,n,r,o,i,s;if(t=K,48===e.charCodeAt(K)?(n="0",K++):(n=a,0===ee&&peg$fail(L)),n===a){if(n=K,r=K,N.test(e.charAt(K))?(o=e.charAt(K),K++):(o=a,0===ee&&peg$fail(P)),o!==a){for(i=[],s=peg$parsedigit();s!==a;)i.push(s),s=peg$parsedigit();i!==a?r=o=[o,i]:(K=r,r=a)}else K=r,r=a;n=r!==a?e.substring(n,K):r}return n!==a&&(J=t,
-n=parseInt(n,10)),t=n}function peg$parsequoteEscapedChar(){var t,n,r;return t=K,n=K,ee++,39===e.charCodeAt(K)?(r=O,K++):(r=a,0===ee&&peg$fail(B)),r===a&&(U.test(e.charAt(K))?(r=e.charAt(K),K++):(r=a,0===ee&&peg$fail(j))),ee--,r===a?n=void 0:(K=n,n=a),n!==a?(e.length>K?(r=e.charAt(K),K++):(r=a,0===ee&&peg$fail(z)),r!==a?(J=t,t=n=r):(K=t,t=a)):(K=t,t=a),t===a&&(t=K,39===e.charCodeAt(K)?(n=O,K++):(n=a,0===ee&&peg$fail(B)),n!==a&&(r=function peg$parseescape(){var t;U.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(j));t===a&&(t=peg$parseapostrophe());return t}())!==a?(J=t,t=n=r):(K=t,t=a)),t}function peg$parseapostrophe(){var t;return 39===e.charCodeAt(K)?(t=O,K++):(t=a,0===ee&&peg$fail(B)),t}function peg$parsechar(){var t,n,r,o,i,s,c,l,u;return t=K,39===e.charCodeAt(K)?(n=O,K++):(n=a,0===ee&&peg$fail(B)),n!==a&&(r=peg$parseapostrophe())!==a?(J=t,t=n=r):(K=t,t=a),t===a&&(q.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(W)),t===a&&(t=K,
-"\\\\"===e.substr(K,2)?(n="\\\\",K+=2):(n=a,0===ee&&peg$fail($)),n!==a&&(J=t,n="\\"),(t=n)===a&&(t=K,"\\#"===e.substr(K,2)?(n="\\#",K+=2):(n=a,0===ee&&peg$fail(V)),n!==a&&(J=t,n="\\#"),(t=n)===a&&(t=K,"\\{"===e.substr(K,2)?(n="\\{",K+=2):(n=a,0===ee&&peg$fail(H)),n!==a&&(J=t,n="{"),(t=n)===a&&(t=K,"\\}"===e.substr(K,2)?(n="\\}",K+=2):(n=a,0===ee&&peg$fail(G)),n!==a&&(J=t,n="}"),(t=n)===a&&(t=K,"\\u"===e.substr(K,2)?(n="\\u",K+=2):(n=a,0===ee&&peg$fail(Y)),n!==a?(r=K,o=K,(i=peg$parsehexDigit())!==a&&(s=peg$parsehexDigit())!==a&&(c=peg$parsehexDigit())!==a&&(l=peg$parsehexDigit())!==a?o=i=[i,s,c,l]:(K=o,o=a),(r=o!==a?e.substring(r,K):o)!==a?(J=t,u=r,t=n=String.fromCharCode(parseInt(u,16))):(K=t,t=a)):(K=t,t=a))))))),t}function peg$parsechars(){var e,t,n;if(e=K,t=[],(n=peg$parsechar())!==a)for(;n!==a;)t.push(n),n=peg$parsechar();else t=a;return t!==a&&(J=e,t=peg$c3(t)),e=t}if((n=o())!==a&&K===e.length)return n;throw n!==a&&K<e.length&&peg$fail({type:"end"}),
-function peg$buildStructuredError(e,t,n){return new peg$SyntaxError(peg$SyntaxError.buildMessage(e,t),e,t,n)}(Q,Z<e.length?e.charAt(Z):null,Z<e.length?peg$computeLocation(Z,Z+1):peg$computeLocation(Z,Z))}}}(),lr=globalThis&&globalThis.__extends||(ir=function(e,t){return(ir=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function __(){this.constructor=e}ir(e,t),e.prototype=null===t?Object.create(t):(__.prototype=t.prototype,new __)}),ur=function(){function Compiler(e,t,n){this.locales=[],this.formats={number:{},date:{},time:{}},this.pluralNumberFormat=null,this.currentPlural=null,this.pluralStack=[],this.locales=e,this.formats=t,this.formatters=n}return Compiler.prototype.compile=function(e){return this.pluralStack=[],this.currentPlural=null,this.pluralNumberFormat=null,this.compileMessage(e)},Compiler.prototype.compileMessage=function(e){var t=this
-;if(!e||"messageFormatPattern"!==e.type)throw new Error('Message AST is not of type: "messageFormatPattern"');var n=e.elements,a=n.filter((function(e){return"messageTextElement"===e.type||"argumentElement"===e.type})).map((function(e){return"messageTextElement"===e.type?t.compileMessageText(e):t.compileArgument(e)}));if(a.length!==n.length)throw new Error("Message element does not have a valid type");return a},Compiler.prototype.compileMessageText=function(e){return this.currentPlural&&/(^|[^\\])#/g.test(e.value)?(this.pluralNumberFormat||(this.pluralNumberFormat=new Intl.NumberFormat(this.locales)),new gr(this.currentPlural.id,this.currentPlural.format.offset,this.pluralNumberFormat,e.value)):e.value.replace(/\\#/g,"#")},Compiler.prototype.compileArgument=function(e){var t=e.format,n=e.id,a=this.formatters;if(!t)return new mr(n);var r=this.formats,o=this.locales;switch(t.type){case"numberFormat":return{id:n,format:a.getNumberFormat(o,r.number[t.style]).format};case"dateFormat":return{
-id:n,format:a.getDateTimeFormat(o,r.date[t.style]).format};case"timeFormat":return{id:n,format:a.getDateTimeFormat(o,r.time[t.style]).format};case"pluralFormat":return new pr(n,t.offset,this.compileOptions(e),a.getPluralRules(o,{type:t.ordinal?"ordinal":"cardinal"}));case"selectFormat":return new hr(n,this.compileOptions(e));default:throw new Error("Message element does not have a valid format type")}},Compiler.prototype.compileOptions=function(e){var t=this,n=e.format,a=n.options;this.pluralStack.push(this.currentPlural),this.currentPlural="pluralFormat"===n.type?e:null;var r=a.reduce((function(e,n){return e[n.selector]=t.compileMessage(n.value),e}),{});return this.currentPlural=this.pluralStack.pop(),r},Compiler}(),dr=function dr(e){this.id=e},mr=function(e){function StringFormat(){return null!==e&&e.apply(this,arguments)||this}return lr(StringFormat,e),StringFormat.prototype.format=function(e){return e||"number"==typeof e?"string"==typeof e?e:String(e):""},StringFormat
-}(dr),pr=function(){function PluralFormat(e,t,n,a){this.id=e,this.offset=t,this.options=n,this.pluralRules=a}return PluralFormat.prototype.getOption=function(e){var t=this.options;return t["="+e]||t[this.pluralRules.select(e-this.offset)]||t.other},PluralFormat}(),gr=function(e){function PluralOffsetString(t,n,a,r){var o=e.call(this,t)||this;return o.offset=n,o.numberFormat=a,o.string=r,o}return lr(PluralOffsetString,e),PluralOffsetString.prototype.format=function(e){var t=this.numberFormat.format(e-this.offset);return this.string.replace(/(^|[^\\])#/g,"$1"+t).replace(/\\#/g,"#")},PluralOffsetString}(dr),hr=function(){function SelectFormat(e,t){this.id=e,this.options=t}return SelectFormat.prototype.getOption=function(e){var t=this.options;return t[e]||t.other},SelectFormat}();var fr=globalThis&&globalThis.__extends||function(){var extendStatics=function(e,t){return(extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){
-for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};return function(e,t){function __(){this.constructor=e}extendStatics(e,t),e.prototype=null===t?Object.create(t):(__.prototype=t.prototype,new __)}}(),yr=globalThis&&globalThis.__assign||function(){return(yr=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function resolveLocale(e){"string"==typeof e&&(e=[e]);try{return Intl.NumberFormat.supportedLocalesOf(e,{localeMatcher:"best fit"})[0]}catch(e){return vr.defaultLocale}}function formatPatterns(e,t){for(var n="",a=0,r=e;a<r.length;a++){var o=r[a];if("string"!=typeof o){var i=o.id;if(!t||!(i in t))throw new br("A value must be provided for: "+i,i);var s=t[i];o.options?n+=formatPatterns(o.getOption(s),t):n+=o.format(s)}else n+=o}return n}function mergeConfigs(e,t){return t?Object.keys(e).reduce((function(n,a){return n[a]=function mergeConfig(e,t){
-return t?yr({},e||{},t||{},Object.keys(e).reduce((function(n,a){return n[a]=yr({},e[a],t[a]||{}),n}),{})):e}(e[a],t[a]),n}),yr({},e)):e}var br=function(e){function FormatError(t,n){var a=e.call(this,t)||this;return a.variableId=n,a}return fr(FormatError,e),FormatError}(Error);var vr=function(){function IntlMessageFormat(e,t,n,a){var r=this;if(void 0===t&&(t=IntlMessageFormat.defaultLocale),this.format=function(e){try{return formatPatterns(r.pattern,e)}catch(e){throw e.variableId?new Error("The intl string context variable '"+e.variableId+"' was not provided to the string '"+r.message+"'"):e}},"string"==typeof e){if(!IntlMessageFormat.__parse)throw new TypeError("IntlMessageFormat.__parse must be set to process `message` of type `string`");this.ast=IntlMessageFormat.__parse(e)}else this.ast=e;if(this.message=e,!this.ast||"messageFormatPattern"!==this.ast.type)throw new TypeError("A message must be provided as a String or AST.");var o=mergeConfigs(IntlMessageFormat.formats,n)
-;this.locale=resolveLocale(t||[]);var i=a&&a.formatters||function createDefaultFormatters(){return{getNumberFormat:function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.NumberFormat).bind.apply(e,[void 0].concat(t)))},getDateTimeFormat:function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.DateTimeFormat).bind.apply(e,[void 0].concat(t)))},getPluralRules:function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.PluralRules).bind.apply(e,[void 0].concat(t)))}}}();this.pattern=new ur(t,o,i).compile(this.ast)}return IntlMessageFormat.prototype.resolvedOptions=function(){return{locale:this.locale}},IntlMessageFormat.prototype.getAst=function(){return this.ast},IntlMessageFormat.defaultLocale="en",IntlMessageFormat.__parse=void 0,IntlMessageFormat.formats={number:{currency:{style:"currency"},percent:{style:"percent"}},date:{short:{month:"numeric",day:"numeric",year:"2-digit"},medium:{
-month:"short",day:"numeric",year:"numeric"},long:{month:"long",day:"numeric",year:"numeric"},full:{weekday:"long",month:"long",day:"numeric",year:"numeric"}},time:{short:{hour:"numeric",minute:"numeric"},medium:{hour:"numeric",minute:"numeric",second:"numeric"},long:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"},full:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"}}},IntlMessageFormat}();vr.__parse=cr.parse;function getModulePath(e){return sr.fileURLToPath(e.url)}function getModuleDirectory(e){return Q.dirname(getModulePath(e))}function isObjectOfUnknownValues(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}getModuleDirectory({url:"shared/localization/format.js"})
-;const wr={},Dr="en-US",Er=["ar-XB.json","ar.json","bg.json","ca.json","cs.json","da.json","de.json","el.json","en-GB.json","en-US.ctc.json","en-US.json","en-XA.json","en-XL.ctc.json","en-XL.json","es-419.json","es.json","fi.json","fil.json","fr.json","he.json","hi.json","hr.json","hu.json","id.json","it.json","ja.json","ko.json","lt.json","lv.json","nl.json","no.json","pl.json","pt-PT.json","pt.json","ro.json","ru.json","sk.json","sl.json","sr-Latn.json","sr.json","sv.json","ta.json","te.json","th.json","tr.json","uk.json","vi.json","zh-HK.json","zh-TW.json","zh.json"].filter((e=>e.endsWith(".json")&&!e.endsWith(".ctc.json"))).map((e=>e.replace(".json",""))).sort(),Tr=/ | [^\s]+$/,Cr={number:{bytes:{maximumFractionDigits:0},milliseconds:{maximumFractionDigits:0},seconds:{minimumFractionDigits:1,maximumFractionDigits:1},extendedPercent:{maximumFractionDigits:2,style:"percent"}}};function collectAllCustomElementsFromICU(e,t=new Map){
-for(const n of e)if("argumentElement"===n.type&&(t.set(n.id,n),n.format&&"pluralFormat"===n.format.type))for(const e of n.format.options)collectAllCustomElementsFromICU(e.value.elements,t);return t}function _preformatValues(e,t={},n){const a=[...collectAllCustomElementsFromICU(e.getAst().elements).values()],r={};for(const{id:e,format:o}of a){if(e&&e in t==!1)throw new Error(`ICU Message "${n}" contains a value reference ("${e}") that wasn't provided`);const a=t[e];if(o&&"numberFormat"===o.type){if("number"!=typeof a)throw new Error(`ICU Message "${n}" contains a numeric reference ("${e}") but provided value was not a number`);"milliseconds"===o.style?r[e]=10*Math.round(a/10):"seconds"===o.style&&"timeInMs"===e?r[e]=Math.round(a/100)/10:"bytes"===o.style?r[e]=a/1024:r[e]=a}else r[e]=a}for(const e of Object.keys(t))if(!(e in r)){if("errorCode"!==e)throw new Error(`Provided value "${e}" does not match any placeholder in ICU message "${n}"`);r.errorCode=t.errorCode}return r}
-function formatMessage(e,t,n){if(!e.includes("{")&&void 0===t)return e;const a=new vr(e,"en-XA"===n||"en-XL"===n?"de-DE":n,Cr),r=_preformatValues(a,t,e);return a.format(r)}function getRendererFormattedStrings(e){const t=_getLocaleMessages(e),n=Object.keys(t).filter((e=>e.startsWith("report/renderer/report-utils.js"))),a={};for(const e of n){const{filename:n,key:r}=getIcuMessageIdParts(e);if(!n.endsWith("report-utils.js"))throw new Error(`Unexpected message: ${e}`);a[r]=t[e].message}return a}function isIcuMessage(e){if(!isObjectOfUnknownValues(e))return!1;const{i18nId:t,values:n,formattedDefault:a}=e;if("string"!=typeof t)return!1;if("string"!=typeof a)return!1;if(void 0!==n){if(!isObjectOfUnknownValues(n))return!1;for(const e of Object.values(n))if("string"!=typeof e&&"number"!=typeof e)return!1}return Tr.test(t)}function getFormatted(e,t){if(isIcuMessage(e))return function _localizeIcuMessage(e,t){const n=_getLocaleMessages(t)[e.i18nId]
-;return n?formatMessage(n.message,e.values,t):e.formattedDefault}(e,t);if("string"==typeof e)return e;throw new Error("Attempted to format invalid icuMessage type")}function _formatPathAsString(e){let t="";for(const n of e)if(/^[a-z]+$/i.test(n))t.length&&(t+="."),t+=n;else{if(/]|"|'|\s/.test(n))throw new Error(`Cannot handle "${n}" in i18n`);t+=`[${n}]`}return t}function replaceIcuMessages(e,t){const n={};return function replaceInObject(e,n,a=[]){if(function isObjectOrArrayOfUnknownValues(e){return"object"==typeof e&&null!==e}(e))for(const[r,o]of Object.entries(e)){const i=a.concat([r]);if(isIcuMessage(o)){const a=getFormatted(o,t),s=n[o.i18nId]||[],c=_formatPathAsString(i);s.push(o.values?{values:o.values,path:c}:c),e[r]=a,n[o.i18nId]=s}else replaceInObject(o,n,i)}}(e,n),n}function _getLocaleMessages(e){const t=wr[e];if(!t){if(e===Dr)return{};throw new Error(`Unsupported locale '${e}'`)}return t}function getIcuMessageIdParts(e){
-if(!Tr.test(e))throw Error(`"${e}" does not appear to be a valid ICU message id`);const[t,n]=e.split(" | ");return{filename:t,key:n}}const Sr=getModuleDirectory({url:"root.js"
-}),_r=JSON.parse('{\n  "name": "lighthouse",\n  "type": "module",\n  "version": "10.4.0",\n  "description": "Automated auditing, performance metrics, and best practices for the web.",\n  "main": "./core/index.js",\n  "bin": {\n    "lighthouse": "./cli/index.js",\n    "chrome-debug": "./core/scripts/manual-chrome-launcher.js",\n    "smokehouse": "./cli/test/smokehouse/frontends/smokehouse-bin.js"\n  },\n  "engines": {\n    "node": ">=16.16"\n  },\n  "scripts": {\n    "prepack": "yarn build-report --standalone --flow --esm && yarn build-types",\n    "postpack": "yarn clean-types",\n    "build-all": "npm-run-posix-or-windows build-all:task",\n    "build-all:task": "yarn build-report && yarn build-cdt-lib && yarn build-devtools && concurrently \'yarn build-extension\' \'yarn build-lr\' \'yarn build-viewer\' \'yarn build-treemap\' \'yarn build-smokehouse-bundle\' && yarn build-pack",\n    "build-all:task:windows": "yarn build-report && yarn build-cdt-lib && yarn build-extension && yarn build-devtools && yarn build-lr && yarn build-viewer && yarn build-treemap && yarn build-smokehouse-bundle",\n    "build-cdt-lib": "node ./build/build-cdt-lib.js",\n    "build-extension": "yarn build-extension-chrome && yarn build-extension-firefox",\n    "build-extension-chrome": "node ./build/build-extension.js chrome",\n    "build-extension-firefox": "node ./build/build-extension.js firefox",\n    "build-devtools": "yarn reset-link && node ./build/build-bundle.js clients/devtools/devtools-entry.js dist/lighthouse-dt-bundle.js && node ./build/build-dt-report-resources.js",\n    "build-smokehouse-bundle": "node ./build/build-smokehouse-bundle.js",\n    "build-lr": "yarn reset-link && node --max-old-space-size=4096 ./build/build-lightrider-bundles.js",\n    "build-pack": "bash build/build-pack.sh",\n    "build-report": "node build/build-report-components.js && node build/build-report.js",\n    "build-sample-reports": "yarn build-report && node build/build-sample-reports.js",\n    "build-treemap": "node ./build/build-treemap.js",\n    "build-viewer": "node ./build/build-viewer.js",\n    "build-types": "yarn type-check && rsync -a .tmp/tsbuildinfo/ ./ --include=\'*.d.ts\' --include=\'*.d.cts\' --exclude=\'*.map\' --exclude=\'*.tsbuildinfo\'",\n    "reset-link": "(yarn unlink || true) && yarn link && yarn link lighthouse",\n    "c8": "bash core/scripts/c8.sh",\n    "clean": "rm -r dist proto/scripts/*.json proto/scripts/*_pb2.* proto/scripts/*_pb.* proto/scripts/__pycache__ proto/scripts/*.pyc *.report.html *.report.dom.html *.report.json *.devtoolslog.json *.trace.json shared/localization/locales/*.ctc.json || true",\n    "clean-types": "git clean -xfq \'*.d.ts\' \'*.d.cts\' -e \'node_modules/\' -e \'dist/\' -e \'.tmp/\' -e \'**/types/\'",\n    "lint": "[ \\"$CI\\" = true ] && eslint --quiet -f codeframe . || eslint .",\n    "smoke": "node cli/test/smokehouse/frontends/smokehouse-bin.js",\n    "debug": "node --inspect-brk ./cli/index.js",\n    "start": "yarn build-report --standalone && node ./cli/index.js",\n    "mocha": "node --loader=testdouble core/test/scripts/run-mocha-tests.js",\n    "test": "yarn diff:sample-json && yarn lint --quiet && yarn unit && yarn type-check",\n    "test-bundle": "yarn smoke --runner bundle --retries=2",\n    "test-clients": "yarn mocha --testMatch clients/**/*-test.js && yarn mocha --testMatch clients/**/*-test-pptr.js",\n    "test-viewer": "yarn unit-viewer && yarn mocha --testMatch viewer/**/*-test-pptr.js --timeout 35000",\n    "test-treemap": "yarn unit-treemap && yarn mocha --testMatch treemap/**/*-test-pptr.js --timeout 35000",\n    "test-lantern": "bash core/scripts/test-lantern.sh",\n    "test-legacy-javascript": "bash core/scripts/test-legacy-javascript.sh",\n    "test-docs": "yarn --cwd docs/recipes/ test",\n    "test-proto": "yarn compile-proto && yarn build-proto-roundtrip",\n    "unit-core": "yarn mocha core",\n    "unit-cli": "yarn mocha --testMatch cli/**/*-test.js",\n    "unit-report": "yarn mocha --testMatch report/**/*-test.js",\n    "unit-treemap": "yarn mocha --testMatch treemap/**/*-test.js",\n    "unit-viewer": "yarn mocha --testMatch viewer/**/*-test.js",\n    "unit-flow": "bash flow-report/test/run-flow-report-tests.sh",\n    "unit": "yarn unit-flow && yarn mocha",\n    "unit:ci": "NODE_OPTIONS=--max-old-space-size=8192 npm run unit --forbid-only",\n    "core-unit": "yarn unit-core",\n    "cli-unit": "yarn unit-cli",\n    "viewer-unit": "yarn unit-viewer",\n    "watch": "yarn unit-core --watch",\n    "unit:cicoverage": "yarn c8 --all yarn unit:ci",\n    "coverage": "yarn unit:cicoverage && c8 report --reporter html",\n    "coverage:smoke": "yarn c8 yarn smoke -j=1 && c8 report --reporter html",\n    "devtools": "bash core/scripts/roll-to-devtools.sh",\n    "chrome": "node core/scripts/manual-chrome-launcher.js",\n    "fast": "node ./cli/index.js --preset=desktop --throttlingMethod=provided",\n    "deploy-treemap": "yarn build-treemap --deploy",\n    "deploy-viewer": "yarn build-viewer --deploy",\n    "vercel-build": "yarn build-sample-reports && yarn build-viewer && yarn build-treemap",\n    "dogfood-lhci": "./core/scripts/dogfood-lhci.sh",\n    "timing-trace": "node core/scripts/generate-timing-trace.js",\n    "changelog": "conventional-changelog --config ./build/changelog-generator/index.cjs --infile changelog.md --same-file",\n    "type-check": "tsc --build ./tsconfig-all.json",\n    "i18n:checks": "./core/scripts/i18n/assert-strings-collected.sh",\n    "i18n:collect-strings": "node core/scripts/i18n/collect-strings.js",\n    "update:lantern-baseline": "node core/scripts/lantern/update-baseline-lantern-values.js",\n    "update:sample-artifacts": "node core/scripts/update-report-fixtures.js",\n    "update:sample-json": "yarn i18n:collect-strings && node ./cli -A=./core/test/results/artifacts --config-path=./core/test/results/sample-config.js --output=json --output-path=./core/test/results/sample_v2.json && node core/scripts/cleanup-LHR-for-diff.js ./core/test/results/sample_v2.json --only-remove-timing && node ./core/scripts/update-flow-fixtures.js",\n    "update:flow-sample-json": "yarn i18n:collect-strings && node ./core/scripts/update-flow-fixtures.js",\n    "test-devtools": "bash core/test/devtools-tests/test-locally.sh",\n    "open-devtools": "bash core/scripts/open-devtools.sh",\n    "run-devtools": "node core/scripts/pptr-run-devtools.js",\n    "diff:sample-json": "yarn i18n:checks && bash core/scripts/assert-golden-lhr-unchanged.sh",\n    "diff:flow-sample-json": "yarn i18n:collect-strings && bash core/scripts/assert-baseline-flow-result-unchanged.sh",\n    "computeBenchmarkIndex": "./core/scripts/benchmark.js",\n    "save-latest-run": "./core/scripts/save-latest-run.sh",\n    "compile-proto": "protoc --python_out=./ ./proto/lighthouse-result.proto && mv ./proto/*_pb2.py ./proto/scripts || (echo \\"❌ Install protobuf = 3.20.x to compile the proto file.\\" && false)",\n    "build-proto-roundtrip": "mkdir -p .tmp && python3 proto/scripts/json_roundtrip_via_proto.py",\n    "static-server": "node cli/test/fixtures/static-server.js",\n    "serve-dist": "cd dist && python3 -m http.server 7878",\n    "serve-gh-pages": "cd dist/gh-pages && python3 -m http.server 7333",\n    "serve-treemap": "yarn serve-gh-pages",\n    "serve-viewer": "yarn serve-gh-pages",\n    "flow-report": "yarn build-report --flow && node ./core/scripts/build-test-flow-report.js"\n  },\n  "devDependencies": {\n    "@build-tracker/cli": "^1.0.0-beta.15",\n    "@esbuild-kit/esm-loader": "^2.1.1",\n    "@jest/fake-timers": "^28.1.0",\n    "@rollup/plugin-alias": "^3.1.2",\n    "@rollup/plugin-commonjs": "^20.0.0",\n    "@rollup/plugin-dynamic-import-vars": "^1.1.1",\n    "@rollup/plugin-json": "^4.1.0",\n    "@rollup/plugin-node-resolve": "^13.0.4",\n    "@rollup/plugin-typescript": "^8.2.5",\n    "@stadtlandnetz/rollup-plugin-postprocess": "^1.1.0",\n    "@testing-library/preact": "^3.1.1",\n    "@testing-library/preact-hooks": "^1.1.0",\n    "@types/archiver": "^2.1.2",\n    "@types/chrome": "^0.0.154",\n    "@types/configstore": "^4.0.0",\n    "@types/cpy": "^5.1.0",\n    "@types/debug": "^4.1.7",\n    "@types/eslint": "^8.2.1",\n    "@types/estree": "^0.0.50",\n    "@types/gh-pages": "^2.0.0",\n    "@types/google.analytics": "0.0.39",\n    "@types/jpeg-js": "^0.3.7",\n    "@types/jsdom": "^16.2.13",\n    "@types/lodash": "^4.14.178",\n    "@types/mocha": "^9.0.0",\n    "@types/node": "*",\n    "@types/pako": "^1.0.1",\n    "@types/resize-observer-browser": "^0.1.1",\n    "@types/semver": "^5.5.0",\n    "@types/tabulator-tables": "^4.9.1",\n    "@types/ws": "^7.0.0",\n    "@types/yargs": "^17.0.8",\n    "@types/yargs-parser": "^20.2.1",\n    "@typescript-eslint/eslint-plugin": "^5.48.0",\n    "@typescript-eslint/parser": "^5.48.0",\n    "acorn": "^8.5.0",\n    "angular": "^1.7.4",\n    "archiver": "^3.0.0",\n    "c8": "^7.11.3",\n    "chalk": "^2.4.1",\n    "chrome-devtools-frontend": "1.0.1153166",\n    "concurrently": "^6.4.0",\n    "conventional-changelog-cli": "^2.1.1",\n    "cpy": "^8.1.2",\n    "cross-env": "^7.0.2",\n    "csv-validator": "^0.0.3",\n    "es-main": "^1.2.0",\n    "eslint": "^8.4.1",\n    "eslint-config-google": "^0.14.0",\n    "eslint-formatter-codeframe": "^7.32.1",\n    "eslint-plugin-import": "^2.25.3",\n    "eslint-plugin-local-rules": "1.1.0",\n    "event-target-shim": "^6.0.2",\n    "expect": "^28.1.0",\n    "firebase": "^9.0.2",\n    "gh-pages": "^2.0.1",\n    "glob": "^7.1.3",\n    "idb-keyval": "2.2.0",\n    "intl-messageformat-parser": "^1.8.1",\n    "jest-mock": "^27.3.0",\n    "jest-snapshot": "^28.1.0",\n    "jsdom": "^12.2.0",\n    "lighthouse-plugin-publisher-ads": "1.5.7-beta",\n    "lighthouse-plugin-soft-navigation": "^1.0.1",\n    "magic-string": "^0.25.7",\n    "mime-types": "^2.1.30",\n    "mocha": "^10.0.0",\n    "node-fetch": "^2.6.1",\n    "npm-run-posix-or-windows": "^2.0.2",\n    "pako": "^2.0.3",\n    "preact": "^10.7.2",\n    "pretty-json-stringify": "^0.0.2",\n    "puppeteer": "^20.8.0",\n    "resolve": "^1.20.0",\n    "rollup": "^2.52.7",\n    "rollup-plugin-node-resolve": "^5.2.0",\n    "rollup-plugin-polyfill-node": "^0.12.0",\n    "rollup-plugin-replace": "^2.2.0",\n    "rollup-plugin-shim": "^1.0.0",\n    "rollup-plugin-terser": "^7.0.2",\n    "tabulator-tables": "^4.9.3",\n    "terser": "^5.3.8",\n    "testdouble": "^3.17.2",\n    "typed-query-selector": "^2.6.1",\n    "typescript": "^5.0.4",\n    "wait-for-expect": "^3.0.2",\n    "webtreemap-cdt": "^3.2.1"\n  },\n  "dependencies": {\n    "@sentry/node": "^6.17.4",\n    "axe-core": "4.7.2",\n    "chrome-launcher": "^0.15.2",\n    "configstore": "^5.0.1",\n    "csp_evaluator": "1.1.1",\n    "devtools-protocol": "0.0.1155343",\n    "enquirer": "^2.3.6",\n    "http-link-header": "^1.1.1",\n    "intl-messageformat": "^4.4.0",\n    "jpeg-js": "^0.4.4",\n    "js-library-detector": "^6.6.0",\n    "lighthouse-logger": "^1.4.1",\n    "lighthouse-stack-packs": "1.11.0",\n    "lodash": "^4.17.21",\n    "lookup-closest-locale": "6.2.0",\n    "metaviewport-parser": "0.3.0",\n    "open": "^8.4.0",\n    "parse-cache-control": "1.0.1",\n    "ps-list": "^8.0.0",\n    "puppeteer-core": "^20.8.0",\n    "robots-parser": "^3.0.0",\n    "semver": "^5.3.0",\n    "speedline-core": "^1.4.3",\n    "third-party-web": "^0.23.3",\n    "ws": "^7.0.0",\n    "yargs": "^17.3.1",\n    "yargs-parser": "^21.0.0"\n  },\n  "resolutions": {\n    "puppeteer/**/devtools-protocol": "0.0.1155343",\n    "puppeteer-core/**/devtools-protocol": "0.0.1155343"\n  },\n  "repository": "GoogleChrome/lighthouse",\n  "keywords": [\n    "google",\n    "chrome",\n    "devtools"\n  ],\n  "author": "The Lighthouse Authors",\n  "license": "Apache-2.0",\n  "bugs": {\n    "url": "https://github.com/GoogleChrome/lighthouse/issues"\n  },\n  "homepage": "https://github.com/GoogleChrome/lighthouse#readme"\n}\n').version,Ar={
-ms:"{timeInMs, number, milliseconds} ms",seconds:"{timeInMs, number, seconds} s",displayValueByteSavings:"Potential savings of {wastedBytes, number, bytes} KiB",displayValueMsSavings:"Potential savings of {wastedMs, number, milliseconds} ms",displayValueElementsFound:"{nodeCount, plural, =1 {1 element found} other {# elements found}}",columnURL:"URL",columnSize:"Size",columnResourceSize:"Resource Size",columnTransferSize:"Transfer Size",columnCacheTTL:"Cache TTL",columnWastedBytes:"Potential Savings",columnWastedMs:"Potential Savings",columnBlockingTime:"Main-Thread Blocking Time",columnTimeSpent:"Time Spent",columnLocation:"Location",columnResourceType:"Resource Type",columnRequests:"Requests",columnName:"Name",columnSource:"Source",columnOverBudget:"Over Budget",columnElement:"Element",columnStartTime:"Start Time",columnDuration:"Duration",columnFailingElem:"Failing Elements",columnDescription:"Description",totalResourceType:"Total",documentResourceType:"Document",
-scriptResourceType:"Script",stylesheetResourceType:"Stylesheet",imageResourceType:"Image",mediaResourceType:"Media",fontResourceType:"Font",otherResourceType:"Other",thirdPartyResourceType:"Third-party",otherResourcesLabel:"Other resources",firstContentfulPaintMetric:"First Contentful Paint",interactiveMetric:"Time to Interactive",firstMeaningfulPaintMetric:"First Meaningful Paint",totalBlockingTimeMetric:"Total Blocking Time",maxPotentialFIDMetric:"Max Potential First Input Delay",speedIndexMetric:"Speed Index",largestContentfulPaintMetric:"Largest Contentful Paint",cumulativeLayoutShiftMetric:"Cumulative Layout Shift",interactionToNextPaint:"Interaction to Next Paint",itemSeverityLow:"Low",itemSeverityMedium:"Medium",itemSeverityHigh:"High"};function lookupLocale(e,t){if("object"!=typeof Intl)throw new Error("Lighthouse must be run in Node with `Intl` support. See https://nodejs.org/api/intl.html for help")
-;const n=Intl.getCanonicalLocales(e),a=Intl.NumberFormat.supportedLocalesOf(n),r=t||function getAvailableLocales(){return[...new Set([...Object.keys(wr),Dr])].sort()}(),o=function lookupClosestLocale(e,t){if("string"==typeof e&&t[e])return e;for(var n=[].concat(e||[]),a=0,r=n.length;a<r;++a)for(var o=n[a].split("-");o.length;){var i=o.join("-");if(t[i])return i;o.pop()}}(a,Object.fromEntries(r.map((e=>[e,{}]))));return o||(0===Intl.NumberFormat.supportedLocalesOf("es").length&&Log.warn("i18n","Requested locale not available in this version of node. The `full-icu` npm module can provide additional locales. For help, see https://github.com/GoogleChrome/lighthouse/blob/main/readme.md#how-do-i-get-localized-lighthouse-results-via-the-cli"),Log.warn("i18n",`locale(s) '${e}' not available. Falling back to default 'en-US'`)),o||Dr}function createIcuMessageFn(e,t){e.startsWith("file://")&&(e=sr.fileURLToPath(e)),Q.isAbsolute(e)&&(e=Q.relative(Sr,e));const n={...Ar,...t};return(a,r)=>{
-const o=Object.keys(n).find((e=>n[e]===a));if(!o)throw new Error(`Could not locate: ${a}`);return{i18nId:`${(o in t?e:Q.relative(Sr,getModulePath({url:"core/lib/i18n/i18n.js"}))).replace(/\\/g,"/")} | ${o}`,values:r,formattedDefault:formatMessage(a,r,Dr)}}}function isStringOrIcuMessage(e){return"string"==typeof e||isIcuMessage(e)}const kr={didntCollectScreenshots:"Chrome didn't collect any screenshots during the page load. Please make sure there is content visible on the page, and then try re-running Lighthouse. ({errorCode})",badTraceRecording:"Something went wrong with recording the trace over your page load. Please run Lighthouse again. ({errorCode})",noFcp:"The page did not paint any content. Please ensure you keep the browser window in the foreground during the load and try again. ({errorCode})",noLcp:"The page did not display content that qualifies as a Largest Contentful Paint (LCP). Ensure the page has a valid LCP element and then try again. ({errorCode})",
-pageLoadTookTooLong:"Your page took too long to load. Please follow the opportunities in the report to reduce your page load time, and then try re-running Lighthouse. ({errorCode})",pageLoadFailed:"Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests.",pageLoadFailedWithStatusCode:"Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. (Status code: {statusCode})",pageLoadFailedWithDetails:"Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. (Details: {errorDetails})",pageLoadFailedInsecure:"The URL you have provided does not have a valid security certificate. {securityMessages}",
-pageLoadFailedInterstitial:"Chrome prevented page load with an interstitial. Make sure you are testing the correct URL and that the server is properly responding to all requests.",internalChromeError:"An internal Chrome error occurred. Please restart Chrome and try re-running Lighthouse.",requestContentTimeout:"Fetching resource content has exceeded the allotted time",notHtml:"The page provided is not HTML (served as MIME type {mimeType}).",urlInvalid:"The URL you have provided appears to be invalid.",protocolTimeout:"Waiting for DevTools protocol response has exceeded the allotted time. (Method: {protocolMethod})",dnsFailure:"DNS servers could not resolve the provided domain.",pageLoadFailedHung:"Lighthouse was unable to reliably load the URL you requested because the page stopped responding.",criTimeout:"Timeout waiting for initial Debugger Protocol connection.",missingRequiredArtifact:"Required {artifactName} gatherer did not run.",
-erroredRequiredArtifact:"Required {artifactName} gatherer encountered an error: {errorMessage}",oldChromeDoesNotSupportFeature:"This version of Chrome is too old to support '{featureName}'. Use a newer version to see full results."},xr=createIcuMessageFn("core/lib/lh-error.js",kr),Fr="__LighthouseErrorSentinel",Rr="__ErrorSentinel";class LighthouseError extends Error{constructor(e,t,n){super(e.code,n),this.name="LighthouseError",this.code=e.code,this.friendlyMessage=xr(e.message,{errorCode:this.code,...t}),this.lhrRuntimeError=!!e.lhrRuntimeError,t&&Object.assign(this,t),Error.captureStackTrace(this,LighthouseError)}static fromProtocolMessage(e,t){const n=Object.values(LighthouseError.errors).filter((e=>e.pattern)).find((e=>e.pattern&&e.pattern.test(t.message)));if(n)return new LighthouseError(n);let a=`(${e}): ${t.message}`;t.data&&(a+=` (${t.data})`);const r=new Error(`Protocol error ${a}`);return Object.assign(r,{protocolMethod:e,protocolError:t.message})}
-static stringifyReplacer(e){if(e instanceof LighthouseError){const{name:t,code:n,message:a,friendlyMessage:r,lhrRuntimeError:o,stack:i,cause:s,...c}=e;return{sentinel:Fr,code:n,stack:i,cause:s,properties:c}}if(e instanceof Error){const{message:t,stack:n,cause:a}=e,r=e.code;return{sentinel:Rr,message:t,code:r,stack:n,cause:a}}throw new Error("Invalid value for LighthouseError stringification")}static parseReviver(e,t){if("object"==typeof t&&null!==t){if(t.sentinel===Fr){const{code:e,stack:n,cause:a,properties:r}=t,o=LighthouseError.errors[e],i=new LighthouseError(o,r,{cause:a});return i.stack=n,i}if(t.sentinel===Rr){const{message:e,code:n,stack:a,cause:r}=t,o=new Error(e,r?{cause:r}:void 0);return Object.assign(o,{code:n,stack:a}),o}}return t}}const Ir={NO_SPEEDLINE_FRAMES:{code:"NO_SPEEDLINE_FRAMES",message:kr.didntCollectScreenshots,lhrRuntimeError:!0},SPEEDINDEX_OF_ZERO:{code:"SPEEDINDEX_OF_ZERO",message:kr.didntCollectScreenshots,lhrRuntimeError:!0},NO_SCREENSHOTS:{
-code:"NO_SCREENSHOTS",message:kr.didntCollectScreenshots,lhrRuntimeError:!0},INVALID_SPEEDLINE:{code:"INVALID_SPEEDLINE",message:kr.didntCollectScreenshots,lhrRuntimeError:!0},NO_TRACING_STARTED:{code:"NO_TRACING_STARTED",message:kr.badTraceRecording,lhrRuntimeError:!0},NO_RESOURCE_REQUEST:{code:"NO_RESOURCE_REQUEST",message:kr.badTraceRecording,lhrRuntimeError:!0},NO_NAVSTART:{code:"NO_NAVSTART",message:kr.badTraceRecording,lhrRuntimeError:!0},NO_FCP:{code:"NO_FCP",message:kr.noFcp,lhrRuntimeError:!0},NO_DCL:{code:"NO_DCL",message:kr.badTraceRecording,lhrRuntimeError:!0},NO_FMP:{code:"NO_FMP",message:kr.badTraceRecording},NO_LCP:{code:"NO_LCP",message:kr.noLcp},NO_LCP_ALL_FRAMES:{code:"NO_LCP_ALL_FRAMES",message:kr.noLcp},UNSUPPORTED_OLD_CHROME:{code:"UNSUPPORTED_OLD_CHROME",message:kr.oldChromeDoesNotSupportFeature},NO_TTI_CPU_IDLE_PERIOD:{code:"NO_TTI_CPU_IDLE_PERIOD",message:kr.pageLoadTookTooLong},NO_TTI_NETWORK_IDLE_PERIOD:{code:"NO_TTI_NETWORK_IDLE_PERIOD",
-message:kr.pageLoadTookTooLong},NO_DOCUMENT_REQUEST:{code:"NO_DOCUMENT_REQUEST",message:kr.pageLoadFailed,lhrRuntimeError:!0},FAILED_DOCUMENT_REQUEST:{code:"FAILED_DOCUMENT_REQUEST",message:kr.pageLoadFailedWithDetails,lhrRuntimeError:!0},ERRORED_DOCUMENT_REQUEST:{code:"ERRORED_DOCUMENT_REQUEST",message:kr.pageLoadFailedWithStatusCode,lhrRuntimeError:!0},INSECURE_DOCUMENT_REQUEST:{code:"INSECURE_DOCUMENT_REQUEST",message:kr.pageLoadFailedInsecure,lhrRuntimeError:!0},CHROME_INTERSTITIAL_ERROR:{code:"CHROME_INTERSTITIAL_ERROR",message:kr.pageLoadFailedInterstitial,lhrRuntimeError:!0},PAGE_HUNG:{code:"PAGE_HUNG",message:kr.pageLoadFailedHung,lhrRuntimeError:!0},NOT_HTML:{code:"NOT_HTML",message:kr.notHtml,lhrRuntimeError:!0},TRACING_ALREADY_STARTED:{code:"TRACING_ALREADY_STARTED",message:kr.internalChromeError,pattern:/Tracing.*started/,lhrRuntimeError:!0},PARSING_PROBLEM:{code:"PARSING_PROBLEM",message:kr.internalChromeError,pattern:/Parsing problem/,lhrRuntimeError:!0},READ_FAILED:{
-code:"READ_FAILED",message:kr.internalChromeError,pattern:/Read failed/,lhrRuntimeError:!0},INVALID_URL:{code:"INVALID_URL",message:kr.urlInvalid},PROTOCOL_TIMEOUT:{code:"PROTOCOL_TIMEOUT",message:kr.protocolTimeout,lhrRuntimeError:!0},DNS_FAILURE:{code:"DNS_FAILURE",message:kr.dnsFailure,lhrRuntimeError:!0},CRI_TIMEOUT:{code:"CRI_TIMEOUT",message:kr.criTimeout,lhrRuntimeError:!0},MISSING_REQUIRED_ARTIFACT:{code:"MISSING_REQUIRED_ARTIFACT",message:kr.missingRequiredArtifact},ERRORED_REQUIRED_ARTIFACT:{code:"ERRORED_REQUIRED_ARTIFACT",message:kr.erroredRequiredArtifact}};LighthouseError.errors=Ir,LighthouseError.NO_ERROR="NO_ERROR",LighthouseError.UNKNOWN_ERROR="UNKNOWN_ERROR";const Mr=["https:","http:","chrome:","chrome-extension:"],Lr=["data","https","wss","blob","chrome","chrome-extension","about","filesystem"],Nr=["localhost","127.0.0.1"],Pr=["blob","data","intent","file","filesystem","chrome-extension"];function rewriteChromeInternalUrl(e){
-return e&&e.startsWith("chrome://")?(e.endsWith("/")&&(e=e.replace(/\/$/,"")),e.replace(/^chrome:\/\/chrome\//,"chrome://")):e}class UrlUtils{static isValid(e){try{return new URL(e),!0}catch(e){return!1}}static hostsMatch(e,t){try{return new URL(e).host===new URL(t).host}catch(e){return!1}}static originsMatch(e,t){try{return new URL(e).origin===new URL(t).origin}catch(e){return!1}}static getOrigin(e){try{const t=new URL(e);return"chrome-extension:"===t.protocol?Util.getChromeExtensionOrigin(e):t.host&&t.origin||null}catch(e){return null}}static rootDomainsMatch(e,t){let n,a;try{n=Util.createOrReturnURL(e),a=Util.createOrReturnURL(t)}catch(e){return!1}if(!n.hostname||!a.hostname)return!1;return Util.getRootDomain(n)===Util.getRootDomain(a)}static getURLDisplayName(e,t){return Util.getURLDisplayName(new URL(e),t)}static elideDataURI(e){try{return"data:"===new URL(e).protocol?Util.truncate(e,100):e}catch(t){return e}}static equalWithExcludedFragments(e,t){
-[e,t]=[e,t].map(rewriteChromeInternalUrl);try{const n=new URL(e);n.hash="";const a=new URL(t);return a.hash="",n.href===a.href}catch(e){return!1}}static isProtocolAllowed(e){try{const t=new URL(e);return Mr.includes(t.protocol)}catch(e){return!1}}static isLikeLocalhost(e){return Nr.includes(e)||e.endsWith(".localhost")}static isSecureScheme(e){return Lr.includes(e)}static isNonNetworkProtocol(e){const t=e.includes(":")?e.slice(0,e.indexOf(":")):e;return Pr.includes(t)}static guessMimeType(e){let t;try{t=new URL(e)}catch{return}if("data:"===t.protocol){const e=t.pathname.match(/^(image\/(png|jpeg|svg\+xml|webp|gif|avif))[;,]/);if(!e)return;return e[1]}const n=t.pathname.toLowerCase().match(/\.(png|jpeg|jpg|svg|webp|gif|avif)$/);if(!n)return;const a=n[1];return"svg"===a?"image/svg+xml":"jpg"===a?"image/jpeg":`image/${a}`}static normalizeUrl(e){if(e&&this.isValid(e)&&this.isProtocolAllowed(e))return new URL(e).href;throw new LighthouseError(LighthouseError.errors.INVALID_URL)}}
-UrlUtils.INVALID_URL_DEBUG_STRING="Lighthouse was unable to determine the URL of some script executions. It's possible a Chrome extension or other eval'd code is the source.";const Or="X-TCPMs",Br="X-SSLMs",Ur="X-RequestMs",jr="X-ResponseMs",zr="X-TotalMs",qr="X-TotalFetchedSize",Wr="X-ProtocolIsH2",$r={XHR:"XHR",Fetch:"Fetch",EventSource:"EventSource",Script:"Script",Stylesheet:"Stylesheet",Image:"Image",Media:"Media",Font:"Font",Document:"Document",TextTrack:"TextTrack",WebSocket:"WebSocket",Other:"Other",Manifest:"Manifest",SignedExchange:"SignedExchange",Ping:"Ping",Preflight:"Preflight",CSPViolationReport:"CSPViolationReport",Prefetch:"Prefetch"};class NetworkRequest{constructor(){this.requestId="",this.connectionId="0",this.connectionReused=!1,this.url="",this.protocol="",this.isSecure=!1,this.isValid=!1,this.parsedURL={scheme:""},this.documentURL="",this.rendererStartTime=-1,this.networkRequestTime=-1,this.responseHeadersEndTime=-1,this.networkEndTime=-1,this.transferSize=0,
-this.resourceSize=0,this.fromDiskCache=!1,this.fromMemoryCache=!1,this.fromPrefetchCache=!1,this.lrStatistics=void 0,this.finished=!1,this.requestMethod="",this.statusCode=-1,this.redirectSource=void 0,this.redirectDestination=void 0,this.redirects=void 0,this.failed=!1,this.localizedFailDescription="",this.initiator={type:"other"},this.timing=void 0,this.resourceType=void 0,this.mimeType="",this.priority="Low",this.initiatorRequest=void 0,this.responseHeaders=[],this.responseHeadersText="",this.fetchedViaServiceWorker=!1,this.frameId="",this.sessionId=void 0,this.sessionTargetType=void 0,this.isLinkPreload=!1}hasErrorStatusCode(){return this.statusCode>=400}setInitiatorRequest(e){this.initiatorRequest=e}onRequestWillBeSent(e){let t;this.requestId=e.requestId;try{t=new URL(e.request.url)}catch(e){return}this.url=e.request.url,this.documentURL=e.documentURL,this.parsedURL={scheme:t.protocol.split(":")[0],host:t.hostname,securityOrigin:t.origin},
-this.isSecure=UrlUtils.isSecureScheme(this.parsedURL.scheme),this.rendererStartTime=1e3*e.timestamp,this.networkRequestTime=this.rendererStartTime,this.requestMethod=e.request.method,this.initiator=e.initiator,this.resourceType=e.type&&$r[e.type],this.priority=e.request.initialPriority,this.frameId=e.frameId,this.isLinkPreload="preload"===e.initiator.type||!!e.request.isLinkPreload,this.isValid=!0}onRequestServedFromCache(){this.fromMemoryCache=!0}onResponseReceived(e){this._onResponse(e.response,e.timestamp,e.type),this._updateProtocolForLightrider(),this.frameId=e.frameId}onDataReceived(e){this.resourceSize+=e.dataLength,-1!==e.encodedDataLength&&(this.transferSize+=e.encodedDataLength)}onLoadingFinished(e){this.finished||(this.finished=!0,this.networkEndTime=1e3*e.timestamp,e.encodedDataLength>=0&&(this.transferSize=e.encodedDataLength),this._updateResponseHeadersEndTimeIfNecessary(),this._backfillReceiveHeaderStartTiming(),this._updateTransferSizeForLightrider(),
-this._updateTimingsForLightrider())}onLoadingFailed(e){this.finished||(this.finished=!0,this.networkEndTime=1e3*e.timestamp,this.failed=!0,this.resourceType=e.type&&$r[e.type],this.localizedFailDescription=e.errorText,this._updateResponseHeadersEndTimeIfNecessary(),this._backfillReceiveHeaderStartTiming(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onResourceChangedPriority(e){this.priority=e.newPriority}onRedirectResponse(e){if(!e.redirectResponse)throw new Error("Missing redirectResponse data");this._onResponse(e.redirectResponse,e.timestamp,e.type),this.resourceType=void 0,this.finished=!0,this.networkEndTime=1e3*e.timestamp,this._updateResponseHeadersEndTimeIfNecessary(),this._backfillReceiveHeaderStartTiming()}setSession(e){this.sessionId=e}get isOutOfProcessIframe(){return"iframe"===this.sessionTargetType}_onResponse(e,t,n){this.url=e.url,this.connectionId=String(e.connectionId),this.connectionReused=e.connectionReused,
-e.protocol&&(this.protocol=e.protocol),this.responseHeadersEndTime=1e3*t,this.transferSize=e.encodedDataLength,"boolean"==typeof e.fromDiskCache&&(this.fromDiskCache=e.fromDiskCache),"boolean"==typeof e.fromPrefetchCache&&(this.fromPrefetchCache=e.fromPrefetchCache),this.statusCode=e.status,this.timing=e.timing,n&&(this.resourceType=$r[n]),this.mimeType=e.mimeType,this.responseHeadersText=e.headersText||"",this.responseHeaders=NetworkRequest._headersDictToHeadersArray(e.headers),this.fetchedViaServiceWorker=!!e.fromServiceWorker,this.fromMemoryCache&&(this.timing=void 0),this.timing&&this._recomputeTimesWithResourceTiming(this.timing)}_recomputeTimesWithResourceTiming(e){if(0===e.requestTime||-1===e.receiveHeadersEnd)return;this.networkRequestTime=1e3*e.requestTime;const t=this.networkRequestTime+e.receiveHeadersEnd,n=this.responseHeadersEndTime;this.responseHeadersEndTime=t,this.responseHeadersEndTime=Math.min(this.responseHeadersEndTime,n),
-this.responseHeadersEndTime=Math.max(this.responseHeadersEndTime,this.networkRequestTime),this.networkEndTime=Math.max(this.networkEndTime,this.responseHeadersEndTime)}_updateResponseHeadersEndTimeIfNecessary(){this.responseHeadersEndTime=Math.min(this.networkEndTime,this.responseHeadersEndTime)}_updateTransferSizeForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===qr));if(!e)return;const t=parseFloat(e.value);isNaN(t)||(this.transferSize=t)}_updateProtocolForLightrider(){globalThis.isLightrider&&this.responseHeaders.some((e=>e.name===Wr))&&(this.protocol="h2")}_backfillReceiveHeaderStartTiming(){this.timing&&void 0===this.timing.receiveHeadersStart&&(this.timing.receiveHeadersStart=this.timing.receiveHeadersEnd)}_updateTimingsForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===zr));if(!e)return
-;const t=parseInt(e.value),n=this.responseHeaders.find((e=>e.name===Or)),a=this.responseHeaders.find((e=>e.name===Br)),r=this.responseHeaders.find((e=>e.name===Ur)),o=this.responseHeaders.find((e=>e.name===jr)),i=n?Math.max(0,parseInt(n.value)):0,s=a?Math.max(0,parseInt(a.value)):0,c=r?Math.max(0,parseInt(r.value)):0,l=o?Math.max(0,parseInt(o.value)):0;i+c+l===t&&(s>i||(this.lrStatistics={endTimeDeltaMs:this.networkEndTime-(this.networkRequestTime+t),TCPMs:i,requestMs:c,responseMs:l}))}static getRequestIdForBackend(e){return e.replace(/(:redirect)+$/,"")}static _headersDictToHeadersArray(e){const t=[];for(const n of Object.keys(e)){const a=e[n].split("\n");for(let e=0;e<a.length;++e)t.push({name:n,value:a[e]})}return t}static get TYPES(){return $r}static isNonNetworkRequest(e){return UrlUtils.isNonNetworkProtocol(e.protocol)||UrlUtils.isNonNetworkProtocol(e.parsedURL.scheme)}static isSecureRequest(e){
-return UrlUtils.isSecureScheme(e.parsedURL.scheme)||UrlUtils.isSecureScheme(e.protocol)||UrlUtils.isLikeLocalhost(e.parsedURL.host)||NetworkRequest.isHstsRequest(e)}static isHstsRequest(e){const t=e.redirectDestination;if(!t)return!1;return"HSTS"===e.responseHeaders.find((e=>"Non-Authoritative-Reason"===e.name))?.value&&NetworkRequest.isSecureRequest(t)}static getResourceSizeOnNetwork(e){return Math.min(e.resourceSize||0,e.transferSize||1/0)}}async function fetchResponseBodyFromCache(e,t,n=1e3){t=NetworkRequest.getRequestIdForBackend(t),e.setNextProtocolTimeout(n);return(await e.sendCommand("Network.getResponseBody",{requestId:t})).body}NetworkRequest.HEADER_TCP=Or,NetworkRequest.HEADER_SSL=Br,NetworkRequest.HEADER_REQ=Ur,NetworkRequest.HEADER_RES=jr,NetworkRequest.HEADER_TOTAL=zr,NetworkRequest.HEADER_FETCHED_SIZE=qr,NetworkRequest.HEADER_PROTOCOL_IS_H2=Wr;class FRGatherer{meta={supportedModes:[]};startInstrumentation(e){}startSensitiveInstrumentation(e){}
-stopSensitiveInstrumentation(e){}stopInstrumentation(e){}getArtifact(e){}get name(){let e=this.constructor.name;return e.includes("$")&&(e=e.substr(0,e.indexOf("$"))),e}async beforePass(e){await this.startInstrumentation({...e,dependencies:{}}),await this.startSensitiveInstrumentation({...e,dependencies:{}})}pass(e){}async afterPass(e,t){if("dependencies"in this.meta)throw Error("Gatherer with dependencies should override afterPass");return await this.stopSensitiveInstrumentation({...e,dependencies:{}}),await this.stopInstrumentation({...e,dependencies:{}}),this.getArtifact({...e,dependencies:{}})}}class DevtoolsLog extends FRGatherer{static symbol=Symbol("DevtoolsLog");meta={symbol:DevtoolsLog.symbol,supportedModes:["timespan","navigation"]};constructor(){super(),this._messageLog=new DevtoolsMessageLog(/^(Page|Network|Target|Runtime)\./),this._onProtocolMessage=e=>this._messageLog.record(e)}async startSensitiveInstrumentation({driver:e}){this._messageLog.reset(),
-this._messageLog.beginRecording(),e.targetManager.on("protocolevent",this._onProtocolMessage),await e.defaultSession.sendCommand("Page.enable")}async stopSensitiveInstrumentation({driver:e}){this._messageLog.endRecording(),e.targetManager.off("protocolevent",this._onProtocolMessage)}async getArtifact(){return this._messageLog.messages}}class DevtoolsMessageLog{constructor(e){this._filter=e,this._messages=[],this._isRecording=!1}get messages(){return this._messages}reset(){this._messages=[]}beginRecording(){this._isRecording=!0}endRecording(){this._isRecording=!1}record(e){this._isRecording&&"string"==typeof e.method&&(this._filter&&!this._filter.test(e.method)||this._messages.push(e))}}var Vr=Object.freeze({__proto__:null,default:DevtoolsLog,DevtoolsMessageLog});const Hr=/^(chrome|https?):/;class TraceProcessor{static get TIMESPAN_MARKER_ID(){return"__lighthouseTimespanStart__"}static createNoNavstartError(){return new Error("No navigationStart event found")}
-static createNoResourceSendRequestError(){return new Error("No ResourceSendRequest event found")}static createNoTracingStartedError(){return new Error("No tracingStartedInBrowser event found")}static createNoFirstContentfulPaintError(){return new Error("No FirstContentfulPaint event found")}static createNoLighthouseMarkerError(){return new Error("No Lighthouse timespan marker event found")}static _isNavigationStartOfInterest(e){return"navigationStart"===e.name&&(void 0===e.args.data?.documentLoaderURL||!!e.args.data?.documentLoaderURL&&Hr.test(e.args.data.documentLoaderURL))}static _sortTimestampEventGroup(e,t,n,a){const lookupArrayIndexByTsIndex=e=>t[e],lookupEventByTsIndex=e=>a[lookupArrayIndexByTsIndex(e)],r=[],o=[],i=[];for(const t of e){const e=lookupArrayIndexByTsIndex(t),n=lookupEventByTsIndex(t);"E"===n.ph?r.push(e):"X"===n.ph||"B"===n.ph?o.push(e):i.push(e)}const s=new Map;for(const r of o){const o=a[r];if("X"===o.ph)s.set(r,o.dur);else{let a=Number.MAX_SAFE_INTEGER,i=0
-;for(let r=n+e.length;r<t.length;r++){const e=lookupEventByTsIndex(r);if(e.name===o.name&&e.pid===o.pid&&e.tid===o.tid){if("E"===e.ph&&0===i){a=e.ts-o.ts;break}"E"===e.ph?i--:"B"===e.ph&&i++}}s.set(r,a)}}return o.sort(((e,t)=>(s.get(t)||0)-(s.get(e)||0)||e-t)),i.sort(((e,t)=>e-t)),[...r,...o,...i]}static filteredTraceSort(e,t){const n=[];for(let a=0;a<e.length;a++)t(e[a])&&n.push(a);n.sort(((t,n)=>e[t].ts-e[n].ts));for(let t=0;t<n.length-1;t++){const a=e[n[t]].ts,r=[t];for(let o=t+1;o<n.length&&e[n[o]].ts===a;o++)r.push(o);if(1===r.length)continue;const o=TraceProcessor._sortTimestampEventGroup(r,n,t,e);n.splice(t,o.length,...o),t+=r.length-1}const a=[];for(let t=0;t<n.length;t++)a.push(e[n[t]]);return a}static assertHasToplevelEvents(e){if(!e.some(this.isScheduleableTask))throw new Error("Could not find any top level events")}static _riskPercentiles(e,t,n,a=0){let r=0;for(let t=0;t<e.length;t++)r+=e[t];r-=a;let o=t-r,i=0,s=o;const c=[];let l=-1,u=e.length+1;a>0&&u--;for(const r of n){
-const n=r*t;for(;s<n&&l<e.length-1;)o+=i,u-=i<0?-1:1,a>0&&a<e[l+1]?(i=-a,a=0):(l++,i=e[l]),s=o+Math.abs(i)*u;c.push({percentile:r,time:Math.max(0,(n-o)/u)+16})}return c}static getRiskToResponsiveness(e,t,n,a=[.5,.75,.9,.99,1]){const r=n-t;a.sort(((e,t)=>e-t));const o=this.getMainThreadTopLevelEventDurations(e,t,n);return this._riskPercentiles(o.durations,r,a,o.clippedLength)}static getMainThreadTopLevelEventDurations(e,t=0,n=1/0){const a=[];let r=0;for(const o of e){if(o.end<t||o.start>n)continue;let e=o.duration,i=o.start;i<t&&(i=t,e=o.end-t),o.end>n&&(r=e-(n-i)),a.push(e)}return a.sort(((e,t)=>e-t)),{durations:a,clippedLength:r}}static getMainThreadTopLevelEvents(e,t=0,n=1/0){const a=[];for(const r of e.mainThreadEvents){if(!this.isScheduleableTask(r)||!r.dur)continue;const o=(r.ts-e.timeOriginEvt.ts)/1e3,i=(r.ts+r.dur-e.timeOriginEvt.ts)/1e3;o>n||i<t||a.push({start:o,end:i,duration:r.dur/1e3})}return a}static findMainFrameIds(e){
-const t=e.find((e=>"TracingStartedInBrowser"===e.name));if(t?.args.data?.frames){const e=t.args.data.frames.find((e=>!e.parent)),n=e?.frame,a=e?.processId;if(a&&n)return{startingPid:a,frameId:n}}const n=e.find((e=>"TracingStartedInPage"===e.name));if(n?.args?.data){const e=n.args.data.page;if(e)return{startingPid:n.pid,frameId:e}}const a=e.find((e=>this._isNavigationStartOfInterest(e)&&e.args.data?.isLoadingMainFrame)),r=e.find((e=>"ResourceSendRequest"===e.name));if(a?.args?.data&&r&&r.pid===a.pid&&r.tid===a.tid){const e=a.args.frame;if(e)return{startingPid:a.pid,frameId:e}}throw this.createNoTracingStartedError()}static findMainFramePidTids(e,t){const n=t.filter((t=>("FrameCommittedInBrowser"===t.name||"ProcessReadyInBrowser"===t.name)&&t.args?.data?.frame===e.frameId&&t?.args?.data?.processId)),a=n.length?n.map((e=>e?.args?.data?.processId)):[e.startingPid],r=new Map;for(const e of new Set(a)){const n=t.filter((t=>"__metadata"===t.cat&&t.pid===e&&"M"===t.ph&&"thread_name"===t.name))
-;let a=n.find((e=>"CrRendererMain"===e.args.name));a||(a=n.find((e=>"CrBrowserMain"===e.args.name)));const o=a?.tid;if(!o)throw new Error("Unable to determine tid for renderer process");r.set(e,o)}return r}static isScheduleableTask(e){return"RunTask"===e.name||"ThreadControllerImpl::RunTask"===e.name||"ThreadControllerImpl::DoWork"===e.name||"TaskQueueManager::ProcessTaskFromWorkQueue"===e.name}static isLCPEvent(e){return("largestContentfulPaint::Invalidate"===e.name||"largestContentfulPaint::Candidate"===e.name)&&Boolean(e.args?.frame)}static isLCPCandidateEvent(e){return Boolean("largestContentfulPaint::Candidate"===e.name&&e.args?.frame&&e.args.data&&void 0!==e.args.data.size)}static getFrameId(e){return e.args?.data?.frame||e.args.data?.frameID||e.args.frame}static computeValidLCPAllFrames(e,t){const n=e.filter(this.isLCPEvent).reverse(),a=new Map;for(const e of n){if(e.ts<=t.ts)break;const n=e.args.frame;a.has(n)||a.set(n,e)}let r
-;for(const e of a.values())this.isLCPCandidateEvent(e)&&(!r||e.args.data.size>r.args.data.size)&&(r=e);return{lcp:r,invalidated:Boolean(!r&&a.size)}}static resolveRootFrames(e){const t=new Map;for(const n of e)n.parent&&t.set(n.id,n.parent);const n=new Map;for(const a of e){let e=a.id;for(;t.has(e);)e=t.get(e);if(void 0===e)throw new Error("Unexpected undefined frameId");n.set(a.id,e)}return n}static processTrace(e,t){const{timeOriginDeterminationMethod:n="auto"}=t||{},a=this.filteredTraceSort(e.traceEvents,(e=>e.cat.includes("blink.user_timing")||e.cat.includes("loading")||e.cat.includes("devtools.timeline")||"__metadata"===e.cat)),r=this.findMainFrameIds(a),o=this.findMainFramePidTids(r,a),i=TraceProcessor.filteredTraceSort(e.traceEvents,(e=>o.has(e.pid))),s=new Map,c=a.find((e=>"TracingStartedInBrowser"===e.name))?.args?.data?.frames;if(c)for(const e of c)s.set(e.frame,{id:e.frame,url:e.url,parent:e.parent})
-;a.filter((e=>Boolean("FrameCommittedInBrowser"===e.name&&e.args.data?.frame&&void 0!==e.args.data.url))).forEach((e=>{s.set(e.args.data.frame,{id:e.args.data.frame,url:e.args.data.url,parent:e.args.data.parent})}));const l=[...s.values()],u=this.resolveRootFrames(l),d=[...u.entries()].filter((([,e])=>e===r.frameId)).map((([e])=>e));const m=a.filter((e=>function associatedToMainFrame(e){return TraceProcessor.getFrameId(e)===r.frameId}(e)));let p=[];u.has(r.frameId)?p=a.filter((e=>function associatedToAllFrames(e){const t=TraceProcessor.getFrameId(e);return!!t&&d.includes(t)}(e))):(Log.warn("TraceProcessor","frameTreeEvents may be incomplete, make sure the trace has frame events"),u.set(r.frameId,r.frameId),p=m);const h=this.computeTimeOrigin({keyEvents:a,frameEvents:m,mainFrameInfo:r},n),f=i.filter((e=>e.tid===o.get(e.pid))),y=this.computeTraceEnd(e.traceEvents,h);return{frames:l,mainThreadEvents:f,frameEvents:m,frameTreeEvents:p,processEvents:i,mainFrameInfo:r,timeOriginEvt:h,
-timings:{timeOrigin:0,traceEnd:y.timing},timestamps:{timeOrigin:h.ts,traceEnd:y.timestamp},_keyEvents:a,_rendererPidToTid:o}}static processNavigation(e){const{frameEvents:t,frameTreeEvents:n,timeOriginEvt:a,timings:r,timestamps:o}=e,i=this.computeNavigationTimingsForFrame(t,{timeOriginEvt:a}),s=n.find((e=>"firstContentfulPaint"===e.name&&e.ts>a.ts));if(!s)throw this.createNoFirstContentfulPaintError();const c=this.computeValidLCPAllFrames(n,a).lcp,getTiming=e=>(e-a.ts)/1e3;return{timings:{timeOrigin:r.timeOrigin,firstPaint:i.timings.firstPaint,firstContentfulPaint:i.timings.firstContentfulPaint,firstContentfulPaintAllFrames:getTiming(s.ts),firstMeaningfulPaint:i.timings.firstMeaningfulPaint,largestContentfulPaint:i.timings.largestContentfulPaint,largestContentfulPaintAllFrames:(l=c?.ts,void 0===l?void 0:getTiming(l)),load:i.timings.load,domContentLoaded:i.timings.domContentLoaded,traceEnd:r.traceEnd},timestamps:{timeOrigin:o.timeOrigin,firstPaint:i.timestamps.firstPaint,
-firstContentfulPaint:i.timestamps.firstContentfulPaint,firstContentfulPaintAllFrames:s.ts,firstMeaningfulPaint:i.timestamps.firstMeaningfulPaint,largestContentfulPaint:i.timestamps.largestContentfulPaint,largestContentfulPaintAllFrames:c?.ts,load:i.timestamps.load,domContentLoaded:i.timestamps.domContentLoaded,traceEnd:o.traceEnd},firstPaintEvt:i.firstPaintEvt,firstContentfulPaintEvt:i.firstContentfulPaintEvt,firstContentfulPaintAllFramesEvt:s,firstMeaningfulPaintEvt:i.firstMeaningfulPaintEvt,largestContentfulPaintEvt:i.largestContentfulPaintEvt,largestContentfulPaintAllFramesEvt:c,loadEvt:i.loadEvt,domContentLoadedEvt:i.domContentLoadedEvt,fmpFellBack:i.fmpFellBack,lcpInvalidated:i.lcpInvalidated};var l}static computeTraceEnd(e,t){let n=-1/0;for(const t of e)n=Math.max(t.ts+(t.dur||0),n);return{timestamp:n,timing:(n-t.ts)/1e3}}static computeTimeOrigin(e,t){
-const lastNavigationStart=()=>e.frameEvents.filter(this._isNavigationStartOfInterest).pop(),lighthouseMarker=()=>e.keyEvents.find((e=>"clock_sync"===e.name&&e.args.sync_id===TraceProcessor.TIMESPAN_MARKER_ID));switch(t){case"firstResourceSendRequest":{const t=e.keyEvents.find((t=>{if("ResourceSendRequest"!==t.name)return!1;return(t.args.data||{}).frame===e.mainFrameInfo.frameId}));if(!t)throw this.createNoResourceSendRequestError();return t}case"lastNavigationStart":{const e=lastNavigationStart();if(!e)throw this.createNoNavstartError();return e}case"lighthouseMarker":{const e=lighthouseMarker();if(!e)throw this.createNoLighthouseMarkerError();return e}case"auto":{const e=lighthouseMarker()||lastNavigationStart();if(!e)throw this.createNoNavstartError();return e}}}static computeNavigationTimingsForFrame(e,t){const{timeOriginEvt:n}=t,a=e.find((e=>"firstPaint"===e.name&&e.ts>n.ts)),r=e.find((e=>"firstContentfulPaint"===e.name&&e.ts>n.ts))
-;if(!r)throw this.createNoFirstContentfulPaintError();let o=e.find((e=>"firstMeaningfulPaint"===e.name&&e.ts>n.ts)),i=!1;if(!o){const t="firstMeaningfulPaintCandidate";i=!0,Log.verbose("TraceProcessor",`No firstMeaningfulPaint found, falling back to last ${t}`);const n=e.filter((e=>e.name===t)).pop();n||Log.verbose("TraceProcessor","No `firstMeaningfulPaintCandidate` events found in trace"),o=n}const s=this.computeValidLCPAllFrames(e,n),c=e.find((e=>"loadEventEnd"===e.name&&e.ts>n.ts)),l=e.find((e=>"domContentLoadedEventEnd"===e.name&&e.ts>n.ts)),getTimestamp=e=>e?.ts,u={timeOrigin:n.ts,firstPaint:getTimestamp(a),firstContentfulPaint:r.ts,firstMeaningfulPaint:getTimestamp(o),largestContentfulPaint:getTimestamp(s.lcp),load:getTimestamp(c),domContentLoaded:getTimestamp(l)},getTiming=e=>(e-n.ts)/1e3,maybeGetTiming=e=>void 0===e?void 0:getTiming(e);return{timings:{timeOrigin:0,firstPaint:maybeGetTiming(u.firstPaint),firstContentfulPaint:getTiming(u.firstContentfulPaint),
-firstMeaningfulPaint:maybeGetTiming(u.firstMeaningfulPaint),largestContentfulPaint:maybeGetTiming(u.largestContentfulPaint),load:maybeGetTiming(u.load),domContentLoaded:maybeGetTiming(u.domContentLoaded)},timestamps:u,timeOriginEvt:n,firstPaintEvt:a,firstContentfulPaintEvt:r,firstMeaningfulPaintEvt:o,largestContentfulPaintEvt:s.lcp,loadEvt:c,domContentLoadedEvt:l,fmpFellBack:i,lcpInvalidated:s.invalidated}}}class Trace extends FRGatherer{_trace={traceEvents:[]};static getDefaultTraceCategories(){return["-*","disabled-by-default-lighthouse","loading","v8","v8.execute","blink.user_timing","blink.console","devtools.timeline","disabled-by-default-devtools.timeline","disabled-by-default-devtools.screenshot","disabled-by-default-devtools.timeline.stack","disabled-by-default-devtools.timeline.frame","latencyInfo"]}static async endTraceAndCollectEvents(e){const t=[],dataListener=function(e){t.push(...e.value)};return e.on("Tracing.dataCollected",dataListener),new Promise(((n,a)=>{
-e.once("Tracing.tracingComplete",(a=>{e.off("Tracing.dataCollected",dataListener),n({traceEvents:t})})),e.sendCommand("Tracing.end").catch(a)}))}static symbol=Symbol("Trace");meta={symbol:Trace.symbol,supportedModes:["timespan","navigation"]};async startSensitiveInstrumentation({driver:e,gatherMode:t,settings:n}){const a=Trace.getDefaultTraceCategories().concat(n.additionalTraceCategories||[]);await e.defaultSession.sendCommand("Page.enable"),await e.defaultSession.sendCommand("Tracing.start",{categories:a.join(","),options:"sampling-frequency=10000"}),"timespan"===t&&await e.defaultSession.sendCommand("Tracing.recordClockSyncMarker",{syncId:TraceProcessor.TIMESPAN_MARKER_ID})}async stopSensitiveInstrumentation({driver:e}){this._trace=await Trace.endTraceAndCollectEvents(e.defaultSession)}getArtifact(){return this._trace}}var Gr=Object.freeze({__proto__:null,default:Trace});const Yr=3.75,Kr=.9,Jr={DEVTOOLS_RTT_ADJUSTMENT_FACTOR:Yr,DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR:Kr,mobileSlow4G:{
-rttMs:150,throughputKbps:1638.4,requestLatencyMs:562.5,downloadThroughputKbps:1474.5600000000002,uploadThroughputKbps:675,cpuSlowdownMultiplier:4},mobileRegular3G:{rttMs:300,throughputKbps:700,requestLatencyMs:1125,downloadThroughputKbps:630,uploadThroughputKbps:630,cpuSlowdownMultiplier:4},desktopDense4G:{rttMs:40,throughputKbps:10240,cpuSlowdownMultiplier:1,requestLatencyMs:0,downloadThroughputKbps:0,uploadThroughputKbps:0}},Xr={mobile:{mobile:!0,width:412,height:823,deviceScaleFactor:1.75,disabled:!1},desktop:{mobile:!1,width:1350,height:940,deviceScaleFactor:1,disabled:!1}},Zr={mobile:"Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36",desktop:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"},Qr={output:"json",maxWaitForFcp:3e4,maxWaitForLoad:45e3,pauseAfterFcpMs:1e3,pauseAfterLoadMs:1e3,networkQuietThresholdMs:1e3,
-cpuQuietThresholdMs:1e3,formFactor:"mobile",throttling:Jr.mobileSlow4G,throttlingMethod:"simulate",screenEmulation:Xr.mobile,emulatedUserAgent:Zr.mobile,auditMode:!1,gatherMode:!1,disableStorageReset:!1,debugNavigation:!1,channel:"node",usePassiveGathering:!1,disableFullPageScreenshot:!1,skipAboutBlank:!1,blankPage:"about:blank",budgets:null,locale:"en-US",blockedUrlPatterns:null,additionalTraceCategories:null,extraHeaders:null,precomputedLanternData:null,onlyAudits:null,onlyCategories:null,skipAudits:null},eo={passName:"defaultPass",loadFailureMode:"fatal",recordTrace:!1,useThrottling:!1,pauseAfterFcpMs:0,pauseAfterLoadMs:0,networkQuietThresholdMs:0,cpuQuietThresholdMs:0,blockedUrlPatterns:[],blankPage:"about:blank",gatherers:[]},to={id:"default",loadFailureMode:"fatal",disableThrottling:!1,disableStorageReset:!1,pauseAfterFcpMs:0,pauseAfterLoadMs:0,networkQuietThresholdMs:0,cpuQuietThresholdMs:0,blockedUrlPatterns:[],blankPage:"about:blank",artifacts:[]},no={pauseAfterFcpMs:5250,
-pauseAfterLoadMs:5250,networkQuietThresholdMs:5250,cpuQuietThresholdMs:5250};var ao=Object.freeze({__proto__:null,throttling:Jr,screenEmulationMetrics:Xr,userAgents:Zr,defaultSettings:Qr,defaultPassConfig:eo,defaultNavigationConfig:to,nonSimulatedPassConfigOverrides:no});const ro={warningSlowHostCpu:"The tested device appears to have a slower CPU than  Lighthouse expects. This can negatively affect your performance score. Learn more about [calibrating an appropriate CPU slowdown multiplier](https://github.com/GoogleChrome/lighthouse/blob/main/docs/throttling.md#cpu-throttling)."},oo=createIcuMessageFn("core/gather/driver/environment.js",ro);async function getBrowserVersion(e){const t={msg:"Getting browser version",id:"lh:gather:getVersion"};Log.time(t,"verbose");const n=await e.sendCommand("Browser.getVersion"),a=n.product.match(/\/(\d+)/),r=a?parseInt(a[1]):0;return Log.timeEnd(t),Object.assign(n,{milestone:r})}async function getBenchmarkIndex(e){const t={msg:"Benchmarking machine",
-id:"lh:gather:getBenchmarkIndex"};Log.time(t);const n=await e.evaluate(or.computeBenchmarkIndex,{args:[]});return Log.timeEnd(t),n}function getSlowHostCpuWarning(e){const{settings:t,baseArtifacts:n}=e,{throttling:a,throttlingMethod:r}=t,o=Qr.throttling;if("cli"!==t.channel)return;const i="simulate"===r||"devtools"===r,s=a.cpuSlowdownMultiplier===o.cpuSlowdownMultiplier;return!i||!s||n.BenchmarkIndex>1e3?void 0:oo(ro.warningSlowHostCpu)}function getEnvironmentWarnings(e){return[getSlowHostCpuWarning(e)].filter((e=>!!e))}const io={warningData:"{locationCount, plural,\n    =1 {There may be stored data affecting loading performance in this location: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n    other {There may be stored data affecting loading performance in these locations: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n  }",
-warningCacheTimeout:"Clearing the browser cache timed out. Try auditing this page again and file a bug if the issue persists.",warningOriginDataTimeout:"Clearing the origin data timed out. Try auditing this page again and file a bug if the issue persists."},so=createIcuMessageFn("core/gather/driver/storage.js",io);async function clearDataForOrigin(e,t){const n={msg:"Cleaning origin data",id:"lh:storage:clearDataForOrigin"};Log.time(n);const a=[],r=new URL(t).origin,o=["file_systems","shader_cache","service_workers","cache_storage"].join(",");e.setNextProtocolTimeout(5e3);try{await e.sendCommand("Storage.clearDataForOrigin",{origin:r,storageTypes:o})}catch(e){if("PROTOCOL_TIMEOUT"!==e.code)throw e;Log.warn("Driver","clearDataForOrigin timed out"),a.push(so(io.warningOriginDataTimeout))}finally{Log.timeEnd(n)}return a}const co={latency:0,downloadThroughput:0,uploadThroughput:0,offline:!1},lo={rate:1};function parseUseragentIntoMetadata(e,t){
-const n=e.match(/Chrome\/([\d.]+)/)?.[1]||"99.0.1234.0",[a]=n.split(".",1),r="mobile"===t;return{brands:[{brand:"Chromium",version:a},{brand:"Google Chrome",version:a},{brand:"Lighthouse",version:_r}],fullVersion:n,...r?{platform:"Android",platformVersion:"11.0",architecture:"",model:"moto g power (2022)"}:{platform:"macOS",platformVersion:"10.15.7",architecture:"x86",model:""},mobile:r}}async function emulate(e,t){if(!1!==t.emulatedUserAgent){const n=t.emulatedUserAgent;await e.sendCommand("Network.setUserAgentOverride",{userAgent:n,userAgentMetadata:parseUseragentIntoMetadata(n,t.formFactor)})}if(!0!==t.screenEmulation.disabled){const{width:n,height:a,deviceScaleFactor:r,mobile:o}=t.screenEmulation,i={width:n,height:a,deviceScaleFactor:r,mobile:o};await e.sendCommand("Emulation.setDeviceMetricsOverride",i),await e.sendCommand("Emulation.setTouchEmulationEnabled",{enabled:i.mobile})}}async function clearThrottling(e){await Promise.all([clearNetworkThrottling(e),clearCPUThrottling(e)])
-}function enableNetworkThrottling(e,t){const n={offline:!1,latency:t.requestLatencyMs||0,downloadThroughput:t.downloadThroughputKbps||0,uploadThroughput:t.uploadThroughputKbps||0};return n.downloadThroughput=Math.floor(1024*n.downloadThroughput/8),n.uploadThroughput=Math.floor(1024*n.uploadThroughput/8),e.sendCommand("Network.emulateNetworkConditions",n)}function clearNetworkThrottling(e){return e.sendCommand("Network.emulateNetworkConditions",co)}function enableCPUThrottling(e,t){const n=t.cpuSlowdownMultiplier;return e.sendCommand("Emulation.setCPUThrottlingRate",{rate:n})}function clearCPUThrottling(e){return e.sendCommand("Emulation.setCPUThrottlingRate",lo)}async function enableAsyncStacks(e){const enable=async()=>{await e.sendCommand("Debugger.enable"),await e.sendCommand("Debugger.setSkipAllPauses",{skip:!0}),await e.sendCommand("Debugger.setAsyncCallStackDepth",{maxDepth:8})};function onDebuggerPaused(){e.sendCommand("Debugger.resume")}function onFrameNavigated(e){
-e.frame.parentId||enable().catch((e=>Log.error("Driver",e)))}return e.on("Debugger.paused",onDebuggerPaused),e.on("Page.frameNavigated",onFrameNavigated),await enable(),async()=>{await e.sendCommand("Debugger.disable"),e.off("Debugger.paused",onDebuggerPaused),e.off("Page.frameNavigated",onFrameNavigated)}}async function resetStorageForUrl(e,t){const n=[],a=await async function getImportantStorageWarning(e,t){const n=await e.sendCommand("Storage.getUsageAndQuota",{origin:t}),a={local_storage:"Local Storage",indexeddb:"IndexedDB",websql:"Web SQL"},r=n.usageBreakdown.filter((e=>e.usage)).map((e=>a[e.storageType]||"")).filter(Boolean);if(r.length)return so(io.warningData,{locations:r.join(", "),locationCount:r.length})}(e,t);a&&n.push(a);const r=await clearDataForOrigin(e,t);n.push(...r);const o=await async function clearBrowserCaches(e){const t={msg:"Cleaning browser cache",id:"lh:storage:clearBrowserCaches"};Log.time(t);const n=[];try{await e.sendCommand("Network.clearBrowserCache"),
-await e.sendCommand("Network.setCacheDisabled",{cacheDisabled:!0}),await e.sendCommand("Network.setCacheDisabled",{cacheDisabled:!1})}catch(e){if("PROTOCOL_TIMEOUT"!==e.code)throw e;Log.warn("Driver","clearBrowserCaches timed out"),n.push(so(io.warningCacheTimeout))}finally{Log.timeEnd(t)}return n}(e);return n.push(...o),{warnings:n}}async function prepareThrottlingAndNetwork(e,t,n){const a={msg:"Preparing network conditions",id:"lh:gather:prepareThrottlingAndNetwork"};Log.time(a),n.disableThrottling?await clearThrottling(e):await async function throttle(e,t){if("devtools"!==t.throttlingMethod)return clearNetworkThrottling(e);await Promise.all([enableNetworkThrottling(e,t.throttling),enableCPUThrottling(e,t.throttling)])}(e,t);const r=(n.blockedUrlPatterns||[]).concat(t.blockedUrlPatterns||[]);await e.sendCommand("Network.setBlockedURLs",{urls:r});const o=t.extraHeaders;o&&await e.sendCommand("Network.setExtraHTTPHeaders",{headers:o}),Log.timeEnd(a)}
-async function prepareDeviceEmulation(e,t){await e.defaultSession.sendCommand("Network.enable"),await emulate(e.defaultSession,t)}async function warmUpIntlSegmenter(e){await e.executionContext.evaluate(or.truncate,{args:["aaa",2]})}async function prepareTargetForNavigationMode(e,t){const n={msg:"Preparing target for navigation mode",id:"lh:prepare:navigationMode"};Log.time(n),await prepareDeviceEmulation(e,t),await async function dismissJavaScriptDialogs(e){e.on("Page.javascriptDialogOpening",(t=>{Log.warn("Driver",`${t.type} dialog opened by the page automatically suppressed.`),e.sendCommand("Page.handleJavaScriptDialog",{accept:!0,promptText:"Lighthouse prompt response"}).catch((e=>Log.warn("Driver",e)))})),await e.sendCommand("Page.enable")}(e.defaultSession),await e.executionContext.cacheNativesOnNewDocument(),"simulate"===t.throttlingMethod&&await async function shimRequestIdleCallbackOnNewDocument(e,t){await e.executionContext.evaluateOnNewDocument(or.wrapRequestIdleCallback,{
-args:[t.throttling.cpuSlowdownMultiplier]})}(e,t),await warmUpIntlSegmenter(e),Log.timeEnd(n)}async function prepareTargetForIndividualNavigation(e,t,n){const a={msg:"Preparing target for navigation",id:"lh:prepare:navigation"};Log.time(a);const r=[],{requestor:o}=n;if(!t.disableStorageReset&&!n.disableStorageReset&&"string"==typeof o){const t=o,{warnings:n}=await resetStorageForUrl(e,t);r.push(...n)}return await prepareThrottlingAndNetwork(e,t,n),Log.timeEnd(a),{warnings:r}}const uo=3e4;class Driver$1{_eventEmitter=new EventEmitter;_devtoolsLog=new DevtoolsMessageLog(/^(Page|Network|Target|Runtime)\./);_domainEnabledCounts=new Map;_nextProtocolTimeout=uo;online=!0;executionContext=new ExecutionContext(this);defaultSession=this;fetcher=new Fetcher(this.defaultSession);constructor(e){this._connection=e,this.on("Target.attachedToTarget",(e=>{this._handleTargetAttached(e).catch(this._handleEventError)})),this.on("Page.frameNavigated",(e=>{
-e.frame.parentId||this.sendCommand("Target.setAutoAttach",{flatten:!0,autoAttach:!0,waitForDebuggerOnStart:!0}).catch(this._handleEventError)})),e.on("protocolevent",this._handleProtocolEvent.bind(this)),this.evaluate=this.executionContext.evaluate.bind(this.executionContext),this.evaluateAsync=this.executionContext.evaluateAsync.bind(this.executionContext),this.targetManager={rootSession:()=>this.defaultSession,mainFrameExecutionContexts:()=>[{id:void 0,uniqueId:void 0,origin:"",name:"",auxData:{isDefault:!0,type:"default",frameId:""}}],on:(e,t)=>{this._connection.on("protocolevent",t)},off:(e,t)=>{this._connection.off("protocolevent",t)}}}static get traceCategories(){return Trace.getDefaultTraceCategories()}async getBrowserVersion(){return getBrowserVersion(this)}async connect(){const e={msg:"Connecting to browser",id:"lh:init:connect"};Log.time(e),await this._connection.connect(),Log.timeEnd(e)}disconnect(){return this._connection.disconnect()}dispose(){return this.disconnect()}
-wsEndpoint(){return this._connection.wsEndpoint()}on(e,t){if(null===this._eventEmitter)throw new Error("connect() must be called before attempting to listen to events.");Log.formatProtocol("listen for event =>",{method:e},"verbose"),this._eventEmitter.on(e,t)}once(e,t){if(null===this._eventEmitter)throw new Error("connect() must be called before attempting to listen to events.");Log.formatProtocol("listen once for event =>",{method:e},"verbose"),this._eventEmitter.once(e,t)}off(e,t){if(null===this._eventEmitter)throw new Error("connect() must be called before attempting to remove an event listener.");this._eventEmitter.removeListener(e,t)}setTargetInfo(e){}_shouldToggleDomain(e,t,n){const a=e+(t||""),r=(this._domainEnabledCounts.get(a)||0)+(n?1:-1);return this._domainEnabledCounts.set(a,Math.max(0,r)),n&&1===r||!n&&0===r?(Log.verbose("Driver",`${e}.${n?"enable":"disable"}`),!0):(r<0&&Log.error("Driver",`Attempted to disable domain '${e}' when already disabled.`),!1)}
-hasNextProtocolTimeout(){return this._nextProtocolTimeout!==uo}getNextProtocolTimeout(){return this._nextProtocolTimeout}setNextProtocolTimeout(e){this._nextProtocolTimeout=e}_handleProtocolEvent(e){this._devtoolsLog.record(e),this._eventEmitter.emit(e.method,e.params)}_handleEventError(e){Log.error("Driver","Unhandled event error",e.message)}async _handleTargetAttached(e){"iframe"===e.targetInfo.type?await Promise.all([this.sendCommandToSession("Network.enable",e.sessionId),this.sendCommandToSession("Target.setAutoAttach",e.sessionId,{autoAttach:!0,flatten:!0,waitForDebuggerOnStart:!0}),this.sendCommandToSession("Runtime.runIfWaitingForDebugger",e.sessionId)]):await this.sendCommandToSession("Runtime.runIfWaitingForDebugger",e.sessionId)}sendCommandToSession(e,t,...n){const a=this._nextProtocolTimeout;let r;this._nextProtocolTimeout=uo;const o=new Promise(((t,n)=>{a!==1/0&&(r=setTimeout(n,a,new LighthouseError(LighthouseError.errors.PROTOCOL_TIMEOUT,{protocolMethod:e})))}))
-;return Promise.race([this._innerSendCommand(e,t,...n),o]).finally((()=>{r&&clearTimeout(r)}))}sendCommand(e,...t){return this.sendCommandToSession(e,void 0,...t)}_innerSendCommand(e,t,...n){const a=/^(\w+)\.(enable|disable)$/.exec(e);if(a){const e="enable"===a[2];if(!this._shouldToggleDomain(a[1],t,e))return Promise.resolve()}return this._connection.sendCommand(e,t,...n)}isDomainEnabled(e){return!!this._domainEnabledCounts.get(e)}async getRequestContent(e,t=1e3){return fetchResponseBodyFromCache(this.defaultSession,e,t)}async beginTrace(e){const t=e?.additionalTraceCategories&&e.additionalTraceCategories.split(",")||[],n=Trace.getDefaultTraceCategories().concat(t),a=Array.from(new Set(n));if(this.isDomainEnabled("CSS"))throw new Error("CSS domain enabled when starting trace");if(this.isDomainEnabled("DOM"))throw new Error("DOM domain enabled when starting trace");return this.sendCommand("Page.enable").then((e=>this.sendCommand("Tracing.start",{categories:a.join(","),
-options:"sampling-frequency=10000"})))}endTrace(){return Trace.endTraceAndCollectEvents(this.defaultSession)}async beginDevtoolsLog(){this._disableAsyncStacks=await enableAsyncStacks(this),this._devtoolsLog.reset(),this._devtoolsLog.beginRecording()}async endDevtoolsLog(){return this._devtoolsLog.endRecording(),await(this._disableAsyncStacks?.()),this._devtoolsLog.messages}async url(){const{frameTree:e}=await this.sendCommand("Page.getFrameTree");return`${e.frame.url}${e.frame.urlFragment||""}`}}class ArbitraryEqualityMap{constructor(){this._equalsFn=ArbitraryEqualityMap.deepEquals,this._entries=[]}setEqualityFn(e){this._equalsFn=e}has(e){return-1!==this._findIndexOf(e)}get(e){return this._entries[this._findIndexOf(e)]?.value}set(e,t){let n=this._findIndexOf(e);-1===n&&(n=this._entries.length),this._entries[n]={key:e,value:t}}_findIndexOf(e){for(let t=0;t<this._entries.length;t++)if(this._equalsFn(e,this._entries[t].key))return t;return-1}static deepEquals(e,t){return Xa(e,t)}}
-function makeComputedArtifact(e,t){return Object.assign(e,{request:(n,a)=>{const r=t?Object.fromEntries(t.map((e=>[e,n[e]]))):n,o=a.computedCache,i=e.name,s=o.get(i)||new ArbitraryEqualityMap;o.set(i,s);const c=s.get(r);if(c)return c;const l={msg:`Computing artifact: ${i}`,id:`lh:computed:${i}`};Log.time(l,"verbose");const u=e.compute_(r,a);return s.set(r,u),u.then((()=>Log.timeEnd(l))).catch((()=>Log.timeEnd(l))),u}})}class BaseNode{constructor(e){this._id=e,this._isMainDocument=!1,this._dependents=[],this._dependencies=[]}get id(){return this._id}get type(){throw new Error("Unimplemented")}get startTime(){throw new Error("Unimplemented")}get endTime(){throw new Error("Unimplemented")}setIsMainDocument(e){this._isMainDocument=e}isMainDocument(){return this._isMainDocument}getDependents(){return this._dependents.slice()}getNumberOfDependents(){return this._dependents.length}getDependencies(){return this._dependencies.slice()}getNumberOfDependencies(){return this._dependencies.length}
-getRootNode(){let e=this;for(;e._dependencies.length;)e=e._dependencies[0];return e}addDependent(e){e.addDependency(this)}addDependency(e){if(e===this)throw new Error("Cannot add dependency on itself");this._dependencies.includes(e)||(e._dependents.push(this),this._dependencies.push(e))}removeDependent(e){e.removeDependency(this)}removeDependency(e){if(!this._dependencies.includes(e))return;const t=e._dependents.indexOf(this);e._dependents.splice(t,1),this._dependencies.splice(this._dependencies.indexOf(e),1)}removeAllDependencies(){for(const e of this._dependencies.slice())this.removeDependency(e)}isDependentOn(e){let t=!1;return this.traverse((n=>{t||(t=n===e)}),(e=>t?[]:e.getDependencies())),t}cloneWithoutRelationships(){const e=new BaseNode(this.id);return e.setIsMainDocument(this._isMainDocument),e}cloneWithRelationships(e){const t=this.getRootNode(),n=new Map;t.traverse((t=>{
-n.has(t.id)||(void 0!==e?e(t)&&t.traverse((e=>n.set(e.id,e.cloneWithoutRelationships())),(e=>e._dependencies.filter((e=>!n.has(e.id))))):n.set(t.id,t.cloneWithoutRelationships()))})),t.traverse((e=>{const t=n.get(e.id);if(t)for(const a of e._dependencies){const e=n.get(a.id);if(!e)throw new Error("Dependency somehow not cloned");t.addDependency(e)}}));const a=n.get(this.id);if(!a)throw new Error("Cloned graph missing node");return a}traverse(e,t){for(const{node:n,traversalPath:a}of this.traverseGenerator(t))e(n,a)}*traverseGenerator(e){e||(e=e=>e.getDependents());const t=[[this]],n=new Set([this.id]);for(;t.length;){const a=t.shift(),r=a[0];yield{node:r,traversalPath:a};for(const o of e(r))n.has(o.id)||(n.add(o.id),t.push([o,...a]))}}static hasCycle(e,t="both"){if("both"===t)return BaseNode.hasCycle(e,"dependents")||BaseNode.hasCycle(e,"dependencies");const n=new Set,a=[],r=[e],o=new Map([[e,0]]);for(;r.length;){const e=r.pop();if(a.includes(e))return!0;if(n.has(e))continue
-;for(;a.length>o.get(e);)a.pop();n.add(e),a.push(e);const i="dependents"===t?e._dependents:e._dependencies;for(const e of i)r.includes(e)||(r.push(e),o.set(e,a.length))}return!1}canDependOn(e){return e.startTime<=this.startTime}}BaseNode.TYPES={NETWORK:"network",CPU:"cpu"};class NetworkNode extends BaseNode{constructor(e){super(e.requestId),this._record=e}get type(){return BaseNode.TYPES.NETWORK}get startTime(){return 1e3*this._record.networkRequestTime}get endTime(){return 1e3*this._record.networkEndTime}get record(){return this._record}get initiatorType(){return this._record.initiator&&this._record.initiator.type}get fromDiskCache(){return!!this._record.fromDiskCache}get isNonNetworkProtocol(){return NetworkRequest.isNonNetworkRequest(this._record)}get isConnectionless(){return this.fromDiskCache||this.isNonNetworkProtocol}hasRenderBlockingPriority(){
-const e=this._record.priority,t=this._record.resourceType===NetworkRequest.TYPES.Script,n=this._record.resourceType===NetworkRequest.TYPES.Document;return"VeryHigh"===e||"High"===e&&t||"High"===e&&n}cloneWithoutRelationships(){const e=new NetworkNode(this._record);return e.setIsMainDocument(this._isMainDocument),e}}class CPUNode extends BaseNode{constructor(e,t=[]){super(`${e.tid}.${e.ts}`),this._event=e,this._childEvents=t}get type(){return BaseNode.TYPES.CPU}get startTime(){return this._event.ts}get endTime(){return this._event.ts+this._event.dur}get event(){return this._event}get childEvents(){return this._childEvents}didPerformLayout(){return this._childEvents.some((e=>"Layout"===e.name))}getEvaluateScriptURLs(){const e=new Set;for(const t of this._childEvents)"EvaluateScript"===t.name&&t.args.data&&t.args.data.url&&e.add(t.args.data.url);return e}cloneWithoutRelationships(){return new CPUNode(this._event,this._childEvents)}}class LHTraceProcessor extends TraceProcessor{
-static createNoNavstartError(){return new LighthouseError(LighthouseError.errors.NO_NAVSTART)}static createNoResourceSendRequestError(){return new LighthouseError(LighthouseError.errors.NO_RESOURCE_REQUEST)}static createNoTracingStartedError(){return new LighthouseError(LighthouseError.errors.NO_TRACING_STARTED)}static createNoFirstContentfulPaintError(){return new LighthouseError(LighthouseError.errors.NO_FCP)}}const mo=makeComputedArtifact(class ProcessedTrace{static async compute_(e){return LHTraceProcessor.processTrace(e)}},null),po={Document:.9,XHR:.9,Fetch:.9};class NetworkAnalyzer{static get SUMMARY(){return"__SUMMARY__"}static groupByOrigin(e){const t=new Map;return e.forEach((e=>{const n=e.parsedURL.securityOrigin,a=t.get(n)||[];a.push(e),t.set(n,a)})),t}static getSummary(e){let t;if(e.sort(((e,t)=>e-t)),0===e.length)t=e[0];else if(e.length%2==0){t=(e[Math.floor((e.length-1)/2)]+e[Math.floor((e.length-1)/2)+1])/2}else t=e[Math.floor((e.length-1)/2)];return{min:e[0],
-max:e[e.length-1],avg:e.reduce(((e,t)=>e+t),0)/e.length,median:t}}static summarize(e){const t=new Map,n=[];for(const[a,r]of e)t.set(a,NetworkAnalyzer.getSummary(r)),n.push(...r);return t.set(NetworkAnalyzer.SUMMARY,NetworkAnalyzer.getSummary(n)),t}static _estimateValueByOrigin(e,t){const n=NetworkAnalyzer.estimateIfConnectionWasReused(e),a=NetworkAnalyzer.groupByOrigin(e),r=new Map;for(const[e,o]of a.entries()){let a=[];for(const e of o){const r=e.timing;if(!r)continue;const o=t({record:e,timing:r,connectionReused:n.get(e.requestId)});void 0!==o&&(a=a.concat(o))}a.length&&r.set(e,a)}return r}static _estimateRTTByOriginViaConnectionTiming(e){return NetworkAnalyzer._estimateValueByOrigin(e,(({timing:e,connectionReused:t,record:n})=>{if(t)return;if(globalThis.isLightrider&&n.lrStatistics)return n.protocol.startsWith("h3")?n.lrStatistics.TCPMs:[n.lrStatistics.TCPMs/2,n.lrStatistics.TCPMs/2];const{connectStart:a,sslStart:r,sslEnd:o,connectEnd:i}=e
-;return i>=0&&a>=0&&n.protocol.startsWith("h3")?i-a:r>=0&&o>=0&&r!==a?[i-r,r-a]:a>=0&&i>=0?i-a:void 0}))}static _estimateRTTByOriginViaDownloadTiming(e){return NetworkAnalyzer._estimateValueByOrigin(e,(({record:e,timing:t,connectionReused:n})=>{if(n)return;if(e.transferSize<=14336)return;if(!Number.isFinite(t.receiveHeadersEnd)||t.receiveHeadersEnd<0)return;const a=e.networkEndTime-e.networkRequestTime-t.receiveHeadersEnd,r=Math.log2(e.transferSize/14336);return r>5?void 0:a/r}))}static _estimateRTTByOriginViaSendStartTiming(e){return NetworkAnalyzer._estimateValueByOrigin(e,(({record:e,timing:t,connectionReused:n})=>{if(n)return;if(!Number.isFinite(t.sendStart)||t.sendStart<0)return;let a=1;return e.protocol.startsWith("h3")||(a+=1),"https"===e.parsedURL.scheme&&(a+=1),t.sendStart/a}))}static _estimateRTTByOriginViaHeadersEndTiming(e){return NetworkAnalyzer._estimateValueByOrigin(e,(({record:e,timing:t,connectionReused:n})=>{
-if(!Number.isFinite(t.receiveHeadersEnd)||t.receiveHeadersEnd<0)return;if(!e.resourceType)return;const a=po[e.resourceType]||.4,r=t.receiveHeadersEnd*a;let o=1;return n||(o+=1,e.protocol.startsWith("h3")||(o+=1),"https"===e.parsedURL.scheme&&(o+=1)),Math.max((t.receiveHeadersEnd-r)/o,3)}))}static _estimateResponseTimeByOrigin(e,t){return NetworkAnalyzer._estimateValueByOrigin(e,(({record:e,timing:n})=>{if(globalThis.isLightrider&&e.lrStatistics)return e.lrStatistics.requestMs;if(!Number.isFinite(n.receiveHeadersEnd)||n.receiveHeadersEnd<0)return;if(!Number.isFinite(n.sendEnd)||n.sendEnd<0)return;const a=n.receiveHeadersEnd-n.sendEnd,r=e.parsedURL.securityOrigin,o=t.get(r)||t.get(NetworkAnalyzer.SUMMARY)||0;return Math.max(a-o,0)}))}static canTrustConnectionInformation(e){const t=new Map;for(const n of e){const e=t.get(n.connectionId)||!n.connectionReused;t.set(n.connectionId,e)}return!(t.size<=1)&&Array.from(t.values()).every((e=>e))}static estimateIfConnectionWasReused(e,t){
-const{forceCoarseEstimates:n=!1}=t||{};if(!n&&NetworkAnalyzer.canTrustConnectionInformation(e))return new Map(e.map((e=>[e.requestId,!!e.connectionReused])));const a=new Map,r=NetworkAnalyzer.groupByOrigin(e);for(const[e,t]of r.entries()){const e=t.map((e=>e.networkEndTime)).reduce(((e,t)=>Math.min(e,t)),1/0);for(const n of t)a.set(n.requestId,n.networkRequestTime>=e||"h2"===n.protocol);const n=t.reduce(((e,t)=>e.networkRequestTime>t.networkRequestTime?t:e));a.set(n.requestId,!1)}return a}static estimateRTTByOrigin(e,t){const{forceCoarseEstimates:n=!1,coarseEstimateMultiplier:a=.3,useDownloadEstimates:r=!0,useSendStartEstimates:o=!0,useHeadersEndEstimates:i=!0}=t||{};let s=NetworkAnalyzer._estimateRTTByOriginViaConnectionTiming(e);if(!s.size||n){s=new Map;const t=NetworkAnalyzer._estimateRTTByOriginViaDownloadTiming(e),n=NetworkAnalyzer._estimateRTTByOriginViaSendStartTiming(e),c=NetworkAnalyzer._estimateRTTByOriginViaHeadersEndTiming(e);for(const[e,n]of t.entries())r&&s.set(e,n)
-;for(const[e,t]of n.entries()){if(!o)continue;const n=s.get(e)||[];s.set(e,n.concat(t))}for(const[e,t]of c.entries()){if(!i)continue;const n=s.get(e)||[];s.set(e,n.concat(t))}for(const e of s.values())e.forEach(((t,n)=>e[n]=t*a))}if(!s.size)throw new Error("No timing information available");return NetworkAnalyzer.summarize(s)}static estimateServerResponseTimeByOrigin(e,t){let n=(t||{}).rttByOrigin;if(!n){n=new Map;const a=NetworkAnalyzer.estimateRTTByOrigin(e,t);for(const[e,t]of a.entries())n.set(e,t.min)}const a=NetworkAnalyzer._estimateResponseTimeByOrigin(e,n);return NetworkAnalyzer.summarize(a)}static estimateThroughput(e){let t=0;const n=e.reduce(((e,n)=>("data"===n.parsedURL?.scheme||n.failed||!n.finished||n.statusCode>300||!n.transferSize||(t+=n.transferSize,e.push({time:n.responseHeadersEndTime/1e3,isStart:!0}),e.push({time:n.networkEndTime/1e3,isStart:!1})),e)),[]).sort(((e,t)=>e.time-t.time));if(!n.length)return 1/0;let a=0,r=0,o=0;return n.forEach((e=>{
-e.isStart?(0===a&&(r=e.time),a++):(a--,0===a&&(o+=e.time-r))})),8*t/o}static findResourceForUrl(e,t){return e.find((e=>t.startsWith(e.url)&&UrlUtils.equalWithExcludedFragments(e.url,t)))}static resolveRedirects(e){for(;e.redirectDestination;)e=e.redirectDestination;return e}}const go=makeComputedArtifact(class DocumentUrls{static async compute_(e,t){const n=await mo.request(e.trace,t),a=await bo.request(e.devtoolsLog,t),r=n.mainFrameInfo.frameId;let o,i;for(const t of e.devtoolsLog)if("Page.frameNavigated"===t.method&&t.params.frame.id===r){const{url:e}=t.params.frame;o||(o=e),i=e}if(!o||!i)throw new Error("No main frame navigations found");const s=NetworkAnalyzer.findResourceForUrl(a,o);return s?.redirects?.length&&(o=s.redirects[0].url),{requestedUrl:o,mainDocumentUrl:i}}},["devtoolsLog","trace"]),ho=/^video/;class PageDependencyGraph{static getNetworkInitiators(e){if(!e.initiator)return[];if(e.initiator.url)return[e.initiator.url];if("script"===e.initiator.type){const t=new Set
-;let n=e.initiator.stack;for(;n;){const e=n.callFrames||[];for(const n of e)n.url&&t.add(n.url);n=n.parent}return Array.from(t)}return[]}static getNetworkNodeOutput(e){const t=[],n=new Map,a=new Map,r=new Map;return e.forEach((e=>{if(ho.test(e.mimeType))return;for(;n.has(e.requestId);)e.requestId+=":duplicate";const o=new NetworkNode(e);t.push(o);const i=a.get(e.url)||[];if(i.push(o),n.set(e.requestId,o),a.set(e.url,i),e.frameId&&e.resourceType===NetworkRequest.TYPES.Document&&e.documentURL===e.url){const t=r.has(e.frameId)?null:o;r.set(e.frameId,t)}})),{nodes:t,idToNodeMap:n,urlToNodeMap:a,frameIdToNodeMap:r}}static getCPUNodes({mainThreadEvents:e}){const t=[];let n=0;for(TraceProcessor.assertHasToplevelEvents(e);n<e.length;){const a=e[n];if(n++,!TraceProcessor.isScheduleableTask(a)||!a.dur)continue;const r=[];for(const t=a.ts+a.dur;n<e.length&&e[n].ts<t;n++)r.push(e[n]);t.push(new CPUNode(a,r))}return t}static linkNetworkNodes(e,t){t.nodes.forEach((n=>{
-const a=n.record.initiatorRequest||e.record,r=t.idToNodeMap.get(a.requestId)||e,o=!r.isDependentOn(n)&&n.canDependOn(r),i=PageDependencyGraph.getNetworkInitiators(n.record);if(i.length?i.forEach((e=>{const a=t.urlToNodeMap.get(e)||[];1===a.length&&a[0].startTime<=n.startTime&&!a[0].isDependentOn(n)?n.addDependency(a[0]):o&&r.addDependent(n)})):o&&r.addDependent(n),n!==e&&0===n.getDependencies().length&&n.canDependOn(e)&&n.addDependency(e),!n.record.redirects)return;const s=[...n.record.redirects,n.record];for(let e=1;e<s.length;e++){const n=t.idToNodeMap.get(s[e-1].requestId),a=t.idToNodeMap.get(s[e].requestId);a&&n&&a.addDependency(n)}}))}static linkCPUNodes(e,t,n){const a=new Set([NetworkRequest.TYPES.XHR,NetworkRequest.TYPES.Fetch,NetworkRequest.TYPES.Script]);function addDependentNetworkRequest(e,n){const r=t.idToNodeMap.get(n);if(!r||r.startTime<=e.startTime)return;const{record:o}=r,i=o.resourceType||o.redirectDestination?.resourceType;a.has(i)&&e.addDependent(r)}
-function addDependencyOnFrame(e,n){if(!n)return;const a=t.frameIdToNodeMap.get(n);a&&(a.startTime>=e.startTime||e.addDependency(a))}function addDependencyOnUrl(e,n){if(!n)return;const a=t.urlToNodeMap.get(n)||[];let r=null,o=1/0;for(const t of a){if(e.startTime<=t.startTime)return;const n=e.startTime-t.endTime;n>=-1e5&&n<o&&(r=t,o=n)}r&&e.addDependency(r)}const r=new Map;for(const t of n){for(const e of t.childEvents){if(!e.args.data)continue;const n=e.args.data.url,a=(e.args.data.stackTrace||[]).map((e=>e.url)).filter(Boolean);switch(e.name){case"TimerInstall":r.set(e.args.data.timerId,t),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"TimerFire":{const n=r.get(e.args.data.timerId);if(!n||n.endTime>t.startTime)break;n.addDependent(t);break}case"InvalidateLayout":case"ScheduleStyleRecalculation":addDependencyOnFrame(t,e.args.data.frame),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"EvaluateScript":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,n),
-a.forEach((e=>addDependencyOnUrl(t,e)));break;case"XHRReadyStateChange":if(4!==e.args.data.readyState)break;addDependencyOnUrl(t,n),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"FunctionCall":case"v8.compile":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,n);break;case"ParseAuthorStyleSheet":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,e.args.data.styleSheetUrl);break;case"ResourceSendRequest":addDependencyOnFrame(t,e.args.data.frame),addDependentNetworkRequest(t,e.args.data.requestId),a.forEach((e=>addDependencyOnUrl(t,e)))}}0===t.getNumberOfDependencies()&&t.canDependOn(e)&&t.addDependency(e)}let o=!1,i=!1,s=!1;for(const e of n){let t=!1;!o&&e.childEvents.some((e=>"Layout"===e.name))&&(t=o=!0),!i&&e.childEvents.some((e=>"Paint"===e.name))&&(t=i=!0),!s&&e.childEvents.some((e=>"ParseHTML"===e.name))&&(t=s=!0),t||e.event.dur>=1e4||(1===e.getNumberOfDependencies()||e.getNumberOfDependents()<=1)&&PageDependencyGraph._pruneNode(e)}}
-static _pruneNode(e){const t=e.getDependencies(),n=e.getDependents();for(const a of t){e.removeDependency(a);for(const e of n)a.addDependent(e)}for(const t of n)e.removeDependent(t)}static createGraph(e,t,n){const a=PageDependencyGraph.getNetworkNodeOutput(t),r=PageDependencyGraph.getCPUNodes(e),{requestedUrl:o,mainDocumentUrl:i}=n;if(!o)throw new Error("requestedUrl is required to get the root request");if(!i)throw new Error("mainDocumentUrl is required to get the main resource");const s=NetworkAnalyzer.findResourceForUrl(t,o);if(!s)throw new Error("rootRequest not found");const c=a.idToNodeMap.get(s.requestId);if(!c)throw new Error("rootNode not found");const l=NetworkAnalyzer.findResourceForUrl(t,i);if(!l)throw new Error("mainDocumentRequest not found");const u=a.idToNodeMap.get(l.requestId);if(!u)throw new Error("mainDocumentNode not found");if(PageDependencyGraph.linkNetworkNodes(c,a),PageDependencyGraph.linkCPUNodes(c,a,r),u.setIsMainDocument(!0),
-NetworkNode.hasCycle(c))throw new Error("Invalid dependency graph created, cycle detected");return c}static printGraph(e,t=100){function padRight(e,t,n=" "){return e+n.repeat(Math.max(t-e.length,0))}const n=[];e.traverse((e=>n.push(e))),n.sort(((e,t)=>e.startTime-t.startTime));const a=n[0].startTime,r=(n.reduce(((e,t)=>Math.max(e,t.endTime)),0)-a)/t;n.forEach((e=>{const n=Math.round((e.startTime-a)/r),o=Math.ceil((e.endTime-e.startTime)/r),i=padRight("",n)+padRight("",o,"="),s=e.record?e.record.url:e.type;console.log(padRight(i,t),`| ${s.slice(0,30)}`)}))}static async compute_(e,t){const{trace:n,devtoolsLog:a}=e,[r,o]=await Promise.all([mo.request(n,t),bo.request(a,t)]),i=e.URL||await go.request(e,t);return PageDependencyGraph.createGraph(r,o,i)}}const fo=makeComputedArtifact(PageDependencyGraph,["devtoolsLog","trace","URL"]),yo=EventEmitter;class NetworkRecorder extends yo{constructor(){super(),this._records=[],this._recordsById=new Map}getRawRecords(){return Array.from(this._records)
-}onRequestStarted(e){this._records.push(e),this._recordsById.set(e.requestId,e),this.emit("requeststarted",e)}onRequestFinished(e){this.emit("requestfinished",e)}onRequestWillBeSent(e){const t=e.params,n=this._findRealRequestAndSetSession(t.requestId,e.targetType,e.sessionId);if(!n){const n=new NetworkRequest;return n.onRequestWillBeSent(t),n.sessionId=e.sessionId,n.sessionTargetType=e.targetType,this.onRequestStarted(n),void Log.verbose("network",`request will be sent to ${n.url}`)}if(!t.redirectResponse)return;const a={...t,initiator:n.initiator,requestId:`${n.requestId}:redirect`},r=new NetworkRequest;r.onRequestWillBeSent(a),n.onRedirectResponse(t),Log.verbose("network",`${n.url} redirected to ${r.url}`),n.redirectDestination=r,r.redirectSource=n,this.onRequestStarted(r),this.onRequestFinished(n)}onRequestServedFromCache(e){const t=e.params,n=this._findRealRequestAndSetSession(t.requestId,e.targetType,e.sessionId);n&&(Log.verbose("network",`${n.url} served from cache`),
-n.onRequestServedFromCache())}onResponseReceived(e){const t=e.params,n=this._findRealRequestAndSetSession(t.requestId,e.targetType,e.sessionId);n&&(Log.verbose("network",`${n.url} response received`),n.onResponseReceived(t))}onDataReceived(e){const t=e.params,n=this._findRealRequestAndSetSession(t.requestId,e.targetType,e.sessionId);n&&(Log.verbose("network",`${n.url} data received`),n.onDataReceived(t))}onLoadingFinished(e){const t=e.params,n=this._findRealRequestAndSetSession(t.requestId,e.targetType,e.sessionId);n&&(Log.verbose("network",`${n.url} loading finished`),n.onLoadingFinished(t),this.onRequestFinished(n))}onLoadingFailed(e){const t=e.params,n=this._findRealRequestAndSetSession(t.requestId,e.targetType,e.sessionId);n&&(Log.verbose("network",`${n.url} loading failed`),n.onLoadingFailed(t),this.onRequestFinished(n))}onResourceChangedPriority(e){const t=e.params,n=this._findRealRequestAndSetSession(t.requestId,e.targetType,e.sessionId);n&&n.onResourceChangedPriority(t)}
-dispatch(e){switch(e.method){case"Network.requestWillBeSent":return this.onRequestWillBeSent(e);case"Network.requestServedFromCache":return this.onRequestServedFromCache(e);case"Network.responseReceived":return this.onResponseReceived(e);case"Network.dataReceived":return this.onDataReceived(e);case"Network.loadingFinished":return this.onLoadingFinished(e);case"Network.loadingFailed":return this.onLoadingFailed(e);case"Network.resourceChangedPriority":return this.onResourceChangedPriority(e);default:return}}_findRealRequestAndSetSession(e,t,n){let a=this._recordsById.get(e);if(a&&a.isValid){for(;a.redirectDestination;)a=a.redirectDestination;return a.setSession(n),a.sessionTargetType=t,a}}static _chooseInitiatorRequest(e,t){if(e.redirectSource)return e.redirectSource;const n=fo.getNetworkInitiators(e)[0];let a=t.get(n)||[];if(a=a.filter((t=>t.responseHeadersEndTime<=e.networkRequestTime&&t.finished&&!t.failed)),a.length>1){
-const e=a.filter((e=>e.resourceType!==NetworkRequest.TYPES.Other));e.length&&(a=e)}if(a.length>1){const t=a.filter((t=>t.frameId===e.frameId));t.length&&(a=t)}if(a.length>1&&"parser"===e.initiator.type){const e=a.filter((e=>e.resourceType===NetworkRequest.TYPES.Document));e.length&&(a=e)}if(a.length>1){const e=a.filter((e=>e.isLinkPreload));if(e.length){const t=a.filter((e=>!e.isLinkPreload)),n=t.every((e=>e.fromDiskCache||e.fromMemoryCache));t.length&&n&&(a=e)}}return 1===a.length?a[0]:null}static recordsFromLogs(e){const t=new NetworkRecorder;e.forEach((e=>t.dispatch(e)));const n=t.getRawRecords().filter((e=>e.isValid)),a=new Map;for(const e of n){const t=a.get(e.url)||[];t.push(e),a.set(e.url,t)}for(const e of n){const t=NetworkRecorder._chooseInitiatorRequest(e,a);t&&e.setInitiatorRequest(t);let n=e;for(;n.redirectDestination;)n=n.redirectDestination;if(n===e||n.redirects)continue;const r=[];for(let e=n.redirectSource;e;e=e.redirectSource)r.unshift(e);n.redirects=r}return n}}
-const bo=makeComputedArtifact(class NetworkRecords{static async compute_(e){return NetworkRecorder.recordsFromLogs(e)}},null),vo={warningXhtml:"The page MIME type is XHTML: Lighthouse does not explicitly support this document type"},wo=createIcuMessageFn("core/lib/navigation-error.js",vo),Do="application/xhtml+xml";function getPageLoadError(e,t){const{url:n,loadFailureMode:a,networkRecords:r}=t;let o,i=NetworkAnalyzer.findResourceForUrl(r,n);if(!i){const e=r.filter((e=>e.resourceType===NetworkRequest.TYPES.Document));e.length&&(i=e.reduce(((e,t)=>t.networkRequestTime<e.networkRequestTime?t:e)))}i&&(o=NetworkAnalyzer.resolveRedirects(i)),o?.mimeType===Do&&t.warnings.push(wo(vo.warningXhtml));const s=function getNetworkError(e){if(!e)return new LighthouseError(LighthouseError.errors.NO_DOCUMENT_REQUEST);if(e.failed){const t=e.localizedFailDescription
-;return"net::ERR_NAME_NOT_RESOLVED"===t||"net::ERR_NAME_RESOLUTION_FAILED"===t||t.startsWith("net::ERR_DNS_")?new LighthouseError(LighthouseError.errors.DNS_FAILURE):new LighthouseError(LighthouseError.errors.FAILED_DOCUMENT_REQUEST,{errorDetails:t})}return e.hasErrorStatusCode()?new LighthouseError(LighthouseError.errors.ERRORED_DOCUMENT_REQUEST,{statusCode:`${e.statusCode}`}):void 0}(i),c=function getInterstitialError(e,t){if(!e)return;return t.find((e=>e.documentURL.startsWith("chrome-error://")))&&e.failed?e.localizedFailDescription.startsWith("net::ERR_CERT")?new LighthouseError(LighthouseError.errors.INSECURE_DOCUMENT_REQUEST,{securityMessages:e.localizedFailDescription}):new LighthouseError(LighthouseError.errors.CHROME_INTERSTITIAL_ERROR):void 0}(i,r),l=function getNonHtmlError(e){if(e)return"text/html"!==e.mimeType&&e.mimeType!==Do?new LighthouseError(LighthouseError.errors.NOT_HTML,{mimeType:e.mimeType}):void 0}(o);if("ignore"!==a)return c||(s||(l||e))}const Eo=EventEmitter
-;class NetworkMonitor extends Eo{_networkRecorder=void 0;_frameNavigations=[];constructor(e){super(),this._targetManager=e,this._session=e.rootSession(),this._onFrameNavigated=e=>this._frameNavigations.push(e.frame),this._onProtocolMessage=e=>{this._networkRecorder&&this._networkRecorder.dispatch(e)}}async enable(){if(this._networkRecorder)return;this._frameNavigations=[],this._networkRecorder=new NetworkRecorder;const reEmit=e=>t=>{this.emit(e,t),this._emitNetworkStatus()};this._networkRecorder.on("requeststarted",reEmit("requeststarted")),this._networkRecorder.on("requestfinished",reEmit("requestfinished")),this._session.on("Page.frameNavigated",this._onFrameNavigated),this._targetManager.on("protocolevent",this._onProtocolMessage)}async disable(){this._networkRecorder&&(this._session.off("Page.frameNavigated",this._onFrameNavigated),this._targetManager.off("protocolevent",this._onProtocolMessage),this._frameNavigations=[],this._networkRecorder=void 0)}async getNavigationUrls(){
-const e=this._frameNavigations;if(!e.length)return{};const t=e.filter((e=>!e.parentId));t.length||Log.warn("NetworkMonitor","No detected navigations");let n=t[0]?.url;if(this._networkRecorder){let e=this._networkRecorder.getRawRecords().find((e=>e.url===n));for(;e?.redirectSource;)e=e.redirectSource,n=e.url}return{requestedUrl:n,mainDocumentUrl:t[t.length-1]?.url}}getInflightRequests(){return this._networkRecorder?this._networkRecorder.getRawRecords().filter((e=>!e.finished)):[]}isIdle(){return this._isActiveIdlePeriod(0)}isCriticalIdle(){if(!this._networkRecorder)return!1;const e=this._networkRecorder.getRawRecords().find((e=>"Document"===e.resourceType))?.frameId;return this._isActiveIdlePeriod(0,(t=>t.frameId===e&&("VeryHigh"===t.priority||"High"===t.priority)))}is2Idle(){return this._isActiveIdlePeriod(2)}_isActiveIdlePeriod(e,t){if(!this._networkRecorder)return!1;const n=this._networkRecorder.getRawRecords();let a=0;for(let e=0;e<n.length;e++){const r=n[e]
-;r.finished||(t&&!t(r)||NetworkRequest.isNonNetworkRequest(r)||a++)}return a<=e}_emitNetworkStatus(){const e=this.isIdle(),t=this.is2Idle(),n=this.isCriticalIdle();this.emit(e?"networkidle":"networkbusy"),this.emit(t?"network-2-idle":"network-2-busy"),this.emit(n?"network-critical-idle":"network-critical-busy"),t&&e?Log.verbose("NetworkRecorder","network fully-quiet"):t&&!e?Log.verbose("NetworkRecorder","network semi-quiet"):Log.verbose("NetworkRecorder","network busy")}static findNetworkQuietPeriods(e,t,n=1/0){let a=[];e.forEach((e=>{UrlUtils.isNonNetworkProtocol(e.protocol)||"ws"!==e.protocol&&"wss"!==e.protocol&&(a.push({time:1e3*e.networkRequestTime,isStart:!0}),e.finished&&a.push({time:1e3*e.networkEndTime,isStart:!1}))})),a=a.filter((e=>e.time<=n)).sort(((e,t)=>e.time-t.time));let r=0,o=0;const i=[];return a.forEach((e=>{e.isStart?(r===t&&i.push({start:o,end:e.time}),r++):(r--,r===t&&(o=e.time))})),r<=t&&i.push({start:o,end:n}),i.filter((e=>e.start!==e.end))}}
-function waitForNothing(){return{promise:Promise.resolve(),cancel(){}}}function waitForFrameNavigated(e){let cancel=()=>{throw new Error("waitForFrameNavigated.cancel() called before it was defined")};return{promise:new Promise(((t,n)=>{e.once("Page.frameNavigated",t),cancel=()=>{e.off("Page.frameNavigated",t),n(new Error("Wait for navigated cancelled"))}})),cancel}}function waitForNetworkIdle(e,t,n){let a,r=!1,cancel=()=>{throw new Error("waitForNetworkIdle.cancel() called before it was defined")};const{networkQuietThresholdMs:o,busyEvent:i,idleEvent:s,isIdle:c}=n;return{promise:new Promise(((l,u)=>{const onIdle=()=>{t.once(i,onBusy),a=setTimeout((()=>{cancel(),l()}),o)},onBusy=()=>{t.once(s,onIdle),a&&clearTimeout(a)},domContentLoadedListener=()=>{r=!0,c(t)?onIdle():onBusy()},logStatus=()=>{if(!r)return void Log.verbose("waitFor","Waiting on DomContentLoaded");const e=t.getInflightRequests();if(Log.isVerbose()&&e.length<20&&e.length>0){
-Log.verbose("waitFor",`=== Waiting on ${e.length} requests to finish`);for(const t of e)Log.verbose("waitFor",`Waiting on ${t.url.slice(0,120)} to finish`)}};t.on("requeststarted",logStatus),t.on("requestfinished",logStatus),t.on(i,logStatus),n.pretendDCLAlreadyFired?domContentLoadedListener():e.once("Page.domContentEventFired",domContentLoadedListener);let d=!1;cancel=()=>{d||(d=!0,a&&clearTimeout(a),n.pretendDCLAlreadyFired||e.off("Page.domContentEventFired",domContentLoadedListener),t.removeListener(i,onBusy),t.removeListener(s,onIdle),t.removeListener("requeststarted",logStatus),t.removeListener("requestfinished",logStatus),t.removeListener(i,logStatus))}})),cancel}}function registerPerformanceObserverInPage(){if(void 0!==window.____lastLongTask)return;window.____lastLongTask=performance.now();new window.PerformanceObserver((e=>{const t=e.getEntries();for(const e of t)if("longtask"===e.entryType){const t=e.startTime+e.duration
-;window.____lastLongTask=Math.max(window.____lastLongTask||0,t)}})).observe({type:"longtask",buffered:!0})}function checkTimeSinceLastLongTaskInPage(){return new Promise((e=>{const t=performance.now(),n=window.____lastLongTask||0;setTimeout((()=>{const a=window.____lastLongTask||0;e(n===a?t-n:0)}),150)}))}function waitForLoadEvent(e,t){let cancel=()=>{throw new Error("waitForLoadEvent.cancel() called before it was defined")};return{promise:new Promise(((n,a)=>{let r;const loadListener=function(){r=setTimeout(n,t)};e.once("Page.loadEventFired",loadListener);let o=!1;cancel=()=>{o||(o=!0,e.off("Page.loadEventFired",loadListener),r&&clearTimeout(r))}})),cancel}}const To={waitForFcp:function waitForFcp(e,t,n){let cancel=()=>{throw new Error("waitForFcp.cancel() called before it was defined")};return{promise:new Promise(((a,r)=>{const o=setTimeout((()=>{r(new LighthouseError(LighthouseError.errors.NO_FCP))}),n);let i;const lifecycleListener=e=>{
-"firstContentfulPaint"===e.name&&(i=setTimeout((()=>{a(),cancel()}),t))};e.on("Page.lifecycleEvent",lifecycleListener);let s=!1;cancel=()=>{s||(s=!0,e.off("Page.lifecycleEvent",lifecycleListener),o&&clearTimeout(o),i&&clearTimeout(i),r(new Error("Wait for FCP canceled")))}})),cancel}},waitForLoadEvent,waitForCPUIdle:function waitForCPUIdle(e,t){if(!t)return{promise:Promise.resolve(),cancel:()=>{}};let n,a=!1;async function checkForQuiet(e,r){if(a)return;const o=await e.evaluate(checkTimeSinceLastLongTaskInPage,{args:[],useIsolation:!0});if(!a&&"number"==typeof o)if(o>=t)Log.verbose("waitFor",`CPU has been idle for ${o} ms`),r();else{Log.verbose("waitFor",`CPU has been idle for ${o} ms`);n=setTimeout((()=>checkForQuiet(e,r)),t-o)}}let cancel=()=>{throw new Error("waitForCPUIdle.cancel() called before it was defined")};const r=new ExecutionContext(e);return{promise:new Promise(((e,t)=>{r.evaluate(registerPerformanceObserverInPage,{args:[],useIsolation:!0
-}).then((()=>checkForQuiet(r,e))).catch(t),cancel=()=>{a||(a=!0,n&&clearTimeout(n),t(new Error("Wait for CPU idle canceled")))}})),cancel}},waitForNetworkIdle};const Co={warningRedirected:"The page may not be loading as expected because your test URL ({requested}) was redirected to {final}. Try testing the second URL directly.",warningTimeout:"The page loaded too slowly to finish within the time limit. Results may be incomplete."},So=createIcuMessageFn("core/gather/driver/navigation.js",Co);async function gotoURL(e,t,n){const a="string"==typeof t?{msg:`Navigating to ${t}`,id:"lh:driver:navigate"}:{msg:"Navigating using a user defined function",id:"lh:driver:navigate"};Log.time(a);const r=e.defaultSession,o=new NetworkMonitor(e.targetManager);let i;await o.enable(),await r.sendCommand("Page.enable"),await r.sendCommand("Page.setLifecycleEventsEnabled",{enabled:!0}),"string"==typeof t?(r.setNextProtocolTimeout(1/0),i=r.sendCommand("Page.navigate",{url:t})):i=t()
-;const s=n.waitUntil.includes("navigated"),c=n.waitUntil.includes("load"),l=n.waitUntil.includes("fcp"),u=[];if(s){const e=waitForFrameNavigated(r).promise;u.push(e.then((()=>({timedOut:!1}))))}if(c){const e=function resolveWaitForFullyLoadedOptions(e){let{pauseAfterFcpMs:t,pauseAfterLoadMs:n,networkQuietThresholdMs:a,cpuQuietThresholdMs:r}=e,o=e.maxWaitForLoad,i=e.maxWaitForFcp;return"number"!=typeof t&&(t=0),"number"!=typeof n&&(n=0),"number"!=typeof a&&(a=5e3),"number"!=typeof r&&(r=0),"number"!=typeof o&&(o=Qr.maxWaitForLoad),"number"!=typeof i&&(i=Qr.maxWaitForFcp),e.waitUntil.includes("fcp")||(i=void 0),{pauseAfterFcpMs:t,pauseAfterLoadMs:n,networkQuietThresholdMs:a,cpuQuietThresholdMs:r,maxWaitForLoadedMs:o,maxWaitForFcpMs:i}}(n);u.push(async function waitForFullyLoaded(e,t,n){
-const{pauseAfterFcpMs:a,pauseAfterLoadMs:r,networkQuietThresholdMs:o,cpuQuietThresholdMs:i,maxWaitForLoadedMs:s,maxWaitForFcpMs:c}=n,{waitForFcp:l,waitForLoadEvent:u,waitForNetworkIdle:d,waitForCPUIdle:m}=n._waitForTestOverrides||To;let p;const h=c?l(e,a,c):waitForNothing(),f=u(e,r),y=d(e,t,{networkQuietThresholdMs:o,busyEvent:"network-2-busy",idleEvent:"network-2-idle",isIdle:e=>e.is2Idle()}),b=d(e,t,{networkQuietThresholdMs:o,busyEvent:"network-critical-busy",idleEvent:"network-critical-idle",isIdle:e=>e.isCriticalIdle()});let v=waitForNothing();const w=Promise.all([h.promise,f.promise,y.promise,b.promise]).then((()=>(v=m(e,i),v.promise))).then((()=>async function(){return Log.verbose("waitFor","loadEventFired and network considered idle"),{timedOut:!1}})).catch((e=>function(){throw e})),D=new Promise(((e,t)=>{p=setTimeout(e,s)})).then((n=>async()=>{if(Log.warn("waitFor","Timed out waiting for page load. Checking if page is hung..."),await async function isPageHung(e){try{
-return e.setNextProtocolTimeout(1e3),await e.sendCommand("Runtime.evaluate",{expression:'"ping"',returnByValue:!0,timeout:1e3}),!1}catch(e){return!0}}(e))throw Log.warn("waitFor","Page appears to be hung, killing JavaScript..."),await e.sendCommand("Emulation.setScriptExecutionDisabled",{value:!0}),await e.sendCommand("Runtime.terminateExecution"),new LighthouseError(LighthouseError.errors.PAGE_HUNG);const n=t.getInflightRequests().map((e=>e.url));return n.length>0&&Log.warn("waitFor","Remaining inflight requests URLs",n),{timedOut:!0}})),E=await Promise.race([w,D]);return p&&clearTimeout(p),h.cancel(),f.cancel(),y.cancel(),v.cancel(),E()}(r,o,e))}else if(l)throw new Error("Cannot wait for FCP without waiting for page load");const d=(await Promise.all(u)).some((e=>e.timedOut)),m=await o.getNavigationUrls();let p=m.requestedUrl;if("string"==typeof t&&(p&&!UrlUtils.equalWithExcludedFragments(t,p)&&Log.error("Navigation",`Provided URL (${t}) did not match initial navigation URL (${p})`),
-p=t),!p)throw Error("No navigations detected when running user defined requestor.");const h=m.mainDocumentUrl||p;return await i,await o.disable(),n.debugNavigation&&await function waitForUserToContinue(e){return e.defaultSession.setNextProtocolTimeout(2**31-1),e.executionContext.evaluate((function createInPagePromise(){let resolve=()=>{};const e=new Promise((e=>resolve=e));return console.log(["You have enabled Lighthouse navigation debug mode.",'When you have finished inspecting the page, evaluate "continueLighthouseRun()"',"in the console to continue with the Lighthouse run."].join(" ")),window.continueLighthouseRun=resolve,e}),{args:[]})}(e),Log.timeEnd(a),{requestedUrl:p,mainDocumentUrl:h,warnings:getNavigationWarnings({timedOut:d,mainDocumentUrl:h,requestedUrl:p})}}function getNavigationWarnings(e){const{requestedUrl:t,mainDocumentUrl:n}=e,a=[];return e.timedOut&&a.push(So(Co.warningTimeout)),UrlUtils.equalWithExcludedFragments(t,n)||a.push(So(Co.warningRedirected,{requested:t,
-final:n})),a}function getServiceWorkerVersions(e){return new Promise(((t,n)=>{const versionUpdatedListener=a=>{const r=a.versions.filter((e=>"redundant"!==e.status)),o=r.find((e=>"activated"===e.status));r.length&&!o||(e.off("ServiceWorker.workerVersionUpdated",versionUpdatedListener),e.sendCommand("ServiceWorker.disable").then((e=>t(a)),n))};e.on("ServiceWorker.workerVersionUpdated",versionUpdatedListener),e.sendCommand("ServiceWorker.enable").catch(n)}))}function getServiceWorkerRegistrations(e){return new Promise(((t,n)=>{e.once("ServiceWorker.workerRegistrationUpdated",(a=>{e.sendCommand("ServiceWorker.disable").then((e=>t(a)),n)})),e.sendCommand("ServiceWorker.enable").catch(n)}))}class NetworkUserAgent extends FRGatherer{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}};static getNetworkUserAgent(e){for(const t of e){if("Network.requestWillBeSent"!==t.method)continue;const e=t.params.request.headers["User-Agent"];if(e)return e}return""}
-async getArtifact(e){return NetworkUserAgent.getNetworkUserAgent(e.dependencies.DevtoolsLog)}}var _o=Object.freeze({__proto__:null,default:NetworkUserAgent});async function getBaseArtifacts(e,t,n){const a=await getBenchmarkIndex(t.executionContext),{userAgent:r}=await getBrowserVersion(t.defaultSession);return{fetchTime:(new Date).toJSON(),Timing:[],LighthouseRunWarnings:[],settings:e.settings,BenchmarkIndex:a,HostUserAgent:r,HostFormFactor:r.includes("Android")||r.includes("Mobile")?"mobile":"desktop",URL:{finalDisplayedUrl:""},PageLoadError:null,GatherContext:n,NetworkUserAgent:"",traces:{},devtoolsLogs:{}}}function finalizeArtifacts(e,t){const n=e.LighthouseRunWarnings.concat(t.LighthouseRunWarnings||[]).concat(getEnvironmentWarnings({settings:e.settings,baseArtifacts:e})),a={...e,...t};if(a.Timing=Log.getTimeEntries(),a.LighthouseRunWarnings=function deduplicateWarnings(e){const t=[];for(const n of e)t.some((e=>Xa(n,e)))||t.push(n);return t}(n),
-a.PageLoadError&&!a.URL.finalDisplayedUrl&&(a.URL.finalDisplayedUrl=a.URL.requestedUrl||""),!a.URL.finalDisplayedUrl)throw new Error("Runner did not set finalDisplayedUrl");return a}class GatherRunner{static async loadBlank(e,t=eo.blankPage){const n={msg:"Resetting state with about:blank",id:"lh:gather:loadBlank"};Log.time(n),await gotoURL(e,t,{waitUntil:["navigated"]}),Log.timeEnd(n)}static async loadPage(e,t){const n={msg:"Loading page & waiting for onload",id:`lh:gather:loadPage-${t.passConfig.passName}`};Log.time(n);try{const a=t.url,{mainDocumentUrl:r,warnings:o}=await gotoURL(e,a,{waitUntil:t.passConfig.recordTrace?["load","fcp"]:["load"],debugNavigation:t.settings.debugNavigation,maxWaitForFcp:t.settings.maxWaitForFcp,maxWaitForLoad:t.settings.maxWaitForLoad,...t.passConfig});t.url=r;const{URL:i}=t.baseArtifacts;i.finalDisplayedUrl&&i.mainDocumentUrl||(i.mainDocumentUrl=r,i.finalDisplayedUrl=await t.driver.url()),
-"fatal"===t.passConfig.loadFailureMode&&t.LighthouseRunWarnings.push(...o)}catch(e){if("NO_FCP"===e.code||"PAGE_HUNG"===e.code)return{navigationError:e};throw e}finally{Log.timeEnd(n)}return{}}static assertNoSameOriginServiceWorkerClients(e,t){let n,a;return getServiceWorkerRegistrations(e).then((e=>{n=e.registrations})).then((t=>getServiceWorkerVersions(e))).then((e=>{a=e.versions})).then((e=>{const r=new URL(t).origin;n.filter((e=>{const t=new URL(e.scopeURL).origin;return r===t})).forEach((e=>{a.forEach((t=>{if(t.registrationId===e.registrationId&&t.controlledClients&&t.controlledClients.length>0)throw new Error("You probably have multiple tabs open to the same origin.")}))}))}))}static async setupDriver(e,t){const n={msg:"Initializing…",id:"lh:gather:setupDriver"};Log.time(n);const a=e.defaultSession;await GatherRunner.assertNoSameOriginServiceWorkerClients(a,t.requestedUrl),await prepareTargetForNavigationMode(e,t.settings),Log.timeEnd(n)}static async disposeDriver(e,t){const n={
-msg:"Disconnecting from browser...",id:"lh:gather:disconnect"};Log.time(n);try{const n=e.defaultSession;!t.settings.disableStorageReset&&await clearDataForOrigin(n,t.requestedUrl),await e.disconnect()}catch(e){/close\/.*status: (500|404)$/.test(e.message)||Log.error("GatherRunner disconnect",e.message)}Log.timeEnd(n)}static async beginRecording(e){const t={msg:"Beginning devtoolsLog and trace",id:"lh:gather:beginRecording"};Log.time(t);const{driver:n,passConfig:a,settings:r}=e;await n.beginDevtoolsLog(),a.recordTrace&&await n.beginTrace(r),Log.timeEnd(t)}static async endRecording(e){const{driver:t,passConfig:n}=e;let a;if(n.recordTrace){const e={msg:"Gathering trace",id:"lh:gather:getTrace"};Log.time(e),a=await t.endTrace(),Log.timeEnd(e)}const r={msg:"Gathering devtoolsLog & network records",id:"lh:gather:getDevtoolsLog"};Log.time(r);const o=await t.endDevtoolsLog(),i=await bo.request(o,e);return Log.timeEnd(r),{networkRecords:i,devtoolsLog:o,trace:a}}static async beforePass(e,t){
-const n={msg:"Running beforePass methods",id:"lh:gather:beforePass"};Log.time(n,"verbose");for(const n of e.passConfig.gatherers){const a=n.instance,r={msg:`Gathering setup: ${a.name}`,id:`lh:gather:beforePass:${a.name}`};Log.time(r,"verbose");const o=Promise.resolve().then((t=>a.beforePass(e)));t[a.name]=[o],await o.catch((()=>{})),Log.timeEnd(r)}Log.timeEnd(n)}static async pass(e,t){const n=e.passConfig.gatherers,a={msg:"Running pass methods",id:"lh:gather:pass"};Log.time(a,"verbose");for(const a of n){const n=a.instance,r={msg:`Gathering in-page: ${n.name}`,id:`lh:gather:pass:${n.name}`};Log.time(r);const o=Promise.resolve().then((t=>n.pass(e))),i=t[n.name]||[];i.push(o),t[n.name]=i,await o.catch((()=>{}))}Log.timeEnd(a)}static async afterPass(e,t,n){const a=e.passConfig.gatherers,r={msg:"Running afterPass methods",id:"lh:gather:afterPass"};Log.time(r,"verbose");for(const r of a){const a=r.instance,o={msg:`Gathering: ${a.name}`,id:`lh:gather:afterPass:${a.name}`};Log.time(o)
-;const i=Promise.resolve().then((n=>a.afterPass(e,t))),s=n[a.name]||[];s.push(i),n[a.name]=s,await i.catch((()=>{})),Log.timeEnd(o)}Log.timeEnd(r)}static async collectArtifacts(e){const t={},n=Object.entries(e);for(const[e,a]of n){try{const n=(await Promise.all(a)).filter((e=>void 0!==e)),r=n[n.length-1];t[e]=r}catch(n){t[e]=n}if(void 0===t[e])throw new Error(`${e} failed to provide an artifact.`)}return{artifacts:t}}static async initializeBaseArtifacts(e){const t=(await e.driver.getBrowserVersion()).userAgent,n=t.includes("Android")||t.includes("Mobile")?"mobile":"desktop";return{fetchTime:(new Date).toJSON(),LighthouseRunWarnings:[],HostFormFactor:n,HostUserAgent:t,NetworkUserAgent:"",BenchmarkIndex:0,traces:{},devtoolsLogs:{},settings:e.settings,GatherContext:{gatherMode:"navigation"},URL:{requestedUrl:e.requestedUrl,mainDocumentUrl:"",finalDisplayedUrl:""},Timing:[],PageLoadError:null}}static async populateBaseArtifacts(e){const t={msg:"Populate base artifacts",
-id:"lh:gather:populateBaseArtifacts"};Log.time(t);const n=e.baseArtifacts,a=n.devtoolsLogs[e.passConfig.passName];n.NetworkUserAgent=NetworkUserAgent.getNetworkUserAgent(a);const r=getEnvironmentWarnings(e);n.LighthouseRunWarnings.push(...r),Log.timeEnd(t)}static async run(e,t){const n=t.driver,a={};try{await n.connect(),await GatherRunner.loadBlank(n);const r=await GatherRunner.initializeBaseArtifacts(t);r.BenchmarkIndex=await getBenchmarkIndex(n.executionContext);const o=UrlUtils.isValid(t.requestedUrl)&&new URL(t.requestedUrl);if("lr"===t.settings.channel&&o&&o.searchParams.has("bidx")){const e=Number(o.searchParams.get("bidx"))||0,t=[r.BenchmarkIndex];for(let a=0;a<e;a++){const e=await getBenchmarkIndex(n.executionContext);t.push(e)}r.BenchmarkIndexes=t}await GatherRunner.setupDriver(n,t);let i=!0;for(const o of e){const e={gatherMode:"navigation",driver:n,url:t.requestedUrl,settings:t.settings,passConfig:o,baseArtifacts:r,computedCache:t.computedCache,
-LighthouseRunWarnings:r.LighthouseRunWarnings},s=await GatherRunner.runPass(e);if(Object.assign(a,s.artifacts),s.pageLoadError&&"fatal"===o.loadFailureMode){r.PageLoadError=s.pageLoadError;break}i&&(await GatherRunner.populateBaseArtifacts(e),i=!1)}return await GatherRunner.disposeDriver(n,t),finalizeArtifacts(r,a)}catch(e){throw GatherRunner.disposeDriver(n,t),e}}static _addLoadDataToBaseArtifacts(e,t,n){const a=e.baseArtifacts;a.devtoolsLogs[n]=t.devtoolsLog,t.trace&&(a.traces[n]=t.trace)}static async runPass(e){const t={msg:`Running ${e.passConfig.passName} pass`,id:`lh:gather:runPass-${e.passConfig.passName}`,args:[e.passConfig.gatherers.map((e=>e.instance.name)).join(", ")]};Log.time(t);const n={},{driver:a,passConfig:r}=e;await GatherRunner.loadBlank(a,r.blankPage);const{warnings:o}=await prepareTargetForIndividualNavigation(a.defaultSession,e.settings,{requestor:e.url,disableStorageReset:!r.useThrottling,disableThrottling:!r.useThrottling,blockedUrlPatterns:r.blockedUrlPatterns
-});e.LighthouseRunWarnings.push(...o),await GatherRunner.beforePass(e,n),await GatherRunner.beginRecording(e);const{navigationError:i}=await GatherRunner.loadPage(a,e);await GatherRunner.pass(e,n);const s=await GatherRunner.endRecording(e);await clearThrottling(a.defaultSession);const c=getPageLoadError(i,{url:e.url,loadFailureMode:r.loadFailureMode,networkRecords:s.networkRecords,warnings:e.LighthouseRunWarnings});if(c){const n=getFormatted(c.friendlyMessage,e.settings.locale);return Log.error("GatherRunner",n,e.url),e.LighthouseRunWarnings.push(c.friendlyMessage),GatherRunner._addLoadDataToBaseArtifacts(e,s,`pageLoadError-${r.passName}`),Log.timeEnd(t),{artifacts:{},pageLoadError:c}}GatherRunner._addLoadDataToBaseArtifacts(e,s,r.passName),await GatherRunner.afterPass(e,s,n);const l=GatherRunner.collectArtifacts(n);return Log.timeEnd(t),l}}const Ao=!!_.env.CI||"test"===_.env.NODE_ENV;function getLogNormalScore({median:e,p10:t},n){
-if(e<=0)throw new Error("median must be greater than zero");if(t<=0)throw new Error("p10 must be greater than zero");if(t>=e)throw new Error("p10 must be less than the median");if(n<=0)return 1;const a=Math.max(Number.MIN_VALUE,n/e),r=Math.log(a),o=Math.max(Number.MIN_VALUE,t/e),i=(1-function erf(e){const t=Math.sign(e),n=1/(1+.3275911*(e=Math.abs(e)));return t*(1-n*(.254829592+n*(n*(1.421413741+n*(1.061405429*n-1.453152027))-.284496736))*Math.exp(-e*e))}(.9061938024368232*r/-Math.log(o)))/2;let s;return s=n<=t?Math.max(.9,Math.min(1,i)):n<=e?Math.max(.5,Math.min(.8999999999999999,i)):Math.max(0,Math.min(.49999999999999994,i)),s}class Audit{static get DEFAULT_PASS(){return"defaultPass"}static get SCORING_MODES(){return{NUMERIC:"numeric",BINARY:"binary",MANUAL:"manual",INFORMATIVE:"informative",NOT_APPLICABLE:"notApplicable",ERROR:"error"}}static get meta(){throw new Error("Audit meta information must be overridden.")}static get defaultOptions(){return{}}static audit(e,t){
-throw new Error("audit() method must be overridden")}static computeLogNormalScore(e,t){let n=getLogNormalScore(e,t);return n>.9&&(n+=.05*(n-.9)),Math.floor(100*n)/100}static assertHeadingKeysExist(e,t){if(t.length&&Ao)for(const n of e){if(null===n.key)continue;const e=n.key;if(!t.some((t=>e in t)))throw new Error(`"${n.key}" is missing from items`)}}static makeTableDetails(e,t,n={}){const{wastedBytes:a,wastedMs:r,sortedBy:o,skipSumming:i,isEntityGrouped:s}=n,c=a||r?{wastedBytes:a,wastedMs:r}:void 0;return 0===t.length?{type:"table",headings:[],items:[],summary:c}:(Audit.assertHeadingKeysExist(e,t),{type:"table",headings:e,items:t,summary:c,sortedBy:o,skipSumming:i,isEntityGrouped:s})}static makeListDetails(e){return{type:"list",items:e}}static makeSnippetDetails({content:e,title:t,lineMessages:n,generalMessages:a,node:r,maxLineLength:o=200,maxLinesAroundMessage:i=20}){const s=Audit._makeSnippetLinesArray(e,o);return{type:"snippet",lines:Util.filterRelevantLines(s,n,i),title:t,
-lineMessages:n,generalMessages:a,lineCount:s.length,node:r}}static _makeSnippetLinesArray(e,t){return e.split("\n").map(((e,n)=>{const a=n+1,r={content:Util.truncate(e,t),lineNumber:a};return e.length>t&&(r.truncated=!0),r}))}static makeOpportunityDetails(e,t,n){Audit.assertHeadingKeysExist(e,t);const{overallSavingsMs:a,overallSavingsBytes:r,sortedBy:o,skipSumming:i,isEntityGrouped:s}=n;return{type:"opportunity",headings:0===t.length?[]:e,items:t,overallSavingsMs:a,overallSavingsBytes:r,sortedBy:o,skipSumming:i,isEntityGrouped:s}}static makeNodeItem(e){return{type:"node",lhId:e.lhId,path:e.devtoolsNodePath,selector:e.selector,boundingRect:e.boundingRect,snippet:e.snippet,nodeLabel:e.nodeLabel}}static _findOriginalLocation(e,t,n){const a=e?.map.findEntry(t,n);if(a)return{file:a.sourceURL||"",line:a.sourceLineNumber||0,column:a.sourceColumnNumber||0}}static makeSourceLocation(e,t,n,a){return{type:"source-location",url:e,urlProvider:"network",line:t,column:n,
-original:a&&this._findOriginalLocation(a,t,n)}}static makeSourceLocationFromConsoleMessage(e,t){if(!e.url)return;const n=e.lineNumber||0,a=e.columnNumber||0;return this.makeSourceLocation(e.url,n,a,t)}static _normalizeAuditScore(e,t,n){if(t!==Audit.SCORING_MODES.BINARY&&t!==Audit.SCORING_MODES.NUMERIC)return null;if(null===e||!Number.isFinite(e))throw new Error(`Invalid score for ${n}: ${e}`);if(e>1)throw new Error(`Audit score for ${n} is > 1`);if(e<0)throw new Error(`Audit score for ${n} is < 0`);var a;return a=e,e=Math.round(100*a)/100}static generateErrorAuditResult(e,t,n){return Audit.generateAuditResult(e,{score:null,errorMessage:t,errorStack:n})}static generateAuditResult(e,t){if(void 0===t.score)throw new Error("generateAuditResult requires a score");let n=e.meta.scoreDisplayMode||Audit.SCORING_MODES.BINARY;void 0!==t.errorMessage?n=Audit.SCORING_MODES.ERROR:t.notApplicable&&(n=Audit.SCORING_MODES.NOT_APPLICABLE);const a=Audit._normalizeAuditScore(t.score,n,e.meta.id)
-;let r=e.meta.title;e.meta.failureTitle&&null!==a&&a<Util.PASS_THRESHOLD&&(r=e.meta.failureTitle);const o="numericUnit"in t?t:void 0;return{id:e.meta.id,title:r,description:e.meta.description,score:a,scoreDisplayMode:n,numericValue:o?.numericValue,numericUnit:o?.numericUnit,displayValue:t.displayValue,explanation:t.explanation,errorMessage:t.errorMessage,errorStack:t.errorStack,warnings:t.warnings,details:t.details}}static makeMetricComputationDataInput(e,t){return{trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings,URL:e.URL}}}class ReportScoring{static arithmeticMean(e){if((e=e.filter((e=>e.weight>0))).some((e=>null===e.score)))return null;const t=e.reduce(((e,t)=>{const n=t.score,a=t.weight;return{weight:e.weight+a,sum:e.sum+n*a}}),{weight:0,sum:0});return n=t.sum/t.weight||0,Math.round(100*n)/100;var n}static scoreAllCategories(e,t){const n={};for(const[a,r]of Object.entries(e)){
-const e=r.auditRefs.map((e=>{const n={...e},a=t[n.id];return a.scoreDisplayMode!==Audit.SCORING_MODES.NOT_APPLICABLE&&a.scoreDisplayMode!==Audit.SCORING_MODES.INFORMATIVE&&a.scoreDisplayMode!==Audit.SCORING_MODES.MANUAL||(n.weight=0),n})),o=e.map((e=>({score:t[e.id].score,weight:e.weight}))),i=ReportScoring.arithmeticMean(o);n[a]={...r,auditRefs:e,id:a,score:i}}return n}}var ko=[{id:"amp",title:"AMP",icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><path fill="%230379c4" fill-rule="evenodd" d="m171.887 116.28-53.696 89.36h-9.728l9.617-58.227-30.2.047a4.852 4.852 0 0 1-4.855-4.855c0-1.152 1.07-3.102 1.07-3.102l53.52-89.254 9.9.043-9.86 58.317 30.413-.043a4.852 4.852 0 0 1 4.855 4.855c0 1.088-.427 2.044-1.033 2.854l.004.004zM128 0C57.306 0 0 57.3 0 128s57.306 128 128 128 128-57.306 128-128S198.7 0 128 0z"/></svg>',UIStrings:{
-"modern-image-formats":"Consider displaying all [`amp-img`](https://amp.dev/documentation/components/amp-img/?format=websites) components in WebP formats while specifying an appropriate fallback for other browsers. [Learn more](https://amp.dev/documentation/components/amp-img/#example:-specifying-a-fallback-image).","offscreen-images":"Ensure that you are using [`amp-img`](https://amp.dev/documentation/components/amp-img/?format=websites) for images to automatically lazy-load. [Learn more](https://amp.dev/documentation/guides-and-tutorials/develop/media_iframes_3p/?format=websites#images).","render-blocking-resources":"Use tools such as [AMP Optimizer](https://github.com/ampproject/amp-toolbox/tree/master/packages/optimizer) to [server-side render AMP layouts](https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/server-side-rendering/).",
-"unminified-css":"Refer to the [AMP documentation](https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/style_pages/) to ensure all styles are supported.","efficient-animated-content":"For animated content, use [`amp-anim`](https://amp.dev/documentation/components/amp-anim/) to minimize CPU usage when the content is offscreen.","uses-responsive-images":"The [`amp-img`](https://amp.dev/documentation/components/amp-img/?format=websites) component supports the [`srcset`](https://web.dev/use-srcset-to-automatically-choose-the-right-image/) attribute to specify which image assets to use based on the screen size. [Learn more](https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/art_direction/)."}},{id:"angular",title:"Angular",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><path fill="%23dd0031" d="M125 30 31.9 63.2l14.2 123.1L125 230l78.9-43.7 14.2-123.1z"/><path fill="%23c3002f" d="M125 30v22.2-.1V230l78.9-43.7 14.2-123.1L125 30z"/><path fill="%23fff" d="M125 52.1 66.8 182.6h21.7l11.7-29.2h49.4l11.7 29.2H183L125 52.1zm17 83.3h-34l17-40.9 17 40.9z"/></svg>',UIStrings:{"total-byte-weight":"Apply [route-level code splitting](https://web.dev/route-level-code-splitting-in-angular/) to minimize the size of your JavaScript bundles. Also, consider precaching assets with the [Angular service worker](https://web.dev/precaching-with-the-angular-service-worker/).","unminified-warning":"If you are using Angular CLI, ensure that builds are generated in production mode. [Learn more](https://angular.io/guide/deployment#enable-runtime-production-mode).",
-"unused-javascript":"If you are using Angular CLI, include source maps in your production build to inspect your bundles. [Learn more](https://angular.io/guide/deployment#inspect-the-bundles).","uses-responsive-images":"Consider using the `BreakpointObserver` utility in the Component Dev Kit (CDK) to manage image breakpoints. [Learn more](https://material.angular.io/cdk/layout/overview).","uses-rel-preload":"Preload routes ahead of time to speed up navigation. [Learn more](https://web.dev/route-preloading-in-angular/).","dom-size":"Consider virtual scrolling with the Component Dev Kit (CDK) if very large lists are being rendered. [Learn more](https://web.dev/virtualize-lists-with-angular-cdk/)."}},{id:"drupal",title:"Drupal",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 186.525 243.713"><path fill="%23009cde" d="M131.64 51.91C114.491 34.769 98.13 18.429 93.26 0c-4.87 18.429-21.234 34.769-38.38 51.91C29.16 77.613 0 106.743 0 150.434a93.263 93.263 0 1 0 186.525 0c0-43.688-29.158-72.821-54.885-98.524m-92 120.256c-5.719-.194-26.824-36.571 12.329-75.303l25.909 28.3a2.215 2.215 0 0 1-.173 3.306c-6.183 6.34-32.534 32.765-35.81 41.902-.675 1.886-1.663 1.815-2.256 1.795m53.624 47.943a32.075 32.075 0 0 1-32.076-32.075 33.423 33.423 0 0 1 7.995-21.187c5.784-7.072 24.077-26.963 24.077-26.963s18.012 20.183 24.033 26.896a31.368 31.368 0 0 1 8.046 21.254 32.076 32.076 0 0 1-32.075 32.075m61.392-52.015c-.691 1.512-2.26 4.036-4.376 4.113-3.773.138-4.176-1.796-6.965-5.923-6.122-9.06-59.551-64.9-69.545-75.699-8.79-9.498-1.238-16.195 2.266-19.704 4.395-4.403 17.224-17.225 17.224-17.225s38.255 36.296 54.19 61.096 10.444 46.26 7.206 53.342"/></svg>',UIStrings:{
-"unused-css-rules":"Consider removing unused CSS rules and only attach the needed Drupal libraries to the relevant page or component in a page. See the [Drupal documentation link](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) for details. To identify attached libraries that are adding extraneous CSS, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the theme/module responsible from the URL of the stylesheet when CSS aggregation is disabled in your Drupal site. Look out for themes/modules that have many stylesheets in the list which have a lot of red in code coverage. A theme/module should only enqueue a stylesheet if it is actually used on the page.",
-"unused-javascript":"Consider removing unused JavaScript assets and only attach the needed Drupal libraries to the relevant page or component in a page. See the [Drupal documentation link](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) for details. To identify attached libraries that are adding extraneous JavaScript, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the theme/module responsible from the URL of the script when JavaScript aggregation is disabled in your Drupal site. Look out for themes/modules that have many scripts in the list which have a lot of red in code coverage. A theme/module should only enqueue a script if it is actually used on the page.",
-"modern-image-formats":"Consider configuring [WebP image formats with a Convert image style](https://www.drupal.org/docs/core-modules-and-themes/core-modules/image-module/working-with-images#styles) on your site.","offscreen-images":"Install [a Drupal module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) that can lazy load images. Such modules provide the ability to defer any offscreen images to improve performance.","total-byte-weight":"Consider using [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) to reduce the size of images loaded on your page. If you are using Views to show multiple content items on a page, consider implementing pagination to limit the number of content items shown on a given page.",
-"render-blocking-resources":"Consider using a module to inline critical CSS and JavaScript, or potentially load assets asynchronously via JavaScript such as the [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg) module. Beware that optimizations provided by this module may break your site, so you will likely need to make code changes.","unminified-css":'Ensure you have enabled "Aggregate CSS files" in the "Administration » Configuration » Development" page. You can also configure more advanced aggregation options through [additional modules](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) to speed up your site by concatenating, minifying, and compressing your CSS styles.',
-"unminified-javascript":'Ensure you have enabled "Aggregate JavaScript files" in the "Administration » Configuration » Development" page. You can also configure more advanced aggregation options through [additional modules](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) to speed up your site by concatenating, minifying, and compressing your JavaScript assets.',"efficient-animated-content":"Consider uploading your GIF to a service which will make it available to embed as an HTML5 video.",
-"uses-long-cache-ttl":'Set the "Browser and proxy cache maximum age" in the "Administration » Configuration » Development" page. Read about [Drupal cache and optimizing for performance](https://www.drupal.org/docs/7/managing-site-performance-and-scalability/caching-to-improve-performance/caching-overview#s-drupal-performance-resources).',"uses-optimized-images":"Consider using [a module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=optimize+images&solrsort=iss_project_release_usage+desc&op=Search) that automatically optimizes and reduces the size of images uploaded through the site while retaining quality. Also, ensure you are using the native [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) provided from Drupal (available in Drupal 8 and above) for all images rendered on the site.",
-"uses-responsive-images":"Ensure that you are using the native [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) provided from Drupal (available in Drupal 8 and above). Use the Responsive Image Styles when rendering image fields through view modes, views, or images uploaded through the WYSIWYG editor.","server-response-time":"Themes, modules, and server specifications all contribute to server response time. Consider finding a more optimized theme, carefully selecting an optimization module, and/or upgrading your server. Your hosting servers should make use of PHP opcode caching, memory-caching to reduce database query times such as Redis or Memcached, as well as optimized application logic to prepare pages faster.",
-"uses-rel-preconnect":"Preconnect or dns-prefetch resource hints can be added by installing and configuring [a module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=dns-prefetch&solrsort=iss_project_release_usage+desc&op=Search) that provides facilities for user agent resource hints.","font-display":"Specify `@font-display` when defining custom fonts in your theme."}},{id:"ezoic",title:"Ezoic",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 82 82"><path fill="%235FA624" fill-rule="evenodd" d="M81.37 48.117C85.301 25.821 70.413 4.56 48.117.63 25.821-3.3 4.56 11.586.63 33.883-3.3 56.178 11.586 77.44 33.883 81.37 56.18 85.301 77.44 70.412 81.37 48.117Zm-8.935-14.17c2.77 12.357-1.942 25.721-12.96 33.436-14.57 10.203-34.656 6.662-44.859-7.909a32.434 32.434 0 0 1-2.869-4.98l28.7-20.097a6.53 6.53 0 1 0-3.744-5.347L9.564 48.054c-2.768-12.359 1.943-25.724 12.96-33.439 14.572-10.203 34.656-6.662 44.86 7.91a32.349 32.349 0 0 1 2.868 4.98L41.554 47.6a6.53 6.53 0 1 0 3.746 5.35l27.136-19.003Z"/></svg>',UIStrings:{"unused-css-rules":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Remove Unused CSS` to help with this issue. It will identify the CSS classes that are actually used on each page of your site, and remove any others to keep the file size small.",
-"modern-image-formats":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Next-Gen Formats` to convert images to WebP.","offscreen-images":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Lazy Load Images` to defer loading off-screen images until they are needed.","render-blocking-resources":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Critical CSS` and `Script Delay` to defer non-critical JS/CSS.","unminified-css":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Minify CSS` to automatically minify your CSS to reduce network payload sizes.","unminified-javascript":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Minify Javascript` to automatically minify your JS to reduce network payload sizes.","uses-long-cache-ttl":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Efficient Static Cache Policy` to set recommended values in the caching header for static assests.",
-"uses-optimized-images":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Next-Gen Formats` to convert images to WebP.","uses-responsive-images":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Resize Images` to resize images to a device appropriate size, reducing network payload sizes.","server-response-time":"Use [Ezoic Cloud Caching](https://pubdash.ezoic.com/speed/caching) to cache your content across our world wide network, improving time to first byte.","uses-rel-preconnect":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Pre-Connect Origins` to automatically add `preconnect` resource hints to establish early connections to important third-party origins.","uses-rel-preload":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Preload Fonts` and `Preload Background Images` to add `preload` links to prioritize fetching resources that are currently requested later in page load.",
-"font-display":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Optimize Fonts` to automatically leverage the `font-display` CSS feature to ensure text is user-visible while webfonts are loading."}},{id:"gatsby",title:"Gatsby",icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><circle cx="14" cy="14" r="14" fill="%23639"/><path fill="%23fff" d="M6.2 21.8C4.1 19.7 3 16.9 3 14.2L13.9 25c-2.8-.1-5.6-1.1-7.7-3.2zm10.2 2.9L3.3 11.6C4.4 6.7 8.8 3 14 3c3.7 0 6.9 1.8 8.9 4.5l-1.5 1.3C19.7 6.5 17 5 14 5c-3.9 0-7.2 2.5-8.5 6L17 22.5c2.9-1 5.1-3.5 5.8-6.5H18v-2h7c0 5.2-3.7 9.6-8.6 10.7z"/></svg>',UIStrings:{"unused-css-rules":"Use the `PurgeCSS` `Gatsby` plugin to remove unused rules from stylesheets. [Learn more](https://purgecss.com/plugins/gatsby.html).",
-"modern-image-formats":"Use the `gatsby-plugin-image` component instead of `<img>` to automatically optimize image format. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image).","offscreen-images":"Use the `gatsby-plugin-image` component instead of `<img>` to automatically lazy-load images. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image).","render-blocking-resources":"Use the `Gatsby Script API` to defer loading of non-critical third-party scripts. [Learn more](https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-script/).","unused-javascript":"Use `Webpack Bundle Analyzer` to detect unused JavaScript code. [Learn more](https://www.gatsbyjs.com/plugins/gatsby-plugin-webpack-bundle-analyser-v2/)","uses-long-cache-ttl":"Configure caching for immutable assets. [Learn more](https://www.gatsbyjs.com/docs/how-to/previews-deploys-hosting/caching/).",
-"uses-optimized-images":"Use the `gatsby-plugin-image` component instead of `<img>` to adjust image quality. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image).","uses-responsive-images":"Use the `gatsby-plugin-image` component to set appropriate `sizes`. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image).","prioritize-lcp-image":"Use the `gatsby-plugin-image` component and set the `loading` prop to `eager`. [Learn more](https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-plugin-image#shared-props)."}},{id:"joomla",title:"Joomla",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 258"><path fill="%23F9AE41" d="M255.7 35.6a33.7 33.7 0 0 0-67-4.8l-.4-.2c-27.6-12.4-50.8 9.6-50.8 9.6l-61.4 61.7 24.3 23.4 49.4-48.6c23-23 35.6-7.4 35.6-7.4 17.4 14.6.6 32 .6 32l24.9 24c20.3-22 21.5-41.1 15.3-56.3a33.7 33.7 0 0 0 29.5-33.4"/><path fill="%23EE4035" d="m226.5 190.5.2-.3c12.4-27.6-9.6-50.8-9.6-50.8L155.4 78l-23.3 24.3 48.5 49.4c23 23 7.5 35.6 7.5 35.6-14.7 17.4-32 .6-32 .6l-24 24.9c21.9 20.3 41 21.5 56.2 15.3a33.7 33.7 0 1 0 38.2-37.6"/><path fill="%234F91CD" d="m156 133-49.5 48.6c-23 23-35.6 7.4-35.6 7.4-17.4-14.6-.6-32-.6-32l-24.9-24c-20.3 22-21.4 41.1-15.3 56.3a33.7 33.7 0 1 0 37.6 38.2l.3.2c27.6 12.4 50.8-9.6 50.8-9.6l61.4-61.7-24.3-23.4"/><path fill="%237AC043" d="M75.7 106.6c-23-23-7.4-35.6-7.4-35.6 14.6-17.4 32-.6 32-.6l24-24.9c-22-20.3-41-21.5-56.3-15.3a33.7 33.7 0 1 0-38.2 37.6l-.2.3C17.2 95.7 39.2 119 39.2 119l61.7 61.4 23.4-24.3-48.6-49.4"/></svg>',
-UIStrings:{"unused-css-rules":"Consider reducing, or switching, the number of [Joomla extensions](https://extensions.joomla.org/) loading unused CSS in your page. To identify extensions that are adding extraneous CSS, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the theme/plugin responsible from the URL of the stylesheet. Look out for plugins that have many stylesheets in the list which have a lot of red in code coverage. A plugin should only enqueue a stylesheet if it is actually used on the page.","modern-image-formats":"Consider using a [plugin](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=webp) or service that will automatically convert your uploaded images to the optimal formats.",
-"offscreen-images":"Install a [lazy-load Joomla plugin](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=lazy%20loading) that provides the ability to defer any offscreen images, or switch to a template that provides that functionality. Starting with Joomla 4.0, all new images will [automatically](https://github.com/joomla/joomla-cms/pull/30748) get the `loading` attribute from the core.","total-byte-weight":"Consider showing excerpts in your article categories (e.g. via the read more link), reducing the number of articles shown on a given page, breaking your long posts into multiple pages, or using a plugin to lazy-load comments.",
-"render-blocking-resources":"There are a number of Joomla plugins that can help you [inline critical assets](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance) or [defer less important resources](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance). Beware that optimizations provided by these plugins may break features of your templates or plugins, so you will need to test these thoroughly.","unminified-css":"A number of [Joomla extensions](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance) can speed up your site by concatenating, minifying, and compressing your css styles. There are also templates that provide this functionality.","unminified-javascript":"A number of [Joomla extensions](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance) can speed up your site by concatenating, minifying, and compressing your scripts. There are also templates that provide this functionality.",
-"efficient-animated-content":"Consider uploading your GIF to a service which will make it available to embed as an HTML5 video.","unused-javascript":"Consider reducing, or switching, the number of [Joomla extensions](https://extensions.joomla.org/) loading unused JavaScript in your page. To identify plugins that are adding extraneous JS, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the extension responsible from the URL of the script. Look out for extensions that have many scripts in the list which have a lot of red in code coverage. An extension should only enqueue a script if it is actually used on the page.","uses-long-cache-ttl":"Read about [Browser Caching in Joomla](https://docs.joomla.org/Cache).",
-"uses-optimized-images":"Consider using an [image optimization plugin](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance) that compresses your images while retaining quality.","uses-text-compression":"You can enable text compression by enabling Gzip Page Compression in Joomla (System > Global configuration > Server).","uses-responsive-images":"Consider using a [responsive images plugin](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=responsive%20images) to use responsive images in your content.","server-response-time":"Templates, extensions, and server specifications all contribute to server response time. Consider finding a more optimized template, carefully selecting an optimization extension, and/or upgrading your server."}},{id:"magento",title:"Magento",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="%23f26322" viewBox="0 0 1000 1000"><path d="M916.9 267.4v465.3l-111.3 67.4V331.4l-1.5-.9-303.9-189-304.6 189.2-1.2.8V799L83.1 732.6V267.4l.7-.4L500.3 10l416 257 .6.4zM560.7 468.5v383.3L500.3 890l-61-38.2V306.7l-136 84.3v476.6l197 122.5 196.4-122.5V391l-136-84.3v161.8z"/></svg>',UIStrings:{"modern-image-formats":"Consider searching the [Magento Marketplace](https://marketplace.magento.com/catalogsearch/result/?q=webp) for a variety of third-party extensions to leverage newer image formats.","offscreen-images":"Consider modifying your product and catalog templates to make use of the web platform's [lazy loading](https://web.dev/native-lazy-loading) feature.","disable-bundling":"Disable Magento's built-in [JavaScript bundling and minification](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/js-bundling.html), and consider using [baler](https://github.com/magento/baler/) instead.",
-"unminified-css":'Enable the "Minify CSS Files" option in your store\'s Developer settings. [Learn more](https://devdocs.magento.com/guides/v2.3/performance-best-practices/configuration.html?itm_source=devdocs&itm_medium=search_page&itm_campaign=federated_search&itm_term=minify%20css%20files).',"unminified-javascript":"Use [Terser](https://www.npmjs.com/package/terser) to minify all JavaScript assets from static content deployment, and disable the built-in minification feature.","unused-javascript":"Disable Magento's built-in [JavaScript bundling](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/js-bundling.html).","uses-optimized-images":"Consider searching the [Magento Marketplace](https://marketplace.magento.com/catalogsearch/result/?q=optimize%20image) for a variety of third party extensions to optimize images.","server-response-time":"Use Magento's [Varnish integration](https://devdocs.magento.com/guides/v2.3/config-guide/varnish/config-varnish.html).",
-"uses-rel-preconnect":"Preconnect or dns-prefetch resource hints can be added by [modifying a themes's layout](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/layouts/xml-manage.html).","uses-rel-preload":"`<link rel=preload>` tags can be added by [modifying a themes's layout](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/layouts/xml-manage.html).","critical-request-chains":"If you are not bundling your JavaScript assets, consider using [baler](https://github.com/magento/baler).","font-display":"Specify `@font-display` when [defining custom fonts](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/css-topics/using-fonts.html)."}},{id:"next.js",title:"Next.js",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 207 124"><path fill="%23000" d="M48.942 32.632h38.96v3.082h-35.39v23.193H85.79v3.082H52.513v25.464h35.794v3.081H48.942V32.632Zm42.45 0h4.139l18.343 25.464 18.749-25.464L158.124.287l-41.896 60.485 21.59 29.762h-4.302l-19.642-27.086L94.15 90.534h-4.22l21.751-29.762-20.29-28.14Zm47.967 3.082v-3.082h44.397v3.082h-20.453v54.82h-3.571v-54.82h-20.373ZM.203 32.632h4.464l61.557 91.671-25.439-33.769L3.936 37.011l-.162 53.523H.203zm183.194 53.891c.738 0 1.276-.563 1.276-1.29 0-.727-.538-1.29-1.276-1.29-.73 0-1.277.563-1.277 1.29 0 .727.547 1.29 1.277 1.29Zm3.509-3.393c0 2.146 1.555 3.549 3.822 3.549 2.414 0 3.874-1.446 3.874-3.956v-8.837h-1.946v8.828c0 1.394-.704 2.138-1.946 2.138-1.112 0-1.867-.692-1.893-1.722h-1.911Zm10.24-.113c.14 2.233 2.007 3.662 4.787 3.662 2.97 0 4.83-1.498 4.83-3.887 0-1.878-1.06-2.917-3.632-3.514l-1.38-.338c-1.634-.38-2.294-.891-2.294-1.783 0-1.125 1.025-1.86 2.563-1.86 1.459 0 2.466.718 2.649 1.869h1.893c-.113-2.103-1.971-3.583-4.516-3.583-2.737 0-4.56 1.48-4.56 3.704 0 1.835 1.033 2.926 3.3 3.454l1.616.39c1.659.389 2.388.96 2.388 1.912 0 1.108-1.146 1.913-2.71 1.913-1.676 0-2.84-.753-3.005-1.939h-1.928Z"/></svg>',
-UIStrings:{"unused-css-rules":"Consider setting up `PurgeCSS` in `Next.js` configuration to remove unused rules from stylesheets. [Learn more](https://purgecss.com/guides/next.html).","modern-image-formats":"Use the `next/image` component instead of `<img>` to automatically optimize image format. [Learn more](https://nextjs.org/docs/basic-features/image-optimization).","offscreen-images":"Use the `next/image` component instead of `<img>` to automatically lazy-load images. [Learn more](https://nextjs.org/docs/basic-features/image-optimization).","render-blocking-resources":"Use the `next/script` component to defer loading of non-critical third-party scripts. [Learn more](https://nextjs.org/docs/basic-features/script).","unused-javascript":"Use `Webpack Bundle Analyzer` to detect unused JavaScript code. [Learn more](https://github.com/vercel/next.js/tree/canary/packages/next-bundle-analyzer)",
-"uses-long-cache-ttl":"Configure caching for immutable assets and `Server-side Rendered` (SSR) pages. [Learn more](https://nextjs.org/docs/going-to-production#caching).","uses-optimized-images":"Use the `next/image` component instead of `<img>` to adjust image quality. [Learn more](https://nextjs.org/docs/basic-features/image-optimization).","uses-text-compression":"Enable compression on your Next.js server. [Learn more](https://nextjs.org/docs/api-reference/next.config.js/compression).","uses-responsive-images":"Use the `next/image` component to set the appropriate `sizes`. [Learn more](https://nextjs.org/docs/api-reference/next/image#sizes).","user-timings":"Consider using `Next.js Analytics` to measure your app's real-world performance. [Learn more](https://nextjs.org/docs/advanced-features/measuring-performance).",
-"prioritize-lcp-image":'Use the `next/image` component and set "priority" to true to preload LCP image. [Learn more](https://nextjs.org/docs/api-reference/next/image#priority).',"unsized-images":"Use the `next/image` component to make sure images are always sized appropriately. [Learn more](https://nextjs.org/docs/api-reference/next/image#width)."}},{id:"nuxt",title:"Nuxt",icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 124 124"><path fill="%2380EEC0" fill-rule="evenodd" d="M55.75 27.155c-3.222-5.54-11.278-5.54-14.5 0L6.134 87.535C2.912 93.075 6.94 100 13.384 100h27.413c-2.753-2.407-3.773-6.57-1.69-10.142L65.704 44.27 55.75 27.155Z" clip-rule="evenodd"/><path fill="%2300DC82" d="M78 40.4c2.667-4.533 9.333-4.533 12 0l29.06 49.4c2.667 4.533-.666 10.199-5.999 10.199H54.938c-5.333 0-8.666-5.666-6-10.199L78 40.4Z"/></svg>',UIStrings:{
-"modern-image-formats":'Use the `nuxt/image` component and set `format="webp"`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#format).',"offscreen-images":'Use the `nuxt/image` component and set `loading="lazy"` for offscreen images. [Learn more](https://image.nuxtjs.org/components/nuxt-img#loading).',"uses-optimized-images":"Use the `nuxt/image` component and set the appropriate `quality`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#quality).","uses-responsive-images":"Use the `nuxt/image` component and set the appropriate `sizes`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#sizes).","prioritize-lcp-image":"Use the `nuxt/image` component and specify `preload` for LCP image. [Learn more](https://image.nuxtjs.org/components/nuxt-img#preload).","unsized-images":"Use the `nuxt/image` component and specify explicit `width` and `height`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#width--height)."}},{id:"octobercms",title:"October CMS",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 310 310"><path fill="none" d="M-1-1h802v602H-1z"/><path fill="%23de6c26" d="M135 6.9c-14.2 4.4-34.9 21.8-49.9 42C55.8 88.5 39.6 135.8 41.4 177c.8 20.2 4.9 35.5 14.4 54.5 13.6 27.4 40.8 55.1 65.5 66.9 14.1 6.7 13.4 6.9 14.1-2.8.3-4.4 1-32.4 1.6-62.1 2.7-137.3 4.4-176 8.2-191.3.6-2.3 1.4-4.2 1.9-4.2 1.2 0 3.6 9.1 4.9 18.3.5 4.3 1 17.7 1 29.8 0 12 .3 21.9.7 21.9.3 0 5.7-5 11.9-11 6.9-6.8 12-11 13.3-11 1.8 0 1.9.3 1 2.7-1.2 3.1-7.9 13.2-19.1 28.5L153 128l.1 31.2c.1 17.2.4 37.4.8 44.9l.6 13.7 11-12.6c14-16 35.1-37.1 39.5-39.6l3.3-1.9-.6 3.2c-2 9.8-9.5 20.7-37.4 54.3L154 240.8v31.1c0 18.3.4 31.1.9 31.1 2.8 0 19.3-6.4 26.8-10.5 13.8-7.3 23.8-15 38.3-29.5 15.7-15.7 24.4-27.4 33.4-45.2 20.5-40 21-80.3 1.6-119-17.8-35.6-54.6-72.1-87.8-86.9-11.7-5.3-24.6-7.3-32.2-5z"/></svg>',UIStrings:{
-"unused-css-rules":"Consider reviewing the [plugins](https://octobercms.com/plugins) loading unused CSS on the website. To identify plugins that add unnecessary CSS, run [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. Identify the theme/plugin responsible from the stylesheet URL. Look for plugins with many stylesheets with lots of red in code coverage. A plugin should only add a stylesheet if it is actually used on the web page.","modern-image-formats":"Consider using a [plugin](https://octobercms.com/plugins?search=image) or service that will automatically convert the uploaded images to the optimal formats. [WebP lossless images](https://developers.google.com/speed/webp) are 26% smaller in size compared to PNGs and 25-34% smaller than comparable JPEG images at the equivalent SSIM quality index. Another next-gen image format to consider is [AVIF](https://jakearchibald.com/2020/avif-has-landed/).",
-"offscreen-images":"Consider installing an [image lazy loading plugin](https://octobercms.com/plugins?search=lazy) that provides the ability to defer any offscreen images, or switch to a theme that provides that functionality. Also consider using [the AMP plugin](https://octobercms.com/plugins?search=Accelerated+Mobile+Pages).","total-byte-weight":"Consider showing excerpts in the post lists (e.g. using a `show more` button), reducing the number of posts shown on a given web page, breaking long posts into multiple web pages, or using a plugin to lazy-load comments.","render-blocking-resources":"There are many plugins that help [inline critical assets](https://octobercms.com/plugins?search=css). These plugins may break other plugins, so you should test thoroughly.",
-"unminified-css":"There are many [plugins](https://octobercms.com/plugins?search=css) that can speed up a website by concatenating, minifying and compressing the styles. Using a build process to do this minification up-front can speed up development.","unminified-javascript":"There are many [plugins](https://octobercms.com/plugins?search=javascript) that can speed up a website by concatenating, minifying and compressing the scripts. Using a build process to do this minification up-front can speed up development.","efficient-animated-content":"[Replace animated GIFs with video](https://web.dev/replace-gifs-with-videos/) for faster web page loads and consider using modern file formats such as [WebM](https://web.dev/replace-gifs-with-videos/#create-webm-videos) or [AV1](https://developers.google.com/web/updates/2018/09/chrome-70-media-updates#av1-decoder) to improve compression efficiency by greater than 30% over the current state-of-the-art video codec, VP9.",
-"unused-javascript":"Consider reviewing the [plugins](https://octobercms.com/plugins?search=javascript) that load unused JavaScript in the web page. To identify plugins that add unnecessary JavaScript, run [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. Identify the theme/plugin responsible from the URL of the script. Look for plugins with many scripts with lots of red in code coverage. A plugin should only add a script if it is actually used on the web page.","uses-long-cache-ttl":"Read about [preventing unnecessary network requests with the HTTP Cache](https://web.dev/http-cache/#caching-checklist). There are many [plugins](https://octobercms.com/plugins?search=Caching) that can be used to speed up caching.","uses-optimized-images":"Consider using an [image optimization plugin](https://octobercms.com/plugins?search=image) to compresses images while retaining the quality.",
-"uses-text-compression":"Enable text compression in the web server configuration.","uses-responsive-images":"Upload images directly in the media manager to ensure the required image sizes are available. Consider using the [resize filter](https://octobercms.com/docs/markup/filter-resize) or an [image resizing plugin](https://octobercms.com/plugins?search=image) to ensure the optimal image sizes are used.","server-response-time":"Themes, plugins and server specifications all contribute to the server response time. Consider finding a more optimized theme, carefully selecting an optimization plugin and/or upgrade the server. October CMS also allows developers to use [`Queues`](https://octobercms.com/docs/services/queues) to defer the processing of a time consuming task, such as sending an e-mail. This drastically speeds up web requests."}},{id:"react",title:"React",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="%2361DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>',
-UIStrings:{"unminified-css":"If your build system minifies CSS files automatically, ensure that you are deploying the production build of your application. You can check this with the React Developer Tools extension. [Learn more](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build).","unminified-javascript":"If your build system minifies JS files automatically, ensure that you are deploying the production build of your application. You can check this with the React Developer Tools extension. [Learn more](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build).","unused-javascript":"If you are not server-side rendering, [split your JavaScript bundles](https://web.dev/code-splitting-suspense/) with `React.lazy()`. Otherwise, code-split using a third-party library such as [loadable-components](https://www.smooth-code.com/open-source/loadable-components/docs/getting-started/).",
-"server-response-time":"If you are server-side rendering any React components, consider using `renderToPipeableStream()` or `renderToStaticNodeStream()` to allow the client to receive and hydrate different parts of the markup instead of all at once. [Learn more](https://reactjs.org/docs/react-dom-server.html#renderToPipeableStream).",redirects:"If you are using React Router, minimize usage of the `<Redirect>` component for [route navigations](https://reacttraining.com/react-router/web/api/Redirect).","user-timings":"Use the React DevTools Profiler, which makes use of the Profiler API, to measure the rendering performance of your components. [Learn more.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)",
-"dom-size":'Consider using a "windowing" library like `react-window` to minimize the number of DOM nodes created if you are rendering many repeated elements on the page. [Learn more](https://web.dev/virtualize-long-lists-react-window/). Also, minimize unnecessary re-renders using [`shouldComponentUpdate`](https://reactjs.org/docs/optimizing-performance.html#shouldcomponentupdate-in-action), [`PureComponent`](https://reactjs.org/docs/react-api.html#reactpurecomponent), or [`React.memo`](https://reactjs.org/docs/react-api.html#reactmemo) and [skip effects](https://reactjs.org/docs/hooks-effect.html#tip-optimizing-performance-by-skipping-effects) only until certain dependencies have changed if you are using the `Effect` hook to improve runtime performance.'}},{id:"wix",title:"Wix",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 71 28"><path fill-rule="evenodd" d="M0 .032s2.796-.356 4.66 1.31C5.81 2.37 6.145 4.008 6.145 4.008L9.952 18.96l3.165-12.239c.309-1.301.864-2.909 1.743-3.997 1.121-1.385 3.398-1.472 3.641-1.472.242 0 2.519.087 3.639 1.472.88 1.088 1.435 2.696 1.744 3.997l3.165 12.239 3.806-14.953s.336-1.638 1.486-2.666C34.205-.324 37 .032 37 .032l-7.289 27.945s-2.404.176-3.607-.446c-1.58-.816-2.332-1.447-3.289-5.249l-.099-.395c-.349-1.399-.883-3.59-1.424-5.813l-.162-.667-.162-.664c-.779-3.198-1.497-6.143-1.612-6.517-.108-.351-.236-1.187-.855-1.187-.607 0-.746.837-.857 1.187-.13.412-.99 3.955-1.856 7.514l-.162.667c-.512 2.107-1.01 4.151-1.341 5.48l-.1.395c-.956 3.802-1.708 4.433-3.288 5.249-1.204.622-3.608.446-3.608.446zM43.998 5v.995L44 5.994v16.628c-.014 3.413-.373 4.17-1.933 4.956-1.213.61-3.067.379-3.067.379V9.332c0-.935.315-1.548 1.477-2.098.693-.329 1.34-.58 2.012-.953C43.54 5.703 43.998 5 43.998 5zM46 .125s3.877-.673 5.797 1.107c1.228 1.14 2.602 3.19 2.602 3.19l3.38 4.965c.164.258.378.54.72.54.343 0 .558-.282.722-.54l3.38-4.965s1.374-2.05 2.602-3.19C67.123-.548 71 .125 71 .125l-9.186 13.923 9.161 13.881-.032.004c-.38.045-4.036.423-5.855-1.266-1.229-1.138-2.487-2.992-2.487-2.992l-3.38-4.964c-.164-.26-.379-.54-.721-.54-.343 0-.557.28-.721.54l-3.38 4.964s-1.19 1.854-2.418 2.992c-1.92 1.783-5.957 1.262-5.957 1.262l9.161-13.88zM43.96 0H44c0 1.91-.186 3.042-1.387 3.923-.384.28-1.048.71-1.826.992C39.719 5.304 39 6 39 6c0-3.476.53-4.734 1.95-5.48.865-.452 2.272-.514 2.82-.52z"></path></svg>',
-UIStrings:{"modern-image-formats":"Upload images using `Wix Media Manager` to ensure they are automatically served as WebP. Find [more ways to optimize](https://support.wix.com/en/article/site-performance-optimizing-your-media) your site's media.","render-blocking-resources":"When [adding third-party code](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) in the `Custom Code` tab of your site's dashboard, make sure it's deferred or loaded at the end of the code body. Where possible, use Wix’s [integrations](https://support.wix.com/en/article/about-marketing-integrations) to embed marketing tools on your site. ","efficient-animated-content":"Place videos inside `VideoBoxes`, customize them using `Video Masks` or add `Transparent Videos`. [Learn more](https://support.wix.com/en/article/wix-video-about-wix-video).",
-"unused-javascript":"Review any third-party code you've added to your site in the `Custom Code` tab of your site's dashboard and only keep the services that are necessary to your site. [Find out more](https://support.wix.com/en/article/site-performance-removing-unused-javascript).","server-response-time":"Wix utilizes CDNs and caching to serve responses as fast as possible for most visitors. Consider [manually enabling caching](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) for your site, especially if using `Velo`."}},{id:"wordpress",title:"WordPress",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.5 122.5"><g fill="%232f3439"><path d="M8.7 61.3c0 20.8 12.1 38.7 29.6 47.3l-25-68.7c-3 6.5-4.6 13.7-4.6 21.4zm88-2.7c0-6.5-2.3-11-4.3-14.5-2.7-4.3-5.2-8-5.2-12.3 0-4.8 3.7-9.3 8.9-9.3h.7a52.4 52.4 0 0 0-79.4 9.9h3.3c5.5 0 14-.6 14-.6 2.9-.2 3.2 4 .4 4.3 0 0-2.9.4-6 .5l19.1 57L59.7 59l-8.2-22.5c-2.8-.1-5.5-.5-5.5-.5-2.8-.1-2.5-4.5.3-4.3 0 0 8.7.7 13.9.7 5.5 0 14-.7 14-.7 2.8-.2 3.2 4 .3 4.3 0 0-2.8.4-6 .5l19 56.5 5.2-17.5c2.3-7.3 4-12.5 4-17z"/><path d="m62.2 65.9-15.8 45.8a52.6 52.6 0 0 0 32.3-.9l-.4-.7zM107.4 36a49.6 49.6 0 0 1-3.6 24.2l-16.1 46.5A52.5 52.5 0 0 0 107.4 36z"/><path d="M61.3 0a61.3 61.3 0 1 0 .1 122.7A61.3 61.3 0 0 0 61.3 0zm0 119.7a58.5 58.5 0 1 1 .1-117 58.5 58.5 0 0 1-.1 117z"/></g></svg>',UIStrings:{
-"unused-css-rules":"Consider reducing, or switching, the number of [WordPress plugins](https://wordpress.org/plugins/) loading unused CSS in your page. To identify plugins that are adding extraneous CSS, try running [code coverage](https://developer.chrome.com/docs/devtools/coverage/) in Chrome DevTools. You can identify the theme/plugin responsible from the URL of the stylesheet. Look out for plugins that have many stylesheets in the list which have a lot of red in code coverage. A plugin should only enqueue a stylesheet if it is actually used on the page.","modern-image-formats":"Consider using the [Performance Lab](https://wordpress.org/plugins/performance-lab/) plugin to automatically convert your uploaded JPEG images into WebP, wherever supported.",
-"offscreen-images":"Install a [lazy-load WordPress plugin](https://wordpress.org/plugins/search/lazy+load/) that provides the ability to defer any offscreen images, or switch to a theme that provides that functionality. Also consider using [the AMP plugin](https://wordpress.org/plugins/amp/).","total-byte-weight":"Consider showing excerpts in your post lists (e.g. via the more tag), reducing the number of posts shown on a given page, breaking your long posts into multiple pages, or using a plugin to lazy-load comments.","render-blocking-resources":"There are a number of WordPress plugins that can help you [inline critical assets](https://wordpress.org/plugins/search/critical+css/) or [defer less important resources](https://wordpress.org/plugins/search/defer+css+javascript/). Beware that optimizations provided by these plugins may break features of your theme or plugins, so you will likely need to make code changes.",
-"unminified-css":"A number of [WordPress plugins](https://wordpress.org/plugins/search/minify+css/) can speed up your site by concatenating, minifying, and compressing your styles. You may also want to use a build process to do this minification up-front if possible.","unminified-javascript":"A number of [WordPress plugins](https://wordpress.org/plugins/search/minify+javascript/) can speed up your site by concatenating, minifying, and compressing your scripts. You may also want to use a build process to do this minification up front if possible.","efficient-animated-content":"Consider uploading your GIF to a service which will make it available to embed as an HTML5 video.",
-"unused-javascript":"Consider reducing, or switching, the number of [WordPress plugins](https://wordpress.org/plugins/) loading unused JavaScript in your page. To identify plugins that are adding extraneous JS, try running [code coverage](https://developer.chrome.com/docs/devtools/coverage/) in Chrome DevTools. You can identify the theme/plugin responsible from the URL of the script. Look out for plugins that have many scripts in the list which have a lot of red in code coverage. A plugin should only enqueue a script if it is actually used on the page.","uses-long-cache-ttl":"Read about [Browser Caching in WordPress](https://wordpress.org/support/article/optimization/#browser-caching).","uses-optimized-images":"Consider using an [image optimization WordPress plugin](https://wordpress.org/plugins/search/optimize+images/) that compresses your images while retaining quality.","uses-text-compression":"You can enable text compression in your web server configuration.",
-"uses-responsive-images":"Upload images directly through the [media library](https://wordpress.org/support/article/media-library-screen/) to ensure that the required image sizes are available, and then insert them from the media library or use the image widget to ensure the optimal image sizes are used (including those for the responsive breakpoints). Avoid using `Full Size` images unless the dimensions are adequate for their usage. [Learn More](https://wordpress.org/support/article/inserting-images-into-posts-and-pages/).","server-response-time":"Themes, plugins, and server specifications all contribute to server response time. Consider finding a more optimized theme, carefully selecting an optimization plugin, and/or upgrading your server."}},{id:"wp-rocket",title:"WP Rocket",
-icon:'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 294 524"><defs><linearGradient id="a" x1="36.742%" x2="37.116%" y1="100.518%" y2="-.001%"><stop offset="0%" stop-color="%23DD5F29"/><stop offset="26.042%" stop-color="%23F26B32"/><stop offset="100%" stop-color="%23FAC932"/></linearGradient><linearGradient id="b" x1="28.046%" x2="28.421%" y1="100.518%" y2="-.003%"><stop offset="0%" stop-color="%23DD5F29"/><stop offset="26.042%" stop-color="%23F26B32"/><stop offset="100%" stop-color="%23FAC932"/></linearGradient><linearGradient id="c" x1="38.215%" x2="38.589%" y1="100.518%" y2="0%"><stop offset="0%" stop-color="%23DD5F29"/><stop offset="26.042%" stop-color="%23F26B32"/><stop offset="100%" stop-color="%23FAC932"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path fill="url(%23a)" d="M218.617 270.615c-9.752 0-18.896-5.689-23.366-14.63l-7.72-17.27h-76.6l-7.722 17.27c-4.47 8.941-13.613 14.63-23.366 14.63H75.78l32.712 249.306c1.625 4.671 4.673 4.671 6.502 0l32.51-79.648 28.242 79.442c1.625 4.676 4.673 4.676 6.501 0L220.04 270.82l-1.423-.204Z" transform="translate(-1.58 -.2)"/><path fill="url(%23b)" d="M184.47 231.784h-70.3l-10.77 24.179c-3.657 7.314-10.768 12.597-18.489 14.02L109.7 423.791c1.625 2.844 4.673 2.844 6.501 0l31.697-48.155 29.055 47.951c1.829 2.845 4.673 2.845 6.502 0l28.039-154.012c-6.908-2.032-13.004-6.908-16.255-13.613l-10.768-24.18Z" transform="translate(-1.58 -.2)"/><path fill="url(%23c)" d="m195.259 255.988-46.123-103.014-45.92 103.014c-1.625 3.048-3.656 5.69-6.095 7.925l19.1 102.2c1.015 1.423 3.657 1.83 5.485 0l25.601-33.931 25.602 33.728c1.625 2.032 4.47 1.626 5.485 0l21.131-103.42c-1.625-2.032-3.047-4.064-4.266-6.502Z" transform="translate(-1.58 -.2)"/><path fill="%23F56F46" d="M.439 12.559c-1.422-4.877 1.422-8.33 6.299-8.33H47.17c2.845 0 5.486 2.437 6.299 4.876l29.665 116.83h1.422l53.437-121.3c1.016-2.032 3.048-3.86 5.892-3.86h6.299c3.047 0 5.08 1.625 5.892 3.86l53.437 121.3h1.423L240.6 9.105c.61-2.439 3.454-4.877 6.299-4.877h40.433c4.877 0 7.518 3.454 6.299 8.33l-65.221 231.63c-.61 2.845-3.454 4.876-6.298 4.876h-5.487c-2.438 0-4.876-1.625-5.892-3.86l-63.19-141.009h-1.015L83.744 245.203c-1.016 2.032-3.454 3.86-5.892 3.86h-5.486c-2.845 0-5.486-2.031-6.299-4.876L.44 12.559Z"/></g></svg>',
-UIStrings:{"unused-css-rules":"Enable [Remove Unused CSS](https://docs.wp-rocket.me/article/1529-remove-unused-css) in 'WP Rocket' to fix this issue. It reduces page size by removing all CSS and stylesheets that are not used while keeping only the used CSS for each page.","modern-image-formats":"Enable 'Imagify' from the Image Optimization tab in 'WP Rocket' to convert your images to WebP.","unused-javascript":"Enable [Delay JavaScript execution](https://docs.wp-rocket.me/article/1349-delay-javascript-execution) in 'WP Rocket' to fix this problem. It will improve the loading of your page by delaying the execution of scripts until user interaction. If your site has iframes, you can use WP Rocket's [LazyLoad for iframes and videos](https://docs.wp-rocket.me/article/1674-lazyload-for-iframes-and-videos) and [Replace YouTube iframe with preview image](https://docs.wp-rocket.me/article/1488-replace-youtube-iframe-with-preview-image) as well.",
-"render-blocking-resources":"Enable [Remove Unused CSS](https://docs.wp-rocket.me/article/1529-remove-unused-css) and [Load JavaScript deferred](https://docs.wp-rocket.me/article/1265-load-javascript-deferred) in 'WP Rocket' to address this recommendation. These features will respectively optimize the CSS and JavaScript files so that they don't block the rendering of your page.","unminified-css":"Enable [Minify CSS files](https://docs.wp-rocket.me/article/1350-css-minify-combine) in 'WP Rocket' to fix this issue. Any spaces and comments in your site's CSS files will be removed to make the file size smaller and faster to download.","unminified-javascript":"Enable [Minify JavaScript files](https://docs.wp-rocket.me/article/1351-javascript-minify-combine) in 'WP Rocket' to fix this issue. Empty spaces and comments will be removed from JavaScript files to make their size smaller and faster to download.",
-"uses-optimized-images":"Enable 'Imagify' from the Image Optimization tab in 'WP Rocket' and run Bulk Optimization to compress your images.","uses-rel-preconnect":"Use [Prefetch DNS Requests](https://docs.wp-rocket.me/article/1302-prefetch-dns-requests) in 'WP Rocket' to add \"dns-prefetch\" and speed up the connection with external domains. Also, 'WP Rocket' automatically adds \"preconnect\" to [Google Fonts domain](https://docs.wp-rocket.me/article/1312-optimize-google-fonts) and any CNAME(S) added via the [Enable CDN](https://docs.wp-rocket.me/article/42-using-wp-rocket-with-a-cdn) feature.","uses-rel-preload":"To fix this issue for fonts, enable [Remove Unused CSS](https://docs.wp-rocket.me/article/1529-remove-unused-css) in 'WP Rocket'. Your site's critical fonts will be preloaded with priority.",
-"offscreen-images":"Enable [LazyLoad](https://docs.wp-rocket.me/article/1141-lazyload-for-images) in WP Rocket to fix this recommendation. This feature delays the loading of the images until the visitor scrolls down the page and actually needs to see them."}}];const xo=[{packId:"gatsby",requiredStacks:["js:gatsby"]},{packId:"wordpress",requiredStacks:["js:wordpress"]},{packId:"wix",requiredStacks:["js:wix"]},{packId:"wp-rocket",requiredStacks:["js:wp-rocket"]},{packId:"ezoic",requiredStacks:["js:ezoic"]},{packId:"drupal",requiredStacks:["js:drupal"]},{packId:"amp",requiredStacks:["js:amp"]},{packId:"magento",requiredStacks:["js:magento"]},{packId:"octobercms",requiredStacks:["js:octobercms"]},{packId:"joomla",requiredStacks:["js:joomla"]},{packId:"next.js",requiredStacks:["js:next"]},{packId:"nuxt",requiredStacks:["js:nuxt"]},{packId:"angular",requiredStacks:["js:@angular/core"]},{packId:"react",requiredStacks:["js:react"]}];function getStackPacks(e){if(!e)return[];const t=[]
-;for(const n of e){const e=xo.find((e=>e.requiredStacks.includes(`${n.detector}:${n.id}`)));if(!e)continue;const a=ko.find((t=>t.id===e.packId));if(!a){Log.warn("StackPacks",`'${e.packId}' stack pack was matched but is not found in stack-packs lib`);continue}const r=createIcuMessageFn(`node_modules/lighthouse-stack-packs/packs/${a.id}.js`,a.UIStrings),o={},i=a.UIStrings;for(const e in i)i[e]&&(o[e]=r(i[e]));t.push({id:a.id,title:a.title,iconDataURL:a.icon,descriptions:o})}return t.sort(((e,t)=>xo.findIndex((t=>t.packId===e.id))-xo.findIndex((e=>e.packId===t.id))))}var Fo="function"==typeof Object.create?function inherits(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function inherits(e,t){e.super_=t;var TempCtor=function(){};TempCtor.prototype=t.prototype,e.prototype=new TempCtor,e.prototype.constructor=e},Ro=/%[sdj%]/g;function format$1(e){if(!isString(e)){
-for(var t=[],n=0;n<arguments.length;n++)t.push(inspect(arguments[n]));return t.join(" ")}n=1;for(var a=arguments,r=a.length,o=String(e).replace(Ro,(function(e){if("%%"===e)return"%";if(n>=r)return e;switch(e){case"%s":return String(a[n++]);case"%d":return Number(a[n++]);case"%j":try{return JSON.stringify(a[n++])}catch(e){return"[Circular]"}default:return e}})),i=a[n];n<r;i=a[++n])isNull(i)||!isObject(i)?o+=" "+i:o+=" "+inspect(i);return o}function deprecate(t,n){if(isUndefined(e.process))return function(){return deprecate(t,n).apply(this,arguments)};var a=!1;return function deprecated(){return a||(console.error(n),a=!0),t.apply(this,arguments)}}var Io,Mo={};function inspect(e,t){var n={seen:[],stylize:stylizeNoColor};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),isBoolean(t)?n.showHidden=t:t&&_extend(n,t),isUndefined(n.showHidden)&&(n.showHidden=!1),isUndefined(n.depth)&&(n.depth=2),isUndefined(n.colors)&&(n.colors=!1),
-isUndefined(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=stylizeWithColor),formatValue(n,e,n.depth)}function stylizeWithColor(e,t){var n=inspect.styles[t];return n?"["+inspect.colors[n][0]+"m"+e+"["+inspect.colors[n][1]+"m":e}function stylizeNoColor(e,t){return e}function formatValue(e,t,n){if(e.customInspect&&t&&isFunction(t.inspect)&&t.inspect!==inspect&&(!t.constructor||t.constructor.prototype!==t)){var a=t.inspect(n,e);return isString(a)||(a=formatValue(e,a,n)),a}var r=function formatPrimitive(e,t){if(isUndefined(t))return e.stylize("undefined","undefined");if(isString(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(function isNumber$1(e){return"number"==typeof e}(t))return e.stylize(""+t,"number");if(isBoolean(t))return e.stylize(""+t,"boolean");if(isNull(t))return e.stylize("null","null")}(e,t);if(r)return r;var o=Object.keys(t),i=function arrayToHash(e){var t={}
-;return e.forEach((function(e,n){t[e]=!0})),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(t)),isError(t)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return formatError(t);if(0===o.length){if(isFunction(t)){var s=t.name?": "+t.name:"";return e.stylize("[Function"+s+"]","special")}if(isRegExp(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(isDate(t))return e.stylize(Date.prototype.toString.call(t),"date");if(isError(t))return formatError(t)}var c,l="",u=!1,d=["{","}"];(function isArray(e){return Array.isArray(e)}(t)&&(u=!0,d=["[","]"]),isFunction(t))&&(l=" [Function"+(t.name?": "+t.name:"")+"]");return isRegExp(t)&&(l=" "+RegExp.prototype.toString.call(t)),isDate(t)&&(l=" "+Date.prototype.toUTCString.call(t)),isError(t)&&(l=" "+formatError(t)),0!==o.length||u&&0!=t.length?n<0?isRegExp(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),c=u?function formatArray(e,t,n,a,r){
-for(var o=[],i=0,s=t.length;i<s;++i)hasOwnProperty(t,String(i))?o.push(formatProperty(e,t,n,a,String(i),!0)):o.push("");return r.forEach((function(r){r.match(/^\d+$/)||o.push(formatProperty(e,t,n,a,r,!0))})),o}(e,t,n,i,o):o.map((function(a){return formatProperty(e,t,n,i,a,u)})),e.seen.pop(),function reduceToSingleString(e,t,n){if(e.reduce((function(e,t){return t.indexOf("\n"),e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n  ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(c,l,d)):d[0]+l+d[1]}function formatError(e){return"["+Error.prototype.toString.call(e)+"]"}function formatProperty(e,t,n,a,r,o){var i,s,c;if((c=Object.getOwnPropertyDescriptor(t,r)||{value:t[r]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),hasOwnProperty(a,r)||(i="["+r+"]"),
-s||(e.seen.indexOf(c.value)<0?(s=isNull(n)?formatValue(e,c.value,null):formatValue(e,c.value,n-1)).indexOf("\n")>-1&&(s=o?s.split("\n").map((function(e){return"  "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return"   "+e})).join("\n")):s=e.stylize("[Circular]","special")),isUndefined(i)){if(o&&r.match(/^\d+$/))return s;(i=JSON.stringify(""+r)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(i=i.substr(1,i.length-2),i=e.stylize(i,"name")):(i=i.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),i=e.stylize(i,"string"))}return i+": "+s}function isBoolean(e){return"boolean"==typeof e}function isNull(e){return null===e}function isString(e){return"string"==typeof e}function isUndefined(e){return void 0===e}function isRegExp(e){return isObject(e)&&"[object RegExp]"===objectToString(e)}function isObject(e){return"object"==typeof e&&null!==e}function isDate(e){return isObject(e)&&"[object Date]"===objectToString(e)}function isError(e){
-return isObject(e)&&("[object Error]"===objectToString(e)||e instanceof Error)}function isFunction(e){return"function"==typeof e}function objectToString(e){return Object.prototype.toString.call(e)}function _extend(e,t){if(!t||!isObject(t))return e;for(var n=Object.keys(t),a=n.length;a--;)e[n[a]]=t[n[a]];return e}function hasOwnProperty(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function BufferList(){this.head=null,this.tail=null,this.length=0}inspect.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},inspect.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},BufferList.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},BufferList.prototype.unshift=function(e){var t={data:e,next:this.head}
-;0===this.length&&(this.tail=t),this.head=t,++this.length},BufferList.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},BufferList.prototype.clear=function(){this.head=this.tail=null,this.length=0},BufferList.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},BufferList.prototype.concat=function(e){if(0===this.length)return Buffer$1.alloc(0);if(1===this.length)return this.head.data;for(var t=Buffer$1.allocUnsafe(e>>>0),n=this.head,a=0;n;)n.data.copy(t,a),a+=n.data.length,n=n.next;return t};var Lo=Buffer$1.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function StringDecoder(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),
-function assertEncoding(e){if(e&&!Lo(e))throw new Error("Unknown encoding: "+e)}(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=utf16DetectIncompleteChar;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=base64DetectIncompleteChar;break;default:return void(this.write=passThroughWrite)}this.charBuffer=new Buffer$1(6),this.charReceived=0,this.charLength=0}function passThroughWrite(e){return e.toString(this.encoding)}function utf16DetectIncompleteChar(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function base64DetectIncompleteChar(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}StringDecoder.prototype.write=function(e){for(var t="";this.charLength;){var n=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,n),this.charReceived+=n,
-this.charReceived<this.charLength)return"";if(e=e.slice(n,e.length),!((r=(t=this.charBuffer.slice(0,this.charLength).toString(this.encoding)).charCodeAt(t.length-1))>=55296&&r<=56319)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var a=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,a),a-=this.charReceived);var r;a=(t+=e.toString(this.encoding,0,a)).length-1;if((r=t.charCodeAt(a))>=55296&&r<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),e.copy(this.charBuffer,0,0,o),t.substring(0,a)}return t},StringDecoder.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var n=e[e.length-t];if(1==t&&n>>5==6){this.charLength=2;break}if(t<=2&&n>>4==14){this.charLength=3;break}if(t<=3&&n>>3==30){this.charLength=4;break}}this.charReceived=t},
-StringDecoder.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var n=this.charReceived,a=this.charBuffer,r=this.encoding;t+=a.slice(0,n).toString(r)}return t},Readable.ReadableState=ReadableState;var No=function debuglog(e){if(isUndefined(Io)&&(Io=""),e=e.toUpperCase(),!Mo[e])if(new RegExp("\\b"+e+"\\b","i").test(Io)){Mo[e]=function(){var t=format$1.apply(null,arguments);console.error("%s %d: %s",e,0,t)}}else Mo[e]=function(){};return Mo[e]}("stream");function ReadableState(e,t){e=e||{},this.objectMode=!!e.objectMode,t instanceof Duplex&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var n=e.highWaterMark,a=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:a,this.highWaterMark=~~this.highWaterMark,this.buffer=new BufferList,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,
-this.resumeScheduled=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(this.decoder=new StringDecoder(e.encoding),this.encoding=e.encoding)}function Readable(e){if(!(this instanceof Readable))return new Readable(e);this._readableState=new ReadableState(e,this),this.readable=!0,e&&"function"==typeof e.read&&(this._read=e.read),EventEmitter.call(this)}function readableAddChunk(e,t,n,a,r){var o=function chunkInvalid(e,t){var n=null;Buffer$1.isBuffer(t)||"string"==typeof t||null==t||e.objectMode||(n=new TypeError("Invalid non-string/buffer chunk"));return n}(t,n);if(o)e.emit("error",o);else if(null===n)t.reading=!1,function onEofChunk(e,t){if(t.ended)return;if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,emitReadable(e)}(e,t);else if(t.objectMode||n&&n.length>0)if(t.ended&&!r){var i=new Error("stream.push() after EOF")
-;e.emit("error",i)}else if(t.endEmitted&&r){var s=new Error("stream.unshift() after end event");e.emit("error",s)}else{var c;!t.decoder||r||a||(n=t.decoder.write(n),c=!t.objectMode&&0===n.length),r||(t.reading=!1),c||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",n),e.read(0)):(t.length+=t.objectMode?1:n.length,r?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&emitReadable(e))),function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,nextTick(maybeReadMore_,e,t))}(e,t)}else r||(t.reading=!1);return function needMoreData(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(t)}Fo(Readable,EventEmitter),Readable.prototype.push=function(e,t){var n=this._readableState;return n.objectMode||"string"!=typeof e||(t=t||n.defaultEncoding)!==n.encoding&&(e=Buffer$1.from(e,t),t=""),readableAddChunk(this,n,e,t,!1)},Readable.prototype.unshift=function(e){return readableAddChunk(this,this._readableState,e,"",!0)},Readable.prototype.isPaused=function(){
-return!1===this._readableState.flowing},Readable.prototype.setEncoding=function(e){return this._readableState.decoder=new StringDecoder(e),this._readableState.encoding=e,this};var Po=8388608;function howMuchToRead(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function computeNewHighWaterMark(e){return e>=Po?e=Po:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function emitReadable(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(No("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?nextTick(emitReadable_,e):emitReadable_(e))}function emitReadable_(e){No("emit readable"),e.emit("readable"),flow(e)}function maybeReadMore_(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(No("maybeReadMore read 0"),e.read(0),n!==t.length);)n=t.length;t.readingMore=!1}
-function nReadingNextTick(e){No("readable nexttick read 0"),e.read(0)}function resume_(e,t){t.reading||(No("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),flow(e),t.flowing&&!t.reading&&e.read(0)}function flow(e){var t=e._readableState;for(No("flow",t.flowing);t.flowing&&null!==e.read(););}function fromList(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function fromListPartial(e,t,n){var a;e<t.head.data.length?(a=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):a=e===t.head.data.length?t.shift():n?function copyFromBufferString(e,t){var n=t.head,a=1,r=n.data;e-=r.length;for(;n=n.next;){var o=n.data,i=e>o.length?o.length:e;if(i===o.length?r+=o:r+=o.slice(0,e),0===(e-=i)){i===o.length?(++a,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(i));break}++a}return t.length-=a,r
-}(e,t):function copyFromBuffer(e,t){var n=Buffer$1.allocUnsafe(e),a=t.head,r=1;a.data.copy(n),e-=a.data.length;for(;a=a.next;){var o=a.data,i=e>o.length?o.length:e;if(o.copy(n,n.length-e,0,i),0===(e-=i)){i===o.length?(++r,a.next?t.head=a.next:t.head=t.tail=null):(t.head=a,a.data=o.slice(i));break}++r}return t.length-=r,n}(e,t);return a}(e,t.buffer,t.decoder),n);var n}function endReadable(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,nextTick(endReadableNT,t,e))}function endReadableNT(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function indexOf(e,t){for(var n=0,a=e.length;n<a;n++)if(e[n]===t)return n;return-1}function nop(){}function WriteReq(e,t,n){this.chunk=e,this.encoding=t,this.callback=n,this.next=null}function WritableState(e,t){Object.defineProperty(this,"buffer",{get:deprecate((function(){return this.getBuffer()
-}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")}),e=e||{},this.objectMode=!!e.objectMode,t instanceof Duplex&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var n=e.highWaterMark,a=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:a,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var r=!1===e.decodeStrings;this.decodeStrings=!r,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function onwrite(e,t){var n=e._writableState,a=n.sync,r=n.writecb;if(function onwriteStateUpdate(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function onwriteError(e,t,n,a,r){--t.pendingcb,n?nextTick(r,a):r(a);e._writableState.errorEmitted=!0,e.emit("error",a)}(e,n,a,t,r);else{var o=needFinish(n);o||n.corked||n.bufferProcessing||!n.bufferedRequest||clearBuffer(e,n),
-a?nextTick(afterWrite,e,n,o,r):afterWrite(e,n,o,r)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new CorkedRequest(this)}function Writable(e){if(!(this instanceof Writable||this instanceof Duplex))return new Writable(e);this._writableState=new WritableState(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev)),EventEmitter.call(this)}function doWrite(e,t,n,a,r,o,i){t.writelen=a,t.writecb=i,t.writing=!0,t.sync=!0,n?e._writev(r,t.onwrite):e._write(r,o,t.onwrite),t.sync=!1}function afterWrite(e,t,n,a){n||function onwriteDrain(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,a(),finishMaybe(e,t)}function clearBuffer(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){
-var a=t.bufferedRequestCount,r=new Array(a),o=t.corkedRequestsFree;o.entry=n;for(var i=0;n;)r[i]=n,n=n.next,i+=1;doWrite(e,t,!0,t.length,r,"",o.finish),t.pendingcb++,t.lastBufferedRequest=null,o.next?(t.corkedRequestsFree=o.next,o.next=null):t.corkedRequestsFree=new CorkedRequest(t)}else{for(;n;){var s=n.chunk,c=n.encoding,l=n.callback;if(doWrite(e,t,!1,t.objectMode?1:s.length,s,c,l),n=n.next,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequestCount=0,t.bufferedRequest=n,t.bufferProcessing=!1}function needFinish(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function prefinish(e,t){t.prefinished||(t.prefinished=!0,e.emit("prefinish"))}function finishMaybe(e,t){var n=needFinish(t);return n&&(0===t.pendingcb?(prefinish(e,t),t.finished=!0,e.emit("finish")):prefinish(e,t)),n}function CorkedRequest(e){var t=this;this.next=null,this.entry=null,this.finish=function(n){var a=t.entry;for(t.entry=null;a;){var r=a.callback;e.pendingcb--,
-r(n),a=a.next}e.corkedRequestsFree?e.corkedRequestsFree.next=t:e.corkedRequestsFree=t}}Readable.prototype.read=function(e){No("read",e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return No("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?endReadable(this):emitReadable(this),null;if(0===(e=howMuchToRead(e,t))&&t.ended)return 0===t.length&&endReadable(this),null;var a,r=t.needReadable;return No("need readable",r),(0===t.length||t.length-e<t.highWaterMark)&&No("length less than watermark",r=!0),t.ended||t.reading?No("reading or ended",r=!1):r&&(No("do read"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=howMuchToRead(n,t))),null===(a=e>0?fromList(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&endReadable(this)),null!==a&&this.emit("data",a),a},
-Readable.prototype._read=function(e){this.emit("error",new Error("not implemented"))},Readable.prototype.pipe=function(e,t){var n=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e)}a.pipesCount+=1,No("pipe count=%d opts=%j",a.pipesCount,t);var r=!t||!1!==t.end?onend:cleanup;function onunpipe(e){No("onunpipe"),e===n&&cleanup()}function onend(){No("onend"),e.end()}a.endEmitted?nextTick(r):n.once("end",r),e.on("unpipe",onunpipe);var o=function pipeOnDrain(e){return function(){var t=e._readableState;No("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&e.listeners("data").length&&(t.flowing=!0,flow(e))}}(n);e.on("drain",o);var i=!1;function cleanup(){No("cleanup"),e.removeListener("close",onclose),e.removeListener("finish",onfinish),e.removeListener("drain",o),e.removeListener("error",onerror),e.removeListener("unpipe",onunpipe),n.removeListener("end",onend),n.removeListener("end",cleanup),
-n.removeListener("data",ondata),i=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||o()}var s=!1;function ondata(t){No("ondata"),s=!1,!1!==e.write(t)||s||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==indexOf(a.pipes,e))&&!i&&(No("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,s=!0),n.pause())}function onerror(t){No("onerror",t),unpipe(),e.removeListener("error",onerror),0===function listenerCount(e,t){return e.listeners(t).length}(e,"error")&&e.emit("error",t)}function onclose(){e.removeListener("finish",onfinish),unpipe()}function onfinish(){No("onfinish"),e.removeListener("close",onclose),unpipe()}function unpipe(){No("unpipe"),n.unpipe(e)}return n.on("data",ondata),function prependListener(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",onerror),
-e.once("close",onclose),e.once("finish",onfinish),e.emit("pipe",n),a.flowing||(No("pipe resume"),n.resume()),e},Readable.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this)),this;if(!e){var n=t.pipes,a=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var r=0;r<a;r++)n[r].emit("unpipe",this);return this}var o=indexOf(t.pipes,e);return-1===o||(t.pipes.splice(o,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit("unpipe",this)),this},Readable.prototype.on=function(e,t){var n=EventEmitter.prototype.on.call(this,e,t);if("data"===e)!1!==this._readableState.flowing&&this.resume();else if("readable"===e){var a=this._readableState;a.endEmitted||a.readableListening||(a.readableListening=a.needReadable=!0,a.emittedReadable=!1,a.reading?a.length&&emitReadable(this):nextTick(nReadingNextTick,this))}return n},
-Readable.prototype.addListener=Readable.prototype.on,Readable.prototype.resume=function(){var e=this._readableState;return e.flowing||(No("resume"),e.flowing=!0,function resume(e,t){t.resumeScheduled||(t.resumeScheduled=!0,nextTick(resume_,e,t))}(this,e)),this},Readable.prototype.pause=function(){return No("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(No("pause"),this._readableState.flowing=!1,this.emit("pause")),this},Readable.prototype.wrap=function(e){var t=this._readableState,n=!1,a=this;for(var r in e.on("end",(function(){if(No("wrapped end"),t.decoder&&!t.ended){var e=t.decoder.end();e&&e.length&&a.push(e)}a.push(null)})),e.on("data",(function(r){(No("wrapped data"),t.decoder&&(r=t.decoder.write(r)),t.objectMode&&null==r)||(t.objectMode||r&&r.length)&&(a.push(r)||(n=!0,e.pause()))})),e)void 0===this[r]&&"function"==typeof e[r]&&(this[r]=function(t){return function(){return e[t].apply(e,arguments)}}(r));return function forEach(e,t){
-for(var n=0,a=e.length;n<a;n++)t(e[n],n)}(["error","close","destroy","pause","resume"],(function(t){e.on(t,a.emit.bind(a,t))})),a._read=function(t){No("wrapped _read",t),n&&(n=!1,e.resume())},a},Readable._fromList=fromList,Writable.WritableState=WritableState,Fo(Writable,EventEmitter),WritableState.prototype.getBuffer=function writableStateGetBuffer(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},Writable.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},Writable.prototype.write=function(e,t,n){var a=this._writableState,r=!1;return"function"==typeof t&&(n=t,t=null),Buffer$1.isBuffer(e)?t="buffer":t||(t=a.defaultEncoding),"function"!=typeof n&&(n=nop),a.ended?function writeAfterEnd(e,t){var n=new Error("write after end");e.emit("error",n),nextTick(t,n)}(this,n):function validChunk(e,t,n,a){var r=!0,o=!1
-;return null===n?o=new TypeError("May not write null values to stream"):Buffer$1.isBuffer(n)||"string"==typeof n||void 0===n||t.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(e.emit("error",o),nextTick(a,o),r=!1),r}(this,a,e,n)&&(a.pendingcb++,r=function writeOrBuffer(e,t,n,a,r){n=function decodeChunk(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=Buffer$1.from(t,n));return t}(t,n,a),Buffer$1.isBuffer(n)&&(a="buffer");var o=t.objectMode?1:n.length;t.length+=o;var i=t.length<t.highWaterMark;i||(t.needDrain=!0);if(t.writing||t.corked){var s=t.lastBufferedRequest;t.lastBufferedRequest=new WriteReq(n,a,r),s?s.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else doWrite(e,t,!1,o,n,a,r);return i}(this,a,e,t,n)),r},Writable.prototype.cork=function(){this._writableState.corked++},Writable.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,
-e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||clearBuffer(this,e))},Writable.prototype.setDefaultEncoding=function setDefaultEncoding(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Writable.prototype._write=function(e,t,n){n(new Error("not implemented"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,n){var a=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),a.corked&&(a.corked=1,this.uncork()),a.ending||a.finished||function endWritable(e,t,n){t.ending=!0,finishMaybe(e,t),n&&(t.finished?nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,a,n)},Fo(Duplex,Readable);for(var Oo=Object.keys(Writable.prototype),Bo=0;Bo<Oo.length;Bo++){
-var Uo=Oo[Bo];Duplex.prototype[Uo]||(Duplex.prototype[Uo]=Writable.prototype[Uo])}function Duplex(e){if(!(this instanceof Duplex))return new Duplex(e);Readable.call(this,e),Writable.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",onend)}function onend(){this.allowHalfOpen||this._writableState.ended||nextTick(onEndNT,this)}function onEndNT(e){e.end()}function TransformState(e){this.afterTransform=function(t,n){return function afterTransform(e,t,n){var a=e._transformState;a.transforming=!1;var r=a.writecb;if(!r)return e.emit("error",new Error("no writecb in Transform class"));a.writechunk=null,a.writecb=null,null!=n&&e.push(n);r(t);var o=e._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&e._read(o.highWaterMark)}(e,t,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}
-function Transform(e){if(!(this instanceof Transform))return new Transform(e);Duplex.call(this,e),this._transformState=new TransformState(this);var t=this;this._readableState.needReadable=!0,this._readableState.sync=!1,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.once("prefinish",(function(){"function"==typeof this._flush?this._flush((function(e){done(t,e)})):done(t)}))}function done(e,t){if(t)return e.emit("error",t);var n=e._writableState,a=e._transformState;if(n.length)throw new Error("Calling transform done when ws.length != 0");if(a.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}function PassThrough(e){if(!(this instanceof PassThrough))return new PassThrough(e);Transform.call(this,e)}function Stream(){EventEmitter.call(this)}Fo(Transform,Duplex),Transform.prototype.push=function(e,t){return this._transformState.needTransform=!1,
-Duplex.prototype.push.call(this,e,t)},Transform.prototype._transform=function(e,t,n){throw new Error("Not implemented")},Transform.prototype._write=function(e,t,n){var a=this._transformState;if(a.writecb=n,a.writechunk=e,a.writeencoding=t,!a.transforming){var r=this._readableState;(a.needTransform||r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}},Transform.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},Fo(PassThrough,Transform),PassThrough.prototype._transform=function(e,t,n){n(null,e)},Fo(Stream,EventEmitter),Stream.Readable=Readable,Stream.Writable=Writable,Stream.Duplex=Duplex,Stream.Transform=Transform,Stream.PassThrough=PassThrough,Stream.Stream=Stream,Stream.prototype.pipe=function(e,t){var n=this;function ondata(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function ondrain(){
-n.readable&&n.resume&&n.resume()}n.on("data",ondata),e.on("drain",ondrain),e._isStdio||t&&!1===t.end||(n.on("end",onend),n.on("close",onclose));var a=!1;function onend(){a||(a=!0,e.end())}function onclose(){a||(a=!0,"function"==typeof e.destroy&&e.destroy())}function onerror(e){if(cleanup(),0===EventEmitter.listenerCount(this,"error"))throw e}function cleanup(){n.removeListener("data",ondata),e.removeListener("drain",ondrain),n.removeListener("end",onend),n.removeListener("close",onclose),n.removeListener("error",onerror),e.removeListener("error",onerror),n.removeListener("end",cleanup),n.removeListener("close",cleanup),e.removeListener("close",cleanup)}return n.on("error",onerror),e.on("error",onerror),n.on("end",cleanup),n.on("close",cleanup),e.on("close",cleanup),e.emit("pipe",n),e};const jo=1460;class TcpConnection{constructor(e,t,n=0,a=!0,r=!1){this._warmed=!1,this._ssl=a,this._h2=r,this._rtt=e,this._throughput=t,this._serverLatency=n,this._congestionWindow=10,
-this._h2OverflowBytesDownloaded=0}static maximumSaturatedConnections(e,t){const n=8*(1460*(1e3/e));return Math.floor(t/n)}_computeMaximumCongestionWindowInSegments(){const e=this._throughput/8*(this._rtt/1e3);return Math.floor(e/jo)}setThroughput(e){this._throughput=e}setCongestionWindow(e){this._congestionWindow=e}setWarmed(e){this._warmed=e}isWarm(){return this._warmed}isH2(){return this._h2}get congestionWindow(){return this._congestionWindow}setH2OverflowBytesDownloaded(e){this._h2&&(this._h2OverflowBytesDownloaded=e)}clone(){return Object.assign(new TcpConnection(this._rtt,this._throughput),this)}simulateDownloadUntil(e,t){const{timeAlreadyElapsed:n=0,maximumTimeToElapse:a=1/0,dnsResolutionTime:r=0}=t||{};this._warmed&&this._h2&&(e-=this._h2OverflowBytesDownloaded);const o=this._rtt,i=o/2,s=this._computeMaximumCongestionWindowInSegments();let c=i;this._warmed||(c=r+i+i+i+(this._ssl?o:0));let l=Math.ceil(c/o),u=c+this._serverLatency+i;this._warmed&&this._h2&&(u=0)
-;const d=Math.max(u-n,0),m=a-d;let p=Math.min(this._congestionWindow,s),h=0;d>0?h=p*jo:l=0;let f=0,y=e-h;for(;y>0&&f<=m;){l++,f+=o,p=Math.max(Math.min(s,2*p),1);const e=p*jo;h+=e,y-=e}const b=d+f,v=this._h2?Math.max(h-e,0):0,w=Math.max(Math.min(h,e),0);let D;return D=this._warmed?this._h2?{timeToFirstByte:u}:{connectionTime:c,timeToFirstByte:u}:{dnsResolutionTime:r,connectionTime:c-r,sslTime:this._ssl?o:void 0,timeToFirstByte:u},{roundTrips:l,timeElapsed:b,bytesDownloaded:w,extraBytesDownloaded:v,congestionWindow:p,connectionTiming:D}}}const zo=["https","wss"];class ConnectionPool{constructor(e,t){this._options=t,this._records=e,this._connectionsByOrigin=new Map,this._connectionsByRecord=new Map,this._connectionsInUse=new Set,this._connectionReusedByRequestId=NetworkAnalyzer.estimateIfConnectionWasReused(e,{forceCoarseEstimates:!0}),this._initializeConnections()}connectionsInUse(){return Array.from(this._connectionsInUse)}_initializeConnections(){
-const e=this._connectionReusedByRequestId,t=this._options.additionalRttByOrigin,n=this._options.serverResponseTimeByOrigin,a=NetworkAnalyzer.groupByOrigin(this._records);for(const[r,o]of a.entries()){const a=[],i=t.get(r)||0,s=n.get(r)||30;for(const t of o){if(e.get(t.requestId))continue;const n=zo.includes(t.parsedURL.scheme),r="h2"===t.protocol,o=new TcpConnection(this._options.rtt+i,this._options.throughput,s,n,r);a.push(o)}if(!a.length)throw new Error(`Could not find a connection for origin: ${r}`);const c=a[0].isH2()?1:6;for(;a.length<c;)a.push(a[0].clone());this._connectionsByOrigin.set(r,a)}}_findAvailableConnectionWithLargestCongestionWindow(e,t){const{ignoreConnectionReused:n,observedConnectionWasReused:a}=t;let r=null;for(let t=0;t<e.length;t++){const o=e[t];if(!n&&o._warmed!==a)continue;if(this._connectionsInUse.has(o))continue;const i=r?.congestionWindow||-1/0;o.congestionWindow>i&&(r=o)}return r}acquire(e,t={}){
-if(this._connectionsByRecord.has(e))throw new Error("Record already has a connection");const n=e.parsedURL.securityOrigin,a=!!this._connectionReusedByRequestId.get(e.requestId),r=this._connectionsByOrigin.get(n)||[],o=this._findAvailableConnectionWithLargestCongestionWindow(r,{ignoreConnectionReused:t.ignoreConnectionReused,observedConnectionWasReused:a});return o?(this._connectionsInUse.add(o),this._connectionsByRecord.set(e,o),o):null}acquireActiveConnectionFromRecord(e){const t=this._connectionsByRecord.get(e);if(!t)throw new Error("Could not find an active connection for record");return t}release(e){const t=this._connectionsByRecord.get(e);this._connectionsByRecord.delete(e),this._connectionsInUse.delete(t)}}class DNSCache{constructor({rtt:e}){this._rtt=e,this._resolvedDomainNames=new Map}getTimeUntilResolution(e,t){const{requestedAt:n=0,shouldUpdateCache:a=!1}=t||{},r=e.parsedURL.host,o=this._resolvedDomainNames.get(r);let i=this._rtt*DNSCache.RTT_MULTIPLIER;if(o){
-const e=Math.max(o.resolvedAt-n,0);i=Math.min(e,i)}const s=n+i;return a&&this._updateCacheResolvedAtIfNeeded(e,s),i}_updateCacheResolvedAtIfNeeded(e,t){const n=e.parsedURL.host,a=this._resolvedDomainNames.get(n)||{resolvedAt:t};a.resolvedAt=Math.min(a.resolvedAt,t),this._resolvedDomainNames.set(n,a)}setResolvedAt(e,t){this._resolvedDomainNames.set(e,{resolvedAt:t})}}DNSCache.RTT_MULTIPLIER=2;class SimulatorTimingMap{constructor(){this._nodeTimings=new Map}getNodes(){return Array.from(this._nodeTimings.keys())}setReadyToStart(e,t){this._nodeTimings.set(e,t)}setInProgress(e,t){const n={...this.getQueued(e),startTime:t.startTime,timeElapsed:0};this._nodeTimings.set(e,e.type===BaseNode.TYPES.NETWORK?{...n,timeElapsedOvershoot:0,bytesDownloaded:0}:n)}setCompleted(e,t){const n={...this.getInProgress(e),endTime:t.endTime,connectionTiming:t.connectionTiming};this._nodeTimings.set(e,n)}setCpu(e,t){const n={...this.getCpuStarted(e),timeElapsed:t.timeElapsed};this._nodeTimings.set(e,n)}
-setCpuEstimated(e,t){const n={...this.getCpuStarted(e),estimatedTimeElapsed:t.estimatedTimeElapsed};this._nodeTimings.set(e,n)}setNetwork(e,t){const n={...this.getNetworkStarted(e),timeElapsed:t.timeElapsed,timeElapsedOvershoot:t.timeElapsedOvershoot,bytesDownloaded:t.bytesDownloaded};this._nodeTimings.set(e,n)}setNetworkEstimated(e,t){const n={...this.getNetworkStarted(e),estimatedTimeElapsed:t.estimatedTimeElapsed};this._nodeTimings.set(e,n)}getQueued(e){const t=this._nodeTimings.get(e);if(!t)throw new Error(`Node ${e.id} not yet queued`);return t}getCpuStarted(e){const t=this._nodeTimings.get(e);if(!t)throw new Error(`Node ${e.id} not yet queued`);if(!("startTime"in t))throw new Error(`Node ${e.id} not yet started`);if("bytesDownloaded"in t)throw new Error(`Node ${e.id} timing not valid`);return t}getNetworkStarted(e){const t=this._nodeTimings.get(e);if(!t)throw new Error(`Node ${e.id} not yet queued`);if(!("startTime"in t))throw new Error(`Node ${e.id} not yet started`)
-;if(!("bytesDownloaded"in t))throw new Error(`Node ${e.id} timing not valid`);return t}getInProgress(e){const t=this._nodeTimings.get(e);if(!t)throw new Error(`Node ${e.id} not yet queued`);if(!("startTime"in t))throw new Error(`Node ${e.id} not yet started`);if(!("estimatedTimeElapsed"in t))throw new Error(`Node ${e.id} not yet in progress`);return t}getCompleted(e){const t=this._nodeTimings.get(e);if(!t)throw new Error(`Node ${e.id} not yet queued`);if(!("startTime"in t))throw new Error(`Node ${e.id} not yet started`);if(!("estimatedTimeElapsed"in t))throw new Error(`Node ${e.id} not yet in progress`);if(!("endTime"in t))throw new Error(`Node ${e.id} not yet completed`);return t}}const qo=Jr.mobileSlow4G,Wo={NotReadyToStart:0,ReadyToStart:1,InProgress:2,Complete:3},$o={VeryHigh:0,High:.25,Medium:.5,Low:1,VeryLow:2},Vo=new Map;class Simulator{constructor(e){if(this._options=Object.assign({rtt:qo.rttMs,throughput:1024*qo.throughputKbps,maximumConcurrentRequests:10,
-cpuSlowdownMultiplier:qo.cpuSlowdownMultiplier,layoutTaskMultiplier:.5,additionalRttByOrigin:new Map,serverResponseTimeByOrigin:new Map},e),this._rtt=this._options.rtt,this._throughput=this._options.throughput,this._maximumConcurrentRequests=Math.max(Math.min(TcpConnection.maximumSaturatedConnections(this._rtt,this._throughput),this._options.maximumConcurrentRequests),1),this._cpuSlowdownMultiplier=this._options.cpuSlowdownMultiplier,this._layoutTaskMultiplier=this._cpuSlowdownMultiplier*this._options.layoutTaskMultiplier,this._cachedNodeListByStartPosition=[],this._flexibleOrdering=!1,this._nodeTimings=new SimulatorTimingMap,this._numberInProgressByType=new Map,this._nodes={},this._dns=new DNSCache({rtt:this._rtt}),this._connectionPool=null,!Number.isFinite(this._rtt))throw new Error(`Invalid rtt ${this._rtt}`);if(!Number.isFinite(this._throughput))throw new Error(`Invalid rtt ${this._throughput}`)}get rtt(){return this._rtt}_initializeConnectionPool(e){const t=[]
-;e.getRootNode().traverse((e=>{e.type===BaseNode.TYPES.NETWORK&&t.push(e.record)})),this._connectionPool=new ConnectionPool(t,this._options)}_initializeAuxiliaryData(){this._nodeTimings=new SimulatorTimingMap,this._numberInProgressByType=new Map,this._nodes={},this._cachedNodeListByStartPosition=[];for(const e of Object.values(Wo))this._nodes[e]=new Set}_numberInProgress(e){return this._numberInProgressByType.get(e)||0}_markNodeAsReadyToStart(e,t){const n=Simulator._computeNodeStartPosition(e),a=this._cachedNodeListByStartPosition.findIndex((e=>Simulator._computeNodeStartPosition(e)>n)),r=-1===a?this._cachedNodeListByStartPosition.length:a;this._cachedNodeListByStartPosition.splice(r,0,e),this._nodes[Wo.ReadyToStart].add(e),this._nodes[Wo.NotReadyToStart].delete(e),this._nodeTimings.setReadyToStart(e,{queuedTime:t})}_markNodeAsInProgress(e,t){const n=this._cachedNodeListByStartPosition.indexOf(e);this._cachedNodeListByStartPosition.splice(n,1),this._nodes[Wo.InProgress].add(e),
-this._nodes[Wo.ReadyToStart].delete(e),this._numberInProgressByType.set(e.type,this._numberInProgress(e.type)+1),this._nodeTimings.setInProgress(e,{startTime:t})}_markNodeAsComplete(e,t,n){this._nodes[Wo.Complete].add(e),this._nodes[Wo.InProgress].delete(e),this._numberInProgressByType.set(e.type,this._numberInProgress(e.type)-1),this._nodeTimings.setCompleted(e,{endTime:t,connectionTiming:n});for(const n of e.getDependents()){n.getDependencies().some((e=>!this._nodes[Wo.Complete].has(e)))||this._markNodeAsReadyToStart(n,t)}}_acquireConnection(e){return this._connectionPool.acquire(e,{ignoreConnectionReused:this._flexibleOrdering})}_getNodesSortedByStartPosition(){return Array.from(this._cachedNodeListByStartPosition)}_startNodeIfPossible(e,t){if(e.type!==BaseNode.TYPES.CPU){if(e.type!==BaseNode.TYPES.NETWORK)throw new Error("Unsupported");if(!e.isConnectionless){if(this._numberInProgress(e.type)>=this._maximumConcurrentRequests)return;if(!this._acquireConnection(e.record))return}
-this._markNodeAsInProgress(e,t)}else 0===this._numberInProgress(e.type)&&this._markNodeAsInProgress(e,t)}_updateNetworkCapacity(){const e=this._numberInProgress(BaseNode.TYPES.NETWORK);if(0!==e)for(const t of this._connectionPool.connectionsInUse())t.setThroughput(this._throughput/e)}_estimateTimeRemaining(e){if(e.type===BaseNode.TYPES.CPU)return this._estimateCPUTimeRemaining(e);if(e.type===BaseNode.TYPES.NETWORK)return this._estimateNetworkTimeRemaining(e);throw new Error("Unsupported")}_estimateCPUTimeRemaining(e){const t=this._nodeTimings.getCpuStarted(e),n=e.didPerformLayout()?this._layoutTaskMultiplier:this._cpuSlowdownMultiplier,a=Math.min(Math.round(e.event.dur/1e3*n),1e4)-t.timeElapsed;return this._nodeTimings.setCpuEstimated(e,{estimatedTimeElapsed:a}),a}_estimateNetworkTimeRemaining(e){const t=e.record,n=this._nodeTimings.getNetworkStarted(e);let a=0;if(e.fromDiskCache){a=8+20*((t.resourceSize||0)/1024/1024)-n.timeElapsed}else if(e.isNonNetworkProtocol){
-a=2+10*((t.resourceSize||0)/1024/1024)-n.timeElapsed}else{const e=this._connectionPool.acquireActiveConnectionFromRecord(t),r=this._dns.getTimeUntilResolution(t,{requestedAt:n.startTime,shouldUpdateCache:!0}),o=n.timeElapsed;a=e.simulateDownloadUntil(t.transferSize-n.bytesDownloaded,{timeAlreadyElapsed:o,dnsResolutionTime:r,maximumTimeToElapse:1/0}).timeElapsed}const r=a+n.timeElapsedOvershoot;return this._nodeTimings.setNetworkEstimated(e,{estimatedTimeElapsed:r}),r}_findNextNodeCompletionTime(){let e=1/0;for(const t of this._nodes[Wo.InProgress])e=Math.min(e,this._estimateTimeRemaining(t));return e}_updateProgressMadeInTimePeriod(e,t,n){const a=this._nodeTimings.getInProgress(e),r=a.estimatedTimeElapsed===t;if(e.type===BaseNode.TYPES.CPU||e.isConnectionless)return r?this._markNodeAsComplete(e,n):a.timeElapsed+=t;if(e.type!==BaseNode.TYPES.NETWORK)throw new Error("Unsupported");if(!("bytesDownloaded"in a))throw new Error("Invalid timing data")
-;const o=e.record,i=this._connectionPool.acquireActiveConnectionFromRecord(o),s=this._dns.getTimeUntilResolution(o,{requestedAt:a.startTime,shouldUpdateCache:!0}),c=i.simulateDownloadUntil(o.transferSize-a.bytesDownloaded,{dnsResolutionTime:s,timeAlreadyElapsed:a.timeElapsed,maximumTimeToElapse:t-a.timeElapsedOvershoot});i.setCongestionWindow(c.congestionWindow),i.setH2OverflowBytesDownloaded(c.extraBytesDownloaded),r?(i.setWarmed(!0),this._connectionPool.release(o),this._markNodeAsComplete(e,n,c.connectionTiming)):(a.timeElapsed+=c.timeElapsed,a.timeElapsedOvershoot+=c.timeElapsed-t,a.bytesDownloaded+=c.bytesDownloaded)}_computeFinalNodeTimings(){const e=this._nodeTimings.getNodes().map((e=>[e,this._nodeTimings.getCompleted(e)]));e.sort(((e,t)=>e[1].startTime-t[1].startTime));const t=e.map((([e,t])=>[e,{startTime:t.startTime,endTime:t.endTime,duration:t.endTime-t.startTime}]));return{nodeTimings:new Map(t),completeNodeTimings:new Map(e)}}getOptions(){return this._options}
-simulate(e,t){if(BaseNode.hasCycle(e))throw new Error("Cannot simulate graph with cycle");t=Object.assign({label:void 0,flexibleOrdering:!1},t),this._flexibleOrdering=!!t.flexibleOrdering,this._dns=new DNSCache({rtt:this._rtt}),this._initializeConnectionPool(e),this._initializeAuxiliaryData();const n=this._nodes[Wo.NotReadyToStart],a=this._nodes[Wo.ReadyToStart],r=this._nodes[Wo.InProgress],o=e.getRootNode();o.traverse((e=>n.add(e)));let i=0,s=0;for(this._markNodeAsReadyToStart(o,i);a.size||r.size;){for(const e of this._getNodesSortedByStartPosition())this._startNodeIfPossible(e,i);if(!r.size){if(this._flexibleOrdering)throw new Error("Failed to start a node");this._flexibleOrdering=!0;continue}this._updateNetworkCapacity();const e=this._findNextNodeCompletionTime();if(i+=e,!Number.isFinite(e)||s>1e5)throw new Error("Simulation failed, depth exceeded");s++;for(const t of r)this._updateProgressMadeInTimePeriod(t,e,i)}
-const{nodeTimings:c,completeNodeTimings:l}=this._computeFinalNodeTimings();return Vo.set(t.label||"unlabeled",l),{timeInMs:i,nodeTimings:c}}computeWastedMsFromWastedBytes(e){const{throughput:t,observedThroughput:n}=this._options,a=0===t?n:t;if(0===a)return 0;const r=8*e/a*1e3;return 10*Math.round(r/10)}static get ALL_NODE_TIMINGS(){return Vo}static _computeNodeStartPosition(e){return"cpu"===e.type?e.startTime:e.startTime+(1e3*$o[e.record.priority]*1e3||0)}}class NetworkAnalysis{static computeRTTAndServerResponseTime(e){const t=new Map;for(const[n,a]of NetworkAnalyzer.estimateRTTByOrigin(e).entries())t.set(n,a.min);const n=Math.min(...Array.from(t.values())),a=NetworkAnalyzer.estimateServerResponseTimeByOrigin(e,{rttByOrigin:t}),r=new Map,o=new Map;for(const[e,i]of a.entries()){const a=t.get(e)||n;r.set(e,a-n),o.set(e,i.median)}return{rtt:n,additionalRttByOrigin:r,serverResponseTimeByOrigin:o}}static async compute_(e,t){const n=await bo.request(e,t);return{
-throughput:NetworkAnalyzer.estimateThroughput(n),...NetworkAnalysis.computeRTTAndServerResponseTime(n)}}}const Ho=makeComputedArtifact(NetworkAnalysis,null);const Go=makeComputedArtifact(class LoadSimulator{static async compute_(e,t){const{throttlingMethod:n,throttling:a,precomputedLanternData:r}=e.settings,o=await Ho.request(e.devtoolsLog,t),i={additionalRttByOrigin:o.additionalRttByOrigin,serverResponseTimeByOrigin:o.serverResponseTimeByOrigin,observedThroughput:o.throughput};switch(r&&(i.additionalRttByOrigin=new Map(Object.entries(r.additionalRttByOrigin)),i.serverResponseTimeByOrigin=new Map(Object.entries(r.serverResponseTimeByOrigin))),n){case"provided":i.rtt=o.rtt,i.throughput=o.throughput,i.cpuSlowdownMultiplier=1,i.layoutTaskMultiplier=1;break;case"devtools":a&&(i.rtt=a.requestLatencyMs/Jr.DEVTOOLS_RTT_ADJUSTMENT_FACTOR,i.throughput=1024*a.downloadThroughputKbps/Jr.DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR),i.cpuSlowdownMultiplier=1,i.layoutTaskMultiplier=1;break;case"simulate":
-a&&(i.rtt=a.rttMs,i.throughput=1024*a.throughputKbps,i.cpuSlowdownMultiplier=a.cpuSlowdownMultiplier)}return new Simulator(i)}static convertAnalysisToSaveableLanternData(e){const t={additionalRttByOrigin:{},serverResponseTimeByOrigin:{}};for(const[n,a]of e.additionalRttByOrigin.entries())n.startsWith("http")&&(t.additionalRttByOrigin[n]=a);for(const[n,a]of e.serverResponseTimeByOrigin.entries())n.startsWith("http")&&(t.serverResponseTimeByOrigin[n]=a);return t}},["devtoolsLog","settings"]),Yo="artifacts.json",Ko=".trace.json",Jo=".devtoolslog.json";function loadArtifacts(e){if(Log.log("Reading artifacts from disk:",e),!J.existsSync(e))throw new Error("No saved artifacts found at "+e);const t=J.readFileSync(Q.join(e,Yo),"utf8"),n=JSON.parse(t,LighthouseError.parseReviver),a=J.readdirSync(e);return n.devtoolsLogs={},a.filter((e=>e.endsWith(Jo))).forEach((t=>{const a=t.replace(Jo,""),r=JSON.parse(J.readFileSync(Q.join(e,t),"utf8"));n.devtoolsLogs[a]=r,"defaultPass"===a&&(n.DevtoolsLog=r)
-})),n.traces={},a.filter((e=>e.endsWith(Ko))).forEach((t=>{const a=J.readFileSync(Q.join(e,t),{encoding:"utf-8"}),r=JSON.parse(a),o=t.replace(Ko,"");n.traces[o]=Array.isArray(r)?{traceEvents:r}:r,"defaultPass"===o&&(n.Trace=n.traces[o])})),Array.isArray(n.Timing)&&n.Timing.forEach((e=>e.gather=!0)),n}function stringifyReplacer(e,t){return t instanceof Error?LighthouseError.stringifyReplacer(t):t}function*arrayOfObjectsJsonGenerator(e){if(yield"[\n",e.length>0){const t=e[Symbol.iterator](),n=t.next().value;yield`  ${JSON.stringify(n)}`;let a=500,r="";for(const e of t)r+=`,\n  ${JSON.stringify(e)}`,a--,0===a&&(yield r,a=500,r="");yield r}yield"\n]"}async function saveTrace(e,t){const n=function*traceJsonGenerator(e){const{traceEvents:t,...n}=e;yield"{\n",yield'"traceEvents": ',yield*arrayOfObjectsJsonGenerator(t);for(const[e,t]of Object.entries(n))yield`,\n"${e}": ${JSON.stringify(t,null,2)}`;yield"}\n"}(e),a=J.createWriteStream(t);return Stream.promises.pipeline(n,a)}
-function saveDevtoolsLog(e,t){const n=J.createWriteStream(t);return Stream.promises.pipeline((function*(){yield*arrayOfObjectsJsonGenerator(e),yield"\n"}),n)}const Xo=[],noop=()=>{},Zo={init:async function init(e){if(!e.flags.enableErrorReporting)return;if(!Zo._shouldSample())return;try{const t=await Promise.resolve().then((function(){return Pi}));t.init({...e.environmentData,dsn:"https://a6bb0da87ee048cc9ae2a345fc09ab2e:63a7029f46f74265981b7e005e0f69f8@sentry.io/174697"});const n={...e.flags.throttling,channel:e.flags.channel||"cli",url:e.url,formFactor:e.flags.formFactor,throttlingMethod:e.flags.throttlingMethod};t.setExtras(n),Zo.captureMessage=(...e)=>t.captureMessage(...e),Zo.captureBreadcrumb=(...e)=>t.addBreadcrumb(...e),Zo.getContext=()=>n;const a=new Map;Zo.captureException=async(e,n={})=>{if(!e)return;if(e.expected)return;const r=n.tags||{};if(r.audit){const t=`audit-${r.audit}-${e.message}`;if(a.has(t))return;a.set(t,!0)}if(r.gatherer){
-const t=`gatherer-${r.gatherer}-${e.message}`;if(a.has(t))return;a.set(t,!0)}const o=Xo.find((t=>t.pattern.test(e.message)));o&&o.rate<=Math.random()||(e.protocolMethod&&(n.fingerprint=["{{ default }}",e.protocolMethod,e.protocolError],n.tags=n.tags||{},n.tags.protocolMethod=e.protocolMethod),t.withScope((a=>{n.level&&a.setLevel(n.level),n.tags&&a.setTags(n.tags),n.extra&&a.setExtras(n.extra),t.captureException(e)})))}}catch(e){Log.warn("sentry","Could not load Sentry, errors will not be reported.")}},captureMessage:noop,captureBreadcrumb:noop,getContext:noop,captureException:async()=>{},_shouldSample:()=>.01>=Math.random()};const Qo=Zo,ei={};class ReportGenerator{static replaceStrings(e,t){if(0===t.length)return e;const n=t[0],a=t.slice(1);return e.split(n.search).map((e=>ReportGenerator.replaceStrings(e,a))).join(n.replacement)}static sanitizeJson(e){return JSON.stringify(e).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}
-static generateReportHtml(e){const t=ReportGenerator.sanitizeJson(e),n=ei.REPORT_JAVASCRIPT.replace(/<\//g,"\\u003c/");return ReportGenerator.replaceStrings(ei.REPORT_TEMPLATE,[{search:"%%LIGHTHOUSE_JSON%%",replacement:t},{search:"%%LIGHTHOUSE_JAVASCRIPT%%",replacement:n}])}static generateFlowReportHtml(e){const t=ReportGenerator.sanitizeJson(e),n=ei.FLOW_REPORT_JAVASCRIPT.replace(/<\//g,"\\u003c/");return ReportGenerator.replaceStrings(ei.FLOW_REPORT_TEMPLATE,[{search:"%%LIGHTHOUSE_FLOW_JSON%%",replacement:t},{search:"%%LIGHTHOUSE_FLOW_JAVASCRIPT%%",replacement:n},{search:"/*%%LIGHTHOUSE_FLOW_CSS%%*/",replacement:ei.FLOW_REPORT_CSS}])}static generateReportCSV(e){const escape=e=>`"${e.replace(/"/g,'""')}"`,rowFormatter=e=>e.map((e=>null===e?"null":e.toString())).map(escape),t=[],n=["requestedUrl","finalDisplayedUrl","fetchTime","gatherMode"];t.push(rowFormatter(n)),t.push(rowFormatter(n.map((t=>e[t]??null)))),t.push([]),t.push(["category","score"])
-;for(const n of Object.values(e.categories))t.push(rowFormatter([n.id,n.score]));t.push([]),t.push(["category","audit","score","displayValue","description"]);for(const n of Object.values(e.categories))for(const a of n.auditRefs){const r=e.audits[a.id];r&&t.push(rowFormatter([n.id,a.id,r.score,r.displayValue||"",r.description]))}return t.map((e=>e.join(","))).join("\r\n")}static isFlowResult(e){return"steps"in e}static generateReport(e,t){const n=Array.isArray(t);"string"==typeof t&&(t=[t]);const a=t.map((t=>{if("html"===t)return ReportGenerator.isFlowResult(e)?ReportGenerator.generateFlowReportHtml(e):ReportGenerator.generateReportHtml(e);if("csv"===t){if(ReportGenerator.isFlowResult(e))throw new Error("CSV output is not support for user flows");return ReportGenerator.generateReportCSV(e)}if("json"===t)return JSON.stringify(e,null,2);throw new Error("Invalid output mode: "+t)}));return n?a:a[0]}}
-const ti=/:\/\/(\S*?)(:\d+)?(\/|$)/,ni=/([a-z0-9.-]+\.[a-z0-9]+|localhost)/i,ai=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,ri=/[^.]+\.([^.]+|(gov|com|co|ne)\.\w{2})$/i;function getDomainFromOriginOrURL(e){return"string"!=typeof e||e.length>1e4||e.startsWith("data:")?null:ti.test(e)?e.match(ti)[1]:ni.test(e)?e.match(ni)[0]:null}function getRootDomain(e){const t=getDomainFromOriginOrURL(e);if(!t)return null;if(ai.test(t))return t;const n=t.match(ri);return n&&n[0]||t}function sliceSubdomainFromDomain(e,t){return e.length<=t.length?e:e.split(".").slice(1).join(".")}function getEntityInDataset(e,t,n,a){const r=getDomainFromOriginOrURL(a),o=getRootDomain(r);if(r&&o){if(e.has(r))return e.get(r);for(let e=r;e.length>o.length;e=sliceSubdomainFromDomain(e,o))if(t.has(e))return t.get(e);return n.has(o)?n.get(o):void 0}}function getProductInDataset(e,t,n,a){const r=getEntityInDataset(e,t,n,a),o=r&&r.products;if(o&&"string"==typeof a)for(const e of o)for(const t of e.urlPatterns){
-if(t instanceof RegExp&&t.test(a))return e;if("string"==typeof t&&a.includes(t))return e}}var oi={createAPIFromDataset:function createAPIFromDataset$1(e){const t=function cloneEntities(e){return e.map((e=>{const t={company:e.name,categories:[e.category],...e},n=(e.products||[]).map((e=>({company:t.company,category:t.category,categories:[t.category],facades:[],...e,urlPatterns:(e.urlPatterns||[]).map((e=>e.startsWith("REGEXP:")?new RegExp(e.slice("REGEXP:".length)):e))})));return t.products=n,t}))}(e),n=new Map,a=new Map,r=new Map;for(const e of t){e.totalExecutionTime=Number(e.totalExecutionTime)||0,e.totalOccurrences=Number(e.totalOccurrences)||0,e.averageExecutionTime=e.totalExecutionTime/e.totalOccurrences;for(const t of e.domains){if(n.has(t)){const a=n.get(t);throw new Error(`Duplicate domain ${t} (${e.name} and ${a.name})`)}n.set(t,e);const o=getRootDomain(t);if(t.startsWith("*.")){const n=t.slice(2);n===o?a.set(o,e):r.set(n,e)}}}for(const[e,t]of a.entries())t||a.delete(e)
-;return{getEntity:getEntityInDataset.bind(null,n,r,a),getProduct:getProductInDataset.bind(null,n,r,a),getRootDomain,entities:t}}};const{createAPIFromDataset:ii}=oi;var si=ii([{name:"Google/Doubleclick Ads",company:"Google",homepage:"https://marketingplatform.google.com/about/enterprise/",category:"ad",domains:["adservice.google.com","adservice.google.com.au","adservice.google.com.sg","adservice.google.com.br","adservice.google.com.ua","adservice.google.co.uk","adservice.google.co.jp","adservice.google.co.in","adservice.google.co.kr","adservice.google.co.id","adservice.google.co.nz","adservice.google.ie","adservice.google.se","adservice.google.de","adservice.google.ca","adservice.google.be","adservice.google.es","adservice.google.ch","adservice.google.fr","adservice.google.nl","*.googleadservices.com","*.googlesyndication.com","*.googletagservices.com","*.2mdn.net","*.doubleclick.net"]},{name:"Facebook",homepage:"https://www.facebook.com",category:"social",
-domains:["*.facebook.com","*.atlassbx.com","*.fbsbx.com","fbcdn-photos-e-a.akamaihd.net","*.facebook.net","*.fbcdn.net"],products:[{name:"Facebook Messenger Customer Chat",urlPatterns:["REGEXP:connect\\.facebook\\.net\\/.*\\/sdk\\/xfbml\\.customerchat\\.js"],facades:[{name:"React Live Chat Loader",repo:"https://github.com/calibreapp/react-live-chat-loader"}]}]},{name:"Instagram",homepage:"https://www.instagram.com",category:"social",domains:["*.cdninstagram.com","*.instagram.com"]},{name:"Google CDN",company:"Google",homepage:"https://developers.google.com/speed/libraries/",category:"cdn",domains:["ajax.googleapis.com","commondatastorage.googleapis.com","www.gstatic.com","ssl.gstatic.com"]},{name:"Google Maps",company:"Google",homepage:"https://www.google.com/maps",category:"utility",
-domains:["maps.google.com","maps-api-ssl.google.com","maps.googleapis.com","mts.googleapis.com","mt.googleapis.com","mt0.googleapis.com","mt1.googleapis.com","mt2.googleapis.com","mt3.googleapis.com","khm0.googleapis.com","khm1.googleapis.com","khms.googleapis.com","khms1.googleapis.com","khms2.googleapis.com","maps.gstatic.com"]},{name:"Other Google APIs/SDKs",company:"Google",homepage:"https://developers.google.com/apis-explorer/#p/",category:"utility",
-domains:["accounts.google.com","apis.google.com","calendar.google.com","clients2.google.com","cse.google.com","news.google.com","pay.google.com","payments.google.com","play.google.com","smartlock.google.com","www.google.com","www.google.de","www.google.co.jp","www.google.com.au","www.google.co.uk","www.google.ie","www.google.com.sg","www.google.co.in","www.google.com.br","www.google.ca","www.google.co.kr","www.google.co.nz","www.google.co.id","www.google.fr","www.google.be","www.google.com.ua","www.google.nl","www.google.ru","www.google.se","www.googleapis.com","imasdk.googleapis.com","storage.googleapis.com","translate.googleapis.com","translate.google.com","translate-pa.googleapis.com","lh3.googleusercontent.com","jnn-pa.googleapis.com","csi.gstatic.com"]},{name:"Firebase",homepage:"https://developers.google.com/apis-explorer/#p/",category:"utility",
-domains:["firebasestorage.googleapis.com","firestore.googleapis.com","firebaseinstallations.googleapis.com","firebase.googleapis.com","firebaseremoteconfig.googleapis.com"]},{name:"Google Analytics",company:"Google",homepage:"https://marketingplatform.google.com/about/analytics/",category:"analytics",domains:["*.google-analytics.com","*.urchin.com","analytics.google.com"]},{name:"Google Optimize",company:"Google",homepage:"https://marketingplatform.google.com/about/optimize/",category:"analytics",domains:["www.googleoptimize.com"]},{name:"Google AMP",company:"Google",homepage:"https://github.com/google/amp-client-id-library",category:"analytics",domains:["ampcid.google.com"]},{name:"Google Tag Manager",company:"Google",homepage:"https://marketingplatform.google.com/about/tag-manager/",category:"tag-manager",domains:["*.googletagmanager.com"]},{name:"Google Fonts",company:"Google",homepage:"https://fonts.google.com/",category:"cdn",domains:["fonts.googleapis.com","fonts.gstatic.com"]},{
-name:"Adobe TypeKit",company:"Adobe",homepage:"https://fonts.adobe.com/",category:"cdn",domains:["*.typekit.com","*.typekit.net"]},{name:"YouTube",homepage:"https://youtube.com",category:"video",domains:["*.youtube.com","*.ggpht.com","*.youtube-nocookie.com","*.ytimg.com"],products:[{name:"YouTube Embedded Player",urlPatterns:["youtube.com/embed/"],facades:[{name:"Lite YouTube",repo:"https://github.com/paulirish/lite-youtube-embed"},{name:"Ngx Lite Video",repo:"https://github.com/karim-mamdouh/ngx-lite-video"}]}]},{name:"Twitter",homepage:"https://twitter.com",category:"social",domains:["*.vine.co","*.twimg.com","*.twitpic.com","platform.twitter.com","syndication.twitter.com"]},{name:"AddThis",homepage:"https://www.addthis.com/",category:"social",domains:["*.addthis.com","*.addthiscdn.com","*.addthisedge.com"]},{name:"AddToAny",homepage:"https://www.addtoany.com/",category:"social",domains:["*.addtoany.com"]},{name:"Akamai",homepage:"https://www.akamai.com/",category:"cdn",
-domains:["23.62.3.183","*.akamaitechnologies.com","*.akamaitechnologies.fr","*.akamai.net","*.akamaiedge.net","*.akamaihd.net","*.akamaized.net","*.edgefcs.net","*.edgekey.net","edgesuite.net","*.srip.net"]},{name:"Blogger",homepage:"https://www.blogger.com/",category:"hosting",domains:["*.blogblog.com","*.blogger.com","*.blogspot.com","images-blogger-opensocial.googleusercontent.com"]},{name:"Gravatar",homepage:"https://en.gravatar.com/",category:"social",domains:["*.gravatar.com"]},{name:"Yandex Metrica",company:"Yandex",homepage:"https://metrica.yandex.com/about?",category:"analytics",domains:["mc.yandex.ru","mc.yandex.com","d31j93rd8oukbv.cloudfront.net"]},{name:"Hotjar",homepage:"https://www.hotjar.com/",category:"analytics",domains:["*.hotjar.com","*.hotjar.io"]},{name:"Baidu Analytics",homepage:"https://tongji.baidu.com/web/welcome/login",category:"analytics",domains:["hm.baidu.com","hmcdn.baidu.com"]},{name:"Insider",homepage:"",category:"analytics",domains:["*.useinsider.com"]
-},{name:"Adobe Experience Cloud",company:"Adobe",homepage:"",category:"analytics",domains:["*.2o7.net","du8783wkf05yr.cloudfront.net","*.hitbox.com","*.imageg.net","*.nedstat.com","*.omtrdc.net"]},{name:"Adobe Tag Manager",company:"Adobe",homepage:"https://www.adobe.com/experience-platform/",category:"tag-manager",domains:["*.adobedtm.com","*.demdex.net","*.everesttech.net","sstats.adobe.com","hbrt.adobe.com"]},{name:"jQuery CDN",homepage:"https://code.jquery.com/",category:"cdn",domains:["*.jquery.com"]},{name:"Cloudflare CDN",homepage:"https://cdnjs.com/",category:"cdn",domains:["cdnjs.cloudflare.com","amp.cloudflare.com"]},{name:"Cloudflare",homepage:"https://www.cloudflare.com/website-optimization/",category:"utility",domains:["ajax.cloudflare.com","*.nel.cloudflare.com","static.cloudflareinsights.com"]},{name:"WordPress",company:"Automattic",homepage:"https://wp.com/",category:"hosting",
-domains:["*.wordpress.com","s0.wp.com","s2.wp.com","*.w.org","c0.wp.com","s1.wp.com","i0.wp.com","i1.wp.com","i2.wp.com","widgets.wp.com"]},{name:"WordPress Site Stats",company:"Automattic",homepage:"https://wp.com/",category:"analytics",domains:["pixel.wp.com","stats.wp.com"]},{name:"Hatena Blog",homepage:"https://hatenablog.com/",category:"hosting",domains:["*.st-hatena.com","*.hatena.ne.jp"]},{name:"Shopify",homepage:"https://www.shopify.com/",category:"hosting",domains:["*.shopify.com","*.shopifyapps.com","*.shopifycdn.com","*.shopifysvc.com"]},{name:"Dealer",homepage:"https://www.dealer.com/",category:"hosting",domains:["*.dealer.com"]},{name:"PIXNET",homepage:"https://www.pixnet.net/",category:"social",domains:["*.pixfs.net","*.pixnet.net"]},{name:"Moat",homepage:"https://moat.com/",category:"ad",domains:["*.moatads.com","*.moatpixel.com"]},{name:"33 Across",homepage:"https://33across.com/",category:"ad",domains:["*.33across.com"]},{name:"OpenX",homepage:"https://www.openx.com/",
-category:"ad",domains:["*.deliverimp.com","*.openxadexchange.com","*.servedbyopenx.com","*.jump-time.net","*.openx.net"]},{name:"Amazon Ads",homepage:"https://ad.amazon.com/",category:"ad",domains:["*.amazon-adsystem.com"]},{name:"Rubicon Project",homepage:"https://rubiconproject.com/",category:"ad",domains:["*.rubiconproject.com","*.chango.com","*.fimserve.com"]},{name:"The Trade Desk",homepage:"https://www.thetradedesk.com/",category:"ad",domains:["*.adsrvr.org","d1eoo1tco6rr5e.cloudfront.net"]},{name:"Bidswitch",homepage:"https://www.bidswitch.com/",category:"ad",domains:["*.bidswitch.net"]},{name:"LiveRamp IdentityLink",homepage:"https://liveramp.com/discover-identitylink/",category:"analytics",domains:["*.circulate.com","*.rlcdn.com"]},{name:"Drawbridge",homepage:"https://www.drawbridge.com/",category:"ad",domains:["*.adsymptotic.com"]},{name:"AOL / Oath / Verizon Media",homepage:"https://www.oath.com/",category:"ad",
-domains:["*.advertising.com","*.aol.com","*.aolcdn.com","*.blogsmithmedia.com","*.oath.com","*.aol.net","*.tacoda.net","*.aol.co.uk"]},{name:"Xaxis",homepage:"https://www.xaxis.com/",category:"ad",domains:["*.247realmedia.com","*.mookie1.com","*.gmads.net"]},{name:"Freshdesk",company:"Freshworks",homepage:"https://freshdesk.com/",category:"customer-success",domains:["d36mpcpuzc4ztk.cloudfront.net"]},{name:"Help Scout",homepage:"https://www.helpscout.net/",category:"customer-success",domains:["djtflbt20bdde.cloudfront.net","*.helpscout.net"],products:[{name:"Help Scout Beacon",urlPatterns:["beacon-v2.helpscout.net"],facades:[{name:"React Live Chat Loader",repo:"https://github.com/calibreapp/react-live-chat-loader"}]}]},{name:"Alexa",homepage:"https://www.alexa.com/",category:"analytics",domains:["*.alexametrics.com","d31qbv1cthcecs.cloudfront.net"]},{name:"OneSignal",homepage:"https://onesignal.com/",category:"utility",domains:["*.onesignal.com"]},{name:"Lucky Orange",
-homepage:"https://www.luckyorange.com/",category:"analytics",domains:["*.luckyorange.com","d10lpsik1i8c69.cloudfront.net","*.luckyorange.net"]},{name:"Crazy Egg",homepage:"https://www.crazyegg.com/",category:"analytics",domains:["*.cetrk.com","*.crazyegg.com","*.hellobar.com","dnn506yrbagrg.cloudfront.net"]},{name:"Yandex Ads",company:"Yandex",homepage:"https://yandex.com/adv/",category:"ad",domains:["an.yandex.ru"]},{name:"Salesforce",homepage:"https://www.salesforce.com/products/marketing-cloud/",category:"analytics",domains:["*.krxd.net"]},{name:"Salesforce Commerce Cloud",homepage:"https://www.salesforce.com/products/commerce-cloud/overview/",category:"hosting",domains:["*.cquotient.com","*.demandware.net","demandware.edgesuite.net"]},{name:"Optimizely",homepage:"https://www.optimizely.com/",category:"analytics",domains:["*.optimizely.com"]},{name:"LiveChat",homepage:"https://www.livechat.com/",category:"customer-success",
-domains:["*.livechatinc.com","*.livechat.com","*.livechat-static.com"]},{name:"VK",homepage:"https://vk.com/",category:"social",domains:["*.vk.com"]},{name:"Tumblr",homepage:"https://tumblr.com/",category:"social",domains:["*.tumblr.com"]},{name:"Wistia",homepage:"https://wistia.com/",category:"video",domains:["*.wistia.com","embedwistia-a.akamaihd.net","*.wistia.net"]},{name:"Brightcove",homepage:"https://www.brightcove.com/en/",category:"video",domains:["*.brightcove.com","*.brightcove.net","*.zencdn.net"]},{name:"JSDelivr CDN",homepage:"https://www.jsdelivr.com/",category:"cdn",domains:["*.jsdelivr.net"]},{name:"Sumo",homepage:"https://sumo.com/",category:"marketing",domains:["*.sumo.com","*.sumome.com","sumo.b-cdn.net"]},{name:"Vimeo",homepage:"https://vimeo.com/",category:"video",domains:["*.vimeo.com","*.vimeocdn.com"],products:[{name:"Vimeo Embedded Player",urlPatterns:["player.vimeo.com/video/"],facades:[{name:"Lite Vimeo",repo:"https://github.com/slightlyoff/lite-vimeo"},{
-name:"Lite Vimeo Embed",repo:"https://github.com/luwes/lite-vimeo-embed"},{name:"Ngx Lite Video",repo:"https://github.com/karim-mamdouh/ngx-lite-video"}]}]},{name:"Disqus",homepage:"https://disqus.com/",category:"social",domains:["*.disqus.com","*.disquscdn.com"]},{name:"Yandex APIs",company:"Yandex",homepage:"https://yandex.ru/",category:"utility",domains:["api-maps.yandex.ru","money.yandex.ru"]},{name:"Yandex CDN",company:"Yandex",homepage:"https://yandex.ru/",category:"cdn",domains:["*.yandex.st","*.yastatic.net"]},{name:"Integral Ad Science",homepage:"https://integralads.com/uk/",category:"ad",domains:["*.adsafeprotected.com","*.iasds01.com"]},{name:"Tealium",homepage:"https://tealium.com/",category:"tag-manager",domains:["*.aniview.com","*.delvenetworks.com","*.limelight.com","*.tiqcdn.com","*.llnwd.net","*.tealiumiq.com"]},{name:"Pubmatic",homepage:"https://pubmatic.com/",category:"ad",domains:["*.pubmatic.com"]},{name:"Olark",homepage:"https://www.olark.com/",
-category:"customer-success",domains:["*.olark.com"]},{name:"Tawk.to",homepage:"https://www.tawk.to/",category:"customer-success",domains:["*.tawk.to"]},{name:"OptinMonster",homepage:"https://optinmonster.com/",category:"marketing",domains:["*.opmnstr.com","*.optmnstr.com","*.optmstr.com"]},{name:"ZenDesk",homepage:"https://zendesk.com/",category:"customer-success",domains:["*.zdassets.com","*.zendesk.com","*.zopim.com"]},{name:"Pusher",homepage:"https://pusher.com/",category:"utility",domains:["*.pusher.com","*.pusherapp.com"]},{name:"Drift",homepage:"https://www.drift.com/",category:"marketing",domains:["*.drift.com","*.driftt.com"],products:[{name:"Drift Live Chat",urlPatterns:["REGEXP:js\\.driftt\\.com\\/include\\/.*\\/.*\\.js"],facades:[{name:"React Live Chat Loader",repo:"https://github.com/calibreapp/react-live-chat-loader"}]}]},{name:"Sentry",homepage:"https://sentry.io/",category:"utility",domains:["*.getsentry.com","*.ravenjs.com","*.sentry-cdn.com","*.sentry.io"]},{
-name:"Amazon Web Services",homepage:"https://aws.amazon.com/s3/",category:"other",domains:["*.amazon.com","*.amazonaws.com","*.amazonwebapps.com","*.amazonwebservices.com","*.elasticbeanstalk.com","*.images-amazon.com","*.amazon.co.uk"]},{name:"Amazon Pay",homepage:"https://pay.amazon.com",category:"utility",domains:["payments.amazon.com","*.payments-amazon.com"]},{name:"Media.net",homepage:"https://www.media.net/",category:"ad",domains:["*.media.net","*.mnet-ad.net"]},{name:"Yahoo!",homepage:"https://www.yahoo.com/",category:"ad",domains:["*.bluelithium.com","*.hostingprod.com","*.lexity.com","*.yahoo.com","*.yahooapis.com","*.yimg.com","*.zenfs.com","*.yahoo.net"]},{name:"Adroll",homepage:"https://www.adroll.com/",category:"ad",domains:["*.adroll.com"]},{name:"Twitch",homepage:"https://twitch.tv/",category:"video",domains:["*.twitch.tv"]},{name:"Taboola",homepage:"https://www.taboola.com/",category:"ad",domains:["*.taboola.com","*.taboolasyndication.com"]},{name:"Sizmek",
-homepage:"https://www.sizmek.com/",category:"ad",domains:["*.serving-sys.com","*.peer39.net"]},{name:"Scorecard Research",homepage:"https://www.scorecardresearch.com/",category:"ad",domains:["*.scorecardresearch.com"]},{name:"Criteo",homepage:"https://www.criteo.com/",category:"ad",domains:["*.criteo.com","*.emailretargeting.com","*.criteo.net"]},{name:"Segment",homepage:"https://segment.com/",category:"analytics",domains:["*.segment.com","*.segment.io"]},{name:"ShareThis",homepage:"https://www.sharethis.com/",category:"social",domains:["*.sharethis.com"]},{name:"Distil Networks",homepage:"https://www.distilnetworks.com/",category:"utility",domains:["*.areyouahuman.com"]},{name:"Connexity",homepage:"https://connexity.com/",category:"analytics",domains:["*.connexity.net"]},{name:"Popads",homepage:"https://www.popads.net/",category:"ad",domains:["*.popads.net"]},{name:"CreateJS CDN",homepage:"https://code.createjs.com/",category:"cdn",domains:["*.createjs.com"]},{name:"Squarespace",
-homepage:"https://www.squarespace.com/",category:"hosting",domains:["*.squarespace.com"]},{name:"Media Math",homepage:"https://www.mediamath.com/",category:"ad",domains:["*.mathads.com","*.mathtag.com"]},{name:"Mixpanel",homepage:"https://mixpanel.com/",category:"analytics",domains:["*.mixpanel.com","*.mxpnl.com"]},{name:"FontAwesome CDN",homepage:"https://fontawesome.com/",category:"cdn",domains:["*.fontawesome.com"]},{name:"Hubspot",homepage:"https://hubspot.com/",category:"marketing",domains:["*.hs-scripts.com","*.hubspot.com","*.leadin.com","*.hs-analytics.net","*.hscollectedforms.net","*.hscta.net","*.hsforms.net","*.hsleadflows.net","*.hsstatic.net","*.hubspot.net","*.hsforms.com","*.hs-banner.com","*.hs-embed-reporting.com","*.hs-growth-metrics.com","*.hs-data.com","*.hsadspixel.net"]},{name:"Mailchimp",homepage:"https://mailchimp.com/",category:"marketing",domains:["*.chimpstatic.com","*.list-manage.com","*.mailchimp.com"]},{name:"MGID",homepage:"https://www.mgid.com/",
-category:"ad",domains:["*.mgid.com","*.dt07.net"]},{name:"Stripe",homepage:"https://stripe.com",category:"utility",domains:["*.stripe.com","*.stripecdn.com","*.stripe.network"]},{name:"PayPal",homepage:"https://paypal.com",category:"utility",domains:["*.paypal.com","*.paypalobjects.com"]},{name:"Market GID",homepage:"https://www.marketgid.com/",category:"ad",domains:["*.marketgid.com"]},{name:"Pinterest",homepage:"https://pinterest.com/",category:"social",domains:["*.pinimg.com","*.pinterest.com"]},{name:"New Relic",homepage:"https://newrelic.com/",category:"utility",domains:["*.newrelic.com","*.nr-data.net"]},{name:"AppDynamics",homepage:"https://www.appdynamics.com/",category:"utility",domains:["*.appdynamics.com","*.eum-appdynamics.com","d3tjaysgumg9lf.cloudfront.net"]},{name:"Parking Crew",homepage:"https://parkingcrew.net/",category:"other",domains:["d1lxhc4jvstzrp.cloudfront.net","*.parkingcrew.net"]},{name:"WordAds",company:"Automattic",homepage:"https://wordads.co/",
-category:"ad",domains:["*.pubmine.com"]},{name:"AppNexus",homepage:"https://www.appnexus.com/",category:"ad",domains:["*.adnxs.com","*.ctasnet.com","*.adrdgt.com"]},{name:"Histats",homepage:"https://www.histats.com/",category:"analytics",domains:["*.histats.com"]},{name:"DoubleVerify",homepage:"https://www.doubleverify.com/",category:"ad",domains:["*.doubleverify.com","*.dvtps.com","*.iqfp1.com"]},{name:"Mediavine",homepage:"https://www.mediavine.com/",category:"ad",domains:["*.mediavine.com"]},{name:"Wix",homepage:"https://www.wix.com/",category:"hosting",domains:["*.parastorage.com","*.wix.com","*.wixstatic.com","*.wixapps.net"]},{name:"Webflow",homepage:"https://webflow.com/",category:"hosting",domains:["*.uploads-ssl.webflow.com","*.assets-global.website-files.com","*.assets.website-files.com"]},{name:"Weebly",homepage:"https://www.weebly.com/",category:"hosting",domains:["*.editmysite.com"]},{name:"LinkedIn",homepage:"https://www.linkedin.com/",category:"social",
-domains:["*.bizographics.com","platform.linkedin.com","*.slideshare.com","*.slidesharecdn.com"]},{name:"LinkedIn Ads",category:"ad",domains:["*.licdn.com","*.ads.linkedin.com","ads.linkedin.com","www.linkedin.com"]},{name:"Vox Media",homepage:"https://www.voxmedia.com/",category:"content",domains:["*.vox-cdn.com","*.voxmedia.com"]},{name:"Hotmart",homepage:"https://www.hotmart.com/",category:"content",domains:["*.hotmart.com"]},{name:"SoundCloud",homepage:"https://www.soundcloud.com/",category:"content",domains:["*.sndcdn.com","*.soundcloud.com","*.stratus.sc"]},{name:"Spotify",homepage:"https://www.spotify.com/",category:"content",domains:["*.scdn.co","*.spotify.com"]},{name:"AMP",homepage:"https://amp.dev/",category:"content",domains:["*.ampproject.org"]},{name:"Beeketing",homepage:"https://beeketing.com/",category:"marketing",domains:["*.beeketing.com"]},{name:"Albacross",homepage:"https://albacross.com/",category:"marketing",domains:["*.albacross.com"]},{name:"TrafficJunky",
-homepage:"https://www.trafficjunky.com/",category:"ad",domains:["*.contentabc.com","*.trafficjunky.net"]},{name:"Bootstrap CDN",homepage:"https://www.bootstrapcdn.com/",category:"cdn",domains:["*.bootstrapcdn.com"]},{name:"Shareaholic",homepage:"https://www.shareaholic.com/",category:"social",domains:["*.shareaholic.com","dsms0mj1bbhn4.cloudfront.net"]},{name:"Snowplow",homepage:"https://snowplowanalytics.com/",category:"analytics",domains:["d32hwlnfiv2gyn.cloudfront.net"]},{name:"RD Station",homepage:"https://www.rdstation.com/en/",category:"marketing",domains:["d335luupugsy2.cloudfront.net"]},{name:"Jivochat",homepage:"https://www.jivochat.com/",category:"customer-success",domains:["*.jivosite.com"]},{name:"Listrak",homepage:"https://www.listrak.com/",category:"marketing",domains:["*.listrak.com","*.listrakbi.com"]},{name:"Ontame",homepage:"https://www.ontame.io",category:"analytics",domains:["*.ontame.io"]},{name:"Ipify",homepage:"https://www.ipify.org",category:"utility",
-domains:["*.ipify.org"]},{name:"Ensighten",homepage:"https://www.ensighten.com/",category:"tag-manager",domains:["*.ensighten.com"]},{name:"EpiServer",homepage:"https://www.episerver.com",category:"content",domains:["*.episerver.net"]},{name:"mPulse",homepage:"https://developer.akamai.com/akamai-mpulse",category:"analytics",domains:["*.akstat.io","*.go-mpulse.net","*.mpulse.net","*.mpstat.us"]},{name:"Pingdom RUM",homepage:"https://www.pingdom.com/product/performance-monitoring/",category:"analytics",domains:["*.pingdom.net"]},{name:"SpeedCurve LUX",company:"SpeedCurve",homepage:"https://speedcurve.com/features/lux/",category:"analytics",domains:["*.speedcurve.com"]},{name:"Radar",company:"Cedexis",homepage:"https://www.cedexis.com/radar/",category:"analytics",
-domains:["*.cedexis-test.com","*.cedexis.com","*.cmdolb.com","cedexis.leasewebcdn.com","*.cedexis-radar.net","*.cedexis.net","cedexis-test01.insnw.net","cedexisakamaitest.azureedge.net","cedexispub.cdnetworks.net","cs600.wac.alphacdn.net","cs600.wpc.edgecastdns.net","global2.cmdolb.com","img-cedexis.mncdn.com","a-cedexis.msedge.net","zn3vgszfh.fastestcdn.net"]},{name:"Byside",homepage:"https://byside.com",category:"analytics",domains:["*.byside.com"]},{name:"VWO",homepage:"https://vwo.com",category:"analytics",domains:["*.vwo.com","*.visualwebsiteoptimizer.com","d5phz18u4wuww.cloudfront.net","*.wingify.com"]},{name:"Bing Ads",homepage:"https://bingads.microsoft.com",category:"ad",domains:["*.bing.com","*.microsoft.com","*.msn.com","*.s-msft.com","*.s-msn.com","*.msads.net","*.msecnd.net"]},{name:"GoSquared",homepage:"https://www.gosquared.com",category:"analytics",domains:["*.gosquared.com","d1l6p2sc9645hc.cloudfront.net"]},{name:"Usabilla",homepage:"https://usabilla.com",
-category:"analytics",domains:["*.usabilla.com","d6tizftlrpuof.cloudfront.net"]},{name:"Fastly Insights",homepage:"https://insights.fastlylabs.com",category:"analytics",domains:["*.fastly-insights.com"]},{name:"Visual IQ",homepage:"https://www.visualiq.com",category:"analytics",domains:["*.myvisualiq.net"]},{name:"Snapchat",homepage:"https://www.snapchat.com",category:"analytics",domains:["*.snapchat.com","*.sc-static.net"]},{name:"Atlas Solutions",homepage:"https://atlassolutions.com",category:"analytics",domains:["*.atdmt.com"]},{name:"Quantcast",homepage:"https://www.quantcast.com",category:"analytics",domains:["*.brtstats.com","*.quantcount.com","*.quantserve.com","*.semantictec.com","*.ntv.io"]},{name:"Spiceworks",homepage:"https://www.spiceworks.com",category:"analytics",domains:["*.spiceworks.com"]},{name:"Marketo",homepage:"https://www.marketo.com",category:"analytics",domains:["*.marketo.com","*.mktoresp.com","*.marketo.net"]},{name:"Intercom",
-homepage:"https://www.intercom.com",category:"customer-success",domains:["*.intercomcdn.com","*.intercom.io"],products:[{name:"Intercom Widget",urlPatterns:["widget.intercom.io","js.intercomcdn.com/shim.latest.js"],facades:[{name:"React Live Chat Loader",repo:"https://github.com/calibreapp/react-live-chat-loader"},{name:"Intercom Facade",repo:"https://github.com/danielbachhuber/intercom-facade/"}]}]},{name:"Unpkg",homepage:"https://unpkg.com",category:"cdn",domains:["*.unpkg.com","*.npmcdn.com"]},{name:"ReadSpeaker",homepage:"https://www.readspeaker.com",category:"other",domains:["*.readspeaker.com"]},{name:"Browsealoud",homepage:"https://www.texthelp.com/en-gb/products/browsealoud/",category:"other",domains:["*.browsealoud.com","*.texthelp.com"]},{name:"15gifts",category:"customer-success",domains:["*.15gifts.com","*.primefuse.com"]},{name:"1xRUN",category:"utility",domains:["*.1xrun.com"]},{name:"2AdPro Media Solutions",category:"ad",domains:["*.2adpro.com"]},{
-name:"301 Digital Media",category:"content",domains:["*.301ads.com","*.301network.com"]},{name:"360 picnic platform",company:"MediaV",category:"ad",domains:["*.mediav.com"]},{name:"365 Media Group",category:"content",domains:["*.365dm.com"]},{name:"365 Tech Services",category:"hosting",domains:["*.365webservices.co.uk"]},{name:"3D Issue",category:"utility",domains:["*.3dissue.com","*.pressjack.com"]},{name:"47Line Technologies",category:"other",domains:["*.pejs.net"]},{name:"4finance",category:"utility",domains:["*.4finance.com"]},{name:"5miles",category:"content",domains:["*.5milesapp.com"]},{name:"77Tool",company:"77Agency",category:"analytics",domains:["*.77tracking.com"]},{name:"9xb",category:"ad",domains:["*.9xb.com"]},{name:"@UK",category:"hosting",domains:["*.uk-plc.net"]},{name:"A Perfect Pocket",category:"hosting",domains:["*.aperfectpocketdata.com"]},{name:"A-FIS PTE",category:"analytics",domains:["*.websta.me"]},{name:"AB Tasty",category:"analytics",
-domains:["*.abtasty.com","d1447tq2m68ekg.cloudfront.net"]},{name:"ABA RESEARCH",category:"analytics",domains:["*.abaresearch.uk","qmodal.azurewebsites.net"]},{name:"ADMIZED",category:"ad",domains:["*.admized.com"]},{name:"ADNOLOGIES",category:"ad",domains:["*.heias.com"]},{name:"ADventori",category:"ad",domains:["*.adventori.com"]},{name:"AI Media Group",category:"ad",domains:["*.aimediagroup.com"]},{name:"AIR.TV",category:"ad",domains:["*.air.tv"]},{name:"AKQA",category:"ad",domains:["*.srtk.net"]},{name:"AOL ad",company:"AOL",category:"ad",domains:["*.atwola.com"]},{name:"AOL On",company:"AOL",category:"content",domains:["*.5min.com"]},{name:"AOL Sponsored Listiings",company:"AOL",category:"ad",domains:["*.adsonar.com"]},{name:"APSIS Lead",company:"APSIS International AB",category:"ad",domains:["*.prospecteye.com"]},{name:"APSIS Profile Cloud",company:"APSIS",category:"analytics",domains:["*.innomdc.com"]},{name:"APSIS Forms",company:"APSIS",category:"other",
-domains:["*.apsisforms.com"]},{name:"ARENA",company:"Altitude",category:"ad",domains:["*.altitude-arena.com"]},{name:"ARM",category:"analytics",domains:["*.tag4arm.com"]},{name:"ASAPP",category:"other",domains:["*.asapp.com"]},{name:"ASP",category:"hosting",domains:["*.goshowoff.com"]},{name:"AT Internet",category:"analytics",domains:["*.ati-host.net"]},{name:"ATTRAQT",category:"utility",domains:["*.attraqt.com","*.locayta.com"]},{name:"AVANSER",category:"analytics",domains:["*.avanser.com.au"]},{name:"AVG",company:"AVG Technologies",category:"utility",domains:["*.avg.com"]},{name:"AWeber",category:"ad",domains:["*.aweber.com"]},{name:"AXS",category:"content",domains:["*.axs.com"]},{name:"Accentuate",company:"Accentuate Digital",category:"utlity",homepage:"https://www.accentuate.io/",domains:["*.accentuate.io"]},{name:"Accenture",category:"analytics",domains:["*.tmvtp.com"]},{name:"Accord Holdings",category:"ad",domains:["*.agcdn.com"]},{name:"Accordant Media",category:"ad",
-domains:["*.a3cloud.net"]},{name:"Account Kit",category:"other",domains:["*.accountkit.com"]},{name:"Accuen Media (Omnicom Media Group)",category:"content",domains:["*.p-td.com"]},{name:"Accuweather",category:"content",domains:["*.accuweather.com"]},{name:"Acquisio",category:"ad",domains:["*.acq.io"]},{name:"Act-On Software",category:"marketing",domains:["*.actonsoftware.com"]},{name:"ActBlue",category:"other",domains:["*.actblue.com"]},{name:"Active Agent",category:"ad",domains:["*.active-agent.com"]},{name:"ActiveCampaign",category:"ad",domains:["*.trackcmp.net","app-us1.com","*.app-us1.com"]},{name:"AcuityAds",category:"ad",domains:["*.acuityplatform.com"]},{name:"Acxiom",category:"ad",domains:["*.acxiom-online.com","*.acxiomapac.com","*.delivery.net"]},{name:"Ad4Screen",category:"ad",domains:["*.a4.tl"]},{name:"Ad6Media",category:"ad",domains:["*.ad6media.fr"]},{name:"AdCurve",category:"ad",domains:["*.shop2market.com"]},{name:"AdEasy",category:"ad",domains:["*.adeasy.ru"]},{
-name:"AdExtent",category:"ad",domains:["*.adextent.com"]},{name:"AdForge Edge",company:"AdForge",category:"ad",domains:["*.adforgeinc.com"]},{name:"AdGear",company:"Samsung Electronics",category:"ad",domains:["*.adgear.com","*.adgrx.com"]},{name:"AdInMedia",category:"ad",domains:["*.fastapi.net"]},{name:"AdJug",category:"ad",domains:["*.adjug.com"]},{name:"AdMatic",category:"ad",domains:["*.admatic.com.tr"]},{name:"AdMedia",category:"ad",domains:["*.admedia.com"]},{name:"AdRecover",category:"ad",domains:["*.adrecover.com"]},{name:"AdRiver",category:"ad",domains:["*.adriver.ru"]},{name:"AdSniper",category:"ad",domains:["*.adsniper.ru","*.sniperlog.ru"]},{name:"AdSpeed",category:"ad",domains:["*.adspeed.net"]},{name:"AdSpruce",category:"ad",domains:["*.adspruce.com"]},{name:"AdSupply",category:"ad",domains:["*.doublepimp.com"]},{name:"AdTheorent",category:"ad",domains:["*.adentifi.com"]},{name:"AdThink AudienceInsights",company:"AdThink Media",category:"analytics",
-domains:["*.audienceinsights.net"]},{name:"AdTrue",company:"FPT AdTrue",category:"ad",domains:["*.adtrue.com"]},{name:"AdYapper",category:"ad",domains:["*.adyapper.com"]},{name:"Adacado",category:"ad",domains:["*.adacado.com"]},{name:"Adap.tv",category:"ad",domains:["*.adap.tv"]},{name:"Adapt Services",category:"hosting",domains:["*.adcmps.com"]},{name:"Adaptive Web",category:"hosting",domains:["*.adaptive.co.uk"]},{name:"Adara Media",category:"ad",domains:["*.yieldoptimizer.com"]},{name:"Adblade",category:"ad",domains:["*.adblade.com"]},{name:"Adbrain",category:"ad",domains:["*.adbrn.com"]},{name:"AddEvent",category:"utility",domains:["*.addevent.com"]},{name:"AddShoppers",category:"social",domains:["*.addshoppers.com","d3rr3d0n31t48m.cloudfront.net","*.shop.pe"]},{name:"AddThisEvent",category:"hosting",domains:["*.addthisevent.com"]},{name:"Addoox MetaNetwork",company:"Addoox",category:"ad",domains:["*.metanetwork.net"]},{name:"Addvantage Media",category:"ad",
-domains:["*.addvantagemedia.com","*.simplytechnology.net"]},{name:"AD EBis",category:"analytics",homepage:"https://www.ebis.ne.jp/",domains:["*.ebis.ne.jp"]},{name:"Adecs",category:"customer-success",domains:["*.adecs.co.uk"]},{name:"Adelphic",category:"ad",domains:["*.ipredictive.com"]},{name:"Adestra",category:"ad",domains:["*.adestra.com","*.msgfocus.com"]},{name:"Adform",category:"ad",domains:["*.adform.net","*.adformdsp.net"]},{name:"Adkontekst",category:"ad",domains:["*.adkontekst.pl"]},{name:"Adlead",category:"ad",domains:["*.webelapp.com"]},{name:"Adledge",category:"utility",domains:["*.adledge.com"]},{name:"Adloox",category:"ad",domains:["*.adlooxtracking.com"]},{name:"Adlux",category:"ad",domains:["*.adlux.com"]},{name:"Admedo",category:"ad",domains:["*.a8723.com","*.adizio.com","*.admedo.com"]},{name:"Admeta",company:"Wideorbit",category:"ad",domains:["*.atemda.com"]},{name:"Admetrics",company:"Next Tuesday",category:"analytics",domains:["*.nt.vc"]},{name:"Admiral",
-category:"ad",domains:["*.unknowntray.com"]},{name:"Admitad",category:"ad",domains:["*.lenmit.com"]},{name:"Admixer for Publishers",company:"Admixer",category:"ad",domains:["*.admixer.net"]},{name:"Adnium",category:"ad",domains:["*.adnium.com"]},{name:"Adnostic",company:"Dennis Publishing",category:"ad",domains:["*.adnostic.co.uk"]},{name:"Adobe Marketing Cloud",company:"Adobe Systems",category:"ad",domains:["*.adobetag.com"]},{name:"Adobe Scene7",company:"Adobe Systems",category:"content",domains:["wwwimages.adobe.com","*.scene7.com","*.everestads.net","*.everestjs.net"]},{name:"Adobe Systems",category:"content",domains:["adobe.com","www.adobe.com"]},{name:"Adobe Business Catalyst",homepage:"https://www.businesscatalyst.com/",category:"hosting",domains:["*.businesscatalyst.com"]},{name:"Adocean",company:"Gemius",category:"ad",domains:["*.adocean.pl"]},{name:"Adometry",company:"Google",category:"ad",domains:["*.dmtry.com"]},{name:"Adomik",category:"analytics",domains:["*.adomik.com"]
-},{name:"Adotmob",category:"ad",domains:["*.adotmob.com"]},{name:"Adrian Quevedo",category:"hosting",domains:["*.adrianquevedo.com"]},{name:"Adroit Digital Solutions",category:"ad",domains:["*.imiclk.com","*.abmr.net"]},{name:"AdsNative",category:"ad",domains:["*.adsnative.com"]},{name:"AdsWizz",category:"ad",domains:["*.adswizz.com"]},{name:"Adscale",category:"ad",domains:["*.adscale.de"]},{name:"Adschoom",company:"JSWeb Production",category:"ad",domains:["*.adschoom.com"]},{name:"Adscience",category:"ad",domains:["*.adscience.nl"]},{name:"Adsiduous",category:"ad",domains:["*.adsiduous.com"]},{name:"Adsty",category:"ad",domains:["*.adx1.com"]},{name:"Adtech (AOL)",category:"ad",domains:["*.adtechus.com"]},{name:"Adtegrity",category:"ad",domains:["*.adtpix.com"]},{name:"Adthink",company:"Adthink Media",category:"ad",domains:["*.adxcore.com","*.dcoengine.com"]},{name:"AdultWebmasterEmpire.Com",category:"ad",domains:["*.awempire.com"]},{name:"Adunity",category:"ad",
-domains:["*.adunity.com"]},{name:"Advance Magazine Group",category:"content",domains:["*.condenastdigital.com","*.condenet.com","*.condenast.co.uk"]},{name:"Adverline Board",company:"Adverline",category:"ad",domains:["*.adverline.com","*.adnext.fr"]},{name:"AdvertServe",category:"ad",domains:["*.advertserve.com"]},{name:"Advolution",category:"utility",domains:["*.advolution.de"]},{name:"Adwise",category:"ad",domains:["*.adwise.bg"]},{name:"Adyen",category:"utility",domains:["*.adyen.com"]},{name:"Adyoulike",category:"ad",domains:["*.adyoulike.com","*.omnitagjs.com","*.adyoulike.net"]},{name:"Adzerk",category:"ad",domains:["*.adzerk.net"]},{name:"Adzip",company:"Adbox Digital",category:"ad",domains:["*.adzip.co"]},{name:"AerServ",category:"ad",domains:["*.aerserv.com"]},{name:"Affectv",category:"ad",domains:["*.affectv.com","*.affec.tv"]},{name:"Affiliate Window",company:"Digital Window",category:"ad",domains:["*.dwin1.com"]},{name:"Affiliatly",category:"ad",domains:["*.affiliatly.com"]
-},{name:"Affino",category:"ad",domains:["affino.com"]},{name:"Affirm",category:"utility",domains:["*.affirm.com"]},{name:"Afterpay",company:"Block",category:"utlity",homepage:"https://www.afterpay.com/",domains:["*.afterpay.com"]},{name:"Agenda Media",category:"ad",domains:["*.agendamedia.co.uk"]},{name:"Aggregate Knowledge",company:"Neustar",category:"ad",domains:["*.agkn.com"]},{name:"AgilOne",category:"marketing",domains:["*.agilone.com"]},{name:"Agility",category:"hosting",domains:["*.agilitycms.com"]},{name:"Ahalogy",category:"social",domains:["*.ahalogy.com"]},{name:"Aheadworks",category:"utility",domains:["*.aheadworks.com"]},{name:"AirPR",category:"analytics",domains:["*.airpr.com"]},{name:"Aira",category:"ad",domains:["*.aira.net"]},{name:"Airport Parking and Hotels",category:"content",domains:["*.aph.com"]},{name:"Akanoo",category:"analytics",domains:["*.akanoo.com"]},{name:"Alchemy",company:"AndBeyond.Media",category:"ad",domains:["*.andbeyond.media"]},{name:"AlephD",
-company:"AOL",category:"ad",domains:["*.alephd.com"]},{name:"AliveChat",company:"AYU Technology Solutions",category:"customer-success",domains:["*.websitealive.com","*.websitealive7.com"]},{name:"All Access",category:"other",domains:["*.allaccess.com.ph"]},{name:"Alliance for Audited Media",category:"ad",domains:["*.aamsitecertifier.com"]},{name:"Allyde",category:"marketing",domains:["*.mautic.com"]},{name:"AlphaSSL",category:"utility",domains:["*.alphassl.com"]},{name:"Altitude",category:"ad",domains:["*.altitudeplatform.com"]},{name:"Altocloud",category:"analytics",domains:["*.altocloud.com"]},{name:"Amadeus",category:"content",domains:["*.e-travel.com"]},{name:"Amazon CloudFront",company:"Amazon",category:"utility",domains:["cloudfront.net"]},{name:"Ambassador",category:"ad",domains:["*.getambassador.com"]},{name:"Ambient",company:"Ericcson",category:"other",domains:["*.adnetwork.vn","*.ambientplatform.vn"]},{name:"Amelia Communication",category:"hosting",domains:["*.sara.media"]},{
-name:"Amobee",category:"marketing",domains:["*.amgdgt.com","*.kontera.com"]},{name:"Amplience",category:"marketing",domains:["*.10cms.com","*.amplience.com","*.amplience.net","*.bigcontent.io","*.adis.ws"]},{name:"Amplitude Mobile Analytics",company:"Amplitude",category:"analytics",domains:["*.amplitude.com","d24n15hnbwhuhn.cloudfront.net"]},{name:"Anametrix",company:"Ensighten",category:"analytics",domains:["*.anametrix.com"]},{name:"Ancora Platform",company:"Ancora Media Solutions",category:"ad",domains:["*.ancoraplatform.com"]},{name:"Anedot",category:"other",domains:["*.anedot.com"]},{name:"AnimateJS",category:"utility",domains:["*.animatedjs.com"]},{name:"AnswerDash",category:"customer-success",domains:["*.answerdash.com"]},{name:"Answers",category:"analytics",domains:["*.answcdn.com","*.answers.com","*.dsply.com"]},{name:"Apester",category:"analytics",domains:["*.apester.com","*.qmerce.com"]},{name:"Apligraf SmartWeb",company:"Apligraf",category:"utility",
-domains:["*.apligraf.com.br"]},{name:"Appier",category:"ad",domains:["*.appier.net"]},{name:"Appsolute",category:"utility",homepage:"https://appsolute.us/",domains:["dropahint.love"]},{name:"Apptus eSales",company:"Apptus",category:"analytics",domains:["*.apptus.com"]},{name:"Arbor",company:"LiveRamp",category:"other",domains:["*.pippio.com"]},{name:"Ardent Creative",category:"hosting",domains:["*.ardentcreative.co.uk"]},{name:"Arnold Clark Automobiles",category:"content",domains:["*.arnoldclark.com"]},{name:"Atom Content Marketing",category:"content",domains:["*.atomvault.net"]},{name:"Atom Data",category:"other",domains:["*.atomdata.io"]},{name:"Attribution",category:"ad",domains:["*.attributionapp.com"]},{name:"Audience 360",company:"Datapoint Media",category:"ad",domains:["*.dpmsrv.com"]},{name:"Audience Science",category:"ad",domains:["*.revsci.net"]},{name:"AudienceSearch",company:"Intimate Merger",category:"ad",domains:["*.im-apps.net"]},{name:"Auditorius",category:"ad",
-domains:["*.audtd.com"]},{name:"Augur",category:"analytics",domains:["*.augur.io"]},{name:"Auto Link Maker",company:"Apple",category:"ad",domains:["*.apple.com"]},{name:"Autopilot",category:"ad",domains:["*.autopilothq.com"]},{name:"Avail",company:"RichRelevance",category:"ad",domains:["*.avail.net"]},{name:"AvantLink",category:"ad",domains:["*.avmws.com"]},{name:"Avco Systems",category:"utility",domains:["*.avcosystems.com"]},{name:"Avid Media",category:"customer-success",domains:["*.adspdbl.com","*.metadsp.co.uk"]},{name:"Avocet Systems",category:"ad",domains:["*.avocet.io","ads.avct.cloud"]},{name:"Avora",category:"analytics",domains:["*.truedash.com"]},{name:"Azure Traffic Manager",company:"Microsoft",category:"other",domains:["*.gateway.net","*.trafficmanager.net"]},{name:"Azure Web Services",company:"Microsoft",category:"cdn",domains:["*.azurewebsites.net","*.azureedge.net","*.msedge.net","*.windows.net"]},{name:"BAM",category:"analytics",domains:["*.bam-x.com"]},{
-name:"Baifendian Technology",category:"marketing",domains:["*.baifendian.com"]},{name:"Bankrate",category:"utility",domains:["*.bankrate.com"]},{name:"BannerFlow",company:"Nordic Factory Solutions",category:"ad",domains:["*.bannerflow.com"]},{name:"Barclaycard SmartPay",company:"Barclaycard",category:"utility",domains:["*.barclaycardsmartpay.com"]},{name:"Barilliance",category:"analytics",domains:["*.barilliance.net","dn3y71tq7jf07.cloudfront.net"]},{name:"Barnebys",category:"other",domains:["*.barnebys.com"]},{name:"Basis",company:"Basis Technologies",category:"ad",homepage:"https://basis.net/",domains:["*.basis.net"]},{name:"Batch Media",category:"ad",domains:["*.t4ft.de"]},{name:"Bauer Consumer Media",category:"content",domains:["*.bauercdn.com","*.greatmagazines.co.uk"]},{name:"Baynote",category:"analytics",domains:["*.baynote.net"]},{name:"Bazaarvoice",category:"analytics",domains:["*.bazaarvoice.com","*.feedmagnet.com"]},{name:"Beachfront Media",category:"ad",
-domains:["*.bfmio.com"]},{name:"BeamPulse",category:"analytics",domains:["*.beampulse.com"]},{name:"Beeswax",category:"ad",domains:["*.bidr.io"]},{name:"Beetailer",category:"social",domains:["*.beetailer.com"]},{name:"Best Of Media S.A.",category:"content",domains:["*.servebom.com"]},{name:"Bet365",category:"ad",domains:["*.bet365affiliates.com"]},{name:"Betfair",category:"other",domains:["*.cdnbf.net"]},{name:"Betgenius",company:"Genius Sports",category:"content",domains:["*.connextra.com"]},{name:"Better Banners",category:"ad",domains:["*.betterbannerscloud.com"]},{name:"Better Business Bureau",category:"analytics",domains:["*.bbb.org"]},{name:"Between Digital",category:"ad",domains:["*.betweendigital.com"]},{name:"BidTheatre",category:"ad",domains:["*.bidtheatre.com"]},{name:"Bidtellect",category:"ad",domains:["*.bttrack.com"]},{name:"Bigcommerce",category:"marketing",domains:["*.bigcommerce.com"]},{name:"BitGravity",company:"Tata Communications",category:"content",
-domains:["*.bitgravity.com"]},{name:"Bitly",category:"utility",domains:["*.bitly.com","*.lemde.fr","*.bit.ly"]},{name:"Bizible",category:"ad",domains:["*.bizible.com","*.bizibly.com"]},{name:"Bizrate",category:"analytics",domains:["*.bizrate.com"]},{name:"BlastCasta",category:"social",domains:["*.poweringnews.com"]},{name:"Blindado",category:"utility",domains:["*.siteblindado.com"]},{name:"Blis",category:"ad",domains:["*.blismedia.com"]},{name:"Blogg.se",category:"hosting",domains:["*.cdnme.se","*.publishme.se"]},{name:"BloomReach",category:"ad",domains:["*.brcdn.com","*.brsrvr.com","*.brsvr.com"]},{name:"Bloomberg",category:"content",domains:["*.gotraffic.net"]},{name:"Shop Logic",company:"BloomReach",category:"marketing",domains:["*.goshoplogic.com"]},{name:"Blue State Digital",category:"ad",domains:["*.bsd.net"]},{name:"Blue Triangle Technologies",category:"analytics",domains:["*.btttag.com"]},{name:"BlueCava",category:"ad",domains:["*.bluecava.com"]},{name:"BlueKai",
-company:"Oracle",category:"ad",domains:["*.bkrtx.com","*.bluekai.com"]},{name:"Bluecore",category:"analytics",domains:["*.bluecore.com"]},{name:"Bluegg",category:"hosting",domains:["d1va5oqn59yrvt.cloudfront.net"]},{name:"Bold Commerce",category:"utility",domains:["*.shappify-cdn.com","*.shappify.com","*.boldapps.net"]},{name:"BoldChat",company:"LogMeIn",category:"customer-success",domains:["*.boldchat.com"]},{name:"Bombora",category:"ad",domains:["*.mlno6.com"]},{name:"Bonnier",category:"content",domains:["*.bonniercorp.com"]},{name:"Bookatable",category:"content",domains:["*.bookatable.com","*.livebookings.com"]},{name:"Booking.com",category:"content",domains:["*.bstatic.com"]},{name:"Boomtrain",category:"ad",domains:["*.boomtrain.com","*.boomtrain.net"]},{name:"BoostSuite",category:"ad",domains:["*.poweredbyeden.com"]},{name:"Boostable",category:"ad",domains:["*.boostable.com"]},{name:"Bootstrap Chinese network",category:"cdn",domains:["*.bootcss.com"]},{name:"Booxscale",
-category:"ad",domains:["*.booxscale.com"]},{name:"Borderfree",company:"pitney bowes",category:"utility",domains:["*.borderfree.com","*.fiftyone.com"]},{name:"BowNow",category:"analytics",homepage:"https://bow-now.jp/",domains:["*.bownow.jp"]},{name:"Box",category:"hosting",domains:["*.box.com"]},{name:"Boxever",category:"analytics",domains:["*.boxever.com"]},{name:"Braintree Payments",company:"Paypal",category:"utility",domains:["*.braintreegateway.com"]},{name:"Branch Metrics",category:"ad",domains:["*.branch.io","*.app.link"]},{name:"Brand Finance",category:"other",domains:["*.brandirectory.com"]},{name:"Brand View",category:"analytics",domains:["*.brandview.com"]},{name:"Brandscreen",category:"ad",domains:["*.rtbidder.net"]},{name:"BridgeTrack",company:"Sapient",category:"ad",domains:["*.bridgetrack.com"]},{name:"BrightRoll",company:"Yahoo!",category:"ad",domains:["*.btrll.com"]},{name:"BrightTag / Signal",company:"Signal",homepage:"https://www.signal.co",category:"tag-manager",
-domains:["*.btstatic.com","*.thebrighttag.com"]},{name:"Brightcove ZenCoder",company:"Brightcove",category:"other",domains:["*.zencoder.net"]},{name:"Bronto Software",category:"marketing",domains:["*.bm23.com","*.bronto.com","*.brontops.com"]},{name:"Browser-Update.org",category:"other",domains:["*.browser-update.org"]},{name:"Buffer",category:"social",domains:["*.bufferapp.com"]},{name:"Bugsnag",category:"utility",domains:["*.bugsnag.com","d2wy8f7a9ursnm.cloudfront.net"]},{name:"Burst Media",category:"ad",domains:["*.burstnet.com","*.1rx.io"]},{name:"Burt",category:"analytics",domains:["*.richmetrics.com","*.burt.io"]},{name:"Business Message",category:"ad",domains:["*.message-business.com"]},{name:"Business Week",company:"Bloomberg",category:"social",domains:["*.bwbx.io"]},{name:"Buto",company:"Big Button",category:"ad",domains:["*.buto.tv"]},{name:"Button",category:"ad",domains:["*.btncdn.com"]},{name:"BuySellAds",category:"ad",domains:["*.buysellads.com","*.buysellads.net"]},{
-name:"BuySight (AOL)",category:"ad",domains:["*.pulsemgr.com"]},{name:"Buyapowa",category:"ad",domains:["*.co-buying.com"]},{name:"BuzzFeed",category:"social",domains:["*.buzzfed.com"]},{name:"C1X",category:"ad",domains:["*.c1exchange.com"]},{name:"C3 Metrics",category:"analytics",domains:["*.c3tag.com"]},{name:"CANDDi",company:"Campaign and Digital Intelligence",category:"ad",domains:["*.canddi.com"]},{name:"CCM benchmark Group",category:"social",domains:["*.ccm2.net"]},{name:"CD Networks",category:"utility",domains:["*.gccdn.net"]},{name:"CDN Planet",category:"analytics",domains:["*.cdnplanet.com"]},{name:"InAuth",category:"utility",homepage:"https://www.inauth.com/",domains:["*.cdn-net.com"]},{name:"CJ Affiliate",company:"Conversant",category:"ad",domains:["*.cj.com","*.dpbolvw.net"]},{name:"CJ Affiliate by Conversant",company:"Conversant",category:"ad",domains:["*.ftjcfx.com"]},{name:"CNBC",category:"content",domains:["*.cnbc.com"]},{name:"CNET Content Solutions",
-company:"CBS Interactive",category:"content",domains:["*.cnetcontent.com"]},{name:"CPEx",category:"content",domains:["*.cpex.cz"]},{name:"CPXi",category:"ad",domains:["*.cpxinteractive.com"]},{name:"CUBED Attribution",company:"CUBED",category:"ad",domains:["*.withcubed.com"]},{name:"Cachefly",category:"utility",domains:["*.cachefly.net"]},{name:"Calendly",category:"other",domains:["*.calendly.com"]},{name:"CallRail",category:"analytics",domains:["*.callrail.com"]},{name:"CallTrackingMetrics",category:"analytics",domains:["*.tctm.co"]},{name:"Canned Banners",category:"ad",domains:["*.cannedbanners.com"]},{name:"Canopy Labs",category:"analytics",domains:["*.canopylabs.com"]},{name:"Capita",category:"utility",domains:["*.crcom.co.uk"]},{name:"Captify Media",category:"ad",domains:["*.cpx.to"]},{name:"Captiify",category:"ad",domains:["*.captifymedia.com"]},{name:"Captivate Ai",category:"ad",domains:["*.captivate.ai"]},{name:"Captora",category:"marketing",domains:["*.captora.com"]},{
-name:"Carcloud",category:"other",domains:["*.carcloud.co.uk"]},{name:"Cardlytics",category:"ad",domains:["*.cardlytics.com"]},{name:"Cardosa Enterprises",category:"analytics",domains:["*.y-track.com"]},{name:"Caspian Media",category:"ad",domains:["*.caspianmedia.com"]},{name:"Cast",category:"utility",domains:["*.cast.rocks"]},{name:"Catch",category:"other",domains:["*.getcatch.com"]},{name:"Cavisson",category:"analytics",domains:["*.cavisson.com"]},{name:"Cedato",category:"ad",domains:["*.algovid.com","*.vdoserv.com"]},{name:"Celebrus Technologies",category:"analytics",domains:["*.celebrus.com"]},{name:"Celtra",category:"ad",domains:["*.celtra.com"]},{name:"Centro",category:"ad",domains:["*.brand-server.com"]},{name:"Ceros",category:"other",domains:["ceros.com","view.ceros.com"]},{name:"Ceros Analytics",company:"Ceros",category:"analytics",domains:["api.ceros.com"]},{name:"Certona",category:"analytics",domains:["*.certona.net"]},{name:"Certum",category:"utility",
-domains:["*.ocsp-certum.com","*.certum.pl"]},{name:"Cgrdirect",category:"other",domains:["*.cgrdirect.co.uk"]},{name:"Channel 5 Media",category:"ad",domains:["*.five.tv"]},{name:"Channel.me",category:"customer-success",domains:["*.channel.me"]},{name:"ChannelAdvisor",category:"ad",domains:["*.channeladvisor.com","*.searchmarketing.com"]},{name:"ChannelApe",company:"ChannelApe",category:"other",homepage:"https://www.channelape.com/",domains:["*.channelape.com"]},{name:"Chargeads Oscar",company:"Chargeads",category:"ad",domains:["*.chargeads.com"]},{name:"Charities Aid Foundation",category:"utility",domains:["*.cafonline.org"]},{name:"Chartbeat",category:"analytics",domains:["*.chartbeat.com","*.chartbeat.net"]},{name:"Cheapflights Media",company:"Momondo",category:"content",domains:["*.momondo.net"]},{name:"CheckM8",category:"ad",domains:["*.checkm8.com"]},{name:"CheckRate",company:"FreeStart",category:"utility",domains:["*.checkrate.co.uk"]},{name:"Checkfront",category:"other",
-domains:["*.checkfront.com","dcg3jth5savst.cloudfront.net"]},{name:"CheetahMail",company:"Experian",category:"ad",domains:["*.chtah.com"]},{name:"Chitika",category:"ad",domains:["*.chitika.net"]},{name:"ChoiceStream",category:"ad",domains:["*.choicestream.com"]},{name:"Cint",category:"social",domains:["*.cint.com"]},{name:"Civic",category:"hosting",domains:["*.civiccomputing.com"]},{name:"ClearRise",category:"customer-success",domains:["*.clearrise.com"]},{name:"Clearstream",category:"ad",domains:["*.clrstm.com"]},{name:"Clerk.io ApS",category:"analytics",domains:["*.clerk.io"]},{name:"CleverDATA",category:"ad",domains:["*.1dmp.io"]},{name:"CleverTap",category:"analytics",domains:["d2r1yp2w7bby2u.cloudfront.net"]},{name:"Click Density",category:"analytics",domains:["*.clickdensity.com"]},{name:"Click4Assistance",category:"customer-success",domains:["*.click4assistance.co.uk"]},{name:"ClickDesk",category:"customer-success",domains:["*.clickdesk.com","d1gwclp1pmzk26.cloudfront.net"]},{
-name:"ClickDimensions",category:"ad",domains:["*.clickdimensions.com"]},{name:"Clickadu (Winner Solutions)",category:"ad",domains:["*.clickadu.com"]},{name:"Clickagy Audience Lab",company:"Clickagy",category:"ad",domains:["*.clickagy.com"]},{name:"Clickio",category:"ad",domains:[]},{name:"Clicktale",category:"analytics",domains:["*.cdngc.net","*.clicktale.net"]},{name:"Clicktripz",category:"content",domains:["*.clicktripz.com"]},{name:"Clik.com Websites",category:"content",domains:["*.clikpic.com"]},{name:"Cloud Technologies",category:"ad",domains:["*.behavioralengine.com","*.behavioralmailing.com"]},{name:"Cloud-A",category:"other",domains:["*.bulkstorage.ca"]},{name:"Cloud.typography",company:"Hoefler &amp; Co",category:"cdn",domains:["*.typography.com"]},{name:"CloudSponge",category:"ad",domains:["*.cloudsponge.com"]},{name:"CloudVPS",category:"other",domains:["*.adoftheyear.com","*.objectstore.eu"]},{name:"Cloudinary",category:"content",domains:["*.cloudinary.com"]},{
-name:"Cloudqp",company:"Cloudwp",category:"other",domains:["*.cloudwp.io"]},{name:"Cludo",category:"utility",domains:["*.cludo.com"]},{name:"Cognesia",category:"marketing",domains:["*.intelli-direct.com"]},{name:"CogoCast",company:"Cogo Labs",category:"ad",domains:["*.cogocast.net"]},{name:"Colbenson",category:"utility",domains:["*.colbenson.com"]},{name:"Collective",category:"ad",domains:["*.collective-media.net"]},{name:"Com Laude",category:"other",domains:["*.gdimg.net"]},{name:"Comm100",category:"customer-success",domains:["*.comm100.com"]},{name:"CommerceHub",category:"marketing",domains:["*.mercent.com"]},{name:"Commission Factory",category:"ad",domains:["*.cfjump.com"]},{name:"Communicator",category:"ad",domains:["*.communicatorcorp.com","*.communicatoremail.com"]},{name:"Comodo",category:"utility",domains:["*.comodo.com","*.trust-provider.com","*.trustlogo.com","*.usertrust.com","*.comodo.net"]},{name:"Comodo Certificate Authority",company:"Comodo",category:"utility",
-domains:["crt.comodoca.com","*.comodoca4.com","ocsp.comodoca.com","ocsp.usertrust.com","crt.usertrust.com"]},{name:"Compete",company:"Millwood Brown Digital",category:"analytics",domains:["*.c-col.com","*.compete.com"]},{name:"Compuware",category:"analytics",domains:["*.axf8.net"]},{name:"Conductrics",category:"analytics",domains:["*.conductrics.com"]},{name:"Confirmit",category:"analytics",domains:["*.confirmit.com"]},{name:"Connatix",category:"ad",domains:["*.connatix.com"]},{name:"Connect Events",category:"hosting",domains:["*.connectevents.com.au"]},{name:"Constant Contact",category:"ad",domains:["*.ctctcdn.com"]},{name:"Constructor.io",category:"utility",domains:["*.cnstrc.com"]},{name:"Contabo",category:"hosting",domains:["185.2.100.179"]},{name:"Content Media Corporation",category:"content",domains:["*.contentmedia.eu"]},{name:"ContentSquare",category:"analytics",domains:["d1m6l9dfulcyw7.cloudfront.net","*.content-square.net","*.contentsquare.net"]},{name:"ContextWeb",
-category:"ad",domains:["*.contextweb.com"]},{name:"Continental Exchange Solutions",category:"utility",domains:["*.hifx.com"]},{name:"Converge-Digital",category:"ad",domains:["*.converge-digital.com"]},{name:"Conversant",category:"analytics",domains:["*.dotomi.com","*.dtmpub.com","*.emjcd.com","mediaplex.com","*.tqlkg.com","*.fastclick.net"]},{name:"Conversant Ad Server",company:"Conversant",category:"ad",domains:["adfarm.mediaplex.com","*.mediaplex.com"]},{name:"Conversant Tag Manager",company:"Conversant",category:"tag-manager",domains:["*.mplxtms.com"]},{name:"Conversio",category:"ad",domains:["*.conversio.com"]},{name:"Conversion Labs",category:"ad",domains:["*.net.pl"]},{name:"Conversion Logic",category:"ad",domains:["*.conversionlogic.net"]},{name:"Convert Insights",category:"analytics",domains:["*.convertexperiments.com"]},{name:"ConvertMedia",category:"ad",domains:["*.admailtiser.com","*.basebanner.com","*.cmbestsrv.com","*.vidfuture.com","*.zorosrv.com"]},{name:"Convertro",
-category:"ad",domains:["*.convertro.com"]},{name:"Conviva",category:"content",domains:["*.conviva.com"]},{name:"Cookie Reports",category:"utility",domains:["*.cookiereports.com"]},{name:"Cookie-Script.com",category:"utility",domains:["*.cookie-script.com"]},{name:"CookieQ",company:"Baycloud Systems",category:"utility",domains:["*.cookieq.com"]},{name:"CoolaData",category:"analytics",domains:["*.cooladata.com"]},{name:"CopperEgg",category:"analytics",domains:["*.copperegg.com","d2vig74li2resi.cloudfront.net"]},{name:"Council ad Network",category:"ad",domains:["*.counciladvertising.net"]},{name:"Covert Pics",category:"content",domains:["*.covet.pics"]},{name:"Cox Digital Solutions",category:"ad",domains:["*.afy11.net"]},{name:"Creafi Online Media",category:"ad",domains:["*.creafi-online-media.com"]},{name:"Creators",category:"content",domains:["*.creators.co"]},{name:"Crimson Hexagon Analytics",company:"Crimson Hexagon",category:"analytics",domains:["*.hexagon-analytics.com"]},{
-name:"Crimtan",category:"ad",domains:["*.ctnsnet.com"]},{name:"Cross Pixel Media",category:"ad",domains:["*.crsspxl.com"]},{name:"Crosswise",category:"ad",domains:["*.univide.com"]},{name:"Crowd Control",company:"Lotame",category:"ad",domains:["*.crwdcntrl.net"]},{name:"Crowd Ignite",category:"ad",domains:["*.crowdignite.com"]},{name:"CrowdTwist",category:"ad",domains:["*.crowdtwist.com"]},{name:"Crowdskout",category:"ad",domains:["*.crowdskout.com"]},{name:"Crowdynews",category:"social",domains:["*.breakingburner.com"]},{name:"Curalate",category:"marketing",domains:["*.curalate.com","d116tqlcqfmz3v.cloudfront.net"]},{name:"Customer Acquisition Cloud",company:"[24]7",category:"ad",domains:["*.campanja.com"]},{name:"Customer.io",category:"ad",domains:["*.customer.io"]},{name:"Custora",category:"analytics",domains:["*.custora.com"]},{name:"Cxense",category:"ad",domains:["*.cxense.com","*.cxpublic.com","*.emediate.dk","*.emediate.eu"]},{name:"CyberKnight",company:"Namogoo",
-category:"utility",domains:["*.namogoo.com"]},{name:"CyberSource (Visa)",category:"utility",domains:["*.authorize.net"]},{name:"Cybernet Quest",category:"analytics",domains:["*.cqcounter.com"]},{name:"D.A. Consortium",category:"ad",domains:["*.eff1.net"]},{name:"D4t4 Solutions",category:"analytics",domains:["*.u5e.com"]},{name:"DCSL Software",category:"hosting",domains:["*.dcslsoftware.com"]},{name:"DMG Media",category:"content",domains:["*.mol.im","*.and.co.uk","*.anm.co.uk","*.dailymail.co.uk"]},{name:"DTSCOUT",category:"ad",domains:["*.dtscout.com"]},{name:"Dailykarma",category:"utility",homepage:"https://www.dailykarma.com/",domains:["*.dailykarma.io"]},{name:"Dailymotion",category:"content",domains:["*.dailymotion.com","*.dmxleo.com","*.dm.gg","*.pxlad.io","*.dmcdn.net","*.sublimevideo.net"]},{name:"Dash Hudson",company:"Dash Hudson",category:"content",domains:["*.dashhudson.com"]},{name:"Datacamp",category:"utility",domains:["*.cdn77.org"]},{name:"Datalicious",
-category:"tag-manager",domains:["*.supert.ag","*.optimahub.com"]},{name:"Datalogix",category:"ad",domains:["*.nexac.com"]},{name:"Datawrapper",category:"utility",domains:["*.datawrapper.de","*.dwcdn.net"]},{name:"Dataxu",category:"marketing",domains:["*.w55c.net"]},{name:"DatoCMS",homepage:"https://www.datocms.com/",category:"content",domains:["*.datocms-assets.com"]},{name:"Datonics",category:"ad",domains:["*.pro-market.net"]},{name:"Dealtime",category:"content",domains:["*.dealtime.com"]},{name:"Debenhams Geo Location",company:"Debenhams",category:"utility",domains:["176.74.183.134"]},{name:"Decibel Insight",category:"analytics",domains:["*.decibelinsight.net"]},{name:"Deep Forest Media",company:"Rakuten",category:"ad",domains:["*.dpclk.com"]},{name:"DeepIntent",category:"ad",domains:["*.deepintent.com"]},{name:"Delicious Media",category:"social",domains:["*.delicious.com"]},{name:"Delineo",category:"ad",domains:["*.delineo.com"]},{name:"Delta Projects AB",category:"ad",
-domains:["*.de17a.com"]},{name:"Demand Media",category:"content",domains:["*.dmtracker.com"]},{name:"DemandBase",category:"marketing",domains:["*.demandbase.com"]},{name:"DemandJump",category:"analytics",domains:["*.demandjump.com"]},{name:"Dennis Publishing",category:"content",domains:["*.alphr.com"]},{name:"Devatics",category:"analytics",domains:["*.devatics.com","*.devatics.io"]},{name:"Developer Media",category:"ad",domains:["*.developermedia.com"]},{name:"DialogTech",category:"ad",domains:["*.dialogtech.com"]},{name:"DialogTech SourceTrak",company:"DialogTech",category:"ad",domains:["d31y97ze264gaa.cloudfront.net"]},{name:"DigiCert",category:"utility",domains:["*.digicert.com"]},{name:"Digioh",category:"ad",domains:["*.lightboxcdn.com"]},{name:"Digital Look",category:"content",domains:["*.digitallook.com"]},{name:"Digital Media Exchange",company:"NDN",category:"content",domains:["*.newsinc.com"]},{name:"Digital Millennium Copyright Act Services",category:"utility",
-domains:["*.dmca.com"]},{name:"Digital Ocean",category:"other",domains:["95.85.62.56"]},{name:"Digital Remedy",category:"ad",domains:["*.consumedmedia.com"]},{name:"Digital Window",category:"ad",domains:["*.awin1.com","*.zenaps.com"]},{name:"DigitalScirocco",category:"analytics",domains:["*.digitalscirocco.net"]},{name:"Digitial Point",category:"utility",domains:["*.dpstatic.com"]},{name:"Diligent (Adnetik)",category:"ad",domains:["*.wtp101.com"]},{name:"Directed Edge",category:"social",domains:["*.directededge.com"]},{name:"Distribute Travel",category:"ad",domains:["*.dtrck.net"]},{name:"District M",category:"ad",domains:["*.districtm.io"]},{name:"DistroScale",category:"ad",domains:["*.jsrdn.com"]},{name:"Divido",category:"utility",domains:["*.divido.com"]},{name:"Dow Jones",category:"content",domains:["*.dowjones.com","*.dowjoneson.com"]},{name:"Drifty Co",category:"utility",domains:["*.onicframework.com"]},{name:"Drip",company:"The Numa Group",category:"ad",domains:["*.getdrip.com"]
-},{name:"Dropbox",category:"utility",domains:["*.dropboxusercontent.com"]},{name:"Dyn Real User Monitoring",company:"Dyn",category:"analytics",domains:["*.jisusaiche.biz","*.dynapis.com","*.jisusaiche.com","*.dynapis.info"]},{name:"DynAdmic",category:"ad",domains:["*.dyntrk.com"]},{name:"Dynamic Converter",category:"utility",domains:["*.dynamicconverter.com"]},{name:"Dynamic Dummy Image Generator",company:"Open Source",category:"utility",domains:["*.dummyimage.com"]},{name:"Dynamic Logic",category:"ad",domains:["*.dl-rms.com","*.questionmarket.com"]},{name:"Dynamic Yield",category:"customer-success",domains:["*.dynamicyield.com"]},{name:"Dynatrace",category:"analytics",domains:["*.ruxit.com","js-cdn.dynatrace.com"]},{name:"ec-concier",homepage:"https://ec-concier.com/",category:"marketing",domains:["*.ec-concier.com"]},{name:"ECT News Network",category:"content",domains:["*.ectnews.com"]},{name:"ELITechGroup",category:"analytics",domains:["*.elitechnology.com"]},{name:"EMAP",
-category:"content",domains:["*.emap.com"]},{name:"EMedia Solutions",category:"ad",domains:["*.e-shots.eu"]},{name:"EQ works",category:"ad",domains:["*.eqads.com"]},{name:"ESV Digital",category:"analytics",domains:["*.esearchvision.com"]},{name:"Ebiquity",category:"analytics",domains:["*.ebiquitymedia.com"]},{name:"Eco Rebates",category:"ad",domains:["*.ecorebates.com"]},{name:"Ecwid",category:"hosting",domains:["*.ecwid.com","*.shopsettings.com","d3fi9i0jj23cau.cloudfront.net","d3j0zfs7paavns.cloudfront.net"]},{name:"Edge Web Fonts",company:"Adobe Systems",category:"cdn",domains:["*.edgefonts.net"]},{name:"Edition Digital",category:"ad",domains:["*.editiondigital.com"]},{name:"Edot Web Technologies",category:"hosting",domains:["*.edot.co.za"]},{name:"Effective Measure",category:"ad",domains:["*.effectivemeasure.net"]},{name:"Effiliation sa",category:"ad",domains:["*.effiliation.com"]},{name:"Ekm Systems",category:"analytics",domains:["*.ekmsecure.com","*.ekmpinpoint.co.uk"]},{
-name:"Elastera",category:"hosting",domains:["*.elastera.net"]},{name:"Elastic Ad",category:"ad",domains:["*.elasticad.net"]},{name:"Elastic Load Balancing",company:"Amazon Web Services",category:"hosting",domains:["*.105app.com"]},{name:"Elecard StreamEye",company:"Elecard",category:"other",domains:["*.streameye.net"]},{name:"Elevate",company:"Elevate Technology Solutions",category:"utility",domains:["*.elevaate.technology"]},{name:"Elicit",category:"utility",domains:["*.elicitapp.com"]},{name:"Elogia",category:"ad",domains:["*.elogia.net"]},{name:"Email Attitude",company:"1000mercis",category:"ad",domains:["*.email-attitude.com"]},{name:"EmailCenter",category:"ad",domains:["*.emailcenteruk.com"]},{name:"Embedly",category:"content",domains:["*.embedly.com","*.embed.ly"]},{name:"EmpathyBroker Site Search",company:"EmpathyBroker",category:"utility",domains:["*.empathybroker.com"]},{name:"Enfusen",category:"analytics",domains:["*.enfusen.com"]},{name:"Engadget",company:"Engadget (AOL)",
-category:"content",domains:["*.gdgt.com"]},{name:"Engagio",category:"marketing",domains:["*.engagio.com"]},{name:"Ensighten Manage",company:"Ensighten",category:"tag-manager",domains:["*.levexis.com"]},{name:"EntityLink",category:"other",domains:["*.entitytag.co.uk"]},{name:"Entrust Datacard",category:"utility",domains:["*.entrust.com","*.entrust.net"]},{name:"Equiniti",category:"utility",domains:["*.equiniti.com"]},{name:"Errorception",category:"utility",domains:["*.errorception.com"]},{name:"Esri ArcGIS",company:"Esri",category:"utility",domains:["*.arcgis.com","*.arcgisonline.com"]},{name:"Ethnio",category:"analytics",domains:["*.ethn.io"]},{name:"Eulerian Technologies",category:"ad",domains:["*.eolcdn.com"]},{name:"Euroland",category:"utility",domains:["*.euroland.com"]},{name:"European Interactive Digital ad Alli",category:"utility",domains:["*.edaa.eu"]},{name:"Eventbrite",category:"hosting",domains:["*.evbuc.com","*.eventbrite.co.uk"]},{name:"Everflow",category:"analytics",
-domains:["*.tp88trk.com"]},{name:"Evergage",category:"analytics",domains:["*.evergage.com","*.evgnet.com"]},{name:"Everquote",category:"content",domains:["*.evq1.com"]},{name:"Everyday Health",category:"ad",domains:["*.agoramedia.com"]},{name:"Evidon",category:"analytics",domains:["*.evidon.com"]},{name:"Evolve Media",category:"content",domains:["*.evolvemediallc.com"]},{name:"Exactag",category:"ad",domains:["*.exactag.com"]},{name:"ExoClick",category:"ad",domains:["*.exoclick.com"]},{name:"Expedia",category:"content",domains:["*.travel-assets.com","*.trvl-media.com","*.trvl-px.com","*.uciservice.com"]},{name:"Expedia Australia",company:"Expedia",category:"content",domains:["*.expedia.com.au"]},{name:"Expedia Canada",company:"Expedia",category:"content",domains:["*.expedia.ca"]},{name:"Expedia France",company:"Expedia",category:"content",domains:["*.expedia.fr"]},{name:"Expedia Germany",company:"Expedia",category:"content",domains:["*.expedia.de"]},{name:"Expedia Italy",
-company:"Expedia",category:"content",domains:["*.expedia.it"]},{name:"Expedia Japan",company:"Expedia",category:"content",domains:["*.expedia.co.jp"]},{name:"Expedia USA",company:"Expedia",category:"content",domains:["*.expedia.com"]},{name:"Expedia United Kingdom",company:"Expedia",category:"content",domains:["*.expedia.co.uk"]},{name:"Experian",category:"utility",domains:["*.audienceiq.com","*.experian.com","*.experianmarketingservices.digital"]},{name:"Experian Cross-Channel Marketing Platform",company:"Experian",category:"marketing",domains:["*.eccmp.com","*.ccmp.eu"]},{name:"Exponea",category:"analytics",domains:["*.exponea.com"]},{name:"Exponential Interactive",category:"ad",domains:["*.exponential.com"]},{name:"Extensis WebInk",category:"cdn",domains:["*.webink.com"]},{name:"Extole",category:"ad",domains:["*.extole.com","*.extole.io"]},{name:"Ey-Seren",category:"analytics",domains:["*.webabacus.com"]},{name:"EyeView",category:"ad",domains:["*.eyeviewads.com"]},{name:"Eyeota",
-category:"ad",domains:["*.eyeota.net"]},{name:"Ezakus Pretargeting",company:"Ezakus",category:"ad",domains:["*.ezakus.net"]},{name:"Ezoic",category:"analytics",domains:["*.ezoic.net"]},{name:"FLXone",company:"Teradata",category:"ad",domains:["*.pangolin.blue","*.flx1.com","d2hlpp31teaww3.cloudfront.net","*.flxpxl.com"]},{name:"Fairfax Media",category:"content",domains:["ads.fairfax.com.au","resources.fairfax.com.au"]},{name:"Fairfax Media Analtics",company:"Fairfax Media",category:"analytics",domains:["analytics.fairfax.com.au"]},{name:"Falk Technologies",category:"ad",domains:["*.angsrvr.com"]},{name:"Fanplayr",category:"analytics",domains:["*.fanplayr.com","d38nbbai6u794i.cloudfront.net"]},{name:"Fast Thinking",company:"NE Marketing",category:"marketing",domains:["*.fast-thinking.co.uk"]},{name:"Fastest Forward",category:"analytics",domains:["*.gaug.es"]},{name:"Fastly",category:"utility",domains:["*.fastly.net"]},{name:"Feedbackify",company:"InsideMetrics",category:"analytics",
-domains:["*.feedbackify.com"]},{name:"Feefo.com",company:"Feefo",category:"analytics",domains:["*.feefo.com"]},{name:"Fidelity Media",category:"ad",domains:["*.fidelity-media.com"]},{name:"Filestack",category:"content",domains:["*.filepicker.io"]},{name:"Finsbury Media",category:"ad",domains:["*.finsburymedia.com"]},{name:"Firepush",category:"utility",domains:["*.firepush.io"]},{name:"FirstImpression",category:"ad",domains:["*.firstimpression.io"]},{name:"Fit Analytics",category:"other",domains:["*.fitanalytics.com"]},{name:"Fits Me",category:"analytics",domains:["*.fits.me"]},{name:"Fivetran",category:"analytics",domains:["*.fivetran.com"]},{name:"FlexShopper",category:"utility",domains:["*.flexshopper.com"]},{name:"Flickr",category:"content",domains:["*.flickr.com","*.staticflickr.com"]},{name:"Flipboard",category:"social",domains:["*.flipboard.com"]},{name:"Flipdesk",category:"customer-success",homepage:"https://flipdesk.jp/",domains:["*.flipdesk.jp"]},{name:"Flipp",
-category:"analytics",domains:["*.wishabi.com","d2e0sxz09bo7k2.cloudfront.net","*.wishabi.net"]},{name:"Flite",category:"ad",domains:["*.flite.com"]},{name:"Flixmedia",category:"analytics",domains:["*.flix360.com","*.flixcar.com","*.flixfacts.com","*.flixsyndication.net","*.flixfacts.co.uk"]},{name:"Flockler",category:"ad",domains:["*.flockler.com"]},{name:"Flowplayer",category:"content",domains:["*.flowplayer.org"]},{name:"Flowzymes Ky",category:"cdn",domains:["*.jquerytools.org"]},{name:"Fomo",category:"ad",domains:["*.notifyapp.io"]},{name:"Fonecall",category:"analytics",domains:["*.web-call-analytics.com"]},{name:"Fontdeck",category:"cdn",domains:["*.fontdeck.com"]},{name:"Foodity Technologies",category:"ad",domains:["*.foodity.com"]},{name:"Force24",category:"ad",domains:["*.force24.co.uk"]},{name:"ForeSee",company:"Answers",category:"analytics",domains:["*.4seeresults.com","*.answerscloud.com","*.foresee.com","*.foreseeresults.com"]},{name:"Forensiq",category:"utility",
-domains:["*.fqtag.com"]},{name:"Fort Awesome",category:"cdn",domains:["*.fortawesome.com"]},{name:"Forter",category:"utility",domains:["*.forter.com"]},{name:"Forward Internet Group",category:"hosting",domains:["*.f3d.io"]},{name:"Forward3D",category:"ad",domains:["*.forward3d.com"]},{name:"Fospha",category:"analytics",domains:["*.fospha.com"]},{name:"Foursixty",category:"customer-success",domains:["*.foursixty.com"]},{name:"FoxyCart",category:"utility",domains:["*.foxycart.com"]},{name:"Fraudlogix",category:"utility",domains:["*.yabidos.com"]},{name:"FreakOut",category:"ad",domains:["*.fout.jp"]},{name:"Freespee",category:"customer-success",domains:["*.freespee.com"]},{name:"Freetobook",category:"content",domains:["*.freetobook.com"]},{name:"Fresh 8 Gaming",category:"ad",domains:["*.fresh8.co"]},{name:"Fresh Relevance",category:"analytics",domains:["*.freshrelevance.com","*.cloudfront.ne","d1y9qtn9cuc3xw.cloudfront.net","d81mfvml8p5ml.cloudfront.net","dkpklk99llpj0.cloudfront.net"]},{
-name:"Friendbuy",category:"ad",domains:["*.friendbuy.com","djnf6e5yyirys.cloudfront.net"]},{name:"Frienefit",category:"ad",domains:["*.frienefit.com"]},{name:"FuelX",category:"ad",domains:["*.fuelx.com"]},{name:"Full Circle Studies",category:"analytics",domains:["*.securestudies.com"]},{name:"FullStory",category:"analytics",domains:["*.fullstory.com"]},{name:"Fyber",category:"ad",domains:["*.fyber.com"]},{name:"G-Forces Web Management",category:"hosting",domains:["*.gforcesinternal.co.uk"]},{name:"G4 Native",company:"Gravity4",category:"ad",domains:["*.triggit.com"]},{name:"GET ME IN!  (TicketMaster)",category:"content",domains:["*.getmein.com"]},{name:"GIPHY",category:"content",domains:["*.giphy.com"]},{name:"GainCloud",company:"GainCloud Systems",category:"other",domains:["*.egaincloud.net"]},{name:"Gath Adams",category:"content",domains:["*.iwantthatflight.com.au"]},{name:"Gecko Tribe",category:"social",domains:["*.geckotribe.com"]},{name:"Gemius",category:"ad",
-domains:["*.gemius.pl"]},{name:"Genesis Media",category:"ad",domains:["*.bzgint.com","*.genesismedia.com","*.genesismediaus.com"]},{name:"Genie Ventures",category:"ad",domains:["*.genieventures.co.uk"]},{name:"Geniee",category:"ad",domains:["*.href.asia","*.genieessp.jp","*.genieesspv.jp","*.gssprt.jp"]},{name:"Geniuslink",category:"analytics",domains:["*.geni.us"]},{name:"GeoRiot",category:"other",domains:["*.georiot.com"]},{name:"GeoTrust",category:"utility",domains:["*.geotrust.com"]},{name:"Geoplugin",category:"utility",domains:["*.geoplugin.com","*.geoplugin.net"]},{name:"Georeferencer",company:"Klokan Technologies",category:"utility",domains:["*.georeferencer.com"]},{name:"GetIntent RTBSuite",company:"GetIntent",category:"ad",domains:["*.adhigh.net"]},{name:"GetResponse",category:"ad",domains:["*.getresponse.com"]},{name:"GetSiteControl",company:"GetWebCraft",category:"utility",domains:["*.getsitecontrol.com"]},{name:"GetSocial",category:"social",domains:["*.getsocial.io"]},{
-name:"Getty Images",category:"content",domains:["*.gettyimages.com","*.gettyimages.co.uk"]},{name:"Gfycat",company:"Gycat",category:"utility",domains:["*.gfycat.com"]},{name:"Ghostery Enterprise",company:"Ghostery",category:"marketing",domains:["*.betrad.com"]},{name:"Giant Media",category:"ad",domains:["*.videostat.com"]},{name:"Gigya",category:"analytics",domains:["*.gigya.com"]},{name:"GitHub",category:"utility",domains:["*.github.com","*.githubusercontent.com","*.github.io","*.rawgit.com"]},{name:"Gladly",company:"Gladly",homepage:"https://www.gladly.com/",category:"customer-success",domains:["*.gladly.com"]},{name:"Glassdoor",category:"content",domains:["*.glassdoor.com"]},{name:"Gleam",category:"marketing",domains:["*.gleam.io"]},{name:"Global Digital Markets",category:"ad",domains:["*.gdmdigital.com"]},{name:"Global-e",category:"hosting",domains:["*.global-e.com"]},{name:"GlobalSign",category:"utility",domains:["*.globalsign.com","*.globalsign.net"]},{name:"GlobalWebIndex",
-category:"analytics",domains:["*.globalwebindex.net"]},{name:"Globase International",category:"ad",domains:["*.globase.com"]},{name:"GoDataFeed",category:"other",domains:["*.godatafeed.com"]},{name:"Google APIs",company:"Google",category:"utility",domains:["googleapis.com"]},{name:"Google Ad Block Detection",company:"Google",category:"ad",domains:["*.0emn.com","*.0fmm.com"]},{name:"Google Analytics Experiments",company:"Google",category:"analytics",domains:["*.gexperiments1.com"]},{name:"Google DoubleClick Ad Exchange",company:"Google",category:"ad",domains:["*.admeld.com"]},{name:"Google IPV6 Metrics",company:"Google",category:"analytics",domains:["*.ipv6test.net"]},{name:"Google Plus",company:"Google",category:"social",domains:["plus.google.com"]},{name:"Google Trusted Stores",company:"Google",category:"utility",domains:["*.googlecommerce.com"]},{name:"Google Video",company:"Google",category:"content",domains:["*.googlevideo.com"]},{name:"Google reCAPTCHA",company:"Google",
-category:"utility",domains:["*.recaptcha.net"]},{name:"GovMetric",company:"ROL Solutions",category:"analytics",domains:["*.govmetric.com"]},{name:"Granify",category:"analytics",domains:["*.granify.com"]},{name:"Grapeshot",category:"ad",domains:["*.gscontxt.net","*.grapeshot.co.uk"]},{name:"Gravity (AOL)",category:"analytics",domains:["*.grvcdn.com"]},{name:"Groovy Gecko",category:"content",domains:["*.ggwebcast.com","*.groovygecko.net"]},{name:"GroupM",category:"ad",domains:["*.qservz.com"]},{name:"Guardian Media",category:"ad",domains:["*.theguardian.com","*.guardian.co.uk"]},{name:"GumGum",category:"ad",domains:["*.gumgum.com"]},{name:"Gumtree",category:"content",domains:["*.gumtree.com"]},{name:"H264 Codec",company:"Cisco",category:"other",domains:["*.openh264.org"]},{name:"HERE",category:"analytics",domains:["*.medio.com"]},{name:"HP Optimost",company:"Hewlett-Packard Development Company",category:"marketing",domains:["*.hp.com","d2uncb19xzxhzx.cloudfront.net"]},{name:"Has Offers",
-company:"TUNE",category:"ad",domains:["*.go2cloud.org"]},{name:"Hawk Search",category:"utility",domains:["*.hawksearch.com"]},{name:"Haymarket Media Group",category:"content",domains:["*.brandrepublic.com","*.hbpl.co.uk"]},{name:"Heap",category:"analytics",domains:["*.heapanalytics.com"]},{name:"Hearst Communications",category:"content",domains:["*.h-cdn.co","*.hearstdigital.com","*.hearstlabs.com","*.hearst.io","*.cdnds.net"]},{name:"Heatmap",category:"analytics",domains:["*.heatmap.it"]},{name:"Heroku",category:"other",domains:["*.herokuapp.com"]},{name:"Hexton",category:"utility",domains:["*.hextom.com"]},{name:"Hibernia Networks",category:"utility",domains:["*.hiberniacdn.com"]},{name:"High Impact Media",category:"ad",domains:["*.reactx.com"]},{name:"Highcharts",category:"utility",domains:["*.highcharts.com"]},{name:"Highwinds",category:"utility",domains:["*.hwcdn.net"]},{name:"HitsLink",category:"analytics",domains:["*.hitslink.com"]},{name:"Hola Networks",category:"other",
-domains:["*.h-cdn.com"]},{name:"Hootsuite",category:"analytics",domains:["*.hootsuite.com"]},{name:"HotUKDeals",category:"analytics",domains:["*.hotukdeals.com"]},{name:"HotWords",company:"Media Response Group",category:"ad",domains:["*.hotwords.com.br"]},{name:"HotelsCombined",category:"content",domains:["*.datahc.com"]},{name:"Hoverr",category:"ad",domains:["*.hoverr.media"]},{name:"Hull.js",category:"utility",domains:["*.hull.io","*.hullapp.io"]},{name:"Hupso Website Analyzer",company:"Hupso",category:"analytics",domains:["*.hupso.com"]},{name:"I-Behavior",company:"WPP",category:"ad",domains:["*.ib-ibi.com"]},{name:"i-mobile",company:"i-mobile",category:"ad",domains:["*.i-mobile.co.jp"]},{name:"IBM Digital Analytics",company:"IBM",category:"analytics",
-domains:["*.cmcore.com","coremetrics.com","data.coremetrics.com","data.de.coremetrics.com","libs.de.coremetrics.com","tmscdn.de.coremetrics.com","iocdn.coremetrics.com","libs.coremetrics.com","tmscdn.coremetrics.com","*.s81c.com","*.unica.com","*.coremetrics.eu"]},{name:"IBM Digital Data Exchange",company:"IBM",category:"tag-manager",domains:["tagmanager.coremetrics.com"]},{name:"IBM Tealeaf",company:"IBM",category:"analytics",domains:["*.ibmcloud.com"]},{name:"IBM Acoustic Campaign",company:"IBM",category:"analytics",domains:["www.sc.pages01.net","www.sc.pages02.net","www.sc.pages03.net","www.sc.pages04.net","www.sc.pages05.net","www.sc.pages06.net","www.sc.pages07.net","www.sc.pages08.net","www.sc.pages09.net","www.sc.pagesA.net"]},{name:"ICF Technology",category:"content",domains:["*.camads.net"]},{name:"IFDNRG",category:"hosting",domains:["*.ifdnrg.com"]},{name:"IMRG",category:"analytics",domains:["*.peermap.com","*.imrg.org"]},{name:"IPONWEB",category:"ad",
-domains:["*.company-target.com","*.liadm.com","*.iponweb.net","*.p161.net"]},{name:"IQ Mobile",category:"utility",domains:["*.iqm.cc"]},{name:"IS Group",category:"hosting",domains:["*.creative-serving.com"]},{name:"IT Dienstleistungen Tim Prinzkosky",category:"utility",domains:["*.flaticons.net"]},{name:"IXI Digital",company:"Equifax",category:"ad",domains:["*.ixiaa.com"]},{name:"IcoMoon",category:"cdn",domains:["d19ayerf5ehaab.cloudfront.net","d1azc1qln24ryf.cloudfront.net"]},{name:"IdenTrust",category:"utility",domains:["*.identrust.com"]},{name:"Ido",category:"customer-success",domains:["*.idio.co"]},{name:"Ignition One",category:"marketing",domains:["*.searchignite.com"]},{name:"ImageShack",category:"content",domains:["*.yfrog.com"]},{name:"Imagen Studio",category:"utility",domains:["*.telephonesky.com"]},{name:"Imagini Holdings",category:"ad",domains:["*.vdna-assets.com"]},{name:"Img Safe",category:"content",domains:["*.imgsafe.org"]},{name:"Imgur",category:"utility",
-domains:["*.imgur.com"]},{name:"Impact Radius",category:"ad",domains:["*.impactradius-event.com","*.impactradius-go.com","*.7eer.net","d3cxv97fi8q177.cloudfront.net","*.evyy.net","*.ojrq.net","utt.impactcdn.com","*.sjv.io"]},{name:"Improve Digital",category:"ad",domains:["*.360yield.com"]},{name:"Improvely",category:"analytics",domains:["*.iljmp.com"]},{name:"InMobi",category:"ad",domains:["*.inmobi.com"]},{name:"InSkin Media",category:"ad",domains:["*.inskinad.com","*.inskinmedia.com"]},{name:"Inbenta",category:"customer-success",domains:["*.inbenta.com"]},{name:"Incisive Media",category:"content",domains:["*.incisivemedia.com"]},{name:"Indeed",category:"content",domains:["*.indeed.com"]},{name:"Index Exchange",company:"WPP",category:"ad",domains:["*.casalemedia.com","*.indexww.com"]},{name:"Indoona",category:"other",domains:["*.indoona.com"]},{name:"Infectious Media",category:"ad",domains:["*.impdesk.com","*.impressiondesk.com","*.inmz.net"]},{name:"Inference Mobile",category:"ad",
-domains:["*.inferencemobile.com"]},{name:"Infinity Tracking",category:"analytics",domains:["*.infinity-tracking.net"]},{name:"Infoline",category:"analytics",domains:["*.ioam.de"]},{name:"Infolinks",category:"ad",domains:["*.infolinks.com"]},{name:"Infopark",category:"hosting",domains:["*.scrvt.com"]},{name:"Infusionsoft",category:"ad",domains:["*.infusionsoft.com"]},{name:"Ink",category:"ad",domains:["*.inktad.com"]},{name:"Inktel Contact Center Solutions",company:"Inktel",category:"customer-success",domains:["*.inktel.com"]},{name:"Inneractive",category:"ad",domains:["*.inner-active.mobi"]},{name:"Innovid",category:"ad",homepage:"https://www.innovid.com/",domains:["*.innovid.com"]},{name:"Insight Express",category:"analytics",domains:["*.insightexpressai.com"]},{name:"Insipio",category:"other",domains:["*.insipio.com"]},{name:"Inspectlet",category:"analytics",domains:["*.inspectlet.com"]},{name:"Instansive",category:"utility",domains:["*.instansive.com"]},{name:"Instart",
-homepage:"https://www.instart.com/",category:"utility",domains:["*.insnw.net"]},{name:"Instembedder",category:"content",domains:["*.instaembedder.com"]},{name:"Instinctive",category:"ad",domains:["*.instinctiveads.com"]},{name:"Intelligent Reach",category:"ad",domains:["*.ist-track.com"]},{name:"Intent HQ",category:"analytics",domains:["*.intenthq.com"]},{name:"Intent IQ",category:"ad",domains:["*.intentiq.com"]},{name:"Intercept Interactive",category:"ad",domains:["*.undertone.com"]},{name:"Interest Graph",company:"AOL",category:"ad",domains:["*.gravity.com"]},{name:"Internet Brands",category:"content",domains:["*.ibpxl.com"]},{name:"Interpublic Group",category:"ad",domains:["*.mbww.com"]},{name:"Interstate",category:"analytics",domains:["*.interstateanalytics.com"]},{name:"Interview",category:"analytics",domains:["*.efm.me"]},{name:"Intilery",category:"customer-success",domains:["*.intilery-analytics.com"]},{name:"Investis",category:"utility",domains:["*.investis.com"]},{
-name:"Investis Flife",category:"hosting",domains:["*.quartalflife.com"]},{name:"Invodo",category:"ad",domains:["*.invodo.com"]},{name:"iSite",category:"analytics",domains:["*.isitetv.com"]},{name:"Issue",category:"content",domains:["*.issue.by"]},{name:"J.D. Williams & Co",category:"content",domains:["*.drct2u.com"]},{name:"Janrain",category:"analytics",domains:["*.janrain.com","*.janrainbackplane.com","*.rpxnow.com","d3hmp0045zy3cs.cloudfront.net"]},{name:"Jellyfish",category:"ad",domains:["*.jellyfish.net"]},{name:"JetStream",category:"content",domains:["*.xlcdn.com"]},{name:"JingDong",category:"content",domains:["*.3.com","*.jd.com"]},{name:"Jivox",category:"ad",domains:["*.jivox.com"]},{name:"Jobvite",category:"content",domains:["*.jobvite.com"]},{name:"Johnston Press",category:"content",domains:["*.johnstonpress.co.uk","*.jpress.co.uk"]},{name:"Join the Dots (Research)",category:"social",domains:["*.jtdiscuss.com"]},{name:"JotForm",category:"utility",domains:["*.jotformpro.com"]
-},{name:"JuicyAds",category:"ad",domains:["*.juicyads.com"]},{name:"JustPremium",category:"ad",domains:["*.net.net"]},{name:"JustPremium Ads",company:"JustPremium",category:"ad",domains:["*.justpremium.com"]},{name:"JustUno",category:"ad",domains:["*.justuno.com","d2j3qa5nc37287.cloudfront.net"]},{name:"KINX (Korea Internet Neutral eXchange)",category:"other",domains:["*.kinxcdn.com"]},{name:"KISSmetrics",category:"analytics",domains:["*.kissmetrics.com","doug1izaerwt3.cloudfront.net","dsyszv14g9ymi.cloudfront.net"]},{name:"Kaizen Platform",category:"analytics",domains:["*.kaizenplatform.net"]},{name:"Kakao",category:"social",domains:["*.daum.net","*.daumcdn.net"]},{name:"Kaltura Video Platform",company:"Kaltura",category:"content",domains:["*.kaltura.com"]},{name:"Kameleoon",category:"analytics",domains:["*.kameleoon.com","*.kameleoon.eu"]},{name:"Kampyle",category:"analytics",domains:["*.kampyle.com"]},{name:"Kantar",category:"analytics",domains:["*.sesamestats.com"]},{name:"Kargo",
-category:"marketing",domains:["*.kargo.com"]},{name:"KARTE",company:"Plaid",homepage:"https://karte.io/",category:"marketing",domains:["*.karte.io"]},{name:"Kauli",category:"ad",domains:["*.kau.li"]},{name:"Keen",company:"Keen",homepage:"https://keen.io/",category:"analytics",domains:["*.keen.io","d26b395fwzu5fz.cloudfront.net"]},{name:"Kelkoo",category:"hosting",domains:["*.kelkoo.com"]},{name:"Kenshoo",category:"marketing",domains:["*.xg4ken.com"]},{name:"Key CDN",category:"utility",domains:["*.kxcdn.com"]},{name:"Keynote",company:"Dynatrace",category:"analytics",domains:["*.keynote.com"]},{name:"Keywee",category:"ad",domains:["*.keywee.co"]},{name:"Kiosked",category:"ad",domains:["*.kiosked.com"]},{name:"Klarna",category:"utility",domains:["*.klarna.com"]},{name:"Klaviyo",category:"ad",domains:["*.klaviyo.com"]},{name:"Klevu Search",company:"Klevu",category:"utility",domains:["*.klevu.com"]},{name:"Klick2Contact",category:"customer-success",domains:["*.klick2contact.com"]},{
-name:"Knight Lab",company:"Northwestern University",category:"utility",domains:["*.knightlab.com"]},{name:"Kodajo",category:"other",domains:["*.kodajo.com"]},{name:"Komoona",category:"ad",domains:["*.komoona.com"]},{name:"Korrelate",company:"JD Power",category:"analytics",domains:["*.korrelate.net"]},{name:"LKQD",category:"ad",domains:["*.lkqd.net"]},{name:"Layer0",category:"cdn",domains:["*.layer0.co"]},{name:"Layershift",category:"hosting",domains:["109.109.138.174"]},{name:"Lead Forensics",category:"ad",domains:["*.200summit.com","*.baw5tracker.com","*.business-path-55.com","*.bux1le001.com","*.central-core-7.com","*.direct-azr-78.com","*.explore-123.com","*.forensics1000.com","*.gldsta-02-or.com","*.green-bloc9.com","*.lansrv040.com","*.lead-123.com","*.leadforensics.com","*.mavic852.com","*.mon-com-net.com","*.peak-ip-54.com","*.snta0034.com","*.svr-prc-01.com","*.syntace-094.com","*.tghbn12.com","*.trail-web.com","*.web-01-gbl.com","*.web-cntr-07.com","*.trackdiscovery.net"]},{
-name:"Lead Intelligence",company:"Magnetise Solutions",category:"ad",domains:["*.leadintelligence.co.uk"]},{name:"LeadLander",category:"analytics",domains:["*.formalyzer.com","*.trackalyzer.com"]},{name:"Leaflet",category:"utility",domains:["*.leafletjs.com"]},{name:"LeasdBoxer",company:"LeadBoxer",category:"ad",domains:["*.leadboxer.com"]},{name:"LeaseWeb",homepage:"https://www.leaseweb.com/",category:"cdn",domains:["*.lswcdn.net","*.leasewebcdn.com"]},{name:"Leboncoin",category:"content",domains:["*.leboncoin.fr"]},{name:"Lengow",category:"hosting",domains:["*.lengow.com"]},{name:"Lessbuttons",category:"social",domains:["*.lessbuttons.com"]},{name:"Letter Press",category:"ad",domains:["*.getletterpress.com"]},{name:"Level 3 Communications",category:"utility",domains:["footprint.net"]},{name:"Level3",category:"other",domains:["secure.footprint.net"]},{name:"Lifestreet Media",category:"social",domains:["*.lfstmedia.com"]},{name:"LiftSuggest",category:"analytics",
-domains:["d2blwevgjs7yom.cloudfront.net"]},{name:"Ligatus",category:"ad",domains:["*.ligadx.com"]},{name:"LightStep",category:"analytics",domains:["*.lightstep.com"]},{name:"LightWidget",category:"utility",domains:["*.lightwidget.com"]},{name:"Likelihood",company:"LIkeihood",category:"hosting",domains:["*.likelihood.com"]},{name:"LikeShop",company:"Dash Hudson",category:"content",domains:["likeshop.me"]},{name:"LINE Corporation",category:"ad",domains:["*.line-scdn.net","*.line.me"]},{name:"Linkcious",category:"analytics",domains:["*.linkcious.com"]},{name:"Linking Mobile",category:"ad",domains:["*.linkingmobile.com"]},{name:"LittleData",category:"analytics",homepage:"https://www.littledata.io/",domains:["*.littledata.io"]},{name:"LiveBurst",category:"ad",domains:["*.liveburst.com"]},{name:"LiveClicker",category:"ad",domains:["*.liveclicker.net"]},{name:"LiveHelpNow",category:"customer-success",domains:["*.livehelpnow.net"]},{name:"LiveInternet",category:"analytics",
-domains:["*.yadro.ru"]},{name:"LiveJournal",category:"social",domains:["*.livejournal.com","*.livejournal.net"]},{name:"LivePerson",category:"customer-success",homepage:"https://www.liveperson.com/",domains:["*.liveperson.com","*.look.io","*.liveperson.net","*.lpsnmedia.net"]},{name:"LiveRail",company:"Facebook",category:"ad",domains:["*.liverail.com","*.lrcdn.net"]},{name:"LiveTex",category:"customer-success",domains:["*.livetex.ru"]},{name:"Livefyre",category:"content",domains:["*.fyre.co","*.livefyre.com"]},{name:"Living Map Company",category:"utility",domains:["*.livingmap.com"]},{name:"Local World",category:"content",domains:["*.thelocalpeople.co.uk"]},{name:"LockerDome",category:"analytics",domains:["*.lockerdome.com"]},{name:"Logentries",company:"Rapid",category:"utility",domains:["*.logentries.com"]},{name:"Logicalis",category:"analytics",domains:["*.trovus.co.uk"]},{name:"LoginRadius",company:"LoginRadius",homepage:"https://www.loginradius.com/",category:"ad",
-domains:["*.loginradius.com","*.lrcontent.com"]},{name:"LongTail Ad Solutions",category:"ad",domains:["*.jwpcdn.com","*.jwplatform.com","*.jwplayer.com","*.jwpltx.com","*.jwpsrv.com","*.longtailvideo.com"]},{name:"Loop Commerce",category:"other",domains:["*.loopassets.net"]},{name:"Loop11",category:"analytics",domains:["*.loop11.com"]},{name:"LoopMe",category:"ad",domains:["*.loopme.biz","*.loopme.com","*.vntsm.com","*.loopme.me"]},{name:"Looper",category:"content",domains:["*.looper.com"]},{name:"Loyalty Point",category:"ad",domains:["*.loyaltypoint.pl"]},{name:"LoyaltyLion",category:"ad",domains:["*.loyaltylion.com","*.loyaltylion.net","dg1f2pfrgjxdq.cloudfront.net"]},{name:"Luma Tag",category:"analytics",domains:["*.lumatag.co.uk"]},{name:"Lumesse",category:"content",domains:["*.recruitmentplatform.com"]},{name:"Luminate",category:"ad",domains:["*.luminate.com"]},{name:"Lynchpin Analytics",category:"analytics",domains:["*.lypn.net"]},{name:"Lyris",category:"ad",
-domains:["*.clicktracks.com"]},{name:"Lytics",category:"ad",domains:["*.lytics.io"]},{name:"MEC WebTrack",company:"MEC",category:"ad",domains:["*.e-webtrack.net"]},{name:"MECLABS Institute",category:"analytics",domains:["*.meclabs.com","*.meclabsdata.com"]},{name:"MLveda",category:"utility",domains:["*.mlveda.com"]},{name:"Macromill",company:"Macromill",category:"analytics",homepage:"https://group.macromill.com/",domains:["*.macromill.com"]},{name:"Macropod BugHerd",company:"Macropod",category:"utility",domains:["*.bugherd.com"]},{name:"Madison Logic",category:"marketing",domains:["*.ml314.com"]},{name:"Madmetrics",company:"Keyade",category:"analytics",domains:["*.keyade.com"]},{name:"Magnetic",category:"ad",domains:["*.domdex.com","d3ezl4ajpp2zy8.cloudfront.net"]},{name:"Magnetic Platform",company:"Magnetic",category:"ad",domains:["*.magnetic.is"]},{name:"MailMunch",category:"ad",domains:["*.mailmunch.co"]},{name:"MailPlus",category:"ad",domains:["*.mailplus.nl"]},{name:"Mapbox",
-category:"utility",domains:["*.mapbox.com"]},{name:"Maptive",category:"utility",domains:["*.maptive.com"]},{name:"Marcaria.com",category:"other",domains:["*.gooo.al"]},{name:"Marchex",category:"analytics",domains:["*.voicestar.com","*.marchex.io"]},{name:"Mark and Mini",category:"ad",domains:["*.markandmini.com"]},{name:"Marker",category:"utility",domains:["*.marker.io"]},{name:"Marketing Dashboards",company:"GroupM",category:"analytics",domains:["*.m-decision.com"]},{name:"Marketizator",category:"analytics",domains:["*.marketizator.com"]},{name:"Marketplace Web Service",company:"Amazon",category:"other",domains:["*.ssl-images-amazon.com"]},{name:"Mashable",category:"social",domains:["*.mshcdn.com"]},{name:"MatchWork",category:"utility",domains:["*.matchwork.com"]},{name:"MathJax",category:"utility",domains:["*.mathjax.org"]},{name:"Mather Economics",category:"analytics",domains:["*.matheranalytics.com"]},{name:"MaxCDN Enterprise",company:"MaxCDN",category:"utility",
-domains:["*.netdna-cdn.com","*.netdna-ssl.com"]},{name:"MaxMind",category:"utility",domains:["*.maxmind.com"]},{name:"MaxPoint Interactive",category:"ad",domains:["*.mxptint.net"]},{name:"Maxsi",category:"analytics",domains:["*.evisitanalyst.com"]},{name:"Maxymiser",category:"analytics",domains:["*.maxymiser.net, maxymiser.hs.llnwd.net"]},{name:"McAffee",category:"utility",domains:["*.mcafeesecure.com","*.scanalert.com"]},{name:"Measured",category:"analytics",domains:["*.measured.com"],homepage:"https://www.measured.com/"},{name:"Media IQ",category:"analytics",domains:["*.mediaiqdigital.com"]},{name:"Media Management Technologies",category:"ad",domains:["*.speedshiftmedia.com"]},{name:"Media Temple",category:"hosting",domains:["*.goodlayers2.com"]},{name:"Mediabong",category:"ad",domains:["*.mediabong.net"]},{name:"Mediahawk",category:"analytics",domains:["*.mediahawk.co.uk"]},{name:"Mediahub",category:"ad",domains:["*.hubverifyandoptimize.com","*.projectwatchtower.com"]},{
-name:"Mediasyndicator",category:"ad",domains:["*.creativesyndicator.com"]},{name:"Medium",category:"content",domains:["*.medium.com"]},{name:"Meetrics",category:"ad",domains:["*.de.com","*.meetrics.net","*.mxcdn.net"]},{name:"Mega",company:"Mega Information Technology",category:"other",domains:["*.mgcdn.com"]},{name:"Melt",category:"ad",domains:["*.meltdsp.com","*.mesp.com"]},{name:"Meltwater Group",category:"customer-success",domains:["*.meltwaternews.com"]},{name:"Meme",category:"ad",domains:["*.viewwonder.com"]},{name:"MentAd",category:"ad",domains:["*.mentad.com"]},{name:"Mention Me",category:"ad",domains:["*.mention-me.com"]},{name:"Merchant Equipment Store",category:"utility",domains:["*.merchantequip.com"]},{name:"Merchenta",category:"customer-success",domains:["*.merchenta.com"]},{name:"Merkle Digital Data Exchange",company:"Merkle",category:"ad",domains:["*.brilig.com"]},{name:"Merkle Paid Search",company:"Merkle",category:"ad",domains:["*.rkdms.com"]},{name:"Met Office",
-category:"content",domains:["*.metoffice.gov.uk"]},{name:"Meta Broadcast",category:"social",domains:["*.metabroadcast.com"]},{name:"Michael Associates",category:"ad",domains:["*.checktestsite.com"]},{name:"Michelin",category:"content",domains:["*.viamichelin.com"]},{name:"Microad",category:"ad",domains:["*.microad.jp"]},{name:"Microsoft Certificate Services",company:"Microsoft",category:"utility",domains:["*.msocsp.com"]},{name:"Microsoft Hosted Libs",company:"Microsoft",category:"cdn",domains:["*.aspnetcdn.com"]},{name:"Microsoft XBox Live",company:"Microsoft",category:"marketing",domains:["*.xboxlive.com"]},{name:"Mightypop",category:"ad",domains:["*.mightypop.ca"]},{name:"Mika Tuupola",category:"utility",domains:["*.appelsiini.net"]},{name:"Millennial Media",category:"ad",domains:["*.jumptap.com"]},{name:"Mirror Image Internet",category:"utility",domains:["*.miisolutions.net"]},{name:"Mobify",category:"utility",domains:["*.mobify.com","*.mobify.net"]},{name:"Mobile Nations",
-category:"social",domains:["*.mobilenations.com"]},{name:"Mobivate",category:"ad",domains:["*.mobivatebulksms.com"]},{name:"Momondo",category:"content",domains:["*.momondo.dk"]},{name:"Momondo Group",category:"content",domains:["*.momondogrouo.com","*.momondogroup.com"]},{name:"Monarch Ads",category:"ad",domains:["*.monarchads.com"]},{name:"Monetate",category:"analytics",domains:["*.monetate.net"]},{name:"MonetizeMore",category:"ad",domains:["*.m2.ai"]},{name:"Monitor",company:"Econda",category:"analytics",domains:["*.econda-monitor.de"]},{name:"Monkey Frog Media",category:"content",domains:["*.monkeyfrogmedia.com"]},{name:"Monotype",category:"cdn",domains:["*.fonts.com","*.fonts.net"]},{name:"Moore-Wilson",category:"ad",domains:["*.mwdev.co.uk"]},{name:"Moovweb",category:"utility",domains:["*.moovweb.net"]},{name:"Mopinion",category:"analytics",domains:["*.mopinion.com"]},{name:"MotionPoint",category:"other",domains:["*.convertlanguage.com"]},{name:"Mouse3K",category:"analytics",
-domains:["*.mouse3k.com"]},{name:"MouseStats",category:"analytics",domains:["*.mousestats.com"]},{name:"Mouseflow",category:"analytics",domains:["*.mouseflow.com"]},{name:"Movable Ink",category:"analytics",domains:["*.micpn.com"]},{name:"MovingIMAGE24",category:"content",domains:["*.edge-cdn.net"]},{name:"Moxielinks",category:"ad",domains:["*.moxielinks.com"]},{name:"Moz Recommended Companies",company:"Moz",category:"analytics",domains:["d2eeipcrcdle6.cloudfront.net"]},{name:"Mozilla",category:"utility",domains:["*.mozilla.org"]},{name:"Multiview",category:"content",domains:["*.multiview.com","*.track-mv.com"]},{name:"Mux",category:"analytics",domains:["*.litix.io"]},{name:"MyAds",company:"MyBuys",category:"analytics",domains:["*.veruta.com"]},{name:"MyBuys",category:"analytics",domains:["*.mybuys.com"]},{name:"MyFonts",category:"cdn",domains:["*.myfonts.net"]},{name:"MyRegistry",category:"other",domains:["*.myregistry.com"]},{name:"MySpace",company:"Specific Media",category:"social",
-domains:["*.myspace.com"]},{name:"Mynewsdesk",category:"utility",domains:["*.mynewsdesk.com"]},{name:"NAVIS",category:"content",domains:["*.navistechnologies.info"]},{name:"NCC Group Real User Monitoring",company:"NCC Group",category:"analytics",domains:["*.nccgroup-webperf.com"]},{name:"NEORY Marketing Cloud",company:"NEORY",category:"marketing",domains:["*.ad-srv.net"]},{name:"Nanigans",category:"ad",domains:["*.nanigans.com"]},{name:"Nano Interactive",category:"ad",domains:["*.audiencemanager.de"]},{name:"Nanorep",company:"Nanorep Technologies",category:"customer-success",domains:["*.nanorep.com"]},{name:"Narrative",category:"ad",domains:["*.narrative.io"]},{name:"Native Ads",category:"ad",domains:["*.nativeads.com"]},{name:"Nativo",category:"ad",domains:["*.postrelease.com"]},{name:"Navegg",category:"ad",domains:["*.navdmp.com"]},{name:"NaviStone",category:"ad",domains:["*.murdoog.com"]},{name:"Naytev",category:"analytics",domains:["*.naytev.com"]},{name:"Needle",
-category:"analytics",domains:["*.needle.com"]},{name:"Neiman Marcus",category:"content",domains:["*.ctscdn.com"]},{name:"Nend",category:"ad",domains:["*.nend.net"]},{name:"Neodata",category:"ad",domains:["*.neodatagroup.com"]},{name:"Net Applications",category:"analytics",domains:["*.hitsprocessor.com"]},{name:"Net Reviews",category:"analytics",domains:["*.avis-verifies.com"]},{name:"NetAffiliation",company:"Kwanco",category:"ad",domains:["*.metaffiliation.com"]},{name:"NetDirector",company:"G-Forces Web Management",category:"other",domains:["*.netdirector.co.uk"]},{name:"NetFlix",category:"content",domains:["*.nflxext.com","*.nflximg.net"]},{name:"Nielsen NetRatings SiteCensus",company:"The Nielsen Company",homepage:"http://www.nielsen-online.com/intlpage.html",category:"analytics",domains:["*.imrworldwide.com"]},{name:"NetSeer",category:"ad",domains:["*.netseer.com","*.ns-cdn.com"]},{name:"NetShelter",company:"Ziff Davis Tech",category:"ad",domains:["*.netshelter.net"]},{
-name:"Netmining",company:"Ignition One",category:"ad",domains:["*.netmng.com"]},{name:"Netop",category:"customer-success",domains:["*.netop.com"]},{name:"Network Solutions",category:"utility",domains:["*.netsolssl.com","*.networksolutions.com"]},{name:"Neustar AdAdvisor",company:"Neustar",category:"ad",domains:["*.adadvisor.net"]},{name:"New Approach Media",category:"ad",domains:["*.newapproachmedia.co.uk"]},{name:"NewShareCounts",category:"social",domains:["*.newsharecounts.com"]},{name:"News",category:"social",domains:["*.news.com.au","*.newsanalytics.com.au","*.newsapi.com.au","*.newscdn.com.au","*.newsdata.com.au","*.newsdiscover.com.au","*.news-static.com"]},{name:"Newsquest",category:"content",domains:["*.newsquestdigital.co.uk"]},{name:"Newzulu",category:"content",domains:["*.filemobile.com","*.projects.fm"]},{name:"Nexcess.Net",category:"hosting",domains:["*.nexcesscdn.net"]},{name:"Nexstar Media Group",category:"ad",domains:["*.yashi.com"]},{name:"NextPerf",
-company:"Rakuten Marketing",category:"ad",domains:["*.nxtck.com"]},{name:"Nine.com.au",company:"Nine Digital",category:"content",domains:["*.9msn.com.au"]},{name:"NitroSell",category:"hosting",domains:["*.nitrosell.com"]},{name:"Nochex",category:"utility",domains:["*.nochex.com"]},{name:"Northern &amp; Shell Media Group",category:"content",domains:["*.northernandshell.co.uk"]},{name:"Nosto",category:"analytics",domains:["*.nosto.com"]},{name:"Now Interact",category:"analytics",domains:["*.nowinteract.com"]},{name:"Numberly",company:"1000mercis",category:"ad",domains:["*.mmtro.com","*.nzaza.com"]},{name:"NyaConcepts",category:"analytics",domains:["*.xclusive.ly"]},{name:"O2",category:"other",domains:["*.o2.co.uk"]},{name:"GoDaddy",homepage:"https://www.godaddy.com/",category:"utility",domains:["*.godaddy.com","*.wsimg.com"]},{name:"ObjectPlanet",category:"analytics",domains:["*.easypolls.net"]},{name:"OhMyAd",category:"ad",domains:["*.ohmyad.co"]},{name:"Okas Concepts",
-category:"utility",domains:["*.okasconcepts.com"]},{name:"Okta",category:"analytics",domains:["*.okta.com"]},{name:"Olapic",category:"content",domains:["*.photorank.me"]},{name:"Ometria",category:"analytics",domains:["*.ometria.com"]},{name:"Omniconvert",category:"analytics",domains:["*.omniconvert.com","d2tgfbvjf3q6hn.cloudfront.net","d3vbj265bmdenw.cloudfront.net"]},{name:"Omniroot",company:"Verizon",category:"utility",domains:["*.omniroot.com"]},{name:"OnAudience",company:"Cloud Technologies",category:"ad",domains:["*.onaudience.com"]},{name:"OnScroll",category:"ad",domains:["*.onscroll.com"]},{name:"OnState",category:"ad",domains:["*.onstate.co.uk"]},{name:"OnYourMap",category:"utility",domains:["*.onyourmap.com"]},{name:"One by AOL",company:"AOL",category:"ad",domains:["*.adtechjp.com","*.adtech.de"]},{name:"One by AOL:Mobile",company:"AOL",category:"ad",domains:["*.nexage.com"]},{name:"OneAll",category:"analytics",domains:["*.oneall.com"]},{name:"OneSoon",category:"analytics",
-domains:["*.adalyser.com"]},{name:"OneTag",category:"ad",domains:["*.onetag-sys.com"]},{name:"Onet",category:"ad",domains:["*.onet.pl"]},{name:"Online Rewards",company:"Mastercard",category:"ad",domains:["*.loyaltygateway.com"]},{name:"Online republic",category:"content",domains:["*.imallcdn.net"]},{name:"Ooyala",category:"ad",domains:["*.ooyala.com"]},{name:"OpenTable",company:"Priceline Group",category:"content",domains:["*.opentable.com","*.opentable.co.uk","*.toptable.co.uk"]},{name:"OpenX Ad Exchange",company:"OpenX Technologies",category:"ad",domains:["*.liftdna.com"]},{name:"Opinion Stage",category:"analytics",domains:["*.opinionstage.com"]},{name:"OpinionBar",category:"analytics",domains:["*.opinionbar.com"]},{name:"Opta",company:"Perform Group",category:"content",domains:["*.opta.net"]},{name:"OptiMonk",category:"ad",domains:["*.optimonk.com"]},{name:"Optilead",category:"analytics",domains:["*.dyn-img.com","*.leadcall.co.uk","*.optilead.co.uk"]},{name:"Optimatic",
-category:"ad",domains:["*.optimatic.com"]},{name:"Optimise Media Group",category:"utility",domains:["*.omguk.com"]},{name:"Optimost",company:"OpenText",category:"ad",domains:["*.optimost.com"]},{name:"Optimove",company:"Mobius Solutions",category:"analytics",domains:["*.optimove.net"]},{name:"Optorb",category:"ad",domains:["*.optorb.com"]},{name:"Oracle",category:"marketing",domains:["*.custhelp.com","*.eloqua.com","*.en25.com","*.estara.com","*.instantservice.com"]},{name:"Oracle Recommendations On Demand",company:"Oracle",category:"analytics",domains:["*.atgsvcs.com"]},{name:"Oracle Responsys",company:"Oracle",category:"marketing",domains:["*.adrsp.net","*.responsys.net"]},{name:"Order Security-VOID",company:"Order Security",category:"analytics",domains:["*.order-security.com"]},{name:"Oriel",category:"ad",domains:["*.oriel.io"]},{name:"Outbrain",homepage:"https://www.outbrain.com/",category:"ad",domains:["*.outbrain.com","*.outbrainimg.com","*.visualrevenue.com"]},{
-name:"OverStream",company:"Coull",category:"ad",domains:["*.coull.com"]},{name:"Overdrive",category:"content",domains:["*.contentreserve.com"]},{name:"Overstock",category:"utility",domains:["*.ostkcdn.com"]},{name:"OwnerIQ",category:"ad",domains:["*.owneriq.net"]},{name:"OzCart",category:"utility",domains:["*.ozcart.com.au"]},{name:"Ozone Media",category:"ad",domains:["*.adadyn.com"]},{name:"Loqate",company:"Loqate",category:"other",domains:["*.pcapredict.com","*.postcodeanywhere.co.uk"]},{name:"PEER 1 Hosting",category:"hosting",domains:["*.peer1.com"]},{name:"PERFORM",category:"content",domains:["*.performgroup.com"]},{name:"PICnet",category:"hosting",domains:["*.nonprofitsoapbox.com"]},{name:"Pacnet",company:"Telstra",category:"other",domains:["*.cdndelivery.net"]},{name:"Pagefair",category:"ad",domains:["*.pagefair.com","*.pagefair.net"]},{name:"Pagely",category:"other",domains:["*.optnmstr.com"]},{name:"Pagesuite",category:"ad",domains:["*.pagesuite-professional.co.uk"]},{
-name:"Pardot",category:"marketing",domains:["*.pardot.com"]},{name:"Parse.ly",category:"analytics",domains:["*.parsely.com","d1z2jf7jlzjs58.cloudfront.net"]},{name:"Pay per Click",company:"Eysys",category:"ad",domains:["*.eysys.com"]},{name:"PayPal Ads",category:"ad",domains:["*.where.com"]},{name:"Peaks & Pies",category:"analytics",domains:["*.bunchbox.co"]},{name:"PebblePost",category:"ad",domains:["*.pbbl.co"]},{name:"Peerius",category:"analytics",domains:["*.peerius.com"]},{name:"Peermap",company:"IMRG",category:"analytics",domains:["peermapcontent.affino.com"]},{name:"Penske Media",category:"content",domains:["*.pmc.com"]},{name:"Penton",category:"utility",domains:["*.pisces-penton.com"]},{name:"Pepper",category:"ad",domains:["*.peppercorp.com"]},{name:"Perfect Audience",company:"Marin Software",category:"ad",domains:["*.prfct.co","*.marinsm.com","*.perfectaudience.com"]},{name:"Perfect Market",category:"ad",domains:["*.perfectmarket.com"]},{name:"Perfect Privacy",
-category:"other",domains:["*.suitesmart.com"]},{name:"Perform Group",category:"content",domains:["*.performfeeds.com","*.premiumtv.co.uk"]},{name:"Performio",category:"ad",domains:["*.performax.cz"]},{name:"PerimeterX Bot Defender",company:"PerimeterX",category:"utility",domains:["*.perimeterx.net","*.pxi.pub"]},{name:"Periscope",category:"content",domains:["*.periscope.tv"]},{name:"Permutive",category:"ad",domains:["*.permutive.com","d3alqb8vzo7fun.cloudfront.net"]},{name:"Petametrics",category:"analytics",domains:["*.petametrics.com"]},{name:"PhotoBucket",category:"content",domains:["*.photobucket.com"]},{name:"Picreel",category:"analytics",domains:["*.pcrl.co","*.picreel.com"]},{name:"Pictela (AOL)",category:"analytics",domains:["*.pictela.net"]},{name:"PistonHeads",category:"social",domains:["*.pistonheads.com"]},{name:"Piwik",category:"analytics",domains:["*.drtvtracker.com","*.piwikpro.com","*.raac33.net"]},{name:"Pixalate",category:"utility",domains:["*.adrta.com"]},{
-name:"Pixlee",category:"social",domains:["*.pixlee.com"]},{name:"Placed",category:"analytics",domains:["*.placed.com"]},{name:"Planning-inc",category:"analytics",domains:["*.planning-inc.co.uk"]},{name:"PlayAd Media Group",category:"ad",domains:["*.youplay.se"]},{name:"Playbuzz",category:"hosting",domains:["*.playbuzz.com"]},{name:"Pleenq",category:"ad",domains:["*.pleenq.com"]},{name:"Plentific",category:"content",domains:["*.plentific.com"]},{name:"PluginDetect",category:"other",domains:["dtlilztwypawv.cloudfront.net"]},{name:"Po.st",company:"RadiumOne",category:"utility",domains:["*.po.st"]},{name:"Pointpin",category:"utility",domains:["*.pointp.in"]},{name:"Pointroll (Garnett)",category:"ad",domains:["*.pointroll.com"]},{name:"Polar",homepage:"https://polar.me/",category:"ad",
-domains:["*.polarmobile.ca","*.mediaeverywhere.com","*.mediavoice.com","*.plrsrvcs.com","*.polarcdn-engine.com","*.polarcdn-meraxes.com","*.polarcdn-pentos.com","*.polarcdn-static.com","*.polarcdn-terrax.com","*.polarcdn.com","*.polarmobile.com","*.poweredbypolar.com","*.mediaconductor.me","*.polaracademy.me"]},{name:"PollDaddy (Automattic)",category:"ad",domains:["static.polldaddy.com","*.poll.fm"]},{name:"Polldaddy",company:"Automattic",category:"analytics",domains:["polldaddy.com","*.polldaddy.com"]},{name:"Polyfill service",company:"Polyfill.io",category:"other",domains:["*.polyfill.io"]},{name:"MegaPopAds",category:"ad",domains:["*.megapopads.com"]},{name:"Populis",category:"ad",domains:["*.populisengage.com"]},{name:"Postimage.org",category:"content",domains:["*.postimg.org"]},{name:"PowerFront",category:"hosting",domains:["*.inside-graph.com"]},{name:"PowerReviews",category:"analytics",domains:["*.powerreviews.com"]},{name:"Powerlinks.com",category:"ad",
-domains:["*.powerlinks.com"]},{name:"Press+",category:"ad",domains:["*.pipol.com","*.ppjol.com","*.ppjol.net"]},{name:"PressArea",category:"utility",domains:["*.pressarea.com"]},{name:"Pretio Interactive",category:"ad",domains:["*.pretio.in"]},{name:"Prezi",category:"utility",domains:["*.prezi.com"]},{name:"PriceGrabber",category:"content",domains:["*.pgcdn.com","*.pricegrabber.com"]},{name:"PriceRunner",category:"content",domains:["*.pricerunner.com"]},{name:"PrintFriendly",category:"utility",domains:["*.printfriendly.com"]},{name:"Privy",category:"ad",domains:["*.privy.com","*.privymktg.com"]},{name:"Proclivity Media",category:"analytics",domains:["*.pswec.com"]},{name:"Profitshare",category:"ad",domains:["*.profitshare.ro"]},{name:"Programattik",category:"ad",domains:["*.programattik.com"]},{name:"Proper Media",category:"content",domains:["*.proper.io"]},{name:"Property Week",category:"content",domains:["*.propertyweek.com"]},{name:"Provide Support",category:"customer-success",
-domains:["*.providesupport.com"]},{name:"Proweb Uk",category:"hosting",domains:["*.proweb.net"]},{name:"Proximic (ComScore)",category:"ad",domains:["*.proximic.com"]},{name:"Psyma",category:"ad",domains:["*.psyma.com"]},{name:"PubFactory",company:"Safari Books Online",category:"content",domains:["*.pubfactory.com"]},{name:"PubNation",category:"ad",domains:["*.pubnation.com"]},{name:"Publicidad.net",category:"ad",domains:["*.publicidad.tv"]},{name:"PublishThis",company:"Ultra Unlimited",category:"ad",domains:["*.publishthis.com"]},{name:"Pulse Insights",category:"analytics",domains:["*.pulseinsights.com"]},{name:"Pulsepoint",category:"marketing",domains:["*.displaymarketplace.com"]},{name:"Purch",category:"ad",domains:["*.bestofmedia.com","*.purch.com"]},{name:"Pure Chat",category:"customer-success",domains:["*.purechat.com"]},{name:"PushCrew",category:"ad",domains:["*.pushcrew.com"]},{name:"Q1Media",category:"ad",domains:["*.q1media.com","*.q1mediahydraplatform.com"]},{
-name:"Qbase Software Development",category:"hosting",domains:["*.smartwebportal.co.uk"]},{name:"Qeryz",category:"analytics",domains:["*.qeryz.com"]},{name:"Qode Interactive",category:"hosting",domains:["*.qodeinteractive.com"]},{name:"Qrius",category:"social",domains:["*.qrius.me"]},{name:"Qualaroo",category:"analytics",domains:["*.qualaroo.com"]},{name:"Qualtrics",category:"analytics",domains:["*.qualtrics.com"]},{name:"Qubit",company:"Qubit",category:"analytics",domains:["*.qubit.com","*.qutics.com","d3c3cq33003psk.cloudfront.net","*.goqubit.com","*.qubitproducts.com"]},{name:"Qubit Deliver",company:"Qubit",category:"analytics",domains:["d1m54pdnjzjnhe.cloudfront.net","d22rutvoghj3db.cloudfront.net","dd6zx4ibq538k.cloudfront.net"]},{name:"QuestionPro",category:"analytics",domains:["*.questionpro.com"]},{name:"Queue-it",category:"other",domains:["*.queue-it.net"]},{name:"QuinStreet",category:"ad",domains:["*.Quinstreet.com","*.b2btechleadform.com","*.qnsr.com","*.qsstats.com"]},{
-name:"QuoVadis",category:"utility",domains:["*.quovadisglobal.com"]},{name:"Qzzr",category:"analytics",domains:["*.movementventures.com","*.qzzr.com"]},{name:"RapidAPI",category:"utility",domains:["*.rapidapi.com"]},{name:"RCS Media Group",category:"ad",domains:["*.rcsadv.it"]},{name:"REVIVVE",category:"ad",domains:["*.revivve.com"]},{name:"RSSinclude",category:"social",domains:["*.rssinclude.com"]},{name:"RTB House AdPilot",company:"RTB House",category:"ad",domains:["*.erne.co","*.creativecdn.com"]},{name:"RTB Media",category:"ad",domains:["*.rtb-media.me"]},{name:"RUN",category:"ad",domains:["*.runadtag.com","*.rundsp.com"]},{name:"Rackspace",category:"hosting",domains:["*.rackcdn.com","*.rackspacecloud.com","*.raxcdn.com","*.websitetestlink.com"]},{name:"RadiumOne",category:"ad",domains:["*.gwallet.com","*.r1-cdn.net"]},{name:"Rakuten DC Storm",company:"Rakuten",category:"analytics",domains:["*.dc-storm.com","*.h4k5.com","*.stormiq.com"]},{name:"Rakuten LinkShare",company:"Rakuten",
-category:"ad",domains:["*.linksynergy.com"]},{name:"Rakuten Marketing",company:"Rakuten",category:"ad",domains:["*.rakuten-static.com","*.rmtag.com","tag.rmp.rakuten.com"]},{name:"Rakuten MediaForge",company:"Rakuten",category:"ad",domains:["*.mediaforge.com"]},{name:"Rambler",company:"Rambler & Co",category:"utility",domains:["*.rambler.ru"]},{name:"Ranker",category:"content",domains:["*.ranker.com","*.rnkr-static.com"]},{name:"Ravelin",category:"utility",domains:["*.ravelin.com"]},{name:"Raygun",category:"utility",domains:["*.raygun.io"]},{name:"ReCollect",category:"utility",domains:["*.recollect.net"]},{name:"ReSRC",category:"utility",domains:["*.resrc.it"]},{name:"ReTargeter",category:"ad",domains:["*.retargeter.com"]},{name:"Reach Group",category:"ad",domains:["*.redintelligence.net"]},{name:"ReachDynamics",category:"ad",domains:["*.rdcdn.com"]},{name:"ReachForce",category:"ad",domains:["*.reachforce.com"]},{name:"ReachLocal",category:"ad",domains:["*.rtrk.co.nz"]},{
-name:"ReachMee",category:"content",domains:["*.reachmee.com"]},{name:"Reactful",category:"analytics",domains:["*.reactful.com"]},{name:"Realtime",company:"internet business technologies",category:"utility",domains:["*.realtime.co"]},{name:"Realtime Media (Brian Communications)",category:"ad",domains:["*.rtm.com"]},{name:"Realtime Targeting",category:"ad",domains:["*.idtargeting.com"]},{name:"Realytics",category:"analytics",domains:["dcniko1cv0rz.cloudfront.net","*.realytics.net"]},{name:"RebelMouse",category:"ad",domains:["*.rebelmouse.com","*.rbl.ms"]},{name:"Receiptful",category:"utility",domains:["*.receiptful.com"]},{name:"Recite Me",category:"other",domains:["*.reciteme.com"]},{name:"RecoBell",category:"analytics",domains:["*.recobell.io"]},{name:"Recommend",category:"analytics",domains:["*.recommend.pro"]},{name:"Red Eye International",category:"ad",domains:["*.pajmc.com"]},{name:"Redfish Group",category:"ad",domains:["*.wmps.com"]},{name:"Reevoo",category:"analytics",
-domains:["*.reevoo.com"]},{name:"Refersion",category:"ad",domains:["*.refersion.com"]},{name:"Refined Ads",category:"ad",domains:["*.refinedads.com"]},{name:"Reflektion",category:"analytics",domains:["*.reflektion.com","d26opx5dl8t69i.cloudfront.net"]},{name:"Reflow",company:"Scenestealer",category:"ad",domains:["*.reflow.tv"]},{name:"Reklama",category:"ad",domains:["*.o2.pl","*.wp.pl"]},{name:"Relevad ReleStar",company:"Relevad",category:"ad",domains:["*.relestar.com"]},{name:"Remarketing Pixel",company:"Adsterra Network",category:"ad",domains:["*.datadbs.com","*.remarketingpixel.com"]},{name:"Remintrex",company:"SmartUp Venture",category:"ad",domains:["*.remintrex.com"]},{name:"Republer",category:"ad",domains:["*.republer.com"]},{name:"Research Now",category:"analytics",domains:["*.researchgnow.com","*.researchnow.com"]},{name:"Research Online",company:"Skills Development Scotland",category:"content",domains:["*.researchonline.org.uk"]},{name:"Resonance Insights",
-category:"analytics",domains:["*.res-x.com"]},{name:"Resonate Networks",category:"analytics",domains:["*.reson8.com"]},{name:"Response Team",category:"ad",domains:["*.i-transactads.com"]},{name:"ResponseTap",category:"analytics",domains:["*.adinsight.com","*.responsetap.com"]},{name:"ResponsiveVoice",category:"other",domains:["*.responsivevoice.org"]},{name:"Retention Science",category:"ad",domains:["*.retentionscience.com","d1stxfv94hrhia.cloudfront.net"]},{name:"Revcontent",category:"content",domains:["*.revcontent.com"]},{name:"Revee",category:"ad",domains:["*.revee.com"]},{name:"Revenue Conduit",category:"utility",domains:["*.revenueconduit.com"]},{name:"RevenueMantra",category:"ad",domains:["*.revenuemantra.com"]},{name:"Reviews.co.uk",category:"analytics",domains:["*.reviews.co.uk"]},{name:"Reviews.io",category:"analytics",domains:["*.reviews.io"]},{name:"Revolver Maps",category:"analytics",domains:["*.revolvermaps.com"]},{name:"Revv",category:"utility",domains:["*.revv.co"]},{
-name:"RichRelevance",category:"analytics",domains:["*.richrelevance.com"]},{name:"RightNow Service Cloud",company:"Oracle",category:"customer-success",domains:["*.rightnowtech.com","*.rnengage.com"]},{name:"Rightster",category:"ad",domains:["*.ads-creativesyndicator.com"]},{name:"Riskified",category:"utility",domains:["*.riskified.com"]},{name:"Rockerbox",category:"analytics",homepage:"https://www.rockerbox.com/",domains:["getrockerbox.com"]},{name:"Rocket Fuel",category:"ad",domains:["*.rfihub.com","*.ru4.com","*.rfihub.net","*.ad1x.com"]},{name:"Rollbar",category:"utility",domains:["*.rollbar.com","d37gvrvc0wt4s1.cloudfront.net"]},{name:"RomanCart",category:"utility",domains:["*.romancart.com"]},{name:"Rondavu",category:"ad",domains:["*.rondavu.com"]},{name:"Roomkey",category:"content",domains:["*.roomkey.com"]},{name:"Roost",category:"utility",domains:["*.goroost.com"]},{name:"Roxot",category:"ad",domains:["*.rxthdr.com"]},{name:"Roxr Software",category:"analytics",
-domains:["*.getclicky.com"]},{name:"Rtoaster",company:"Brainpad",homepage:"https://www.brainpad.co.jp/rtoaster/",category:"marketing",domains:["*.rtoaster.jp"]},{name:"Rubikloud.com",category:"analytics",domains:["*.rubikloud.com"]},{name:"Ruler Analytics",company:"Ruler",category:"analytics",domains:["*.nyltx.com","*.ruleranalytics.com"]},{name:"Runner",company:"Rambler & Co",category:"content",domains:["*.begun.ru"]},{name:"S4M",category:"ad",domains:["*.sam4m.com"]},{name:"SAP Hybris Marketing Convert",company:"SAP",category:"ad",domains:["*.seewhy.com"]},{name:"SAS Institute",category:"ad",domains:["*.aimatch.com","*.sas.com"]},{name:"SATORI",homepage:"https://satori.marketing/",category:"marketing",domains:["satori.segs.jp"]},{name:"SC ShopMania Net SRL",category:"content",domains:["*.shopmania.com"]},{name:"SDL Media Manager",company:"SDL",category:"other",domains:["*.sdlmedia.com"]},{name:"SFR",category:"other",domains:["*.sfr.fr"]},{name:"SLI Systems",category:"utility",
-domains:["*.resultslist.com","*.resultspage.com","*.sli-spark.com"]},{name:"SMARTASSISTANT",company:"Smart Information Systems",category:"customer-success",domains:["*.smartassistant.com"]},{name:"SMARTSTREAM.TV",category:"ad",domains:["*.smartstream.tv"]},{name:"SPX",company:"Smaato",category:"ad",domains:["*.smaato.net"]},{name:"Sabio",category:"customer-success",domains:["*.sabio.co.uk"]},{name:"Sailthru",category:"analytics",domains:["*.sail-horizon.com","*.sail-personalize.com","*.sail-track.com"]},{name:"Sailthru Sightlines",company:"Sailthru",category:"marketing",domains:["*.sailthru.com"]},{name:"Sajari Pty",category:"utility",domains:["*.sajari.com"]},{name:"SaleCycle",category:"ad",domains:["*.salecycle.com","d16fk4ms6rqz1v.cloudfront.net","d22j4fzzszoii2.cloudfront.net","d30ke5tqu2tkyx.cloudfront.net","dn1i8v75r669j.cloudfront.net"]},{name:"Salesforce Live Agent",company:"Salesforce.com",category:"customer-success",domains:["*.salesforceliveagent.com"]},{
-name:"Salesforce.com",category:"ad",domains:["*.force.com","*.salesforce.com"]},{name:"Samba TV",company:"Samba",category:"content",domains:["*.samba.tv"]},{name:"Samplicio.us",category:"analytics",domains:["*.samplicio.us"]},{name:"Say Media",category:"ad",domains:["*.saymedia.com"]},{name:"Scenario",category:"analytics",domains:["*.getscenario.com"]},{name:"Schuh (image shard)",company:"Schuh",category:"other",domains:["d2ob0iztsaxy5v.cloudfront.net"]},{name:"Science Rockstars",category:"analytics",domains:["*.persuasionapi.com"]},{name:"ScientiaMobile",category:"analytics",domains:["*.wurflcloud.com","*.wurfl.io"]},{name:"Scoota",category:"ad",domains:["*.rockabox.co","*.scoota.co","d31i2625d5nv27.cloudfront.net","dyjnzf8evxrp2.cloudfront.net"]},{name:"ScribbleLive",category:"ad",domains:["*.scribblelive.com"]},{name:"SearchForce",category:"ad",domains:["*.searchforce.net"]},{name:"SearchSpring",category:"utility",domains:["*.searchspring.net"]},{name:"Searchanise",
-category:"analytics",domains:["*.searchanise.com"]},{name:"Sears Holdings",category:"content",domains:["*.shld.net"]},{name:"Secomapp",category:"utility",domains:["*.secomapp.com"]},{name:"SecuredVisit",company:"4Cite Marketing",category:"ad",domains:["*.securedvisit.com"]},{name:"SecurityMetrics",category:"utility",domains:["*.securitymetrics.com"]},{name:"Segmento",category:"ad",domains:["*.rutarget.ru"]},{name:"Segmint",category:"analytics",domains:["*.segmint.net"]},{name:"Sekindo",category:"content",domains:["*.sekindo.com"]},{name:"Seldon",category:"analytics",domains:["*.rummblelabs.com"]},{name:"SelectMedia International",category:"content",domains:["*.selectmedia.asia"]},{name:"Selligent",category:"ad",domains:["*.emsecure.net","*.slgnt.eu","targetemsecure.blob.core.windows.net"]},{name:"Sellpoints",category:"analytics",domains:["*.sellpoints.com"]},{name:"Semantics3",category:"analytics",domains:["*.hits.io"]},{name:"Semasio",category:"analytics",domains:["*.semasio.net"]},{
-name:"Semcasting Site Visitor Attribution",company:"Semcasting",category:"ad",domains:["*.smartzonessva.com"]},{name:"Sentifi",category:"social",domains:["*.sentifi.com"]},{name:"ServMetric",category:"analytics",domains:["*.servmetric.com"]},{name:"ServiceSource International",category:"marketing",domains:["*.scoutanalytics.net"]},{name:"ServiceTick",category:"analytics",domains:["*.servicetick.com"]},{name:"Servo",company:"Xervo",category:"hosting",domains:["*.onmodulus.net"]},{name:"SessionCam",company:"ServiceTick",category:"analytics",domains:["*.sessioncam.com","d2oh4tlt9mrke9.cloudfront.net"]},{name:"Seznam",category:"utility",domains:["*.imedia.cz"]},{name:"Sharethrough",category:"ad",domains:["*.sharethrough.com"]},{name:"SharpSpring",category:"marketing",domains:["*.sharpspring.com","*.marketingautomation.services"]},{name:"ShopRunner",category:"content",domains:["*.shoprunner.com","*.s-9.us"]},{name:"ShopStorm",category:"utility",domains:["*.shopstorm.com"]},{
-name:"Shopatron",category:"hosting",domains:["*.shopatron.com"]},{name:"Shopgate",category:"utility",domains:["*.shopgate.com"]},{name:"ShopiMind",company:"ShopIMind",category:"ad",domains:["*.shopimind.com"]},{name:"Shopkeeper Tools",category:"utility",domains:["*.shopkeepertools.com"]},{name:"Sidecar",category:"other",domains:["*.getsidecar.com","d3v27wwd40f0xu.cloudfront.net"]},{name:"Sidereel",category:"analytics",domains:["*.sidereel.com"]},{name:"Sift Science",category:"utility",domains:["*.siftscience.com"]},{name:"Signal",category:"tag-manager",domains:["*.sitetagger.co.uk"]},{name:"Signyfyd",category:"utility",domains:["*.signifyd.com"]},{name:"Silktide",category:"hosting",domains:["*.silktide.com"]},{name:"Silverpop",company:"IBM",category:"ad",domains:["*.mkt912.com","*.mkt922.com","*.mkt932.com","*.mkt941.com","*.mkt51.net","*.mkt61.net","*.pages01.net","*.pages02.net","*.pages03.net","*.pages04.net","*.pages05.net"]},{name:"Simplaex",category:"marketing",
-domains:["*.simplaex.net"]},{name:"SimpleReach",category:"analytics",domains:["*.simplereach.com","d8rk54i4mohrb.cloudfront.net"]},{name:"Simplestream",category:"content",domains:["*.simplestream.com"]},{name:"Simpli.fi",category:"ad",domains:["*.simpli.fi"]},{name:"Simplicity Marketing",category:"ad",domains:["*.flashtalking.com"]},{name:"SinnerSchrader Deutschland",category:"ad",domains:["*.s2Betrieb.de"]},{name:"Sirv",category:"other",domains:["*.sirv.com"]},{name:"Site Meter",category:"analytics",domains:["*.sitemeter.com"]},{name:"Site24x7 Real User Monitoring",company:"Site24x7",category:"analytics",domains:["*.site24x7rum.com"]},{name:"SiteGainer",category:"analytics",domains:["*.sitegainer.com","d191y0yd6d0jy4.cloudfront.net"]},{name:"SiteScout",company:"Centro",category:"ad",domains:["*.pixel.ad","*.sitescout.com"]},{name:"Siteimprove",category:"utility",domains:["*.siteimprove.com","*.siteimproveanalytics.com"]},{name:"Six Degrees Group",category:"hosting",
-domains:["*.fstech.co.uk"]},{name:"Skimbit",category:"ad",domains:["*.redirectingat.com","*.skimresources.com","*.skimresources.net"]},{name:"Skimlinks",category:"ad",domains:["*.skimlinks.com"]},{name:"SkyGlue Technology",category:"analytics",domains:["*.skyglue.com"]},{name:"SkyScanner",category:"content",domains:["*.skyscanner.net"]},{name:"Skybet",company:"Bonne Terre t/a Sky Vegas (Sky)",category:"other",domains:["*.skybet.com"]},{name:"Skype",category:"other",domains:["*.skype.com"]},{name:"Slate Group",category:"content",domains:["*.cdnslate.com"]},{name:"SlimCut Media Outstream",company:"SlimCut Media",category:"ad",domains:["*.freeskreen.com"]},{name:"Smart Insight Tracking",company:"Emarsys",category:"analytics",domains:["*.scarabresearch.com"]},{name:"Smart AdServer",category:"ad",domains:["*.01net.com","*.sascdn.com","*.sasqos.com","*.smartadserver.com"]},{name:"SmartFocus",category:"analytics",
-domains:["*.emv2.com","*.emv3.com","*.predictiveintent.com","*.smartfocus.com","*.themessagecloud.com"]},{name:"Smarter Click",category:"ad",domains:["*.smct.co","*.smarterclick.co.uk"]},{name:"SmarterHQ",category:"analytics",domains:["*.smarterhq.io","d1n00d49gkbray.cloudfront.net","*.smarterremarketer.net"]},{name:"Smarttools",category:"customer-success",domains:["*.smartertrack.com"]},{name:"Smartzer",category:"ad",domains:["*.smartzer.com"]},{name:"Snack Media",category:"content",domains:["*.snack-media.com"]},{name:"Snacktools",category:"ad",domains:["*.bannersnack.com"]},{name:"SnapEngage",category:"customer-success",domains:["*.snapengage.com"]},{name:"SnapWidget",category:"content",domains:["*.snapwidget.com"]},{name:"Soasta",category:"analytics",domains:["*.lognormal.net"]},{name:"SociableLabs",category:"ad",domains:["*.sociablelabs.net","*.sociablelabs.com"]},{name:"Social Annex",category:"customer-success",domains:["*.socialannex.com"]},{name:"SocialShopWave",
-category:"social",domains:["*.socialshopwave.com"]},{name:"Socialphotos",category:"social",domains:["*.slpht.com"]},{name:"Sociomantic Labs",company:"DunnHumby",category:"ad",domains:["*.sociomantic.com"]},{name:"SodaHead",category:"analytics",domains:["*.sodahead.com"]},{name:"Softwebzone",category:"hosting",domains:["*.softwebzone.com"]},{name:"Sojern",category:"marketing",domains:["*.sojern.com"]},{name:"Sokrati",category:"marketing",domains:["*.sokrati.com"]},{name:"Sonobi",category:"ad",domains:["*.sonobi.com"]},{name:"Sooqr Search",company:"Sooqr",category:"utility",domains:["*.sooqr.com"]},{name:"Sophus3",category:"analytics",domains:["*.s3ae.com","*.sophus3.com"]},{name:"Sorenson Media",category:"content",domains:["*.sorensonmedia.com"]},{name:"Sortable",category:"ad",domains:["*.deployads.com"]},{name:"Sotic",category:"hosting",domains:["*.sotic.net","*.soticservers.net"]},{name:"Soundest",category:"ad",domains:["*.soundestlink.com","*.soundest.net"]},{name:"Sourcepoint",
-category:"ad",domains:["*.decenthat.com","*.fallingfalcon.com","*.summerhamster.com","d2lv4zbk7v5f93.cloudfront.net","d3qxwzhswv93jk.cloudfront.net"]},{name:"SourceKnowledge",homepage:"https://www.sourceknowledge.com",category:"ad",domains:["*.provenpixel.com"]},{name:"SpaceNet",category:"hosting",domains:["*.nmm.de"]},{name:"Sparkflow",company:"Intercept Interactive",category:"ad",domains:["*.sparkflow.net"]},{name:"Specific Media",category:"ad",domains:["*.specificmedia.com","*.adviva.net","*.specificclick.net"]},{name:"Spicy",company:"Data-Centric Alliance",category:"ad",domains:["*.sspicy.ru"]},{name:"Spoke",category:"customer-success",domains:["*.121d8.com"]},{name:"Spongecell",category:"ad",domains:["*.spongecell.com"]},{name:"Spot.IM",category:"social",domains:["*.spot.im","*.spotim.market"]},{name:"SpotXchange",category:"ad",domains:["*.spotxcdn.com","*.spotxchange.com","*.spotx.tv"]},{name:"SpringServer",category:"ad",domains:["*.springserve.com"]},{name:"Spylight",
-category:"other",domains:["*.spylight.com"]},{name:"SreamAMG",company:"StreamAMG",category:"other",domains:["*.streamamg.com"]},{name:"StackAdapt",category:"ad",domains:["*.stackadapt.com"]},{name:"StackExchange",category:"social",domains:["*.sstatic.net"]},{name:"Stackla PTY",category:"social",domains:["*.stackla.com"]},{name:"Stailamedia",category:"ad",domains:["*.stailamedia.com"]},{name:"Stamped.io",category:"analytics",domains:["*.stamped.io"]},{name:"Starfield Services Root Certificate Authority",company:"Starfield Technologies",category:"utility",domains:["*.starfieldtech.com","ss2.us","*.ss2.us"]},{name:"Starfield Technologies",category:"utility",domains:["*.websiteprotection.com"]},{name:"StatCounter",category:"analytics",domains:["*.statcounter.com"]},{name:"Statful",category:"analytics",domains:["*.statful.com"]},{name:"Steelhouse",category:"ad",domains:["*.steelhousemedia.com"]},{name:"Steepto",category:"ad",domains:["*.steepto.com"]},{name:"StellaService",
-category:"analytics",domains:["*.stellaservice.com"]},{name:"StickyADS.tv",category:"ad",domains:["*.stickyadstv.com"]},{name:"STINGRAY",company:"FlexOne",category:"ad",domains:["*.impact-ad.jp"]},{name:"Storify",company:"Adobe Systems",category:"social",domains:["*.storify.com"]},{name:"Storm Tag Manager",company:"Rakuten",category:"tag-manager",domains:["*.stormcontainertag.com"]},{name:"Storygize",category:"ad",domains:["*.storygize.net"]},{name:"Strands",category:"utility",domains:["*.strands.com"]},{name:"StreamRail",category:"ad",domains:["*.streamrail.com","*.streamrail.net"]},{name:"StrikeAd",category:"ad",domains:["*.strikead.com"]},{name:"Struq",company:"Quantcast",category:"ad",domains:["*.struq.com"]},{name:"Ströer Digital Media",category:"ad",domains:["*.stroeerdigitalmedia.de"]},{name:"StumbleUpon",category:"content",domains:["*.stumble-upon.com","*.stumbleupon.com"]},{name:"Sub2 Technologies",category:"analytics",domains:["*.sub2tech.com"]},{name:"SublimeSkinz",
-category:"ad",domains:["*.ayads.co"]},{name:"Sumo Logic",category:"utility",domains:["*.sumologic.com"]},{name:"Sunday Times Driving",category:"content",domains:["*.driving.co.uk"]},{name:"SundaySky",category:"ad",domains:["*.sundaysky.com","dds6m601du5ji.cloudfront.net"]},{name:"Sunrise Integration",category:"utility",domains:["*.sunriseintegration.com"]},{name:"Supertool Network Technology",category:"analytics",domains:["*.miaozhen.com"]},{name:"Survata",category:"analytics",domains:["*.survata.com"]},{name:"SurveyGizmo",category:"analytics",domains:["*.surveygizmo.eu"]},{name:"SurveyMonkey",category:"analytics",domains:["*.surveymonkey.com"]},{name:"Survicate",category:"analytics",domains:["*.survicate.com"]},{name:"Sweet Tooth",category:"ad",domains:["*.sweettooth.io"]},{name:"Swiftype",category:"utility",domains:["*.swiftype.com","*.swiftypecdn.com"]},{name:"Switch Concepts",category:"ad",domains:["*.switchadhub.com"]},{name:"SwitchAds",company:"Switch Concepts",category:"ad",
-domains:["*.switchads.com"]},{name:"Swogo",category:"analytics",domains:["*.xsellapp.com"]},{name:"Swoop",category:"ad",domains:["*.swoop.com"]},{name:"Symantec",category:"utility",domains:["*.norton.com","*.symantec.com","*.symcb.com","*.symcd.com"]},{name:"Syncapse",category:"social",domains:["*.clickable.net"]},{name:"Synergetic",category:"ad",domains:["*.synergetic.ag"]},{name:"Synthetix",category:"customer-success",domains:["*.syn-finity.com","*.synthetix-ec1.com","*.synthetix.com"]},{name:"Syte",category:"other",domains:["*.syteapi.com"]},{name:"TINT",category:"content",domains:["*.71n7.com","d33w9bm0n1egwm.cloudfront.net","d36hc0p18k1aoc.cloudfront.net","d3l7tj34e9fc43.cloudfront.net"]},{name:"TNS (Kantar Group)",category:"analytics",domains:["*.tns-counter.ru"]},{name:"TRUSTe",category:"utility",domains:["*.truste.com"]},{name:"TV Genius",company:"Ericcson Media Services",category:"content",domains:["*.tvgenius.net"]},{name:"TVSquared",category:"ad",domains:["*.tvsquared.com"]
-},{name:"TVTY",category:"ad",domains:["*.distribeo.com","*.ogigl.com"]},{name:"Tactics bvba",category:"hosting",domains:["*.influid.co"]},{name:"Tag Inspector",company:"InfoTrust",category:"analytics",domains:["d22xmn10vbouk4.cloudfront.net"]},{name:"TagCommander",category:"tag-manager",domains:["*.commander1.com","*.tagcommander.com"]},{name:"Tagboard",category:"social",domains:["*.tagboard.com"]},{name:"Taggstar",company:"Taggstar UK",category:"ad",domains:["*.taggstar.com"]},{name:"Tail Target",company:"Tail",category:"ad",domains:["*.tailtarget.com"]},{name:"Tailored",category:"other",domains:["d24qm7bu56swjs.cloudfront.net","dw3vahmen1rfy.cloudfront.net","*.tailored.to"]},{name:"Taleo Enterprise Cloud Service",company:"Oracle",category:"content",domains:["*.taleo.net"]},{name:"Talkable",category:"ad",domains:["*.talkable.com","d2jjzw81hqbuqv.cloudfront.net"]},{name:"TapSense",category:"ad",domains:["*.tapsense.com"]},{name:"Tapad",category:"ad",domains:["*.tapad.com"]},{
-name:"Teads",category:"ad",domains:["*.teads.tv"]},{name:"Team Internet Tonic",company:"Team Internet",category:"ad",domains:["*.dntrax.com"]},{name:"TechTarget",category:"content",domains:["*.techtarget.com","*.ttgtmedia.com"]},{name:"Technorati",company:"Synacor",category:"ad",domains:["*.technoratimedia.com"]},{name:"Teedhaze",category:"content",domains:["*.fuel451.com"]},{name:"Tell Apart",category:"analytics",domains:["*.tellapart.com","*.tellaparts.com"]},{name:"Tencent",category:"content",domains:["*.qq.com","*.ywxi.net"]},{name:"Thanx Media",category:"utility",domains:["*.hawksearch.info"]},{name:"Thawte",category:"utility",domains:["*.thawte.com"]},{name:"Thesis",category:"analytics",homepage:"https://www.thesistesting.com/",domains:["*.ttsep.com"]},{name:"The AA",category:"ad",domains:["*.adstheaa.com"]},{name:"The ADEX",category:"ad",domains:["*.theadex.com"]},{name:"The Best Day",category:"social",domains:["*.thebestday.com"]},{name:"The Filter",company:"Exabre",
-category:"analytics",domains:["*.thefilter.com"]},{name:"The Guardian",category:"analytics",domains:["*.ophan.co.uk"]},{name:"The Hut Group",category:"content",domains:["*.thcdn.com"]},{name:"The Numa Group",category:"other",domains:["*.hittail.com"]},{name:"The Publisher Desk",category:"ad",domains:["*.206ads.com","*.publisherdesk.com"]},{name:"The Sydney Morning Herald",company:"Fairfax Media",category:"content",domains:["*.smh.com.au"]},{name:"The Wall Street Jounal",category:"content",domains:["*.wsj.net"]},{name:"The Wall Street Journal",category:"content",domains:["*.marketwatch.com"]},{name:"TheFind",category:"content",domains:["*.thefind.com"]},{name:"Thinglink",category:"utility",domains:["*.thinglink.com"]},{name:"Thirdpresence",category:"ad",domains:["*.thirdpresence.com"]},{name:"ThreatMetrix",category:"utility",domains:["*.online-metrix.net"]},{name:"Throtle",homepage:"https://throtle.io/",category:"analytics",domains:["*.thrtle.com","*.v12group.com"]},{
-name:"TicketMaster",category:"content",domains:["*.t-x.io","*.tmcs.net"]},{name:"TikTok",company:"ByteDance Ltd",homepage:"https://www.tiktok.com/en/",category:"social",domains:["*.tiktok.com","*.ipstatp.com"]},{name:"Tidio Live Chat",company:"Tidio",homepage:"https://www.tidiochat.com/en/",category:"customer-success",domains:["*.tidiochat.com"]},{name:"Tiledesk Live Chat",company:"Tiledesk SRL",homepage:"https://www.tiledesk.com/",category:"customer-success",domains:["*.tiledesk.com"]},{name:"Time",category:"content",domains:["*.timeinc.net"]},{name:"Time2Perf",category:"ad",domains:["*.time2perf.com"]},{name:"TinyURL",category:"utility",domains:["*.tinyurl.com"]},{name:"Tivo",category:"analytics",domains:["*.rovicorp.com"]},{name:"Tom&Co",category:"hosting",domains:["*.tomandco.uk"]},{name:"Toms Native Ads",company:"Purch",category:"ad",domains:["*.natoms.com"]},{name:"ToneMedia",category:"ad",domains:["*.clickfuse.com"]},{name:"Tonic",company:"Team Internet",category:"ad",
-domains:["*.dntx.com"]},{name:"Touch Commerce",category:"customer-success",domains:["*.inq.com","*.touchcommerce.com"]},{name:"ToutApp",category:"ad",domains:["*.toutapp.com"]},{name:"TraceView",company:"Solarwinds",category:"analytics",domains:["*.tracelytics.com","d2gfdmu30u15x7.cloudfront.net"]},{name:"TrackJS",category:"analytics",domains:["*.trackjs.com","d2zah9y47r7bi2.cloudfront.net"]},{name:"Tradedoubler",category:"ad",domains:["*.pvnsolutions.com","*.tradedoubler.com"]},{name:"Tradelab",category:"ad",domains:["*.tradelab.fr"]},{name:"TrafficFactory",category:"ad",domains:["*.trafficfactory.biz"]},{name:"TrafficHunt",category:"ad",domains:["*.traffichunt.com"]},{name:"TrafficStars",category:"ad",domains:["*.trafficstars.com","*.tsyndicate.com"]},{name:"Transifex",category:"utility",domains:["*.transifex.com"]},{name:"Travelex",category:"utility",domains:["*.travelex.net","*.travelex.co.uk"]},{name:"Travelocity Canada",company:"Travelocity",category:"content",
-domains:["*.travelocity.ca"]},{name:"Travelocity USA",company:"Travelocity",category:"content",domains:["*.travelocity.com"]},{name:"Travelzoo",category:"content",domains:["*.travelzoo.com"]},{name:"Treasure Data",category:"analytics",domains:["*.treasuredata.com"]},{name:"Tremor Video",category:"ad",domains:["*.tremorhub.com","*.videohub.tv"]},{name:"Trialfire",category:"analytics",domains:["*.trialfire.com"]},{name:"Tribal Fusion",company:"Exponential Interactive",category:"ad",domains:["*.tribalfusion.com"]},{name:"Triblio",category:"marketing",domains:["*.tribl.io"]},{name:"Triggered Messaging",company:"Fresh Relevance",category:"ad",domains:["*.triggeredmessaging.com"]},{name:"Trinity Mirror",category:"content",domains:["*.mirror.co.uk"]},{name:"Trinity Mirror Digital Media",category:"social",domains:["*.tm-aws.com","*.icnetwork.co.uk"]},{name:"TripAdvisor",category:"content",
-domains:["*.jscache.com","*.tacdn.com","*.tamgrt.com","*.tripadvisor.com","*.viator.com","*.tripadvisor.co.uk"]},{name:"TripleLift",category:"ad",domains:["*.3lift.com"]},{name:"Tru Optik",category:"ad",domains:["*.truoptik.com"]},{name:"TruConversion",category:"analytics",domains:["*.truconversion.com"]},{name:"Trueffect",category:"marketing",domains:["*.adlegend.com"]},{name:"Truefit",category:"analytics",domains:["*.truefitcorp.com"]},{name:"Trust Guard",category:"utility",domains:["*.trust-guard.com"]},{name:"Trust Pilot",category:"analytics",domains:["*.trustpilot.com"]},{name:"Amazon Trust Services",company:"Amazon",category:"utility",domains:["*.amazontrust.com","o.ss2.us"]},{name:"Google Trust Services",company:"Google",category:"utility",domains:["*.pki.goog"]},{name:"Let's Encrypt",homepage:"https://letsencrypt.org/",category:"utility",domains:["*.letsencrypt.org"]},{name:"TrustX",category:"ad",domains:["*.trustx.org"]},{name:"Trusted Shops",category:"utility",
-domains:["*.trustedshops.com"]},{name:"Trustev",company:"TransUnion",category:"utility",domains:["*.trustev.com"]},{name:"Trustwave",category:"utility",domains:["*.trustwave.com"]},{name:"Tryzens TradeState",company:"Tryzens",category:"analytics",domains:["*.tryzens-analytics.com"]},{name:"TubeMogul",category:"ad",domains:["*.tubemogul.com"]},{name:"Turn",category:"ad",domains:["*.turn.com"]},{name:"Tutorialize",category:"customer-success",domains:["*.tutorialize.me"]},{name:"Twenga",category:"content",domains:["*.twenga.fr","*.c4tw.net","*.twenga.co.uk"]},{name:"Twitframe",company:"Superblock",category:"utility",domains:["*.twitframe.com"]},{name:"Twitter Online Conversion Tracking",company:"Twitter",category:"ad",domains:["*.ads-twitter.com","analytics.twitter.com"]},{name:"Twitter Short URL",company:"Twitter",category:"social",domains:["*.t.co"]},{name:"Twyn Group",category:"ad",domains:["*.twyn.com"]},{name:"Tynt",company:"33 Across",category:"ad",domains:["*.tynt.com"]},{
-name:"Typepad",category:"hosting",domains:["*.typepad.com"]},{name:"TyrbooBytes",category:"utility",domains:["*.turbobytes.net"]},{name:"UPS i-parcel",company:"UPS",category:"other",domains:["*.i-parcel.com"]},{name:"US Media Consulting",category:"ad",domains:["*.mediade.sk"]},{name:"Ubertags",category:"tag-manager",domains:["*.ubertags.com"]},{name:"Umbel",category:"analytics",domains:["*.umbel.com"]},{name:"Unanimis",company:"Switch",category:"ad",domains:["*.unanimis.co.uk"]},{name:"Unbounce",category:"ad",domains:["*.ubembed.com","*.unbounce.com","d2xxq4ijfwetlm.cloudfront.net","d9hhrg4mnvzow.cloudfront.net"]},{name:"Underdog Media",category:"ad",domains:["*.underdog.media","*.udmserve.net"]},{name:"Understand Digital",category:"ad",domains:["*.redirecting2.net"]},{name:"Undertone",company:"Perion",category:"ad",domains:["*.legolas-media.com"]},{name:"Unidays",category:"ad",domains:["*.myunidays.com","*.unidays.world"]},{name:"Uniqodo",category:"ad",domains:["*.uniqodo.com"]},{
-name:"Unite",category:"ad",domains:["*.uadx.com"]},{name:"United Card Services",category:"utility",domains:["*.ucs.su"]},{name:"United Internet",category:"hosting",domains:["*.uicdn.com"]},{name:"United Internet Media",category:"ad",domains:["*.ui-portal.de"]},{name:"United Internet Media AG",category:"hosting",domains:["*.tifbs.net","*.uicdn.net","*.uimserv.net"]},{name:"Unknown",category:"other",domains:[]},{name:"Unruly Media",category:"ad",domains:["*.unrulymedia.com"]},{name:"UpBuild",category:"ad",domains:["*.upbuild.io"]},{name:"UpSellit",category:"analytics",domains:["*.upsellit.com"]},{name:"Upland Software",category:"hosting",domains:["*.clickability.com"]},{name:"Airship",category:"marketing",domains:["*.urbanairship.com","*.aswpsdkus.com"]},{name:"UsabilityTools",category:"analytics",domains:["*.usabilitytools.com"]},{name:"Usablenet.net",category:"utility",domains:["*.usablenet.net"]},{name:"Use It Better",category:"analytics",domains:["*.useitbetter.com"]},{
-name:"User Replay",category:"analytics",domains:["*.userreplay.net"]},{name:"UserReport",category:"analytics",domains:["*.userreport.com"]},{name:"Userneeds",category:"analytics",domains:["*.userneeds.dk"]},{name:"Userzoom",category:"analytics",domains:["*.userzoom.com"]},{name:"V12 Retail Finance",category:"utility",domains:["*.v12finance.com"]},{name:"Vacaciones eDreams",category:"content",domains:["*.odistatic.net"]},{name:"Varick Media Management",category:"ad",domains:["*.vmmpxl.com"]},{name:"Vdopia Chocolate",company:"Vdopia",category:"ad",domains:["*.vdopia.com"]},{name:"Ve",company:"Ve",homepage:"https://www.ve.com/",category:"marketing",domains:["*.veinteractive.com","*.ve.com"]},{name:"Ve Interactive",company:"Ve",category:"ad",domains:["*.vepxl1.net","*.adgenie.co.uk"]},{name:"Vee24",category:"customer-success",domains:["*.vee24.com"]},{name:"Veeseo",category:"content",domains:["*.veeseo.com"]},{name:"Venatus Media",category:"marketing",
-domains:["*.alcvid.com","*.venatusmedia.com"]},{name:"Veoxa",category:"ad",domains:["*.veoxa.com"]},{name:"Vergic AB",category:"customer-success",domains:["*.psplugin.com"]},{name:"Vergic Engage Platform",company:"Vergic",category:"customer-success",domains:["*.vergic.com"]},{name:"Verisign (Symantec)",category:"utility",domains:["*.verisign.com"]},{name:"Verizon",category:"utility",domains:["*.public-trust.com"]},{name:"Verizon Digital Media CDN",homepage:"https://www.verizondigitalmedia.com/",category:"cdn",domains:["*.edgecastcdn.net","*.edgecastdns.net"]},{name:"Verizon Uplynk",company:"Verizon",category:"content",domains:["*.uplynk.com"]},{name:"Vero",company:"Semblance",category:"ad",domains:["*.getvero.com","d3qxef4rp70elm.cloudfront.net"]},{name:"VertaMedia",category:"ad",domains:["*.vertamedia.com"]},{name:"Vertical Mass",category:"ad",domains:["*.vmweb.net"]},{name:"Vestorly",category:"ad",domains:["*.oodalab.com"]},{name:"Vextras",category:"other",domains:["*.vextras.com"]
-},{name:"Viacom",category:"content",domains:["*.mtvnservices.com"]},{name:"Vibrant Media",category:"ad",domains:["*.intellitxt.com","*.picadmedia.com"]},{name:"VidPulse",category:"analytics",domains:["*.vidpulse.com"]},{name:"Video Media Groep",category:"ad",domains:["*.vmg.host","*.inpagevideo.nl"]},{name:"VideoHub",company:"Tremor Video",category:"ad",domains:["*.scanscout.com"]},{name:"Videology",category:"ad",domains:["*.tidaltv.com"]},{name:"Vidible",category:"ad",domains:["*.vidible.tv"]},{name:"VigLink",category:"ad",domains:["*.viglink.com"]},{name:"Vindico",company:"Viant",category:"ad",domains:["*.vindicosuite.com"]},{name:"Viocorp International",category:"content",domains:["*.vioapi.com"]},{name:"ViralNinjas",category:"ad",domains:["*.viralninjas.com"]},{name:"Virool",category:"ad",domains:["*.virool.com"]},{name:"Virtual Earth",company:"Microsoft",category:"utility",domains:["*.virtualearth.net"]},{name:"Visely",company:"Visely",category:"other",
-homepage:"https://visely.io/",domains:["*.visely.io"]},{name:"VisScore",category:"analytics",domains:["*.visscore.com","d2hkbi3gan6yg6.cloudfront.net"]},{name:"Visible Measures",category:"ad",domains:["*.visiblemeasures.com"]},{name:"Visual Studio",company:"Microsoft",category:"utility",domains:["*.visualstudio.com"]},{name:"VisualDNA",category:"ad",domains:["*.visualdna.com"]},{name:"VisualVisitor",category:"ad",domains:["*.id-visitors.com"]},{name:"Vivocha S.p.A",category:"customer-success",domains:["*.vivocha.com"]},{name:"Vizu (Nielsen)",category:"analytics",domains:["*.vizu.com"]},{name:"Vizury",category:"ad",domains:["*.vizury.com"]},{name:"VoiceFive",category:"analytics",domains:["*.voicefive.com"]},{name:"Volvelle",company:"Optomaton",category:"ad",domains:["*.volvelle.tech"]},{name:"VouchedFor",category:"analytics",domains:["*.vouchedfor.co.uk"]},{name:"WARPCACHE",category:"utility",domains:["*.warpcache.net"]},{name:"WISHLIST",company:"Shopapps",category:"social",
-domains:["*.shopapps.in"]},{name:"WP Engine",category:"hosting",domains:["*.wpengine.com"]},{name:"WalkMe",category:"customer-success",domains:["*.walkme.com"]},{name:"Watching That",category:"other",domains:["*.watchingthat.com"]},{name:"Wayfair",category:"analytics",domains:["*.wayfair.com"]},{name:"Web CEO",category:"other",domains:["*.websiteceo.com"]},{name:"Web Dissector",company:"Beijing Gridsum Technologies",category:"analytics",domains:["*.gridsumdissector.com","*.webdissector.com"]},{name:"Web Forensics",category:"analytics",domains:["*.webforensics.co.uk"]},{name:"Web Security and Performance",company:"NCC Group",category:"utility",domains:["*.nccgroup.trust"]},{name:"WebEngage",category:"customer-success",domains:["*.webengage.co","*.webengage.com","d23nd6ymopvz52.cloudfront.net","d3701cc9l7v9a6.cloudfront.net"]},{name:"WebInsight",company:"dotMailer",category:"analytics",domains:["*.trackedlink.net","*.trackedweb.net"]},{name:"WebPageOne Solutions",category:"other",
-domains:["*.webpageone.com"]},{name:"WebSpectator",category:"ad",domains:["*.webspectator.com"]},{name:"WebTuna",company:"Application Performance",category:"analytics",domains:["*.webtuna.com"]},{name:"WebVideoCore",company:"StreamingVideoProvider",category:"content",domains:["*.webvideocore.net"]},{name:"WebWombat",category:"utility",domains:["*.ic.com.au"]},{name:"Webcollage",category:"customer-success",domains:["*.webcollage.net"]},{name:"Webcore",category:"ad",domains:["*.onefeed.co.uk"]},{name:"Webkul",company:"Webkul Software",category:"utility",domains:["*.webkul.com"]},{name:"Webmarked",category:"utility",domains:["*.webmarked.net"]},{name:"Weborama",category:"ad",domains:["*.weborama.com","*.weborama.fr"]},{name:"WebpageFX",category:"ad",domains:["*.leadmanagerfx.com"]},{name:"Webphone",company:"IP WEB SERVICES",category:"customer-success",domains:["*.webphone.net"]},{name:"Webselect selectcommerce",company:"Webselect Internet",category:"hosting",domains:["*.webselect.net"]},{
-name:"Webthinking",category:"hosting",domains:["*.webthinking.co.uk"]},{name:"Webtrekk",category:"analytics",domains:["*.wbtrk.net","*.webtrekk-asia.net","*.webtrekk.net","*.wt-eu02.net","*.wt-safetag.com"]},{name:"Webtrends",category:"analytics",domains:["*.webtrends.com","*.webtrendslive.com","d1q62gfb8siqnm.cloudfront.net"]},{name:"Webtype",category:"cdn",domains:["*.webtype.com"]},{name:"White Ops",category:"utility",domains:["*.acexedge.com","*.tagsrvcs.com"]},{name:"Whitespace",category:"ad",domains:["*.whitespacers.com"]},{name:"WhosOn Live Chat Software",category:"customer-success",domains:["*.whoson.com"]},{name:"Wibbitz",category:"other",domains:["*.wibbitz.com"]},{name:"Wide Area Communications",category:"hosting",domains:["*.widearea.co.uk"]},{name:"WideOrbit",category:"marketing",domains:["*.admaym.com"]},{name:"William Reed",category:"content",domains:["*.wrbm.com"]},{name:"WillyFogg.com",category:"content",domains:["*.willyfogg.com"]},{name:"Windows",company:"Microsoft",
-category:"utility",domains:["*.windowsupdate.com"]},{name:"WisePops",category:"utility",domains:["*.wisepops.com"]},{name:"Wishlist King",company:"Appmate",category:"other",homepage:"https://appmate.io/",domains:["*.appmate.io"]},{name:"Wishpond Technologies",category:"marketing",domains:["*.wishpond.com","*.wishpond.net"]},{name:"WizRocket Technologies",category:"analytics",domains:["*.wzrkt.com"]},{name:"Woopra",category:"analytics",domains:["*.woopra.com"]},{name:"Woosmap",category:"utility",domains:["*.woosmap.com"]},{name:"WorkCast",category:"hosting",domains:["*.workcast.net"]},{name:"World News Media",category:"content",domains:["*.wnmedia.co.uk"]},{name:"Worldpay",category:"utility",domains:["*.worldpay.com"]},{name:"Wow Analytics",category:"analytics",domains:["*.wowanalytics.co.uk"]},{name:"Wowcher",category:"ad",domains:["*.wowcher.co.uk"]},{name:"Wufoo",category:"utility",domains:["*.wufoo.com"]},{name:"Wunderkind",category:"marketing",homepage:"https://www.wunderkind.co/",
-domains:["*.bounceexchange.com","*.bouncex.net","*.wknd.ai","*.cdnbasket.net","*.cdnwidget.com"]},{name:"Wyng",category:"ad",domains:["*.offerpop.com"]},{name:"XMLSHOP",category:"hosting",domains:["*.xmlshop.biz"]},{name:"XiTi",company:"AT Internet",category:"analytics",domains:["*.xiti.com","*.aticdn.net"],homepage:"https://www.atinternet.com/en/"},{name:"YUDU",category:"content",domains:["*.yudu.com"]},{name:"Yahoo! Ad Exchange",company:"Yahoo!",category:"ad",domains:["*.yieldmanager.com","*.browsiprod.com"]},{name:"Yahoo! JAPAN Ads",company:"Yahoo! JAPAN",category:"ad",homepage:"https://marketing.yahoo.co.jp/service/yahooads/",domains:["yads.c.yimg.jp","s.yimg.jp","b92.yahoo.co.jp"]},{name:"Yahoo! Tag Manager",company:"Yahoo! JAPAN",category:"tag-manager",homepage:"https://marketing.yahoo.co.jp/service/tagmanager/",domains:["*.yjtag.jp"]},{name:"Yahoo! Small Business",company:"Yahoo!",category:"hosting",domains:["*.aabacosmallbusiness.com"]},{name:"Yellow Robot",category:"ad",
-domains:["*.backinstock.org"]},{name:"YieldPartners",category:"ad",domains:["*.yieldpartners.com"]},{name:"Yieldbot",category:"ad",domains:["*.yldbt.com"]},{name:"Yieldify",category:"ad",domains:["*.yieldify.com","*.yieldifylabs.com","d33wq5gej88ld6.cloudfront.net","dwmvwp56lzq5t.cloudfront.net"]},{name:"Yieldlab",category:"ad",domains:["*.yieldlab.net"]},{name:"Yieldmo",category:"ad",domains:["*.yieldmo.com"]},{name:"Yieldr",category:"ad",domains:["*.254a.com"]},{name:"Yo",category:"utility",domains:["*.yopify.com"]},{name:"YoYo",category:"utility",domains:["*.goadservices.com"]},{name:"Yotpo",homepage:"https://www.yotpo.com/",category:"marketing",domains:["*.yotpo.com","*.swellrewards.com"]},{name:"Yottaa",category:"hosting",domains:["*.yottaa.com","*.yottaa.net"]},{name:"YourAmigo",category:"utility",domains:["*.youramigo.com"]},{name:"YuMe",category:"ad",domains:["*.yume.com","*.yumenetworks.com"]},{name:"Yummley",category:"other",domains:["*.yummly.com"]},{name:"ZEDO",
-category:"ad",domains:["*.zedo.com"]},{name:"Zafu",category:"analytics",domains:["*.zafu.com"]},{name:"Zaius",category:"ad",domains:["*.zaius.com"]},{name:"Zamplus ad",category:"ad",domains:["*.zampda.net"]},{name:"Zanox",category:"ad",domains:["*.zanox.com","*.zanox.ws"]},{name:"Zapper",category:"utility",domains:["*.zapper.com"]},{name:"Zarget",category:"analytics",domains:["*.zarget.com"]},{name:"Zemanta",category:"ad",domains:["*.zemanta.com"]},{name:"Zen Internet",category:"other",domains:["*.zyen.com"]},{name:"Zenovia Digital Exchange",category:"ad",domains:["*.rhythmxchange.com","*.zenoviaexchange.com"]},{name:"ZergNet",category:"content",domains:["*.zergnet.com"]},{name:"Zerogrey",category:"hosting",domains:["*.zerogrey.com"]},{name:"Ziff Davis Tech",category:"ad",domains:["*.adziff.com","*.zdbb.net"]},{name:"Zmags",category:"marketing",domains:["*.zmags.com"]},{name:"Zolando",category:"content",domains:["*.ztat.net"]},{name:"Zoover",category:"analytics",
-domains:["*.zoover.nl","*.zoover.co.uk"]},{name:"Zopim",category:"customer-success",domains:["*.zopim.io"]},{name:"[24]7",category:"customer-success",domains:["*.247-inc.net","*.247inc.net","d1af033869koo7.cloudfront.net"]},{name:"adKernel",category:"ad",domains:["*.adkernel.com"]},{name:"adMarketplace",company:"AMPexchange",category:"ad",domains:["*.ampxchange.com","*.admarketplace.net"]},{name:"addtocalendar",category:"utility",domains:["*.addtocalendar.com"]},{name:"adnanny",category:"ad",domains:["*.adserver01.de"]},{name:"affilinet",category:"ad",domains:["*.reussissonsensemble.fr","*.successfultogether.co.uk"]},{name:"audioBoom",category:"social",domains:["*.audioboom.com","*.audioboo.fm"]},{name:"bPay by Barclaycard",company:"Barclays Bank",category:"utility",domains:["*.bpay.co.uk"]},{name:"bRealTime",category:"ad",domains:["*.brealtime.com"]},{name:"bd4travel",category:"analytics",domains:["*.bd4travel.com"]},{name:"bizinformation-VOID",company:"bizinformation",
-category:"analytics",domains:["*.bizinformation.org"]},{name:"carrot",category:"social",domains:["*.sharebutton.co"]},{name:"cloudIQ",category:"analytics",domains:["*.cloud-iq.com"]},{name:"comScore",category:"analytics",domains:["*.adxpose.com","*.comscore.com","*.sitestat.com","*.zqtk.net"]},{name:"content.ad",category:"ad",domains:["*.content.ad"]},{name:"d3 Media",company:"d3 Technologies",category:"other",domains:["*.d3sv.net"]},{name:"dexiMEDIA",category:"ad",domains:["*.deximedia.com"]},{name:"dianomi",category:"ad",domains:["*.dianomi.com","*.dianomioffers.co.uk"]},{name:"donReach",category:"social",domains:["*.donreach.com"]},{name:"dotMailer",category:"ad",domains:["*.dmtrk.com","*.dotmailer.com","*.emlfiles.com"]},{name:"dotMailer Surveys",company:"dotMailer",category:"analytics",domains:["*.dotmailer-surveys.com"]},{name:"dstillery",category:"ad",domains:["*.dstillery.com","*.media6degrees.com"]},{name:"eBay",category:"ad",
-domains:["*.ebay.com","*.ebayimg.com","*.fetchback.com"]},{name:"eBay Enterprise",category:"hosting",domains:["*.csdata1.com","*.gsipartners.com"]},{name:"eBuzzing",company:"Teads Managed Services",category:"ad",domains:["*.ebz.io"]},{name:"eDigital Research",category:"customer-success",domains:["*.edigitalresearch.com","*.edigitalsurvey.com","*.edrcdn.com","*.ecustomeropinions.com"]},{name:"eGain",category:"analytics",domains:["*.analytics-egain.com","*.egain.com"]},{name:"eHost",category:"hosting",domains:["*.ehosts.net"]},{name:"eKomi",category:"analytics",domains:["*.ekomi.com","*.ekomi.de"]},{name:"eWAY",company:"Web Active Pty",category:"utility",domains:["*.eway.com.au"]},{name:"eXTReMe digital",category:"analytics",domains:["*.extreme-dm.com"]},{name:"eXelate",category:"ad",domains:["*.exelator.com"]},{name:"ecommercefeed.net",category:"marketing",domains:["*.ecommercefeed.net"]},{name:"engage:BDR",category:"ad",domains:["*.bnmla.com","*.ebdr3.com"]},{name:"epago",
-category:"ad",domains:["*.adaos-ads.net"]},{name:"epoq internet services",category:"analytics",domains:["*.epoq.de"]},{name:"etouches",category:"hosting",domains:["*.etouches.com"]},{name:"etracker",category:"analytics",domains:["*.etracker.com","*.etracker.de"]},{name:"everestads.com",category:"content",domains:["*.verestads.net"]},{name:"exebid.DCA",company:"Data-Centric Alliance",category:"ad",domains:["*.exe.bid"]},{name:"eyeReturn Marketing",category:"marketing",domains:["*.eyereturn.com"]},{name:"feedoptimise",category:"hosting",domains:["*.feedoptimise.com","d1w78njrm56n7g.cloudfront.net"]},{name:"fifty-five",category:"ad",domains:["*.55labs.com"]},{name:"fluct",category:"ad",domains:["*.adingo.jp"]},{name:"freegeoip.net",company:"(community-funded)",category:"utility",domains:["*.freegeoip.net"]},{name:"freewheel.tv",category:"content",domains:["*.fwmrm.net"]},{name:"gnatta",category:"customer-success",domains:["*.gnatta.com"]},{name:"home.pl",category:"hosting",
-domains:["*.nscontext.eu"]},{name:"hyfn",category:"ad",domains:["*.hyfn.com"]},{name:"iAdvize SAS",category:"customer-success",domains:["*.iadvize.com"]},{name:"iBillboard",category:"ad",domains:["*.ibillboard.com"]},{name:"iCrossing",category:"ad",domains:["*.ic-live.com"]},{name:"iFactory",company:"RDW Group",category:"hosting",domains:["*.ifactory.com"]},{name:"iGoDigital",category:"analytics",domains:["*.igodigital.com"]},{name:"iJento",company:"Fopsha",category:"ad",domains:["*.ijento.com"]},{name:"iPage",category:"hosting",domains:["*.ipage.com"]},{name:"iPerceptions",category:"customer-success",domains:["*.iperceptions.com"]},{name:"iTunes",company:"Apple",category:"content",domains:["*.mzstatic.com"]},{name:"imgix",company:"Zebrafish Labs",category:"utility",domains:["*.imgix.net"]},{name:"infogr.am",category:"utility",domains:["*.infogr.am","*.jifo.co"]},{name:"iotec",category:"analytics",domains:["*.dsp.io"]},{name:"iovation",category:"utility",domains:["*.iesnare.com"]},{
-name:"ipinfo.io",category:"utility",domains:["*.ipinfo.io"]},{name:"issuu",category:"content",domains:["*.issuu.com","*.isu.pub"]},{name:"iubenda",category:"utility",domains:["*.iubenda.com"]},{name:"j2 Cloud Services",category:"ad",domains:["*.campaigner.com"]},{name:"jsonip.com",category:"analytics",domains:["*.jsonip.com"]},{name:"linkpulse",category:"analytics",domains:["*.lp4.io"]},{name:"loGo_net",category:"analytics",domains:["*.logo-net.co.uk"]},{name:"mainADV",category:"ad",domains:["*.httptrack.com","*.solocpm.com"]},{name:"mbr targeting",category:"ad",domains:["*.m6r.eu"]},{name:"media.ventive",category:"ad",domains:["*.contentspread.net"]},{name:"metrigo",category:"ad",domains:["*.metrigo.com"]},{name:"minicabit.com",category:"content",domains:["*.minicabit.com"]},{name:"mobiManage",category:"hosting",domains:["*.mobimanage.com"]},{name:"moving-pictures",category:"other",domains:["*.moving-pictures.biz","*.v6-moving-pictures.com","*.vtstat.com","*.moving-pictures.de"]},{
-name:"my6sense",category:"ad",domains:["*.mynativeplatform.com"]},{name:"myThings",category:"ad",domains:["*.mythings.com","*.mythingsmedia.net"]},{name:"mymovies",category:"content",domains:["*.mymovies.net"]},{name:"nRelate-VOID",company:"nRelate",category:"content",domains:["*.nrelate.com"]},{name:"nToklo",category:"analytics",domains:["*.ntoklo.com"]},{name:"neXeps",category:"ad",domains:["*.nexeps.com"]},{name:"ninemsn Pty.",category:"utility",domains:["*.ninemsn.com.au"]},{name:"nugg.ad",category:"ad",domains:["*.nuggad.net"]},{name:"numero interactive",company:"numero",category:"ad",domains:["*.numerointeractive.com"]},{name:"optMD",company:"Optimax Media Delivery",category:"ad",domains:["*.optmd.com"]},{name:"otracking.com",category:"analytics",domains:["*.otracking.com"]},{name:"paysafecard",company:"Paysafe Group",category:"utility",domains:["*.paysafecard.com"]},{name:"piano",category:"ad",domains:["*.npttech.com","*.tinypass.com"]},{name:"piclike",category:"ad",
-domains:["*.piclike.us"]},{name:"placehold.it",category:"utility",domains:["*.placehold.it"]},{name:"plista",category:"ad",domains:["*.plista.com"]},{name:"prebid.org",category:"utility",domains:["*.prebid.org"]},{name:"reEmbed",category:"other",domains:["*.reembed.com"]},{name:"reddit",category:"social",domains:["*.reddit.com","*.redditstatic.com"]},{name:"rewardStyle.com",category:"ad",domains:["*.rewardstyle.com"]},{name:"rss2json",category:"utility",domains:["*.rss2json.com"]},{name:"sage Pay",company:"Sage Pay Europe",category:"utility",domains:["*.sagepay.com"]},{name:"section.io",category:"utility",domains:["*.squixa.net"]},{name:"smartclip",category:"ad",domains:["*.smartclip.net"]},{name:"sovrn",category:"ad",domains:["*.lijit.com"]},{name:"stackpile.io",company:"StackPile",category:"tag-manager",domains:["*.stackpile.io"]},{name:"template-help.com",category:"hosting",domains:["*.template-help.com"]},{name:"test",company:"test only",category:"other",
-domains:["*.testtesttest.com"]},{name:"trueAnthem",category:"social",domains:["*.tru.am"]},{name:"tweetmeme-VOID",company:"tweetmeme",category:"analytics",domains:["*.tweetmeme.com"]},{name:"uLogin",category:"other",domains:["*.ulogin.ru"]},{name:"uLogix",category:"ad",domains:["*.ulogix.ru"]},{name:"ucfunnel ucX",company:"ucfunnel",category:"ad",domains:["*.aralego.com"]},{name:"up-value",category:"ad",domains:["*.up-value.de"]},{name:"wywy",category:"ad",domains:["*.wywy.com","*.wywyuserservice.com"]},{name:"CDK Dealer Management",company:"CDK Global",homepage:"https://www.cdkglobal.com/us",category:"hosting",domains:["*.assets-cdk.com"]},{name:"fam",company:"Fing Co Ltd.",homepage:"http://admin.fam-ad.com/report/",category:"ad",domains:["*.fam-ad.com"]},{name:"zypmedia",category:"ad",domains:["*.extend.tv"]},{name:"codigo",homepage:"https://www.codigo.se",category:"analytics",domains:["*.codigo.se"]},{name:"Playground",homepage:"https://playground.xyz",category:"ad",
-domains:["*.playground.xyz"]},{name:"RAM",homepage:"https://www2.rampanel.com/",category:"analytics",domains:["*.rampanel.com"]},{name:"Adition",homepage:"https://www.adition.com",category:"ad",domains:["*.adition.com"]},{name:"Widespace",homepage:"https://www.widespace.com",category:"ad",domains:["*.widespace.com"]},{name:"Colpirio",homepage:"https://www.widespace.com",category:"analytics",domains:["*.colpirio.com"]},{name:"Brandmetrics",homepage:"https://www.brandmetrics.com",category:"analytics",domains:["*.brandmetrics.com"]},{name:"EasyAd",homepage:"https://web.easy-ads.com/",category:"ad",domains:["*.easy-ads.com"]},{name:"Glimr",homepage:"https://glimr.io/",category:"analytics",domains:["*.glimr.io"]},{name:"Webtreck",homepage:"https://www.webtrekk.com/en/home/",category:"analytics",domains:["*.wcfbc.net"]},{name:"DigiTrust",homepage:"http://www.digitru.st/",category:"analytics",domains:["*.digitru.st"]},{name:"Kantar Sifo",homepage:"https://www.kantarsifo.se",
-category:"analytics",domains:["*.research-int.se"]},{name:"Concert",homepage:"https://concert.io/",category:"ad",domains:["*.concert.io"]},{name:"Emerse",homepage:"https://www.emerse.com/",category:"ad",domains:["*.emerse.com"]},{name:"Iterate",homepage:"https://iteratehq.com/",category:"analytics",domains:["*.iteratehq.com"]},{name:"Cookiebot",homepage:"https://www.cookiebot.com/",category:"utility",domains:["*.cookiebot.com"]},{name:"Netlify",homepage:"https://www.netlify.com/",category:"utility",domains:["*.netlify.com","*.netlifyusercontent.com"]},{name:"Scroll",homepage:"https://scroll.com/",category:"utility",domains:["*.scroll.com"]},{name:"Consumable",homepage:"https://consumable.com/",category:"ad",domains:["*.serverbid.com"]},{name:"DMD Marketing",homepage:"https://www.dmdconnects.com/",category:"ad",domains:["*.medtargetsystem.com"]},{name:"Catchpoint",homepage:"https://www.catchpoint.com/",category:"analytics",domains:["*.3gl.net"]},{name:"Terminus",
-homepage:"https://terminus.com/",category:"ad",domains:["*.terminus.services"]},{name:"Acceptable Ads",homepage:"https://acceptableads.com/",category:"ad",domains:["*.aaxads.com","*.aaxdetect.com"]},{name:"ClearBrain",homepage:"https://www.clearbrain.com/",category:"analytics",domains:["*.clearbrain.com"]},{name:"Optanon",homepage:"https://www.cookielaw.org/",category:"consent-provider",domains:["*.onetrust.com","*.cookielaw.org"]},{name:"TrustArc",homepage:"https://www.trustarc.com/",category:"utility",domains:["*.trustarc.com"]},{name:"iSpot.tv",homepage:"https://www.ispot.tv/",category:"ad",domains:["*.ispot.tv"]},{name:"RevJet",homepage:"https://www.revjet.com/",category:"ad",domains:["*.revjet.com"]},{name:"atlasRTX",homepage:"https://www.atlasrtx.com/",category:"customer-success",domains:["*.atlasrtx.com"]},{name:"ContactAtOnce",homepage:"https://www.contactatonce.com/",category:"customer-success",domains:["*.contactatonce.com"]},{name:"Algolia",
-homepage:"https://www.algolia.com/",category:"utility",domains:["*.algolianet.com","*.algolia.net","*.algolia.io"]},{name:"EMX Digital",homepage:"https://emxdigital.com",category:"ad",domains:["*.emxdgt.com"]},{name:"Moxie",homepage:"https://www.gomoxie.com/",category:"utility",domains:["*.gomoxie.solutions"]},{name:"Scripps Network Digital",homepage:"https://www.scrippsnetworksdigital.com/",category:"ad",domains:["*.snidigital.com"]},{name:"TurnTo",homepage:"https://www.turntonetworks.com/",category:"utility",domains:["*.turnto.com"]},{name:"Quantum Metric",homepage:"https://www.quantummetric.com/",category:"analytics",domains:["*.quantummetric.com"]},{name:"Carbon Ads",homepage:"https://www.carbonads.net/",category:"ad",domains:["*.carbonads.net","*.carbonads.com"]},{name:"Ably",homepage:"https://www.ably.io/",category:"utility",domains:["*.ably.io"]},{name:"Sectigo",homepage:"https://sectigo.com/",category:"utility",domains:["*.sectigo.com"]},{name:"Specless",
-homepage:"https://gospecless.com/",category:"ad",domains:["*.specless.tech"]},{name:"Loggly",homepage:"https://www.loggly.com/",category:"analytics",domains:["*.loggly.com","d9jmv9u00p0mv.cloudfront.net"]},{name:"Intent Media",homepage:"https://intent.com/",category:"ad",domains:["*.intentmedia.net"]},{name:"Supership",homepage:"https://supership.jp/",category:"ad",domains:["*.socdm.com"]},{name:"F@N Communications",homepage:"https://www.fancs.com/",category:"ad",domains:["*.ladsp.com"]},{name:"Vidyard",homepage:"https://www.vidyard.com/",category:"utility",domains:["*.vidyard.com"]},{name:"RapidSSL",homepage:"https://www.rapidssl.com/",category:"utility",domains:["*.rapidssl.com"]},{name:"Coherent Path",homepage:"https://coherentpath.com/",category:"utility",domains:["*.coherentpath.com"]},{name:"Attentive",homepage:"https://attentivemobile.com/",category:"ad",domains:["*.attn.tv","*.attentivemobile.com"]},{name:"emetriq",homepage:"https://www.emetriq.com/",category:"ad",
-domains:["*.emetriq.de","*.xplosion.de"]},{name:"Bonzai",homepage:"https://www.bonzai.co/",category:"ad",domains:["*.bonzai.co"]},{name:"Freshchat",homepage:"https://www.freshworks.com/live-chat-software/",category:"customer-success",domains:["*.freshchat.com","*.freshworksapi.com"],products:[{name:"Freshdesk Messaging",urlPatterns:["wchat.freshchat.com"],facades:[{name:"Freshdesk Messaging (formerly Freshchat) Facade",repo:"https://github.com/coliff/freshdesk-messaging-facade/"}]}]},{name:"Contentful",homepage:"https://www.contentful.com/",category:"utility",domains:["*.contentful.com"]},{name:"PureCars",homepage:"https://www.purecars.com/",category:"marketing",domains:["*.purecars.com"]},{name:"Tray Commerce",homepage:"https://www.tray.com.br/",category:"marketing",domains:["*.tcdn.com.br"]},{name:"AdScore",homepage:"https://www.adscore.com/",category:"ad",domains:["*.adsco.re"]},{name:"WebsiteBuilder.com",homepage:"https://www.websitebuilder.com",category:"hosting",
-domains:["*.mywebsitebuilder.com"]},{name:"mParticle",homepage:"https://www.mparticle.com/",category:"utility",domains:["*.mparticle.com"]},{name:"Ada",homepage:"https://www.ada.support/",category:"customer-success",domains:["*.ada.support"]},{name:"Quora Ads",homepage:"https://www.quora.com/business/",category:"ad",domains:["*.quora.com"]},{name:"Auth0",homepage:"https://auth0.com/",category:"utility",domains:["*.auth0.com"]},{name:"Bridgewell DSP",homepage:"https://www.bridgewell.com/",category:"ad",domains:["*.scupio.com"]},{name:"Wicked Reports",homepage:"https://www.wickedreports.com/",category:"marketing",domains:["*.wickedreports.com"]},{name:"Jaywing",homepage:"https://jaywing.com/",category:"marketing",domains:["*.jaywing.com"]},{name:"Holimetrix",homepage:"https://u360.d-bi.fr/",category:"marketing",domains:["*.d-bi.fr"]},{name:"iZooto",homepage:"https://www.izooto.com",category:"marketing",domains:["*.izooto.com"]},{name:"Ordergroove",homepage:"https://www.ordergroove.com/",
-category:"marketing",domains:["*.ordergroove.com"]},{name:"PageSense",homepage:"https://www.zoho.com/pagesense/",category:"analytics",domains:["*.pagesense.io"]},{name:"Vizzit",homepage:"https://www.vizzit.se",category:"analytics",domains:["*.vizzit.se"]},{name:"Click Guardian",homepage:"https://www.clickguardian.co.uk/",category:"ad",domains:["*.clickguardian.app","*.clickguardian.co.uk"]},{name:"Smartsupp",company:"Smartsupp.com",homepage:"https://www.smartsupp.com",category:"customer-success",domains:["*.smartsuppchat.com","*.smartsupp.com","smartsupp-widget-161959.c.cdn77.org","*.smartsuppcdn.com"]},{name:"Smartlook",company:"Smartsupp.com",homepage:"https://www.smartlook.com/",category:"analytics",domains:["*.smartlook.com"]},{name:"Luigis Box",company:"Luigis Box",homepage:"https://www.luigisbox.com/",category:"utility",domains:["*.luigisbox.com"]},{name:"Targito",company:"VIVmail.cz",homepage:"https://www.targito.com",category:"marketing",domains:["*.targito.com"]},{
-name:"Foxentry",company:"AVANTRO",homepage:"https://foxentry.cz/",category:"utility",domains:["*.foxentry.cz"]},{name:"Pendo",homepage:"https://www.pendo.io",category:"analytics",domains:["*.pendo.io"]},{name:"Braze",homepage:"https://www.braze.com",category:"analytics",domains:["*.appboycdn.com"]},{name:"Usersnap",homepage:"https://usersnap.com",category:"customer-success",domains:["*.usersnap.com"]},{name:"Rewardful",homepage:"https://www.getrewardful.com",category:"analytics",domains:["*.wdfl.co"]},{name:"Launch Darkly",homepage:"https://launchdarkly.com",category:"utility",domains:["*.launchdarkly.com"]},{name:"Statuspage",company:"Atlassian",homepage:"https://www.statuspage.io",category:"utility",domains:["*.statuspage.io"]},{name:"HyperInzerce",homepage:"https://hyperinzerce.cz",category:"ad",domains:["*.hyperinzerce.cz"]},{name:"POWr",homepage:"https://www.powr.io",category:"utility",domains:["*.powr.io"]},{name:"Coral",company:"Coral",homepage:"https://coralproject.net",
-category:"content",domains:["*.coral.coralproject.net"]},{name:"Bolt",homepage:"https://www.bolt.com/",category:"utility",domains:["*.bolt.com"]},{name:"Judge.me",homepage:"https://judge.me/",category:"marketing",domains:["*.judge.me"]},{name:"Tilda",homepage:"https://tilda.cc/",category:"hosting",domains:["*.tildacdn.com"]},{name:"SalesLoft",homepage:"https://salesloft.com/",category:"marketing",domains:["*.salesloft.com"]},{name:"Accessibe Accessibility Overlay",company:"Accessibe",homepage:"https://accessibe.com/",category:"utility",domains:["*.accessibe.com","*.acsbapp.com","*.acsbap.com"]},{name:"Builder",homepage:"https://www.builder.io/",category:"hosting",domains:["*.builder.io"]},{name:"Pepperjam",homepage:"https://www.pepperjam.com/",category:"marketing",domains:["*.pepperjam.com","*.affiliatetechnology.com"]},{name:"Reach",homepage:"https://withreach.com/",category:"utility",domains:["*.gointerpay.net"]},{name:"Chameleon",homepage:"https://www.trychameleon.com/",
-category:"marketing",domains:["*.trychameleon.com"]},{name:"Matomo",company:"InnoCraft",homepage:"https://matomo.org/",category:"analytics",domains:["*.matomo.cloud"]},{name:"Segmanta",homepage:"https://segmanta.com/",category:"marketing",domains:["*.segmanta.com"]},{name:"Podsights",homepage:"https://podsights.com/",category:"marketing",domains:["*.pdst.fm","us-central1-adaptive-growth.cloudfunctions.net"]},{name:"Chatwoot",homepage:"https://www.chatwoot.com/",category:"customer-success",domains:["*.chatwoot.com"]},{name:"Crisp",homepage:"https://crisp.chat/",category:"customer-success",domains:["*.crisp.chat"]},{name:"Admiral CMP",homepage:"https://www.getadmiral.com",category:"consent-provider",domains:["admiral.mgr.consensu.org","*.admiral.mgr.consensu.org"]},{name:"Adnuntius CMP",homepage:"https://adnuntius.com",category:"consent-provider",domains:["adnuntiusconsent.mgr.consensu.org","*.adnuntiusconsent.mgr.consensu.org"]},{name:"Clickio CMP",homepage:"https://clickio.com",
-category:"consent-provider",domains:["clickio.mgr.consensu.org","*.clickio.mgr.consensu.org"]},{name:"AppConsent CMP",homepage:"https://appconsent.io/en",category:"consent-provider",domains:["appconsent.mgr.consensu.org","*.appconsent.mgr.consensu.org"]},{name:"DMG Media CMP",homepage:"https://www.dmgmedia.co.uk",category:"consent-provider",domains:["dmgmedia.mgr.consensu.org","*.dmgmedia.mgr.consensu.org"]},{name:"Axel Springer CMP",homepage:"https://www.axelspringer.com",category:"consent-provider",domains:["axelspringer.mgr.consensu.org","*.axelspringer.mgr.consensu.org"]},{name:"Bedrock CMP",homepage:"https://www.bedrockstreaming.com",category:"consent-provider",domains:["bedrock.mgr.consensu.org","*.bedrock.mgr.consensu.org"]},{name:"BMIND CMP",homepage:"https://www.bmind.es",category:"consent-provider",domains:["bmind.mgr.consensu.org","*.bmind.mgr.consensu.org"]},{name:"Borlabs CMP",homepage:"https://borlabs.io",category:"consent-provider",
-domains:["borlabs.mgr.consensu.org","*.borlabs.mgr.consensu.org"]},{name:"Civic CMP",homepage:"https://www.civicuk.com",category:"consent-provider",domains:["cookiecontrol.mgr.consensu.org","*.cookiecontrol.mgr.consensu.org"]},{name:"Commanders Act CMP",homepage:"https://www.commandersact.com",category:"consent-provider",domains:["commandersact.mgr.consensu.org","*.commandersact.mgr.consensu.org"]},{name:"Complianz CMP",homepage:"https://complianz.io/",category:"consent-provider",domains:["complianz.mgr.consensu.org","*.complianz.mgr.consensu.org"]},{name:"Consent Desk CMP",homepage:"https://www.consentdesk.com/",category:"consent-provider",domains:["consentdesk.mgr.consensu.org","*.consentdesk.mgr.consensu.org"]},{name:"Consent Manager CMP",homepage:"https://consentmanager.net",category:"consent-provider",domains:["consentmanager.mgr.consensu.org","*.consentmanager.mgr.consensu.org"]},{name:"Conversant CMP",homepage:"https://www.conversantmedia.eu/",category:"consent-provider",
-domains:["conversant.mgr.consensu.org","*.conversant.mgr.consensu.org"]},{name:"Cookie Information CMP",homepage:"https://www.cookieinformation.com/",category:"consent-provider",domains:["cookieinformation.mgr.consensu.org","*.cookieinformation.mgr.consensu.org"]},{name:"Cookiebot CMP",homepage:"https://www.cookiebot.com",category:"consent-provider",domains:["cookiebot.mgr.consensu.org","*.cookiebot.mgr.consensu.org"]},{name:"Truendo CMP",homepage:"https://truendo.com/",category:"consent-provider",domains:["truendo.mgr.consensu.org","*.truendo.mgr.consensu.org"]},{name:"Dentsu CMP",homepage:"https://www.dentsuaegisnetwork.de/",category:"consent-provider",domains:["dan.mgr.consensu.org","*.dan.mgr.consensu.org"]},{name:"Didomi CMP",homepage:"https://www.didomi.io/en/",category:"consent-provider",domains:["didomi.mgr.consensu.org","*.didomi.mgr.consensu.org"]},{name:"Ensighten CMP",homepage:"https://www.ensighten.com/",category:"consent-provider",
-domains:["ensighten.mgr.consensu.org","*.ensighten.mgr.consensu.org"]},{name:"Evidon CMP",homepage:"https://evidon.com",category:"consent-provider",domains:["evidon.mgr.consensu.org","*.evidon.mgr.consensu.org"]},{name:"Ezoic CMP",homepage:"https://www.ezoic.com/",category:"consent-provider",domains:["ezoic.mgr.consensu.org","*.ezoic.mgr.consensu.org"]},{name:"Gemius CMP",homepage:"https://www.gemius.com",category:"consent-provider",domains:["gemius.mgr.consensu.org","*.gemius.mgr.consensu.org"]},{name:"NitroPay CMP",homepage:"https://nitropay.com/",category:"consent-provider",domains:["nitropay.mgr.consensu.org","*.nitropay.mgr.consensu.org"]},{name:"Google FundingChoices",homepage:"https://fundingchoices.google.com/start/",category:"consent-provider",domains:["fundingchoices.mgr.consensu.org","*.fundingchoices.mgr.consensu.org","fundingchoicesmessages.google.com","*.fundingchoicesmessages.google.com"]},{name:"Gravito CMP",homepage:"https://www.gravito.net/",
-category:"consent-provider",domains:["gravito.mgr.consensu.org","*.gravito.mgr.consensu.org"]},{name:"ID Ward CMP",homepage:"https://id-ward.com/enterprise",category:"consent-provider",domains:["idward.mgr.consensu.org","*.idward.mgr.consensu.org"]},{name:"iubenda CMP",homepage:"https://www.iubenda.com",category:"consent-provider",domains:["iubenda.mgr.consensu.org","*.iubenda.mgr.consensu.org"]},{name:"Jump CMP",homepage:"https://jumpgroup.it/",category:"consent-provider",domains:["avacy.mgr.consensu.org","*.avacy.mgr.consensu.org"]},{name:"LiveRamp CMP",homepage:"https://liveramp.com/",category:"consent-provider",domains:["faktor.mgr.consensu.org","*.faktor.mgr.consensu.org"]},{name:"Madvertise CMP",homepage:"https://madvertise.com/en/",category:"consent-provider",domains:["madvertise.mgr.consensu.org","*.madvertise.mgr.consensu.org"]},{name:"Mairdumont Netletic CMP",homepage:"https://www.mairdumont-netletix.com/",category:"consent-provider",
-domains:["mdnxmp.mgr.consensu.org","*.mdnxmp.mgr.consensu.org"]},{name:"Marfeel CMP",homepage:"https://www.marfeel.com/",category:"consent-provider",domains:["marfeel.mgr.consensu.org","*.marfeel.mgr.consensu.org"]},{name:"Mediavine CMP",homepage:"https://www.mediavine.com/",category:"consent-provider",domains:["mediavine.mgr.consensu.org","*.mediavine.mgr.consensu.org"]},{name:"ConsentServe CMP",homepage:"https://www.consentserve.com/",category:"consent-provider",domains:["consentserve.mgr.consensu.org","*.consentserve.mgr.consensu.org"]},{name:"Next14 CMP",homepage:"https://www.next14.com/",category:"consent-provider",domains:["next14.mgr.consensu.org","*.next14.mgr.consensu.org"]},{name:"AdRoll CMP",homepage:"https://www.adroll.com/",category:"consent-provider",domains:["adroll.mgr.consensu.org","*.adroll.mgr.consensu.org"]},{name:"Ogury CMP",homepage:"https://www.ogury.com/",category:"consent-provider",domains:["ogury.mgr.consensu.org","*.ogury.mgr.consensu.org"]},{
-name:"OneTag CMP",homepage:"https://onetag.net",category:"consent-provider",domains:["onetag.mgr.consensu.org","*.onetag.mgr.consensu.org"]},{name:"OneTrust CMP",homepage:"https://onetrust.com",category:"consent-provider",domains:["onetrust.mgr.consensu.org","*.onetrust.mgr.consensu.org"]},{name:"optAd360 CMP",homepage:"https://www.optad360.com/",category:"consent-provider",domains:["optad360.mgr.consensu.org","*.optad360.mgr.consensu.org"]},{name:"Osano CMP",homepage:"https://www.osano.com",category:"consent-provider",domains:["osano.mgr.consensu.org","*.osano.mgr.consensu.org"]},{name:"Playwire CMP",homepage:"https://www.playwire.com",category:"consent-provider",domains:["playwire.mgr.consensu.org","*.playwire.mgr.consensu.org"]},{name:"Pulselive CMP",homepage:"https://www.pulselive.com",category:"consent-provider",domains:["pulselive.mgr.consensu.org","*.pulselive.mgr.consensu.org"]},{name:"Quantcast Choice",homepage:"https://quantcast.com",category:"consent-provider",
-domains:["quantcast.mgr.consensu.org","*.quantcast.mgr.consensu.org"]},{name:"RCS Pubblicita CMP",homepage:"http://www.rcspubblicita.it/site/home.html",category:"consent-provider",domains:["rcsmediagroup.mgr.consensu.org","*.rcsmediagroup.mgr.consensu.org"]},{name:"Rich Audience CMP",homepage:"https://richaudience.com",category:"consent-provider",domains:["richaudience.mgr.consensu.org","*.richaudience.mgr.consensu.org"]},{name:"Ringier Axel Springer CMP",homepage:"https://www.ringieraxelspringer.pl/en/home/",category:"consent-provider",domains:["rasp.mgr.consensu.org","*.rasp.mgr.consensu.org"]},{name:"Secure Privacy CMP",homepage:"https://secureprivacy.ai/",category:"consent-provider",domains:["secureprivacy.mgr.consensu.org","*.secureprivacy.mgr.consensu.org"]},{name:"Securiti CMP",homepage:"https://securiti.ai/",category:"consent-provider",domains:["securiti.mgr.consensu.org","*.securiti.mgr.consensu.org"]},{name:"Seznam.cz CMP",homepage:"https://www.seznam.cz/",
-category:"consent-provider",domains:["seznam.mgr.consensu.org","*.seznam.mgr.consensu.org"]},{name:"ShareThis CMP",homepage:"https://sharethis.com",category:"consent-provider",domains:["sharethis.mgr.consensu.org","*.sharethis.mgr.consensu.org"]},{name:"ShinyStat CMP",homepage:"https://www.shinystat.com",category:"consent-provider",domains:["shinystat.mgr.consensu.org","*.shinystat.mgr.consensu.org"]},{name:"Sibbo CMP",homepage:"https://sibboventures.com/en/",category:"consent-provider",domains:["sibboventures.mgr.consensu.org","*.sibboventures.mgr.consensu.org"]},{name:"Singlespot CMP",homepage:"https://www.singlespot.com/en",category:"consent-provider",domains:["singlespot.mgr.consensu.org","*.singlespot.mgr.consensu.org"]},{name:"Sirdata CMP",homepage:"https://www.sirdata.com",category:"consent-provider",domains:["sddan.mgr.consensu.org","*.sddan.mgr.consensu.org"]},{name:"Snigel CMP",homepage:"https://snigel.com",category:"consent-provider",
-domains:["snigelweb.mgr.consensu.org","*.snigelweb.mgr.consensu.org"]},{name:"Sourcepoint CMP",homepage:"https://sourcepoint.com",category:"consent-provider",domains:["sourcepoint.mgr.consensu.org","*.sourcepoint.mgr.consensu.org"]},{name:"Pubtech CMP",homepage:"https://www.pubtech.ai/",category:"consent-provider",domains:["pubtech.mgr.consensu.org","*.pubtech.mgr.consensu.org"]},{name:"AdMetrics Pro CMP",homepage:"https://admetricspro.com",category:"consent-provider",domains:["cmp.mgr.consensu.org","*.cmp.mgr.consensu.org"]},{name:"Traffective CMP",homepage:"https://traffective.com",category:"consent-provider",domains:["traffective.mgr.consensu.org","*.traffective.mgr.consensu.org"]},{name:"UniConsent CMP",homepage:"https://uniconsent.com",category:"consent-provider",domains:["uniconsent.mgr.consensu.org","*.uniconsent.mgr.consensu.org"]},{name:"TrustArc CMP",homepage:"https://trustarc.com/",category:"consent-provider",
-domains:["trustarc.mgr.consensu.org","*.trustarc.mgr.consensu.org"]},{name:"Usercentrics CMP",homepage:"https://usercentrics.com",category:"consent-provider",domains:["usercentrics.mgr.consensu.org","*.usercentrics.mgr.consensu.org","*.usercentrics.eu","*.services.usercentrics.eu"]},{name:"WebAds CMP",homepage:"https://www.webads.nl/",category:"consent-provider",domains:["webads.mgr.consensu.org","*.webads.mgr.consensu.org"]},{name:"Trustcommander",company:"Commandersact",homepage:"https://www.commandersact.com",category:"consent-provider",domains:["*.trustcommander.net"]},{name:"Hubvisor",homepage:"https://www.hubvisor.io",category:"ad",domains:["*.hubvisor.io"]},{name:"Castle",homepage:"https://castle.io",category:"utility",domains:["*.castle.io","d2t77mnxyo7adj.cloudfront.net"]},{name:"Wigzo",homepage:"https://www.wigzo.com/",category:"marketing",domains:["*.wigzo.com","*.wigzopush.com"]},{name:"Convertful",homepage:"https://convertful.com/",category:"marketing",
-domains:["*.convertful.com"]},{name:"OpenLink",company:"MediaWallah",homepage:"https://www.mediawallah.com/",category:"ad",domains:["*.mediawallahscript.com"]},{name:"TPMN",company:"TPMN",homepage:"http://tpmn.io/",category:"ad",domains:["*.tpmn.co.kr"]},{name:"HERO",company:"Klarna",homepage:"https://www.usehero.com/",category:"customer-success",domains:["*.usehero.com"]},{name:"Zync",company:"Zeta Global",homepage:"https://zetaglobal.com/",category:"marketing",domains:["*.rezync.com"]},{name:"AdFuel Video",company:"AdFuel",homepage:"https://goadfuel.com/",category:"ad",domains:["*.videoplayerhub.com"]},{name:"Prefix Box AI Search",company:"Prefix Box",homepage:"https://www.prefixbox.com/",category:"utility",domains:["*.prefixbox.com"]},{name:"SpeedSize Service Worker",company:"SpeedSize",homepage:"https://speedsize.com/",category:"utility",domains:["di6367dava8ow.cloudfront.net","d2d22nphq0yz8t.cloudfront.net"]},{name:"Vonage Video API",company:"Vonage",
-homepage:"https://www.vonage.com/communications-apis/video/",category:"video",domains:["*.opentok.com"]},{name:"Checkout.com",company:"Checkout.com",homepage:"https://www.checkout.com",category:"utility",domains:["*.checkout.com"]},{name:"Noibu",company:"Noibu",homepage:"https://www.noibu.com",category:"utility",domains:["*.noibu.com"]},{name:"Clarity",company:"Microsoft",homepage:"https://clarity.microsoft.com/",category:"utility",domains:["*.clarity.ms"]},{name:"goinstore",company:"Emplifi",homepage:"https://goinstore.com/",category:"customer-success",domains:["*.goinstore.com"]},{name:"SegmentStream",company:"SegmentStream",homepage:"https://segmentstream.com/",category:"marketing",domains:["*.segmentstream.com"]},{name:"Amazon Associates",company:"Amazon",homepage:"https://affiliate-program.amazon.co.uk/",category:"marketing",domains:["*.associates-amazon.com"]},{name:"DotMetrics",company:"Ipsos",homepage:"https://www.dotmetrics.net/",category:"analytics",
-domains:["*.dotmetrics.net"]},{name:"Truffle Bid",company:"Truffle",homepage:"https://truffle.bid/",category:"ad",domains:["*.truffle.bid"]},{name:"Hybrid",company:"Hybrid",homepage:"https://hybrid.ai/",category:"ad",domains:["*.hybrid.ai"]},{name:"AdMan Media",company:"AdMan",homepage:"https://admanmedia.com/",category:"video",domains:["*.admanmedia.com"]},{name:"ID5 Identity Cloud",company:"ID5",homepage:"https://id5.io/",category:"ad",domains:["id5-sync.com","*.id5-sync.com"]},{name:"Audience Rate",company:"Audience Rate Limited",homepage:"https://www.audiencerate.com/",category:"ad",domains:["*.audrte.com"]},{name:"Seedtag",company:"Seedtag Advertising",homepage:"https://www.seedtag.com/",category:"ad",domains:["*.seedtag.com"]},{name:"IVI",company:"IVI Technologies",homepage:"http://ivitechnologies.com/",category:"ad",domains:["*.ivitrack.com"]},{name:"Sportradar",company:"Sportradar",homepage:"https://www.sportradar.com/",category:"ad",domains:["*.sportradarserving.com"]},{
-name:"ZEOTAP",company:"ZEOTAP",homepage:"https://zeotap.com/",category:"ad",domains:["*.zeotap.com"]},{name:"Web Content Assessor",company:"TMT Digital",homepage:"https://mediatrust.com/",category:"ad",domains:["*.webcontentassessor.com"]},{name:"Genie",company:"Media Force",homepage:"https://hellogenie.com/",category:"ad",domains:["*.mfadsrvr.com"]},{name:"mediarithmics",company:"mediarithmics",homepage:"https://www.mediarithmics.com/",category:"ad",domains:["*.mediarithmics.com"]},{name:"Ozone Project",company:"The Ozone Project",homepage:"https://www.ozoneproject.com/",category:"ad",domains:["*.the-ozone-project.com"]},{name:"FiftyAurora",company:"Fifty",homepage:"https://fifty.io/",category:"ad",domains:["*.fiftyt.com"]},{name:"smadex",company:"entravision",homepage:"https://smadex.com/",category:"ad",domains:["*.smadex.com"]},{name:"AWX",company:"Trinity Mirror",category:"ad",domains:["*.tm-awx.com"]},{name:"XPO",company:"Knorex",category:"ad",homepage:"https://www.knorex.com/",
-domains:["*.brand-display.com"]},{name:"Viafoura",company:"Viafoura",category:"ad",homepage:"https://viafoura.com/",domains:["*.viafoura.co","*.viafoura.net"]},{name:"Adnami",company:"Adnami",category:"ad",homepage:"https://www.adnami.io/",domains:["*.adnami.io"]},{name:"LiveRamp Privacy Manager",company:"LiveRamp",category:"ad",homepage:"https://liveramp.com/privacy-legal-compliance/",domains:["*.privacymanager.io"]},{name:"Onfocus",company:"Onfocus SAS",category:"ad",domains:["*.4dex.io"]},{name:"viewTag",company:"Advanced Store",category:"ad",domains:["*.ad4m.at"]},{name:"MRP Prelytics",company:"Market Resource Partners",category:"ad",homepage:"https://www.mrpfd.com/",domains:["*.mrpdata.net"]},{name:"iPROM",company:"iPROM",category:"ad",homepage:"https://iprom.eu/",domains:["*.iprom.net"]},{name:"Plausible",company:"Plausible",homepage:"https://plausible.io/",category:"analytics",domains:["*.plausible.io"]},{name:"Micro Analytics",company:"Micro Analytics",
-homepage:"https://microanalytics.io/",category:"analytics",domains:["padmin.microanalytics.io","www.microanalytics.io","dev.microanalytics.io","status.microanalytics.io"]},{name:"Scale8",company:"Scale8",homepage:"https://scale8.com/",category:"analytics",domains:["www.scale8.com","api-dev.scale8.com","cdn.scale8.com","ui.scale8.com"]},{name:"Cabin",company:"Cabin",homepage:"https://withcabin.com/",category:"analytics",domains:["*.withcabin.com"]},{name:"Appcues",company:"Appcues",homepage:"https://www.appcues.com/",category:"analytics",domains:["*.appcues.com"]},{name:"Fathom Analytics",company:"Fathom",homepage:"https://usefathom.com/",category:"analytics",domains:["*.usefathom.com"]}]);function getEntity(e){return si.getEntity(e)}function isThirdParty(e,t){const n=getEntity(e);return!!n&&n!==t}var ci={getEntity,getProduct:function getProduct(e){return si.getProduct(e)},isThirdParty,isFirstParty:function isFirstParty(e,t){return!isThirdParty(e,t)}};class EntityClassification{
-static makeupChromeExtensionEntity_(e,t,n){const a=Util.getChromeExtensionOrigin(t),r=new URL(a).host,o=n||r,i=e.get(a);if(i)return i;const s={name:o,company:o,category:"Chrome Extension",homepage:"https://chromewebstore.google.com/detail/"+r,categories:[],domains:[],averageExecutionTime:0,totalExecutionTime:0,totalOccurrences:0};return e.set(a,s),s}static _makeUpAnEntity(e,t){if(!UrlUtils.isValid(t))return;const n=Util.createOrReturnURL(t);if("chrome-extension:"===n.protocol)return EntityClassification.makeupChromeExtensionEntity_(e,t);if(!n.protocol.startsWith("http"))return;const a=Util.getRootDomain(t);if(!a)return;if(e.has(a))return e.get(a);const r={name:a,company:a,category:"",categories:[],domains:[a],averageExecutionTime:0,totalExecutionTime:0,totalOccurrences:0,isUnrecognized:!0};return e.set(a,r),r}static _preloadChromeExtensionsToCache(e,t){for(const n of t.values()){if("Runtime.executionContextCreated"!==n.method)continue;const t=n.params.context.origin
-;t.startsWith("chrome-extension:")&&(e.has(t)||EntityClassification.makeupChromeExtensionEntity_(e,t,n.params.context.name))}}static async compute_(e,t){const n=await bo.request(e.devtoolsLog,t),a=new Map,r=new Map,o=new Map;EntityClassification._preloadChromeExtensionsToCache(a,e.devtoolsLog);for(const e of n){const{url:t}=e;if(r.has(t))continue;const n=ci.getEntity(t)||EntityClassification._makeUpAnEntity(a,t);if(!n)continue;const i=o.get(n)||new Set;i.add(t),o.set(n,i),r.set(t,n)}const i=e.URL.mainDocumentUrl||e.URL.finalDisplayedUrl,s=ci.getEntity(i)||EntityClassification._makeUpAnEntity(a,i);return{entityByUrl:r,urlsByEntity:o,firstParty:s,isFirstParty:function isFirstParty(e){return r.get(e)===s}}}}const li=makeComputedArtifact(EntityClassification,["URL","devtoolsLog"]);getModuleDirectory({url:"core/runner.js"});class Runner{static async audit(e,t){const{resolvedConfig:n,computedCache:a}=t,r=n.settings;try{const t={msg:"Audit phase",id:"lh:runner:audit"};Log.time(t,"verbose")
-;const o=[];if(r.gatherMode&&!r.auditMode)return;if(!n.audits)throw new Error("No audits to evaluate.");const i=await Runner._runAudits(r,n.audits,e,o,a),s={msg:"Generating results...",id:"lh:runner:generate"};Log.time(s),e.LighthouseRunWarnings&&o.push(...e.LighthouseRunWarnings);const c={"axe-core":e.Accessibility?.version};let l={};n.categories&&(l=ReportScoring.scoreAllCategories(n.categories,i)),Log.timeEnd(s),Log.timeEnd(t);let u=e.FullPageScreenshot;(n.settings.disableFullPageScreenshot||u instanceof Error)&&(u=void 0);const d={lighthouseVersion:_r,requestedUrl:e.URL.requestedUrl,mainDocumentUrl:e.URL.mainDocumentUrl,finalDisplayedUrl:e.URL.finalDisplayedUrl,finalUrl:e.URL.mainDocumentUrl,fetchTime:e.fetchTime,gatherMode:e.GatherContext.gatherMode,runtimeError:Runner.getArtifactRuntimeError(e),runWarnings:o,userAgent:e.HostUserAgent,environment:{networkUserAgent:e.NetworkUserAgent,hostUserAgent:e.HostUserAgent,benchmarkIndex:e.BenchmarkIndex,benchmarkIndexes:e.BenchmarkIndexes,
-credits:c},audits:i,configSettings:r,categories:l,categoryGroups:n.groups||void 0,stackPacks:getStackPacks(e.Stacks),entities:await Runner.getEntityClassification(e,{computedCache:a}),fullPageScreenshot:u,timing:this._getTiming(e),i18n:{rendererFormattedStrings:getRendererFormattedStrings(r.locale),icuMessagePaths:{}}};d.i18n.icuMessagePaths=replaceIcuMessages(d,r.locale);const m=d;if(r.auditMode){!function saveLhr(e,t){J.writeFileSync(`${t}/lhr.report.json`,JSON.stringify(e,null,2))}(m,Runner._getDataSavePath(r))}return{lhr:m,artifacts:e,report:ReportGenerator.generateReport(m,r.output)}}catch(e){throw Runner.createRunnerError(e,r)}}static async getEntityClassification(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS];if(!n)return;const a=await li.request({URL:e.URL,devtoolsLog:n},t),r=[];for(const[e,t]of a.urlsByEntity){const n=new Set;for(const e of t){const t=UrlUtils.getOrigin(e);t&&n.add(t)}const o={name:e.name,homepage:e.homepage,origins:[...n]}
-;e===a.firstParty&&(o.isFirstParty=!0),e.isUnrecognized&&(o.isUnrecognized=!0),e.category&&(o.category=e.category),r.push(o)}return r}static async gather(e,t){const n=t.resolvedConfig.settings;try{const a=Qo.getContext();let r;if(Qo.captureBreadcrumb({message:"Run started",category:"lifecycle",data:a}),n.auditMode&&!n.gatherMode){r=loadArtifacts(this._getDataSavePath(n))}else{const a={msg:"Gather phase",id:"lh:runner:gather"};if(Log.time(a,"verbose"),r=await e({resolvedConfig:t.resolvedConfig,driverMock:t.driverMock}),Log.timeEnd(a),r.Timing=Log.takeTimeEntries(),n.gatherMode){const e=this._getDataSavePath(n);await async function saveArtifacts(e,t){const n={msg:"Saving artifacts",id:"lh:assetSaver:saveArtifacts"};Log.time(n),J.mkdirSync(t,{recursive:!0});const a=J.readdirSync(t);for(const e of a)(e.endsWith(Ko)||e.endsWith(Jo)||e===Yo)&&J.unlinkSync(`${t}/${e}`);const{traces:r,devtoolsLogs:o,DevtoolsLog:i,Trace:s,...c}=e
-;for(const[e,n]of Object.entries(r))await saveTrace(n,`${t}/${e}.trace.json`);for(const[e,n]of Object.entries(o))await saveDevtoolsLog(n,`${t}/${e}.devtoolslog.json`);const l=JSON.stringify(c,stringifyReplacer,2)+"\n";J.writeFileSync(`${t}/artifacts.json`,l,"utf8"),Log.log("Artifacts saved to disk in folder:",t),Log.timeEnd(n)}(r,e)}}return r}catch(e){throw Runner.createRunnerError(e,n)}}static createRunnerError(e,t){return e.friendlyMessage&&(e.friendlyMessage=getFormatted(e.friendlyMessage,t.locale)),Qo.captureException(e,{level:"fatal"}),e}static _getTiming(e){const t=[...e.Timing||[],...Log.takeTimeEntries()].map((e=>[`${e.startTime}-${e.name}-${e.duration}`,e])),n=Array.from(new Map(t).values()).map((e=>({startTime:parseFloat(e.startTime.toFixed(2)),name:e.name,duration:parseFloat(e.duration.toFixed(2)),entryType:e.entryType}))).sort(((e,t)=>e.startTime-t.startTime)),a=n.find((e=>"lh:runner:gather"===e.name)),r=n.find((e=>"lh:runner:audit"===e.name));return{entries:n,
-total:(a?.duration||0)+(r?.duration||0)}}static async _gatherArtifactsFromBrowser(e,t,n){if(!t.resolvedConfig.passes)throw new Error("No browser artifacts are either provided or requested.");const a={driver:t.driverMock||new Driver$1(n),requestedUrl:e,settings:t.resolvedConfig.settings,computedCache:t.computedCache};return await GatherRunner.run(t.resolvedConfig.passes,a)}static async _runAudits(e,t,n,a,r){const o={msg:"Analyzing and running audits...",id:"lh:runner:auditing"};if(Log.time(o),n.settings){const t={locale:void 0,gatherMode:void 0,auditMode:void 0,output:void 0,channel:void 0,budgets:void 0},a=Object.assign({},n.settings,t),r=Object.assign({},e,t),o=new Set([...Object.keys(a),...Object.keys(r)]);for(const e of o)if(!Xa(a[e],r[e]))throw new Error(`Cannot change settings between gathering and auditing. Difference found at: ${e}`);if(!Xa(a,r))throw new Error("Cannot change settings between gathering and auditing")}const i={settings:e,computedCache:r},s={};for(const e of t){
-const t=e.implementation.meta.id,r=await Runner._runAudit(e,n,i,a);s[t]=r}return Log.timeEnd(o),s}static async _runAudit(e,t,n,a){const r=e.implementation,o={msg:`Auditing: ${getFormatted(r.meta.title,"en-US")}`,id:`lh:audit:${r.meta.id}`};let i;Log.time(o);try{for(const e of r.meta.requiredArtifacts){const n=void 0===t[e],a="traces"===e&&!t.traces[Audit.DEFAULT_PASS],o="devtoolsLogs"===e&&!t.devtoolsLogs[Audit.DEFAULT_PASS];if(n||a||o)throw Log.warn("Runner",`${e} gatherer, required by audit ${r.meta.id}, did not run.`),new LighthouseError(LighthouseError.errors.MISSING_REQUIRED_ARTIFACT,{artifactName:e});if(t[e]instanceof Error){const n=t[e];Qo.captureException(n,{tags:{gatherer:e},level:"error"}),Log.warn("Runner",`${e} gatherer, required by audit ${r.meta.id}, encountered an error: ${n.message}`);const a=new LighthouseError(LighthouseError.errors.ERRORED_REQUIRED_ARTIFACT,{artifactName:e,errorMessage:n.message},{cause:n});throw a.expected=!0,a}}const o={
-options:Object.assign({},r.defaultOptions,e.options),...n},s=r.meta.requiredArtifacts.concat(r.meta.__internalOptionalArtifacts||[]).reduce(((e,n)=>{const a=t[n];return e[n]=a,e}),{}),c=await r.audit(s,o);a.push(...c.runWarnings||[]),i=Audit.generateAuditResult(r,c)}catch(e){"MISSING_REQUIRED_ARTIFACT"!==e.code&&"ERRORED_REQUIRED_ARTIFACT"!==e.code&&Log.warn(r.meta.id,`Caught exception: ${e.message}`),Qo.captureException(e,{tags:{audit:r.meta.id},level:"error"});const t=e.friendlyMessage?e.friendlyMessage:e.message,n=e.cause?.stack??e.stack;i=Audit.generateErrorAuditResult(r,t,n)}return Log.timeEnd(o),i}static getArtifactRuntimeError(e){const t=[e.PageLoadError,...Object.values(e)];for(const e of t){if(e instanceof LighthouseError&&e.lhrRuntimeError){const t=e.friendlyMessage||e.message;return{code:e.code,message:t}}}}static getAuditList(){
-const e=["audit.js","violation-audit.js","accessibility/axe-audit.js","multi-check-audit.js","byte-efficiency/byte-efficiency-audit.js","manual/manual-audit.js"]
-;return["accessibility","audit.js","autocomplete.js","bf-cache.js","bootup-time.js","byte-efficiency","content-width.js","critical-request-chains.js","csp-xss.js","deprecations.js","diagnostics.js","dobetterweb","errors-in-console.js","final-screenshot.js","font-display.js","image-aspect-ratio.js","image-size-responsive.js","installable-manifest.js","is-on-https.js","largest-contentful-paint-element.js","layout-shift-elements.js","lcp-lazy-loaded.js","long-tasks.js","main-thread-tasks.js","mainthread-work-breakdown.js","manual","maskable-icon.js","metrics","metrics.js","multi-check-audit.js","network-requests.js","network-rtt.js","network-server-latency.js","no-unload-listeners.js","non-composited-animations.js","oopif-iframe-test-audit.js","performance-budget.js","predictive-perf.js","preload-fonts.js","prioritize-lcp-image.js","redirects.js","resource-summary.js","screenshot-thumbnails.js","script-elements-test-audit.js","script-treemap-data.js","seo","server-response-time.js","service-worker.js","splash-screen.js","themed-omnibox.js","third-party-facades.js","third-party-summary.js","timing-budget.js","unsized-images.js","user-timings.js","uses-rel-preconnect.js","uses-rel-preload.js","valid-source-maps.js","viewport.js","violation-audit.js","work-during-interaction.js",...["charset.js","doctype.js","dom-size.js","geolocation-on-start.js","inspector-issues.js","js-libraries.js","no-document-write.js","notification-on-start.js","paste-preventing-inputs.js","uses-http2.js","uses-passive-event-listeners.js"].map((e=>`dobetterweb/${e}`)),...["cumulative-layout-shift.js","experimental-interaction-to-next-paint.js","first-contentful-paint-3g.js","first-contentful-paint.js","first-meaningful-paint.js","interactive.js","largest-contentful-paint.js","max-potential-fid.js","speed-index.js","total-blocking-time.js"].map((e=>`metrics/${e}`)),...["canonical.js","crawlable-anchors.js","font-size.js","hreflang.js","http-status-code.js","is-crawlable.js","link-text.js","manual","meta-description.js","plugins.js","robots-txt.js","tap-targets.js"].map((e=>`seo/${e}`)),...["structured-data.js"].map((e=>`seo/manual/${e}`)),...["accesskeys.js","aria-allowed-attr.js","aria-command-name.js","aria-dialog-name.js","aria-hidden-body.js","aria-hidden-focus.js","aria-input-field-name.js","aria-meter-name.js","aria-progressbar-name.js","aria-required-attr.js","aria-required-children.js","aria-required-parent.js","aria-roles.js","aria-text.js","aria-toggle-field-name.js","aria-tooltip-name.js","aria-treeitem-name.js","aria-valid-attr-value.js","aria-valid-attr.js","axe-audit.js","button-name.js","bypass.js","color-contrast.js","definition-list.js","dlitem.js","document-title.js","duplicate-id-active.js","duplicate-id-aria.js","empty-heading.js","form-field-multiple-labels.js","frame-title.js","heading-order.js","html-has-lang.js","html-lang-valid.js","html-xml-lang-mismatch.js","identical-links-same-purpose.js","image-alt.js","input-button-name.js","input-image-alt.js","label.js","landmark-one-main.js","link-in-text-block.js","link-name.js","list.js","listitem.js","manual","meta-refresh.js","meta-viewport.js","object-alt.js","select-name.js","tabindex.js","table-fake-caption.js","target-size.js","td-has-header.js","td-headers-attr.js","th-has-data-cells.js","valid-lang.js","video-caption.js"].map((e=>`accessibility/${e}`)),...["custom-controls-labels.js","custom-controls-roles.js","focus-traps.js","focusable-controls.js","interactive-element-affordance.js","logical-tab-order.js","managed-focus.js","offscreen-content-hidden.js","use-landmarks.js","visual-order-follows-dom.js"].map((e=>`accessibility/manual/${e}`)),...["byte-efficiency-audit.js","duplicated-javascript.js","efficient-animated-content.js","legacy-javascript.js","modern-image-formats.js","offscreen-images.js","polyfill-graph-data.json","render-blocking-resources.js","total-byte-weight.js","unminified-css.js","unminified-javascript.js","unused-css-rules.js","unused-javascript.js","uses-long-cache-ttl.js","uses-optimized-images.js","uses-responsive-images-snapshot.js","uses-responsive-images.js","uses-text-compression.js"].map((e=>`byte-efficiency/${e}`)),...["manual-audit.js","pwa-cross-browser.js","pwa-each-page-has-url.js","pwa-page-transitions.js"].map((e=>`manual/${e}`))].filter((t=>/\.js$/.test(t)&&!e.includes(t))).sort()
-}static getGathererList(){return["accessibility.js","anchor-elements.js","bf-cache-failures.js","cache-contents.js","console-messages.js","css-usage.js","devtools-log-compat.js","devtools-log.js","dobetterweb","full-page-screenshot.js","gatherer.js","global-listeners.js","iframe-elements.js","image-elements.js","inputs.js","inspector-issues.js","installability-errors.js","js-usage.js","link-elements.js","main-document-content.js","meta-elements.js","network-user-agent.js","script-elements.js","scripts.js","seo","service-worker.js","source-maps.js","stacks.js","trace-compat.js","trace-elements.js","trace.js","viewport-dimensions.js","web-app-manifest.js",...["embedded-content.js","font-size.js","robots-txt.js","tap-targets.js"].map((e=>`seo/${e}`)),...["doctype.js","domstats.js","optimized-images.js","response-compression.js","tags-blocking-first-paint.js"].map((e=>`dobetterweb/${e}`))].filter((e=>/\.js$/.test(e)&&"gatherer.js"!==e)).sort()}static _getDataSavePath(e){
-const{auditMode:t,gatherMode:n}=e;return"string"==typeof t?Q.resolve(process.cwd(),t):"string"==typeof n?Q.resolve(process.cwd(),n):Q.join(process.cwd(),"latest-run")}}const ui={},di=["server-response-time","render-blocking-resources","redirects","critical-request-chains","uses-text-compression","uses-rel-preconnect","uses-rel-preload","font-display","unminified-javascript","unminified-css","unused-css-rules"],mi={fcpRelevantAudits:di,lcpRelevantAudits:[...di,"largest-contentful-paint-element","prioritize-lcp-image","unused-javascript","efficient-animated-content","total-byte-weight","lcp-lazy-loaded"],tbtRelevantAudits:["long-tasks","third-party-summary","third-party-facades","bootup-time","mainthread-work-breakdown","dom-size","duplicated-javascript","legacy-javascript","viewport"],clsRelevantAudits:["layout-shift-elements","non-composited-animations","unsized-images"],inpRelevantAudits:["work-during-interaction"]},pi={performanceCategoryTitle:"Performance",
-budgetsGroupTitle:"Budgets",budgetsGroupDescription:"Performance budgets set standards for the performance of your site.",metricGroupTitle:"Metrics",loadOpportunitiesGroupTitle:"Opportunities",loadOpportunitiesGroupDescription:"These suggestions can help your page load faster. They don't [directly affect](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) the Performance score.",firstPaintImprovementsGroupTitle:"First Paint Improvements",firstPaintImprovementsGroupDescription:"The most critical aspect of performance is how quickly pixels are rendered onscreen. Key metrics: First Contentful Paint, First Meaningful Paint",overallImprovementsGroupTitle:"Overall Improvements",overallImprovementsGroupDescription:"Enhance the overall loading experience, so the page is responsive and ready to use as soon as possible. Key metrics: Time to Interactive, Speed Index",diagnosticsGroupTitle:"Diagnostics",
-diagnosticsGroupDescription:"More information about the performance of your application. These numbers don't [directly affect](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) the Performance score.",a11yCategoryTitle:"Accessibility",a11yCategoryDescription:"These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.",a11yCategoryManualDescription:"These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://web.dev/how-to-review/).",a11yBestPracticesGroupTitle:"Best practices",a11yBestPracticesGroupDescription:"These items highlight common accessibility best practices.",a11yColorContrastGroupTitle:"Contrast",
-a11yColorContrastGroupDescription:"These are opportunities to improve the legibility of your content.",a11yNamesLabelsGroupTitle:"Names and labels",a11yNamesLabelsGroupDescription:"These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader.",a11yNavigationGroupTitle:"Navigation",a11yNavigationGroupDescription:"These are opportunities to improve keyboard navigation in your application.",a11yAriaGroupTitle:"ARIA",a11yAriaGroupDescription:"These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader.",a11yLanguageGroupTitle:"Internationalization and localization",a11yLanguageGroupDescription:"These are opportunities to improve the interpretation of your content by users in different locales.",a11yAudioVideoGroupTitle:"Audio and video",
-a11yAudioVideoGroupDescription:"These are opportunities to provide alternative content for audio and video. This may improve the experience for users with hearing or vision impairments.",a11yTablesListsVideoGroupTitle:"Tables and lists",a11yTablesListsVideoGroupDescription:"These are opportunities to improve the experience of reading tabular or list data using assistive technology, like a screen reader.",seoCategoryTitle:"SEO",seoCategoryDescription:"These checks ensure that your page is following basic search engine optimization advice. There are many additional factors Lighthouse does not score here that may affect your search ranking, including performance on [Core Web Vitals](https://web.dev/learn-core-web-vitals/). [Learn more about Google Search Essentials](https://support.google.com/webmasters/answer/35769).",seoCategoryManualDescription:"Run these additional validators on your site to check additional SEO best practices.",seoMobileGroupTitle:"Mobile Friendly",
-seoMobileGroupDescription:"Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn how to make pages mobile-friendly](https://developers.google.com/search/mobile-sites/).",seoContentGroupTitle:"Content Best Practices",seoContentGroupDescription:"Format your HTML in a way that enables crawlers to better understand your app’s content.",seoCrawlingGroupTitle:"Crawling and Indexing",seoCrawlingGroupDescription:"To appear in search results, crawlers need access to your app.",pwaCategoryTitle:"PWA",pwaCategoryDescription:"These checks validate the aspects of a Progressive Web App. [Learn what makes a good Progressive Web App](https://web.dev/pwa-checklist/).",pwaCategoryManualDescription:"These checks are required by the baseline [PWA Checklist](https://web.dev/pwa-checklist/) but are not automatically checked by Lighthouse. They do not affect your score but it's important that you verify them manually.",
-bestPracticesCategoryTitle:"Best Practices",bestPracticesTrustSafetyGroupTitle:"Trust and Safety",bestPracticesUXGroupTitle:"User Experience",bestPracticesBrowserCompatGroupTitle:"Browser Compatibility",bestPracticesGeneralGroupTitle:"General",pwaInstallableGroupTitle:"Installable",pwaOptimizedGroupTitle:"PWA Optimized"},gi=createIcuMessageFn("core/config/default-config.js",pi),hi={settings:Qr,artifacts:[{id:"DevtoolsLog",gatherer:"devtools-log"},{id:"Trace",gatherer:"trace"},{id:"Accessibility",gatherer:"accessibility"},{id:"AnchorElements",gatherer:"anchor-elements"},{id:"CacheContents",gatherer:"cache-contents"},{id:"ConsoleMessages",gatherer:"console-messages"},{id:"CSSUsage",gatherer:"css-usage"},{id:"Doctype",gatherer:"dobetterweb/doctype"},{id:"DOMStats",gatherer:"dobetterweb/domstats"},{id:"EmbeddedContent",gatherer:"seo/embedded-content"},{id:"FontSize",gatherer:"seo/font-size"},{id:"Inputs",gatherer:"inputs"},{id:"GlobalListeners",gatherer:"global-listeners"},{
-id:"IFrameElements",gatherer:"iframe-elements"},{id:"ImageElements",gatherer:"image-elements"},{id:"InstallabilityErrors",gatherer:"installability-errors"},{id:"InspectorIssues",gatherer:"inspector-issues"},{id:"JsUsage",gatherer:"js-usage"},{id:"LinkElements",gatherer:"link-elements"},{id:"MainDocumentContent",gatherer:"main-document-content"},{id:"MetaElements",gatherer:"meta-elements"},{id:"NetworkUserAgent",gatherer:"network-user-agent"},{id:"OptimizedImages",gatherer:"dobetterweb/optimized-images"},{id:"ResponseCompression",gatherer:"dobetterweb/response-compression"},{id:"RobotsTxt",gatherer:"seo/robots-txt"},{id:"ServiceWorker",gatherer:"service-worker"},{id:"ScriptElements",gatherer:"script-elements"},{id:"Scripts",gatherer:"scripts"},{id:"SourceMaps",gatherer:"source-maps"},{id:"Stacks",gatherer:"stacks"},{id:"TagsBlockingFirstPaint",gatherer:"dobetterweb/tags-blocking-first-paint"},{id:"TapTargets",gatherer:"seo/tap-targets"},{id:"TraceElements",gatherer:"trace-elements"},{
-id:"ViewportDimensions",gatherer:"viewport-dimensions"},{id:"WebAppManifest",gatherer:"web-app-manifest"},{id:"devtoolsLogs",gatherer:"devtools-log-compat"},{id:"traces",gatherer:"trace-compat"},{id:"FullPageScreenshot",gatherer:"full-page-screenshot"},{id:"BFCacheFailures",gatherer:"bf-cache-failures"}],
-audits:["is-on-https","service-worker","viewport","metrics/first-contentful-paint","metrics/largest-contentful-paint","metrics/first-meaningful-paint","metrics/speed-index","screenshot-thumbnails","final-screenshot","metrics/total-blocking-time","metrics/max-potential-fid","metrics/cumulative-layout-shift","metrics/experimental-interaction-to-next-paint","errors-in-console","server-response-time","metrics/interactive","user-timings","critical-request-chains","redirects","installable-manifest","splash-screen","themed-omnibox","maskable-icon","content-width","image-aspect-ratio","image-size-responsive","preload-fonts","deprecations","mainthread-work-breakdown","bootup-time","uses-rel-preload","uses-rel-preconnect","font-display","diagnostics","network-requests","network-rtt","network-server-latency","main-thread-tasks","metrics","performance-budget","timing-budget","resource-summary","third-party-summary","third-party-facades","largest-contentful-paint-element","lcp-lazy-loaded","layout-shift-elements","long-tasks","no-unload-listeners","non-composited-animations","unsized-images","valid-source-maps","prioritize-lcp-image","csp-xss","script-treemap-data","manual/pwa-cross-browser","manual/pwa-page-transitions","manual/pwa-each-page-has-url","accessibility/accesskeys","accessibility/aria-allowed-attr","accessibility/aria-command-name","accessibility/aria-dialog-name","accessibility/aria-hidden-body","accessibility/aria-hidden-focus","accessibility/aria-input-field-name","accessibility/aria-meter-name","accessibility/aria-progressbar-name","accessibility/aria-required-attr","accessibility/aria-required-children","accessibility/aria-required-parent","accessibility/aria-roles","accessibility/aria-text","accessibility/aria-toggle-field-name","accessibility/aria-tooltip-name","accessibility/aria-treeitem-name","accessibility/aria-valid-attr-value","accessibility/aria-valid-attr","accessibility/button-name","accessibility/bypass","accessibility/color-contrast","accessibility/definition-list","accessibility/dlitem","accessibility/document-title","accessibility/duplicate-id-active","accessibility/duplicate-id-aria","accessibility/empty-heading","accessibility/form-field-multiple-labels","accessibility/frame-title","accessibility/heading-order","accessibility/html-has-lang","accessibility/html-lang-valid","accessibility/html-xml-lang-mismatch","accessibility/identical-links-same-purpose","accessibility/image-alt","accessibility/input-button-name","accessibility/input-image-alt","accessibility/label","accessibility/landmark-one-main","accessibility/link-name","accessibility/link-in-text-block","accessibility/list","accessibility/listitem","accessibility/meta-refresh","accessibility/meta-viewport","accessibility/object-alt","accessibility/select-name","accessibility/tabindex","accessibility/table-fake-caption","accessibility/target-size","accessibility/td-has-header","accessibility/td-headers-attr","accessibility/th-has-data-cells","accessibility/valid-lang","accessibility/video-caption","accessibility/manual/custom-controls-labels","accessibility/manual/custom-controls-roles","accessibility/manual/focus-traps","accessibility/manual/focusable-controls","accessibility/manual/interactive-element-affordance","accessibility/manual/logical-tab-order","accessibility/manual/managed-focus","accessibility/manual/offscreen-content-hidden","accessibility/manual/use-landmarks","accessibility/manual/visual-order-follows-dom","byte-efficiency/uses-long-cache-ttl","byte-efficiency/total-byte-weight","byte-efficiency/offscreen-images","byte-efficiency/render-blocking-resources","byte-efficiency/unminified-css","byte-efficiency/unminified-javascript","byte-efficiency/unused-css-rules","byte-efficiency/unused-javascript","byte-efficiency/modern-image-formats","byte-efficiency/uses-optimized-images","byte-efficiency/uses-text-compression","byte-efficiency/uses-responsive-images","byte-efficiency/efficient-animated-content","byte-efficiency/duplicated-javascript","byte-efficiency/legacy-javascript","byte-efficiency/uses-responsive-images-snapshot","dobetterweb/doctype","dobetterweb/charset","dobetterweb/dom-size","dobetterweb/geolocation-on-start","dobetterweb/inspector-issues","dobetterweb/no-document-write","dobetterweb/js-libraries","dobetterweb/notification-on-start","dobetterweb/paste-preventing-inputs","dobetterweb/uses-http2","dobetterweb/uses-passive-event-listeners","seo/meta-description","seo/http-status-code","seo/font-size","seo/link-text","seo/crawlable-anchors","seo/is-crawlable","seo/robots-txt","seo/tap-targets","seo/hreflang","seo/plugins","seo/canonical","seo/manual/structured-data","work-during-interaction","bf-cache"],
-groups:{metrics:{title:gi(pi.metricGroupTitle)},"load-opportunities":{title:gi(pi.loadOpportunitiesGroupTitle),description:gi(pi.loadOpportunitiesGroupDescription)},budgets:{title:gi(pi.budgetsGroupTitle),description:gi(pi.budgetsGroupDescription)},diagnostics:{title:gi(pi.diagnosticsGroupTitle),description:gi(pi.diagnosticsGroupDescription)},"pwa-installable":{title:gi(pi.pwaInstallableGroupTitle)},"pwa-optimized":{title:gi(pi.pwaOptimizedGroupTitle)},"a11y-best-practices":{title:gi(pi.a11yBestPracticesGroupTitle),description:gi(pi.a11yBestPracticesGroupDescription)},"a11y-color-contrast":{title:gi(pi.a11yColorContrastGroupTitle),description:gi(pi.a11yColorContrastGroupDescription)},"a11y-names-labels":{title:gi(pi.a11yNamesLabelsGroupTitle),description:gi(pi.a11yNamesLabelsGroupDescription)},"a11y-navigation":{title:gi(pi.a11yNavigationGroupTitle),description:gi(pi.a11yNavigationGroupDescription)},"a11y-aria":{title:gi(pi.a11yAriaGroupTitle),
-description:gi(pi.a11yAriaGroupDescription)},"a11y-language":{title:gi(pi.a11yLanguageGroupTitle),description:gi(pi.a11yLanguageGroupDescription)},"a11y-audio-video":{title:gi(pi.a11yAudioVideoGroupTitle),description:gi(pi.a11yAudioVideoGroupDescription)},"a11y-tables-lists":{title:gi(pi.a11yTablesListsVideoGroupTitle),description:gi(pi.a11yTablesListsVideoGroupDescription)},"seo-mobile":{title:gi(pi.seoMobileGroupTitle),description:gi(pi.seoMobileGroupDescription)},"seo-content":{title:gi(pi.seoContentGroupTitle),description:gi(pi.seoContentGroupDescription)},"seo-crawl":{title:gi(pi.seoCrawlingGroupTitle),description:gi(pi.seoCrawlingGroupDescription)},"best-practices-trust-safety":{title:gi(pi.bestPracticesTrustSafetyGroupTitle)},"best-practices-ux":{title:gi(pi.bestPracticesUXGroupTitle)},"best-practices-browser-compat":{title:gi(pi.bestPracticesBrowserCompatGroupTitle)},"best-practices-general":{title:gi(pi.bestPracticesGeneralGroupTitle)},hidden:{title:""}},categories:{
-performance:{title:gi(pi.performanceCategoryTitle),supportedModes:["navigation","timespan","snapshot"],auditRefs:[{id:"first-contentful-paint",weight:10,group:"metrics",acronym:"FCP",relevantAudits:mi.fcpRelevantAudits},{id:"largest-contentful-paint",weight:25,group:"metrics",acronym:"LCP",relevantAudits:mi.lcpRelevantAudits},{id:"total-blocking-time",weight:30,group:"metrics",acronym:"TBT",relevantAudits:mi.tbtRelevantAudits},{id:"cumulative-layout-shift",weight:25,group:"metrics",acronym:"CLS",relevantAudits:mi.clsRelevantAudits},{id:"speed-index",weight:10,group:"metrics",acronym:"SI"},{id:"experimental-interaction-to-next-paint",weight:0,group:"metrics",acronym:"INP",relevantAudits:mi.inpRelevantAudits},{id:"interactive",weight:0,group:"hidden",acronym:"TTI"},{id:"max-potential-fid",weight:0,group:"hidden"},{id:"first-meaningful-paint",weight:0,acronym:"FMP",group:"hidden"},{id:"render-blocking-resources",weight:0},{id:"uses-responsive-images",weight:0},{id:"offscreen-images",
-weight:0},{id:"unminified-css",weight:0},{id:"unminified-javascript",weight:0},{id:"unused-css-rules",weight:0},{id:"unused-javascript",weight:0},{id:"uses-optimized-images",weight:0},{id:"modern-image-formats",weight:0},{id:"uses-text-compression",weight:0},{id:"uses-rel-preconnect",weight:0},{id:"server-response-time",weight:0},{id:"redirects",weight:0},{id:"uses-rel-preload",weight:0},{id:"uses-http2",weight:0},{id:"efficient-animated-content",weight:0},{id:"duplicated-javascript",weight:0},{id:"legacy-javascript",weight:0},{id:"prioritize-lcp-image",weight:0},{id:"total-byte-weight",weight:0},{id:"uses-long-cache-ttl",weight:0},{id:"dom-size",weight:0},{id:"critical-request-chains",weight:0},{id:"user-timings",weight:0},{id:"bootup-time",weight:0},{id:"mainthread-work-breakdown",weight:0},{id:"font-display",weight:0},{id:"resource-summary",weight:0},{id:"third-party-summary",weight:0},{id:"third-party-facades",weight:0},{id:"largest-contentful-paint-element",weight:0},{
-id:"lcp-lazy-loaded",weight:0},{id:"layout-shift-elements",weight:0},{id:"uses-passive-event-listeners",weight:0},{id:"no-document-write",weight:0},{id:"long-tasks",weight:0},{id:"non-composited-animations",weight:0},{id:"unsized-images",weight:0},{id:"viewport",weight:0},{id:"uses-responsive-images-snapshot",weight:0},{id:"work-during-interaction",weight:0},{id:"bf-cache",weight:0},{id:"performance-budget",weight:0,group:"budgets"},{id:"timing-budget",weight:0,group:"budgets"},{id:"network-requests",weight:0,group:"hidden"},{id:"network-rtt",weight:0,group:"hidden"},{id:"network-server-latency",weight:0,group:"hidden"},{id:"main-thread-tasks",weight:0,group:"hidden"},{id:"diagnostics",weight:0,group:"hidden"},{id:"metrics",weight:0,group:"hidden"},{id:"screenshot-thumbnails",weight:0,group:"hidden"},{id:"final-screenshot",weight:0,group:"hidden"},{id:"script-treemap-data",weight:0,group:"hidden"}]},accessibility:{title:gi(pi.a11yCategoryTitle),
-description:gi(pi.a11yCategoryDescription),manualDescription:gi(pi.a11yCategoryManualDescription),supportedModes:["navigation","snapshot"],auditRefs:[{id:"accesskeys",weight:3,group:"a11y-navigation"},{id:"aria-allowed-attr",weight:10,group:"a11y-aria"},{id:"aria-command-name",weight:3,group:"a11y-aria"},{id:"aria-dialog-name",weight:3,group:"a11y-aria"},{id:"aria-hidden-body",weight:10,group:"a11y-aria"},{id:"aria-hidden-focus",weight:3,group:"a11y-aria"},{id:"aria-input-field-name",weight:3,group:"a11y-aria"},{id:"aria-meter-name",weight:3,group:"a11y-aria"},{id:"aria-progressbar-name",weight:3,group:"a11y-aria"},{id:"aria-required-attr",weight:10,group:"a11y-aria"},{id:"aria-required-children",weight:10,group:"a11y-aria"},{id:"aria-required-parent",weight:10,group:"a11y-aria"},{id:"aria-roles",weight:10,group:"a11y-aria"},{id:"aria-text",weight:3,group:"a11y-aria"},{id:"aria-toggle-field-name",weight:3,group:"a11y-aria"},{id:"aria-tooltip-name",weight:3,group:"a11y-aria"},{
-id:"aria-treeitem-name",weight:3,group:"a11y-aria"},{id:"aria-valid-attr-value",weight:10,group:"a11y-aria"},{id:"aria-valid-attr",weight:10,group:"a11y-aria"},{id:"button-name",weight:10,group:"a11y-names-labels"},{id:"bypass",weight:3,group:"a11y-navigation"},{id:"color-contrast",weight:3,group:"a11y-color-contrast"},{id:"definition-list",weight:3,group:"a11y-tables-lists"},{id:"dlitem",weight:3,group:"a11y-tables-lists"},{id:"document-title",weight:3,group:"a11y-names-labels"},{id:"duplicate-id-active",weight:3,group:"a11y-navigation"},{id:"duplicate-id-aria",weight:10,group:"a11y-aria"},{id:"form-field-multiple-labels",weight:2,group:"a11y-names-labels"},{id:"frame-title",weight:3,group:"a11y-names-labels"},{id:"heading-order",weight:2,group:"a11y-navigation"},{id:"html-has-lang",weight:3,group:"a11y-language"},{id:"html-lang-valid",weight:3,group:"a11y-language"},{id:"html-xml-lang-mismatch",weight:2,group:"a11y-language"},{id:"image-alt",weight:10,group:"a11y-names-labels"},{
-id:"input-button-name",weight:10,group:"a11y-names-labels"},{id:"input-image-alt",weight:10,group:"a11y-names-labels"},{id:"label",weight:10,group:"a11y-names-labels"},{id:"link-in-text-block",weight:3,group:"a11y-color-contrast"},{id:"link-name",weight:3,group:"a11y-names-labels"},{id:"list",weight:3,group:"a11y-tables-lists"},{id:"listitem",weight:3,group:"a11y-tables-lists"},{id:"meta-refresh",weight:10,group:"a11y-best-practices"},{id:"meta-viewport",weight:10,group:"a11y-best-practices"},{id:"object-alt",weight:3,group:"a11y-names-labels"},{id:"select-name",weight:3,group:"a11y-names-labels"},{id:"tabindex",weight:3,group:"a11y-navigation"},{id:"table-fake-caption",weight:3,group:"a11y-tables-lists"},{id:"td-has-header",weight:10,group:"a11y-tables-lists"},{id:"td-headers-attr",weight:3,group:"a11y-tables-lists"},{id:"th-has-data-cells",weight:3,group:"a11y-tables-lists"},{id:"valid-lang",weight:3,group:"a11y-language"},{id:"video-caption",weight:10,group:"a11y-audio-video"},{
-id:"logical-tab-order",weight:0},{id:"focusable-controls",weight:0},{id:"interactive-element-affordance",weight:0},{id:"managed-focus",weight:0},{id:"focus-traps",weight:0},{id:"custom-controls-labels",weight:0},{id:"custom-controls-roles",weight:0},{id:"visual-order-follows-dom",weight:0},{id:"offscreen-content-hidden",weight:0},{id:"use-landmarks",weight:0},{id:"empty-heading",weight:0,group:"hidden"},{id:"identical-links-same-purpose",weight:0,group:"hidden"},{id:"landmark-one-main",weight:0,group:"hidden"},{id:"target-size",weight:0,group:"hidden"}]},"best-practices":{title:gi(pi.bestPracticesCategoryTitle),supportedModes:["navigation","timespan","snapshot"],auditRefs:[{id:"is-on-https",weight:1,group:"best-practices-trust-safety"},{id:"geolocation-on-start",weight:1,group:"best-practices-trust-safety"},{id:"notification-on-start",weight:1,group:"best-practices-trust-safety"},{id:"csp-xss",weight:0,group:"best-practices-trust-safety"},{id:"paste-preventing-inputs",weight:1,
-group:"best-practices-ux"},{id:"image-aspect-ratio",weight:1,group:"best-practices-ux"},{id:"image-size-responsive",weight:1,group:"best-practices-ux"},{id:"preload-fonts",weight:1,group:"best-practices-ux"},{id:"doctype",weight:1,group:"best-practices-browser-compat"},{id:"charset",weight:1,group:"best-practices-browser-compat"},{id:"no-unload-listeners",weight:1,group:"best-practices-general"},{id:"js-libraries",weight:0,group:"best-practices-general"},{id:"deprecations",weight:1,group:"best-practices-general"},{id:"errors-in-console",weight:1,group:"best-practices-general"},{id:"valid-source-maps",weight:0,group:"best-practices-general"},{id:"inspector-issues",weight:1,group:"best-practices-general"}]},seo:{title:gi(pi.seoCategoryTitle),description:gi(pi.seoCategoryDescription),manualDescription:gi(pi.seoCategoryManualDescription),supportedModes:["navigation","snapshot"],auditRefs:[{id:"viewport",weight:1,group:"seo-mobile"},{id:"document-title",weight:1,group:"seo-content"},{
-id:"meta-description",weight:1,group:"seo-content"},{id:"http-status-code",weight:1,group:"seo-crawl"},{id:"link-text",weight:1,group:"seo-content"},{id:"crawlable-anchors",weight:1,group:"seo-crawl"},{id:"is-crawlable",weight:1,group:"seo-crawl"},{id:"robots-txt",weight:1,group:"seo-crawl"},{id:"image-alt",weight:1,group:"seo-content"},{id:"hreflang",weight:1,group:"seo-content"},{id:"canonical",weight:1,group:"seo-content"},{id:"font-size",weight:1,group:"seo-mobile"},{id:"plugins",weight:1,group:"seo-content"},{id:"tap-targets",weight:1,group:"seo-mobile"},{id:"structured-data",weight:0}]},pwa:{title:gi(pi.pwaCategoryTitle),description:gi(pi.pwaCategoryDescription),manualDescription:gi(pi.pwaCategoryManualDescription),supportedModes:["navigation"],auditRefs:[{id:"installable-manifest",weight:2,group:"pwa-installable"},{id:"service-worker",weight:1,group:"pwa-optimized"},{id:"splash-screen",weight:1,group:"pwa-optimized"},{id:"themed-omnibox",weight:1,group:"pwa-optimized"},{
-id:"content-width",weight:1,group:"pwa-optimized"},{id:"viewport",weight:2,group:"pwa-optimized"},{id:"maskable-icon",weight:1,group:"pwa-optimized"},{id:"pwa-cross-browser",weight:0},{id:"pwa-page-transitions",weight:0},{id:"pwa-each-page-has-url",weight:0}]}}};Object.defineProperty(hi,"UIStrings",{enumerable:!1,get:()=>pi});const fi=JSON.parse(JSON.stringify(hi));if(!fi.categories)throw new Error("Default config should always have categories");delete fi.artifacts;const yi=["experimental-interaction-to-next-paint","uses-responsive-images-snapshot","work-during-interaction"];function assertValidPluginName(e,t){if(!t.startsWith("lighthouse-plugin-"))throw new Error(`plugin name '${t}' does not start with 'lighthouse-plugin-'`);if(e.categories?.[t])throw new Error(`plugin name '${t}' not allowed because it is the id of a category already found in config`)}function assertValidFRGatherer(e){const t=e.instance,n=t.name
-;if("object"!=typeof t.meta)throw new Error(`${n} gatherer did not provide a meta object.`);if(0===t.meta.supportedModes.length)throw new Error(`${n} gatherer did not support any gather modes.`);if("function"!=typeof t.getArtifact||t.getArtifact===FRGatherer.prototype.getArtifact)throw new Error(`${n} gatherer did not define a "getArtifact" method.`)}function assertValidAudit(e){const{implementation:t,path:n}=e,a=n||t?.meta?.id||"Unknown audit";if("function"!=typeof t.audit||t.audit===Audit.audit)throw new Error(`${a} has no audit() method.`);if("string"!=typeof t.meta.id)throw new Error(`${a} has no meta.id property, or the property is not a string.`);if(!isStringOrIcuMessage(t.meta.title))throw new Error(`${a} has no meta.title property, or the property is not a string.`);const r=t.meta.scoreDisplayMode||Audit.SCORING_MODES.BINARY;if(!isStringOrIcuMessage(t.meta.failureTitle)&&r===Audit.SCORING_MODES.BINARY)throw new Error(`${a} has no meta.failureTitle and should.`)
-;if(!isStringOrIcuMessage(t.meta.description))throw new Error(`${a} has no meta.description property, or the property is not a string.`);if(""===t.meta.description)throw new Error(`${a} has an empty meta.description string. Please add a description for the UI.`);if(!Array.isArray(t.meta.requiredArtifacts))throw new Error(`${a} has no meta.requiredArtifacts property, or the property is not an array.`)}function assertValidCategories(e,t,n){if(!e)return;const a=new Map((t||[]).map((e=>[e.implementation.meta.id,e])));Object.keys(e).forEach((t=>{e[t].auditRefs.forEach(((e,r)=>{if(!e.id)throw new Error(`missing an audit id at ${t}[${r}]`);const o=a.get(e.id);if(!o)throw new Error(`could not find ${e.id} audit for category ${t}`);const i="manual"===o.implementation.meta.scoreDisplayMode;if("accessibility"===t&&!e.group&&!i)throw new Error(`${e.id} accessibility audit does not have a group`);if(e.weight>0&&i)throw new Error(`${e.id} is manual but has a positive weight`)
-;if(e.group&&(!n||!n[e.group]))throw new Error(`${e.id} references unknown group ${e.group}`)}))}))}function assertValidSettings(e){if(!e.formFactor)throw new Error("`settings.formFactor` must be defined as 'mobile' or 'desktop'. See https://github.com/GoogleChrome/lighthouse/blob/main/docs/emulation.md");if(!e.screenEmulation.disabled&&e.screenEmulation.mobile!==("mobile"===e.formFactor))throw new Error(`Screen emulation mobile setting (${e.screenEmulation.mobile}) does not match formFactor setting (${e.formFactor}). See https://github.com/GoogleChrome/lighthouse/blob/main/docs/emulation.md`);const t=e.skipAudits?.find((t=>e.onlyAudits?.includes(t)));if(t)throw new Error(`${t} appears in both skipAudits and onlyAudits`)}function assertValidConfig(e){const{warnings:t}=function assertValidFRNavigations(e){if(!e||!e.length)return{warnings:[]};const t=[],n=e[0];if("fatal"!==n.loadFailureMode){
-const e=n.loadFailureMode,a=[`"${n.id}" is the first navigation but had a failure mode of ${e}.`,"The first navigation will always be treated as loadFailureMode=fatal."].join(" ");t.push(a),n.loadFailureMode="fatal"}const a=e.map((e=>e.id)),r=a.find(((e,t)=>a.slice(t+1).some((t=>e===t))));if(r)throw new Error(`Navigation must have unique identifiers, but "${r}" was repeated.`);return{warnings:t}}(e.navigations),n=new Set;for(const t of e.artifacts||[]){if(n.has(t.id))throw new Error(`Config defined multiple artifacts with id '${t.id}'`);n.add(t.id),assertValidFRGatherer(t.gatherer)}for(const t of e.audits||[])assertValidAudit(t);return assertValidCategories(e.categories,e.audits,e.groups),assertValidSettings(e.settings),{warnings:t}}function throwInvalidDependencyOrder(e,t){
-throw new Error([`Failed to find dependency "${t}" for "${e}" artifact`,"Check that...",`  1. A gatherer exposes a matching Symbol that satisfies "${t}".`,`  2. "${t}" is configured to run before "${e}"`].join("\n"))}function isArrayOfUnknownObjects$1(e){return Array.isArray(e)&&e.every(isObjectOfUnknownProperties$1)}function isObjectOfUnknownProperties$1(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function isNumber(e){return"number"==typeof e&&!isNaN(e)}fi.audits=fi.audits?.filter((e=>!yi.find((t=>e.toString().endsWith(t))))),fi.categories.performance.auditRefs=fi.categories.performance.auditRefs.filter((e=>!yi.includes(e.id))),fi.passes=[{passName:"defaultPass",recordTrace:!0,useThrottling:!0,pauseAfterFcpMs:1e3,pauseAfterLoadMs:1e3,networkQuietThresholdMs:1e3,cpuQuietThresholdMs:1e3,
-gatherers:["css-usage","js-usage","viewport-dimensions","console-messages","anchor-elements","image-elements","link-elements","meta-elements","script-elements","scripts","iframe-elements","inputs","main-document-content","global-listeners","dobetterweb/doctype","dobetterweb/domstats","dobetterweb/optimized-images","dobetterweb/response-compression","dobetterweb/tags-blocking-first-paint","seo/font-size","seo/embedded-content","seo/robots-txt","seo/tap-targets","accessibility","trace-elements","inspector-issues","source-maps","web-app-manifest","installability-errors","stacks","full-page-screenshot","bf-cache-failures"]},{passName:"offlinePass",loadFailureMode:"ignore",gatherers:["service-worker"]}];class Budget{static assertNoExcessProperties(e,t){const n=Object.keys(e);if(n.length>0){const e=n.join(", ");throw new Error(`${t} has unrecognized properties: [${e}]`)}}static assertNoDuplicateStrings(e,t){const n=new Set;for(const a of e){
-if(n.has(a))throw new Error(`${t} has duplicate entry of type '${a}'`);n.add(a)}}static validateResourceBudget(e){const{resourceType:t,budget:n,...a}=e;Budget.assertNoExcessProperties(a,"Resource Budget");const r=["total","document","script","stylesheet","image","media","font","other","third-party"];if(!r.includes(t))throw new Error(`Invalid resource type: ${t}. \nValid resource types are: ${r.join(", ")}`);if(!isNumber(n))throw new Error(`Invalid budget: ${n}`);return{resourceType:t,budget:n}}static throwInvalidPathError(e,t){throw new Error(`Invalid path ${e}. ${t}\n'Path' should be specified using the 'robots.txt' format.\nLearn more about the 'robots.txt' format here:\nhttps://developers.google.com/search/reference/robots_txt#url-matching-based-on-path-values`)}static validatePath(e){if(void 0!==e){
-if("string"==typeof e)return e.startsWith("/")?(e.match(/\*/g)||[]).length>1?this.throwInvalidPathError(e,"Path should only contain one '*'."):(e.match(/\$/g)||[]).length>1?this.throwInvalidPathError(e,"Path should only contain one '$' character."):e.includes("$")&&!e.endsWith("$")&&this.throwInvalidPathError(e,"'$' character should only occur at end of path."):this.throwInvalidPathError(e,"Path should start with '/'."),e;this.throwInvalidPathError(e,"Path should be a string.")}}static getMatchingBudget(e,t){if(null!==e&&void 0!==t)for(let n=e.length-1;n>=0;n--){const a=e[n];if(this.urlMatchesPattern(t,a.path))return a}}static urlMatchesPattern(e,t="/"){const n=new URL(e),a=n.pathname+n.search,r=t.includes("*"),o=t.includes("$");if(!r&&!o)return a.startsWith(t);if(!r&&o)return a===t.slice(0,-1);if(r&&!o){const[e,n]=t.split("*"),r=a.slice(e.length);return a.startsWith(e)&&r.includes(n)}if(r&&o){const[e,n]=t.split("*"),r=a.slice(e.length);return a.startsWith(e)&&r.endsWith(n.slice(0,-1))
-}return!1}static validateTimingBudget(e){const{metric:t,budget:n,...a}=e;Budget.assertNoExcessProperties(a,"Timing Budget");const r=["first-contentful-paint","interactive","first-meaningful-paint","max-potential-fid","total-blocking-time","speed-index","largest-contentful-paint","cumulative-layout-shift"];if(!r.includes(t))throw new Error(`Invalid timing metric: ${t}. \nValid timing metrics are: ${r.join(", ")}`);if(!isNumber(n))throw new Error(`Invalid budget: ${n}`);return{metric:t,budget:n}}static validateHostname(e){const t=`${e} is not a valid hostname.`;if(0===e.length)throw new Error(t);if(e.includes("/"))throw new Error(t);if(e.includes(":"))throw new Error(t);if(e.includes("*")&&(!e.startsWith("*.")||e.lastIndexOf("*")>0))throw new Error(t);return e}static validateHostnames(e){if(Array.isArray(e)&&e.every((e=>"string"==typeof e)))return e.map(Budget.validateHostname);if(void 0!==e)throw new Error("firstPartyHostnames should be defined as an array of strings.")}
-static initializeBudget(e){if(!isArrayOfUnknownObjects$1(e=JSON.parse(JSON.stringify(e))))throw new Error("Budget file is not defined as an array of budgets.");return e.map(((e,t)=>{const n={},{path:a,options:r,resourceSizes:o,resourceCounts:i,timings:s,...c}=e;if(Budget.assertNoExcessProperties(c,"Budget"),n.path=Budget.validatePath(a),isObjectOfUnknownProperties$1(r)){const{firstPartyHostnames:e,...t}=r;Budget.assertNoExcessProperties(t,"Options property"),n.options={},n.options.firstPartyHostnames=Budget.validateHostnames(e)}else if(void 0!==r)throw new Error(`Invalid options property in budget at index ${t}`);if(isArrayOfUnknownObjects$1(o))n.resourceSizes=o.map(Budget.validateResourceBudget),Budget.assertNoDuplicateStrings(n.resourceSizes.map((e=>e.resourceType)),`budgets[${t}].resourceSizes`);else if(void 0!==o)throw new Error(`Invalid resourceSizes entry in budget at index ${t}`);if(isArrayOfUnknownObjects$1(i))n.resourceCounts=i.map(Budget.validateResourceBudget),
-Budget.assertNoDuplicateStrings(n.resourceCounts.map((e=>e.resourceType)),`budgets[${t}].resourceCounts`);else if(void 0!==i)throw new Error(`Invalid resourceCounts entry in budget at index ${t}`);if(isArrayOfUnknownObjects$1(s))n.timings=s.map(Budget.validateTimingBudget),Budget.assertNoDuplicateStrings(n.timings.map((e=>e.metric)),`budgets[${t}].timings`);else if(void 0!==s)throw new Error(`Invalid timings entry in budget at index ${t}`);return n}))}}function isArrayOfUnknownObjects(e){return Array.isArray(e)&&e.every(isObjectOfUnknownProperties)}function isObjectOfUnknownProperties(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function objectIsGatherMode(e){return"string"==typeof e&&("navigation"===e||"timespan"===e||"snapshot"===e)}function assertNoExcessProperties(e,t,n=""){n&&(n+=" ");const a=Object.keys(e);if(a.length>0){const e=a.join(", ");throw new Error(`${t} has unrecognized ${n}properties: [${e}]`)}}class ConfigPlugin{static _parseAuditsList(e,t){if(void 0!==e){
-if(!isArrayOfUnknownObjects(e))throw new Error(`${t} has an invalid audits array.`);return e.map((e=>{const{path:n,...a}=e;if(assertNoExcessProperties(a,t,"audit"),"string"!=typeof n)throw new Error(`${t} has a missing audit path.`);return{path:n}}))}}static _parseAuditRefsList(e,t){if(!isArrayOfUnknownObjects(e))throw new Error(`${t} has no valid auditsRefs.`);return e.map((e=>{const{id:n,weight:a,group:r,...o}=e;if(assertNoExcessProperties(o,t,"auditRef"),"string"!=typeof n)throw new Error(`${t} has an invalid auditRef id.`);if("number"!=typeof a)throw new Error(`${t} has an invalid auditRef weight.`);if("string"!=typeof r&&void 0!==r)throw new Error(`${t} has an invalid auditRef group.`);return{id:n,weight:a,group:r?`${t}-${r}`:r}}))}static _parseCategory(e,t){if(!isObjectOfUnknownProperties(e))throw new Error(`${t} has no valid category.`);const{title:n,description:a,manualDescription:r,auditRefs:o,supportedModes:i,...s}=e;if(assertNoExcessProperties(s,t,"category"),
-!isStringOrIcuMessage(n))throw new Error(`${t} has an invalid category tile.`);if(!isStringOrIcuMessage(a)&&void 0!==a)throw new Error(`${t} has an invalid category description.`);if(!isStringOrIcuMessage(r)&&void 0!==r)throw new Error(`${t} has an invalid category manualDescription.`);if(!function isArrayOfGatherModes(e){return!!Array.isArray(e)&&e.every(objectIsGatherMode)}(i)&&void 0!==i)throw new Error(`${t} supportedModes must be an array, valid array values are "navigation", "timespan", and "snapshot".`);return{title:n,auditRefs:ConfigPlugin._parseAuditRefsList(o,t),description:a,manualDescription:r,supportedModes:i}}static _parseGroups(e,t){if(void 0===e)return;if(!isObjectOfUnknownProperties(e))throw new Error(`${t} groups json is not defined as an object.`);const n=Object.entries(e),a={};return n.forEach((([e,n])=>{if(!isObjectOfUnknownProperties(n))throw new Error(`${t} has a group not defined as an object.`);const{title:r,description:o,...i}=n
-;if(assertNoExcessProperties(i,t,"group"),!isStringOrIcuMessage(r))throw new Error(`${t} has an invalid group title.`);if(!isStringOrIcuMessage(o)&&void 0!==o)throw new Error(`${t} has an invalid group description.`);a[`${t}-${e}`]={title:r,description:o}})),a}static parsePlugin(e,t){if(!isObjectOfUnknownProperties(e=JSON.parse(JSON.stringify(e))))throw new Error(`${t} is not defined as an object.`);const{audits:n,category:a,groups:r,...o}=e;return assertNoExcessProperties(o,t),{audits:ConfigPlugin._parseAuditsList(n,t),categories:{[t]:ConfigPlugin._parseCategory(a,t)},groups:ConfigPlugin._parseGroups(r,t)}}}const bi={resolve(){throw new Error("createRequire.resolve is not supported in bundled Lighthouse")}};function isBundledEnvironment(){if(globalThis.isDevtools||globalThis.isLightrider)return!0;try{return bi.resolve("lighthouse-logger"),!1}catch(e){return!0}}const vi=function _mergeConfigFragment(e,t,n=!1){if(null==e)return t;if(void 0===t)return e;if(Array.isArray(t)){if(n)return t
-;if(!Array.isArray(e))throw new TypeError("Expected array but got "+typeof e);const a=e.slice();return t.forEach((e=>{a.some((t=>Xa(t,e)))||a.push(e)})),a}if("object"==typeof t){if("object"!=typeof e)throw new TypeError("Expected object but got "+typeof e);if(Array.isArray(e))throw new TypeError("Expected object but got Array");return Object.keys(t).forEach((a=>{const r=n||"settings"===a&&"object"==typeof e[a];e[a]=_mergeConfigFragment(e[a],t[a],r)})),e}return t};const wi=new Map([["../gather/gatherers/accessibility",Promise.resolve().then((function(){return Oi}))],["../gather/gatherers/anchor-elements",Promise.resolve().then((function(){return Bi}))],["../gather/gatherers/bf-cache-failures",Promise.resolve().then((function(){return Ui}))],["../gather/gatherers/cache-contents",Promise.resolve().then((function(){return ji}))],["../gather/gatherers/console-messages",Promise.resolve().then((function(){return zi}))],["../gather/gatherers/css-usage",Promise.resolve().then((function(){
-return qi}))],["../gather/gatherers/devtools-log-compat",Promise.resolve().then((function(){return Wi}))],["../gather/gatherers/devtools-log",Promise.resolve().then((function(){return Vr}))],["../gather/gatherers/dobetterweb/doctype",Promise.resolve().then((function(){return $i}))],["../gather/gatherers/dobetterweb/domstats",Promise.resolve().then((function(){return Vi}))],["../gather/gatherers/dobetterweb/optimized-images",Promise.resolve().then((function(){return Gi}))],["../gather/gatherers/dobetterweb/response-compression",Promise.resolve().then((function(){return $s}))],["../gather/gatherers/dobetterweb/tags-blocking-first-paint",Promise.resolve().then((function(){return Vs}))],["../gather/gatherers/full-page-screenshot",Promise.resolve().then((function(){return Hs}))],["../gather/gatherers/global-listeners",Promise.resolve().then((function(){return Gs}))],["../gather/gatherers/iframe-elements",Promise.resolve().then((function(){return Ys
-}))],["../gather/gatherers/image-elements",Promise.resolve().then((function(){return Js}))],["../gather/gatherers/inputs",Promise.resolve().then((function(){return Xs}))],["../gather/gatherers/inspector-issues",Promise.resolve().then((function(){return Zs}))],["../gather/gatherers/installability-errors",Promise.resolve().then((function(){return Qs}))],["../gather/gatherers/js-usage",Promise.resolve().then((function(){return ec}))],["../gather/gatherers/link-elements",Promise.resolve().then((function(){return hc}))],["../gather/gatherers/main-document-content",Promise.resolve().then((function(){return fc}))],["../gather/gatherers/meta-elements",Promise.resolve().then((function(){return yc}))],["../gather/gatherers/network-user-agent",Promise.resolve().then((function(){return _o}))],["../gather/gatherers/script-elements",Promise.resolve().then((function(){return bc}))],["../gather/gatherers/scripts",Promise.resolve().then((function(){return vc
-}))],["../gather/gatherers/seo/embedded-content",Promise.resolve().then((function(){return wc}))],["../gather/gatherers/seo/font-size",Promise.resolve().then((function(){return Ks}))],["../gather/gatherers/seo/robots-txt",Promise.resolve().then((function(){return Dc}))],["../gather/gatherers/seo/tap-targets",Promise.resolve().then((function(){return Tc}))],["../gather/gatherers/service-worker",Promise.resolve().then((function(){return Cc}))],["../gather/gatherers/source-maps",Promise.resolve().then((function(){return Rc}))],["../gather/gatherers/stacks",Promise.resolve().then((function(){return Ic}))],["../gather/gatherers/trace-compat",Promise.resolve().then((function(){return Mc}))],["../gather/gatherers/trace-elements",Promise.resolve().then((function(){return jc}))],["../gather/gatherers/trace",Promise.resolve().then((function(){return Gr}))],["../gather/gatherers/viewport-dimensions",Promise.resolve().then((function(){return zc
-}))],["../gather/gatherers/web-app-manifest",Promise.resolve().then((function(){return Vc}))],["../audits/accessibility/accesskeys",Promise.resolve().then((function(){return Jc}))],["../audits/accessibility/aria-allowed-attr",Promise.resolve().then((function(){return Qc}))],["../audits/accessibility/aria-command-name",Promise.resolve().then((function(){return nl}))],["../audits/accessibility/aria-dialog-name",Promise.resolve().then((function(){return ol}))],["../audits/accessibility/aria-hidden-body",Promise.resolve().then((function(){return cl}))],["../audits/accessibility/aria-hidden-focus",Promise.resolve().then((function(){return dl}))],["../audits/accessibility/aria-input-field-name",Promise.resolve().then((function(){return gl}))],["../audits/accessibility/aria-meter-name",Promise.resolve().then((function(){return yl}))],["../audits/accessibility/aria-progressbar-name",Promise.resolve().then((function(){return wl
-}))],["../audits/accessibility/aria-required-attr",Promise.resolve().then((function(){return Tl}))],["../audits/accessibility/aria-required-children",Promise.resolve().then((function(){return _l}))],["../audits/accessibility/aria-required-parent",Promise.resolve().then((function(){return xl}))],["../audits/accessibility/aria-roles",Promise.resolve().then((function(){return Il}))],["../audits/accessibility/aria-text",Promise.resolve().then((function(){return Nl}))],["../audits/accessibility/aria-toggle-field-name",Promise.resolve().then((function(){return Bl}))],["../audits/accessibility/aria-tooltip-name",Promise.resolve().then((function(){return zl}))],["../audits/accessibility/aria-treeitem-name",Promise.resolve().then((function(){return $l}))],["../audits/accessibility/aria-valid-attr-value",Promise.resolve().then((function(){return Gl}))],["../audits/accessibility/aria-valid-attr",Promise.resolve().then((function(){return Jl
-}))],["../audits/accessibility/button-name",Promise.resolve().then((function(){return Ql}))],["../audits/accessibility/bypass",Promise.resolve().then((function(){return nu}))],["../audits/accessibility/color-contrast",Promise.resolve().then((function(){return ou}))],["../audits/accessibility/definition-list",Promise.resolve().then((function(){return cu}))],["../audits/accessibility/dlitem",Promise.resolve().then((function(){return du}))],["../audits/accessibility/document-title",Promise.resolve().then((function(){return gu}))],["../audits/accessibility/duplicate-id-active",Promise.resolve().then((function(){return yu}))],["../audits/accessibility/duplicate-id-aria",Promise.resolve().then((function(){return wu}))],["../audits/accessibility/empty-heading",Promise.resolve().then((function(){return Tu}))],["../audits/accessibility/form-field-multiple-labels",Promise.resolve().then((function(){return _u}))],["../audits/accessibility/frame-title",Promise.resolve().then((function(){return xu
-}))],["../audits/accessibility/heading-order",Promise.resolve().then((function(){return Iu}))],["../audits/accessibility/html-has-lang",Promise.resolve().then((function(){return Nu}))],["../audits/accessibility/html-lang-valid",Promise.resolve().then((function(){return Bu}))],["../audits/accessibility/html-xml-lang-mismatch",Promise.resolve().then((function(){return zu}))],["../audits/accessibility/identical-links-same-purpose",Promise.resolve().then((function(){return $u}))],["../audits/accessibility/image-alt",Promise.resolve().then((function(){return Gu}))],["../audits/accessibility/input-button-name",Promise.resolve().then((function(){return Ju}))],["../audits/accessibility/input-image-alt",Promise.resolve().then((function(){return Qu}))],["../audits/accessibility/label",Promise.resolve().then((function(){return nd}))],["../audits/accessibility/landmark-one-main",Promise.resolve().then((function(){return od
-}))],["../audits/accessibility/link-in-text-block",Promise.resolve().then((function(){return cd}))],["../audits/accessibility/link-name",Promise.resolve().then((function(){return dd}))],["../audits/accessibility/list",Promise.resolve().then((function(){return gd}))],["../audits/accessibility/listitem",Promise.resolve().then((function(){return yd}))],["../audits/accessibility/manual/custom-controls-labels",Promise.resolve().then((function(){return bd}))],["../audits/accessibility/manual/custom-controls-roles",Promise.resolve().then((function(){return vd}))],["../audits/accessibility/manual/focus-traps",Promise.resolve().then((function(){return wd}))],["../audits/accessibility/manual/focusable-controls",Promise.resolve().then((function(){return Dd}))],["../audits/accessibility/manual/interactive-element-affordance",Promise.resolve().then((function(){return Ed}))],["../audits/accessibility/manual/logical-tab-order",Promise.resolve().then((function(){return Td
-}))],["../audits/accessibility/manual/managed-focus",Promise.resolve().then((function(){return Cd}))],["../audits/accessibility/manual/offscreen-content-hidden",Promise.resolve().then((function(){return Sd}))],["../audits/accessibility/manual/use-landmarks",Promise.resolve().then((function(){return _d}))],["../audits/accessibility/manual/visual-order-follows-dom",Promise.resolve().then((function(){return Ad}))],["../audits/accessibility/meta-refresh",Promise.resolve().then((function(){return Fd}))],["../audits/accessibility/meta-viewport",Promise.resolve().then((function(){return Md}))],["../audits/accessibility/object-alt",Promise.resolve().then((function(){return Pd}))],["../audits/accessibility/select-name",Promise.resolve().then((function(){return Ud}))],["../audits/accessibility/tabindex",Promise.resolve().then((function(){return qd}))],["../audits/accessibility/table-fake-caption",Promise.resolve().then((function(){return Vd
-}))],["../audits/accessibility/target-size",Promise.resolve().then((function(){return Yd}))],["../audits/accessibility/td-has-header",Promise.resolve().then((function(){return Xd}))],["../audits/accessibility/td-headers-attr",Promise.resolve().then((function(){return em}))],["../audits/accessibility/th-has-data-cells",Promise.resolve().then((function(){return am}))],["../audits/accessibility/valid-lang",Promise.resolve().then((function(){return im}))],["../audits/accessibility/video-caption",Promise.resolve().then((function(){return lm}))],["../audits/autocomplete",Promise.resolve().then((function(){return hm}))],["../audits/bf-cache",Promise.resolve().then((function(){return Tm}))],["../audits/bootup-time",Promise.resolve().then((function(){return Rm}))],["../audits/byte-efficiency/duplicated-javascript",Promise.resolve().then((function(){return qm}))],["../audits/byte-efficiency/efficient-animated-content",Promise.resolve().then((function(){return Vm
-}))],["../audits/byte-efficiency/legacy-javascript",Promise.resolve().then((function(){return Km}))],["../audits/byte-efficiency/modern-image-formats",Promise.resolve().then((function(){return Zm}))],["../audits/byte-efficiency/offscreen-images",Promise.resolve().then((function(){return ap}))],["../audits/byte-efficiency/render-blocking-resources",Promise.resolve().then((function(){return lp}))],["../audits/byte-efficiency/total-byte-weight",Promise.resolve().then((function(){return mp}))],["../audits/byte-efficiency/unminified-css",Promise.resolve().then((function(){return yp}))],["../audits/byte-efficiency/unminified-javascript",Promise.resolve().then((function(){return wp}))],["../audits/byte-efficiency/unused-css-rules",Promise.resolve().then((function(){return Tp}))],["../audits/byte-efficiency/unused-javascript",Promise.resolve().then((function(){return xp}))],["../audits/byte-efficiency/uses-long-cache-ttl",Promise.resolve().then((function(){return Mp
-}))],["../audits/byte-efficiency/uses-optimized-images",Promise.resolve().then((function(){return Pp}))],["../audits/byte-efficiency/uses-responsive-images-snapshot",Promise.resolve().then((function(){return Wp}))],["../audits/byte-efficiency/uses-responsive-images",Promise.resolve().then((function(){return jp}))],["../audits/byte-efficiency/uses-text-compression",Promise.resolve().then((function(){return Hp}))],["../audits/content-width",Promise.resolve().then((function(){return Kp}))],["../audits/critical-request-chains",Promise.resolve().then((function(){return Qp}))],["../audits/csp-xss",Promise.resolve().then((function(){return jg}))],["../audits/deprecations",Promise.resolve().then((function(){return Yg}))],["../audits/diagnostics",Promise.resolve().then((function(){return Kg}))],["../audits/dobetterweb/charset",Promise.resolve().then((function(){return th}))],["../audits/dobetterweb/doctype",Promise.resolve().then((function(){return rh
-}))],["../audits/dobetterweb/dom-size",Promise.resolve().then((function(){return sh}))],["../audits/dobetterweb/geolocation-on-start",Promise.resolve().then((function(){return dh}))],["../audits/dobetterweb/inspector-issues",Promise.resolve().then((function(){return gh}))],["../audits/dobetterweb/js-libraries",Promise.resolve().then((function(){return yh}))],["../audits/dobetterweb/no-document-write",Promise.resolve().then((function(){return wh}))],["../audits/dobetterweb/notification-on-start",Promise.resolve().then((function(){return Th}))],["../audits/dobetterweb/paste-preventing-inputs",Promise.resolve().then((function(){return _h}))],["../audits/dobetterweb/uses-http2",Promise.resolve().then((function(){return Fh}))],["../audits/dobetterweb/uses-passive-event-listeners",Promise.resolve().then((function(){return Mh}))],["../audits/errors-in-console",Promise.resolve().then((function(){return Ph}))],["../audits/final-screenshot",Promise.resolve().then((function(){return Bh
-}))],["../audits/font-display",Promise.resolve().then((function(){return $h}))],["../audits/image-aspect-ratio",Promise.resolve().then((function(){return Gh}))],["../audits/image-size-responsive",Promise.resolve().then((function(){return Jh}))],["../audits/installable-manifest",Promise.resolve().then((function(){return tf}))],["../audits/is-on-https",Promise.resolve().then((function(){return of}))],["../audits/largest-contentful-paint-element",Promise.resolve().then((function(){return mf}))],["../audits/layout-shift-elements",Promise.resolve().then((function(){return hf}))],["../audits/lcp-lazy-loaded",Promise.resolve().then((function(){return bf}))],["../audits/long-tasks",Promise.resolve().then((function(){return Ef}))],["../audits/main-thread-tasks",Promise.resolve().then((function(){return Tf}))],["../audits/mainthread-work-breakdown",Promise.resolve().then((function(){return _f}))],["../audits/manual/pwa-cross-browser",Promise.resolve().then((function(){return xf
-}))],["../audits/manual/pwa-each-page-has-url",Promise.resolve().then((function(){return If}))],["../audits/manual/pwa-page-transitions",Promise.resolve().then((function(){return Nf}))],["../audits/maskable-icon",Promise.resolve().then((function(){return Bf}))],["../audits/metrics",Promise.resolve().then((function(){return py}))],["../audits/metrics/cumulative-layout-shift",Promise.resolve().then((function(){return fy}))],["../audits/metrics/experimental-interaction-to-next-paint",Promise.resolve().then((function(){return vy}))],["../audits/metrics/first-contentful-paint-3g",Promise.resolve().then((function(){return Dy}))],["../audits/metrics/first-contentful-paint",Promise.resolve().then((function(){return Cy}))],["../audits/metrics/first-meaningful-paint",Promise.resolve().then((function(){return Ay}))],["../audits/metrics/interactive",Promise.resolve().then((function(){return Fy}))],["../audits/metrics/largest-contentful-paint",Promise.resolve().then((function(){return My
-}))],["../audits/metrics/max-potential-fid",Promise.resolve().then((function(){return Py}))],["../audits/metrics/speed-index",Promise.resolve().then((function(){return Uy}))],["../audits/metrics/total-blocking-time",Promise.resolve().then((function(){return qy}))],["../audits/network-requests",Promise.resolve().then((function(){return Wy}))],["../audits/network-rtt",Promise.resolve().then((function(){return Hy}))],["../audits/network-server-latency",Promise.resolve().then((function(){return Ky}))],["../audits/no-unload-listeners",Promise.resolve().then((function(){return Zy}))],["../audits/non-composited-animations",Promise.resolve().then((function(){return nb}))],["../audits/oopif-iframe-test-audit",Promise.resolve().then((function(){return ab}))],["../audits/performance-budget",Promise.resolve().then((function(){return sb}))],["../audits/predictive-perf",Promise.resolve().then((function(){return lb}))],["../audits/preload-fonts",Promise.resolve().then((function(){return pb
-}))],["../audits/prioritize-lcp-image",Promise.resolve().then((function(){return fb}))],["../audits/redirects",Promise.resolve().then((function(){return vb}))],["../audits/resource-summary",Promise.resolve().then((function(){return Eb}))],["../audits/screenshot-thumbnails",Promise.resolve().then((function(){return Tb}))],["../audits/script-elements-test-audit",Promise.resolve().then((function(){return Cb}))],["../audits/script-treemap-data",Promise.resolve().then((function(){return Sb}))],["../audits/seo/canonical",Promise.resolve().then((function(){return kb}))],["../audits/seo/crawlable-anchors",Promise.resolve().then((function(){return Rb}))],["../audits/seo/font-size",Promise.resolve().then((function(){return Pb}))],["../audits/seo/hreflang",Promise.resolve().then((function(){return jb}))],["../audits/seo/http-status-code",Promise.resolve().then((function(){return Wb}))],["../audits/seo/is-crawlable",Promise.resolve().then((function(){return Jb
-}))],["../audits/seo/link-text",Promise.resolve().then((function(){return ev}))],["../audits/seo/manual/structured-data",Promise.resolve().then((function(){return av}))],["../audits/seo/meta-description",Promise.resolve().then((function(){return iv}))],["../audits/seo/plugins",Promise.resolve().then((function(){return gv}))],["../audits/seo/robots-txt",Promise.resolve().then((function(){return Cv}))],["../audits/seo/tap-targets",Promise.resolve().then((function(){return Av}))],["../audits/server-response-time",Promise.resolve().then((function(){return Fv}))],["../audits/service-worker",Promise.resolve().then((function(){return Mv}))],["../audits/splash-screen",Promise.resolve().then((function(){return Pv}))],["../audits/themed-omnibox",Promise.resolve().then((function(){return Uv}))],["../audits/third-party-facades",Promise.resolve().then((function(){return Hv}))],["../audits/third-party-summary",Promise.resolve().then((function(){return qv
-}))],["../audits/timing-budget",Promise.resolve().then((function(){return Kv}))],["../audits/unsized-images",Promise.resolve().then((function(){return Zv}))],["../audits/user-timings",Promise.resolve().then((function(){return nw}))],["../audits/uses-rel-preconnect",Promise.resolve().then((function(){return ow}))],["../audits/uses-rel-preload",Promise.resolve().then((function(){return cw}))],["../audits/valid-source-maps",Promise.resolve().then((function(){return dw}))],["../audits/viewport",Promise.resolve().then((function(){return gw}))],["../audits/work-during-interaction",Promise.resolve().then((function(){return yw}))],["lighthouse-plugin-publisher-ads",Promise.resolve().then((function(){return kw}))],["lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks",Promise.resolve().then((function(){return Jw}))],["lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources",Promise.resolve().then((function(){return eD
-}))],["lighthouse-plugin-publisher-ads/audits/ad-request-critical-path",Promise.resolve().then((function(){return rD}))],["lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start",Promise.resolve().then((function(){return cD}))],["lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start",Promise.resolve().then((function(){return dD}))],["lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport",Promise.resolve().then((function(){return hD}))],["lighthouse-plugin-publisher-ads/audits/ads-in-viewport",Promise.resolve().then((function(){return vD}))],["lighthouse-plugin-publisher-ads/audits/async-ad-tags",Promise.resolve().then((function(){return ED}))],["lighthouse-plugin-publisher-ads/audits/blocking-load-events",Promise.resolve().then((function(){return _D}))],["lighthouse-plugin-publisher-ads/audits/bottleneck-requests",Promise.resolve().then((function(){return FD}))],["lighthouse-plugin-publisher-ads/audits/duplicate-tags",Promise.resolve().then((function(){
-return ND}))],["lighthouse-plugin-publisher-ads/audits/first-ad-render",Promise.resolve().then((function(){return UD}))],["lighthouse-plugin-publisher-ads/audits/full-width-slots",Promise.resolve().then((function(){return qD}))],["lighthouse-plugin-publisher-ads/audits/gpt-bids-parallel",Promise.resolve().then((function(){return VD}))],["lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source",Promise.resolve().then((function(){return YD}))],["lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https",Promise.resolve().then((function(){return XD}))],["lighthouse-plugin-publisher-ads/audits/script-injected-tags",Promise.resolve().then((function(){return nE}))],["lighthouse-plugin-publisher-ads/audits/serial-header-bidding",Promise.resolve().then((function(){return lE}))],["lighthouse-plugin-publisher-ads/audits/tag-load-time",Promise.resolve().then((function(){return pE
-}))],["lighthouse-plugin-publisher-ads/audits/viewport-ad-density",Promise.resolve().then((function(){return fE}))],["lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift",Promise.resolve().then((function(){return vE}))],["lighthouse-plugin-publisher-ads/audits/deprecated-api-usage",Promise.resolve().then((function(){return EE}))],["lighthouse-plugin-publisher-ads/audits/gpt-errors-overall",Promise.resolve().then((function(){return SE}))],["lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time",Promise.resolve().then((function(){return xE}))],["lighthouse-plugin-soft-navigation",Promise.resolve().then((function(){return FE}))],["lighthouse-plugin-soft-navigation/audits/soft-nav-fcp",Promise.resolve().then((function(){return RE}))],["lighthouse-plugin-soft-navigation/audits/soft-nav-lcp",Promise.resolve().then((function(){return IE}))]]);async function requireWrapper(e){let t;if(Q.isAbsolute(e)&&(e=sr.pathToFileURL(e).href),
-wi.has(e)?t=await wi.get(e):(e.match(/\.(js|mjs|cjs)$/)||(e+=".js"),t=await import(e)),t.default)return t.default;const n=new Set(["meta"]),a=Object.keys(t).filter((e=>!!(t[e]&&t[e]instanceof Object)&&Object.getOwnPropertyNames(t[e]).some((e=>n.has(e)))));if(1===a.length)return a[0];if(a.length>1)throw new Error(`module '${e}' has too many possible exports`);throw new Error(`module '${e}' missing default export`)}function cleanFlagsForSettings(e={}){const t={};for(const n of Object.keys(e))n in Qr&&(t[n]=e[n]);return t}function resolveSettings(e={},t){const n=lookupLocale(t?.locale||e.locale),{defaultSettings:a}=ao,r=vi(deepClone(a),e,!0),o=vi(r,cleanFlagsForSettings(t),!0);return o.budgets&&(o.budgets=Budget.initializeBudget(o.budgets)),o.locale=n,!0===o.emulatedUserAgent&&(o.emulatedUserAgent=Zr[o.formFactor]),assertValidSettings(o),o}async function mergePlugins(e,t,n){const a=e.plugins||[],r=new Set([...a,...n?.plugins||[]]);for(const n of r){assertValidPluginName(e,n)
-;const a=isBundledEnvironment()?n:resolveModulePath(n,t,"plugin"),r=await requireWrapper(a),o=ConfigPlugin.parsePlugin(r,n);e=vi(e,o)}return e}async function resolveGathererToDefn(e,t,n){const a=function expandGathererShorthand(e){if("string"==typeof e)return{path:e};if("implementation"in e||"instance"in e)return e;if("path"in e){if("string"!=typeof e.path)throw new Error("Invalid Gatherer type "+JSON.stringify(e));return e}if("function"==typeof e)return{implementation:e};if(e&&"function"==typeof e.beforePass)return{instance:e};throw new Error("Invalid Gatherer type "+JSON.stringify(e))}(e);if(a.instance)return{instance:a.instance,implementation:a.implementation,path:a.path};if(a.implementation){return{instance:new(0,a.implementation),implementation:a.implementation,path:a.path}}if(a.path){return async function requireGatherer(e,t,n){const a=t.find((t=>t===`${e}.js`));let r=`../gather/gatherers/${e}`;a||(r=resolveModulePath(e,n,"gatherer"));const o=await requireWrapper(r);return{
-instance:new o,implementation:o,path:e}}(a.path,t,n)}throw new Error("Invalid expanded Gatherer: "+JSON.stringify(a))}async function resolveAuditsToDefns(e,t){if(!e)return null;const n=Runner.getAuditList(),a=e.map((async e=>{const a=function expandAuditShorthand(e){if("string"==typeof e)return{path:e,options:{}};if("implementation"in e&&"function"==typeof e.implementation.audit)return e;if("path"in e&&"string"==typeof e.path)return e;if("audit"in e&&"function"==typeof e.audit)return{implementation:e,options:{}};throw new Error("Invalid Audit type "+JSON.stringify(e))}(e);let r;return r="implementation"in a?a.implementation:await function requireAudit(e,t,n){const a=`${e}.js`;let r=`../audits/${e}`;if(!t.find((e=>e===a)))if(isBundledEnvironment())r=e;else{const t=resolveModulePath(e,n,"audit");r=isBundledEnvironment()?Q.relative(getModuleDirectory({url:"core/config/config-helpers.js"}),t):t}return requireWrapper(r)}(a.path,n,t),{implementation:r,path:a.path,options:a.options||{}}
-})),r=function(e){const t=[];for(const n of e){const e=n.path&&t.find((e=>e.path===n.path));e?e.options=Object.assign({},e.options,n.options):t.push(n)}return t}(await Promise.all(a));return r.forEach((e=>assertValidAudit(e))),r}function resolveModulePath(e,t,n){try{return bi.resolve(e)}catch(e){}try{return bi.resolve(e,{paths:[process.cwd()]})}catch(e){}const a=Q.resolve(process.cwd(),e);try{return bi.resolve(a)}catch(e){}const r="Unable to locate "+(n?`${n}: `:"")+`\`${e}\`.\n     Tried to resolve the module from these locations:\n       ${getModuleDirectory({url:"core/config/config-helpers.js"})}\n       ${a}`;if(!t)throw new Error(r);const o=Q.resolve(t,e);try{return bi.resolve(o)}catch(e){}try{return bi.resolve(e,{paths:[t]})}catch(e){}throw new Error(r+`\n       ${o}`)}function shallowClone(e){return"object"==typeof e?Object.assign(Object.create(Object.getPrototypeOf(e)),e):e}function deepClone(e){return JSON.parse(JSON.stringify(e))}function deepCloneConfigJson(e){
-const t=deepClone(e);if(Array.isArray(t.passes)&&Array.isArray(e.passes))for(let n=0;n<t.passes.length;n++){t.passes[n].gatherers=(e.passes[n].gatherers||[]).map((e=>shallowClone(e)))}return Array.isArray(e.audits)&&(t.audits=e.audits.map((e=>shallowClone(e)))),Array.isArray(e.artifacts)&&(t.artifacts=e.artifacts.map((e=>({...e,gatherer:shallowClone(e.gatherer)})))),t}const Di=Object.keys({fetchTime:"",LighthouseRunWarnings:"",HostFormFactor:"",HostUserAgent:"",NetworkUserAgent:"",BenchmarkIndex:"",BenchmarkIndexes:"",GatherContext:"",traces:"",devtoolsLogs:"",settings:"",URL:"",Timing:"",PageLoadError:""}),Ei=["WebAppManifest","InstallabilityErrors","Stacks","FullPageScreenshot"],Ti={FullPageScreenshot:1,BFCacheFailures:1};class LegacyResolvedConfig{static async fromJson(e,t){const n={msg:"Create config",id:"lh:init:config"};Log.time(n,"verbose");let a=t?.configPath;if(e||(e=fi,a=Q.resolve(getModuleDirectory({url:"core/legacy/config/config.js"}),"./legacy-default-config.js")),
-a&&!Q.isAbsolute(a))throw new Error("configPath must be an absolute path.");if((e=deepCloneConfigJson(e)).extends){if("lighthouse:default"!==e.extends)throw new Error("`lighthouse:default` is the only valid extension method.");e=LegacyResolvedConfig.extendConfigJSON(deepCloneConfigJson(fi),e)}const r=a?Q.dirname(a):void 0,o=resolveSettings((e=await mergePlugins(e,r,t)).settings||{},t),i=LegacyResolvedConfig.augmentPassesWithDefaults(e.passes);LegacyResolvedConfig.adjustDefaultPassForThrottling(o,i);const s=await LegacyResolvedConfig.requireGatherers(i,r),c=await LegacyResolvedConfig.requireAudits(e.audits,r),l=new LegacyResolvedConfig(e,{settings:o,passes:s,audits:c});return Log.timeEnd(n),l}constructor(e,t){this.settings=t.settings,this.passes=t.passes,this.audits=t.audits,this.categories=e.categories||null,this.groups=e.groups||null,LegacyResolvedConfig.filterConfigIfNeeded(this),function assertValidPasses(e,t){if(!Array.isArray(e))return
-;const n=LegacyResolvedConfig.getGatherersRequestedByAudits(t),a=new Set(Di);e.forEach(((e,t)=>{0===t&&"fatal"!==e.loadFailureMode&&(Log.warn(`"${e.passName}" is the first pass but was marked as non-fatal. The first pass will always be treated as loadFailureMode=fatal.`),e.loadFailureMode="fatal"),e.gatherers.forEach((e=>{const t=e.instance;a.add(t.name);const r=n.has(t.name),o=Ei.includes(t.name);if(!r&&!o){const e=`${t.name} gatherer requested, however no audit requires it.`;Log.warn("config",e)}}))}));for(const e of t||[]){const t=e.implementation.meta;for(const e of t.requiredArtifacts)if(!a.has(e))throw new Error(`${e} gatherer, required by audit ${t.id}, was not found in config.`)}const r=new Set;e.forEach((e=>{const t=e.passName;if(r.has(t))throw new Error(`Passes must have unique names (repeated passName: ${t}.`);r.add(t)}))}(this.passes,this.audits),assertValidCategories(this.categories,this.audits,this.groups)}getPrintString(){const e=deepClone(this)
-;if(e.passes)for(const t of e.passes)for(const e of t.gatherers)e.implementation=void 0,e.instance=void 0;if(e.audits)for(const t of e.audits)t.implementation=void 0,0===Object.keys(t.options).length&&(t.options=void 0);return replaceIcuMessages(e,e.settings.locale),JSON.stringify(e,null,2)}static extendConfigJSON(e,t){if(t.passes&&e.passes){for(const n of t.passes){const t=n.passName||eo.passName,a=e.passes.find((e=>e.passName===t));a?vi(a,n):e.passes.push(n)}delete t.passes}return vi(e,t)}static augmentPassesWithDefaults(e){if(!e)return null;const{defaultPassConfig:t}=ao;return e.map((e=>vi(deepClone(t),e)))}static adjustDefaultPassForThrottling(e,t){if(!t||"devtools"!==e.throttlingMethod&&"provided"!==e.throttlingMethod)return;const n=t.find((e=>"defaultPass"===e.passName));if(!n)return;const a=no;n.pauseAfterFcpMs=Math.max(a.pauseAfterFcpMs,n.pauseAfterFcpMs),n.pauseAfterLoadMs=Math.max(a.pauseAfterLoadMs,n.pauseAfterLoadMs),
-n.cpuQuietThresholdMs=Math.max(a.cpuQuietThresholdMs,n.cpuQuietThresholdMs),n.networkQuietThresholdMs=Math.max(a.networkQuietThresholdMs,n.networkQuietThresholdMs)}static filterConfigIfNeeded(e){const t=e.settings;if(!(t.onlyCategories||t.onlyAudits||t.skipAudits||t.disableFullPageScreenshot))return;const{categories:n,requestedAuditNames:a}=LegacyResolvedConfig.filterCategoriesAndAudits(e.categories,t),r=e.audits&&e.audits.filter((e=>a.has(e.implementation.meta.id))),o=LegacyResolvedConfig.getGatherersRequestedByAudits(r);for(const e of Ei)o.add(e);t.disableFullPageScreenshot&&o.delete("FullPageScreenshot");const i=LegacyResolvedConfig.generatePassesNeededByGatherers(e.passes,o);e.categories=n,e.audits=r,e.passes=i}static filterCategoriesAndAudits(e,t){if(!e)return{categories:null,requestedAuditNames:new Set};if(t.onlyAudits&&t.skipAudits)throw new Error("Cannot set both skipAudits and onlyAudits")
-;const n={},a=!!t.onlyCategories,r=!!t.onlyAudits,o=t.onlyCategories||[],i=t.onlyAudits||[],s=t.skipAudits||[];o.forEach((t=>{e[t]||Log.warn("config",`unrecognized category in 'onlyCategories': ${t}`)}));const c=new Set(i.concat(s));for(const t of c){const n=Object.keys(e).find((n=>!!e[n].auditRefs.find((e=>e.id===t))));if(n)i.includes(t)&&o.includes(n)&&Log.warn("config",`${t} in 'onlyAudits' is already included by ${n} in 'onlyCategories'`);else{const e=s.includes(t)?"skipAudits":"onlyAudits";Log.warn("config",`unrecognized audit in '${e}': ${t}`)}}const l=new Set(i);return s.forEach((e=>l.delete(e))),Object.keys(e).forEach((t=>{const c=deepClone(e[t]);if(a&&r)o.includes(t)||(c.auditRefs=c.auditRefs.filter((e=>i.includes(e.id))));else if(a){if(!o.includes(t))return}else r&&(c.auditRefs=c.auditRefs.filter((e=>i.includes(e.id))));c.auditRefs=c.auditRefs.filter((e=>!s.includes(e.id))),c.auditRefs.length&&(n[t]=c,c.auditRefs.forEach((e=>l.add(e.id))))})),{categories:n,
-requestedAuditNames:l}}static getGatherersRequestedByAudits(e){if(!e)return new Set;const t=new Set;for(const n of e){const{requiredArtifacts:e,__internalOptionalArtifacts:a}=n.implementation.meta;e.forEach((e=>t.add(e))),a&&a.forEach((e=>t.add(e)))}return t}static generatePassesNeededByGatherers(e,t){if(!e)return null;const n=t.has("traces");return e.map((e=>{if(e.gatherers=e.gatherers.filter((e=>{const n=e.instance;return t.has(n.name)})),e.recordTrace&&!n){const t=e.passName||"unknown pass";Log.warn("config",`Trace not requested by an audit, dropping trace in ${t}`),e.recordTrace=!1}return e})).filter((e=>!!e.recordTrace||("defaultPass"===e.passName||e.gatherers.length>0)))}static async requireAudits(e,t){const n={msg:"Requiring audits",id:"lh:config:requireAudits"};Log.time(n,"verbose");const a=await resolveAuditsToDefns(e,t);return Log.timeEnd(n),a}static async requireGatherers(e,t){if(!e)return null;const n={msg:"Requiring gatherers",id:"lh:config:requireGatherers"}
-;Log.time(n,"verbose");const a=Runner.getGathererList(),r=e.map((async e=>{const n=await Promise.all(e.gatherers.map((e=>resolveGathererToDefn(e,a,t)))),r=Array.from(new Map(n.map((e=>[e.instance.name,e]))).values());return r.forEach((e=>function assertValidGatherer(e,t){if(t=t||e.name||"gatherer","function"!=typeof e.beforePass)throw new Error(`${t} has no beforePass() method.`);if("function"!=typeof e.pass)throw new Error(`${t} has no pass() method.`);if("function"!=typeof e.afterPass)throw new Error(`${t} has no afterPass() method.`)}(e.instance,e.path))),r.sort(((e,t)=>(Ti[e.instance.name]||0)-(Ti[t.instance.name]||0))),Object.assign(e,{gatherers:r})})),o=await Promise.all(r);return Log.timeEnd(n),o}}const Ci=EventEmitter;class ProtocolSession extends Ci{constructor(e){super(),this._cdpSession=e,this._targetInfo=void 0,this._nextProtocolTimeout=void 0,this._handleProtocolEvent=this._handleProtocolEvent.bind(this),this._cdpSession.on("*",this._handleProtocolEvent)}id(){
-return this._cdpSession.id()}_handleProtocolEvent(e,...t){this.emit(e,...t)}setTargetInfo(e){this._targetInfo=e}hasNextProtocolTimeout(){return void 0!==this._nextProtocolTimeout}getNextProtocolTimeout(){return this._nextProtocolTimeout||3e4}setNextProtocolTimeout(e){this._nextProtocolTimeout=e}sendCommand(e,...t){const n=this.getNextProtocolTimeout();let a;this._nextProtocolTimeout=void 0;const r=new Promise(((t,r)=>{n!==1/0&&(a=setTimeout(r,n,new LighthouseError(LighthouseError.errors.PROTOCOL_TIMEOUT,{protocolMethod:e})))})),o=this._cdpSession.send(e,...t);return Promise.race([o,r]).finally((()=>{a&&clearTimeout(a)}))}async dispose(){this._cdpSession.off("*",this._handleProtocolEvent),await this._cdpSession.detach()}}const Si=EventEmitter;class TargetManager extends Si{constructor(e){super(),this._enabled=!1,this._rootCdpSession=e,this._mainFrameId="",this._targetIdToTargets=new Map,this._executionContextIdToDescriptions=new Map,
-this._onSessionAttached=this._onSessionAttached.bind(this),this._onFrameNavigated=this._onFrameNavigated.bind(this),this._onExecutionContextCreated=this._onExecutionContextCreated.bind(this),this._onExecutionContextDestroyed=this._onExecutionContextDestroyed.bind(this),this._onExecutionContextsCleared=this._onExecutionContextsCleared.bind(this)}async _onFrameNavigated(e){if(!e.frame.parentId&&this._enabled)try{await this._rootCdpSession.send("Target.setAutoAttach",{autoAttach:!0,flatten:!0,waitForDebuggerOnStart:!0})}catch(e){if(this._enabled)throw e}}_findSession(e){for(const{session:t,cdpSession:n}of this._targetIdToTargets.values())if(n.id()===e)return t;throw new Error(`session ${e} not found`)}rootSession(){const e=this._rootCdpSession.id();return this._findSession(e)}mainFrameExecutionContexts(){return[...this._executionContextIdToDescriptions.values()].filter((e=>e.auxData.frameId===this._mainFrameId))}async _onSessionAttached(e){const t=new ProtocolSession(e);try{
-const n=await t.sendCommand("Target.getTargetInfo").catch((()=>null)),a=n?.targetInfo?.type,r="page"===a||"iframe"===a;if(!n||!r)return;const o=n.targetInfo.targetId;if(this._targetIdToTargets.has(o))return;t.setTargetInfo(n.targetInfo);const i=n.targetInfo.url||n.targetInfo.targetId;Log.verbose("target-manager",`target ${i} attached`);const s=this._getProtocolEventListener(a,t.id());e.on("*",s),e.on("sessionattached",this._onSessionAttached);const c={target:n.targetInfo,cdpSession:e,session:t,protocolListener:s};this._targetIdToTargets.set(o,c),await t.sendCommand("Network.enable"),await t.sendCommand("Target.setAutoAttach",{autoAttach:!0,flatten:!0,waitForDebuggerOnStart:!0})}catch(e){if(/Target closed/.test(e.message))return;throw e}finally{await t.sendCommand("Runtime.runIfWaitingForDebugger").catch((()=>{}))}}_onExecutionContextCreated(e){
-"__puppeteer_utility_world__"!==e.context.name&&"lighthouse_isolated_context"!==e.context.name&&this._executionContextIdToDescriptions.set(e.context.uniqueId,e.context)}_onExecutionContextDestroyed(e){this._executionContextIdToDescriptions.delete(e.executionContextUniqueId)}_onExecutionContextsCleared(){this._executionContextIdToDescriptions.clear()}_getProtocolEventListener(e,t){return(n,a)=>{const r={method:n,params:a,targetType:e,sessionId:t};this.emit("protocolevent",r)}}async enable(){this._enabled||(this._enabled=!0,this._targetIdToTargets=new Map,this._executionContextIdToDescriptions=new Map,this._rootCdpSession.on("Page.frameNavigated",this._onFrameNavigated),this._rootCdpSession.on("Runtime.executionContextCreated",this._onExecutionContextCreated),this._rootCdpSession.on("Runtime.executionContextDestroyed",this._onExecutionContextDestroyed),this._rootCdpSession.on("Runtime.executionContextsCleared",this._onExecutionContextsCleared),
-await this._rootCdpSession.send("Page.enable"),await this._rootCdpSession.send("Runtime.enable"),this._mainFrameId=(await this._rootCdpSession.send("Page.getFrameTree")).frameTree.frame.id,await this._onSessionAttached(this._rootCdpSession))}async disable(){this._rootCdpSession.off("Page.frameNavigated",this._onFrameNavigated),this._rootCdpSession.off("Runtime.executionContextCreated",this._onExecutionContextCreated),this._rootCdpSession.off("Runtime.executionContextDestroyed",this._onExecutionContextDestroyed),this._rootCdpSession.off("Runtime.executionContextsCleared",this._onExecutionContextsCleared);for(const{cdpSession:e,protocolListener:t}of this._targetIdToTargets.values())e.off("*",t),e.off("sessionattached",this._onSessionAttached);await this._rootCdpSession.send("Page.disable"),await this._rootCdpSession.send("Runtime.disable"),this._enabled=!1,this._targetIdToTargets=new Map,this._executionContextIdToDescriptions=new Map,this._mainFrameId=""}}const throwNotConnectedFn=()=>{
-throw new Error("Session not connected")},_i={setTargetInfo:throwNotConnectedFn,hasNextProtocolTimeout:throwNotConnectedFn,getNextProtocolTimeout:throwNotConnectedFn,setNextProtocolTimeout:throwNotConnectedFn,on:throwNotConnectedFn,once:throwNotConnectedFn,off:throwNotConnectedFn,sendCommand:throwNotConnectedFn,dispose:throwNotConnectedFn};class Driver{constructor(e){this._page=e,this._targetManager=void 0,this._executionContext=void 0,this._fetcher=void 0,this.defaultSession=_i}get executionContext(){return this._executionContext?this._executionContext:throwNotConnectedFn()}get fetcher(){return this._fetcher?this._fetcher:throwNotConnectedFn()}get targetManager(){return this._targetManager?this._targetManager:throwNotConnectedFn()}async url(){return this._page.url()}async connect(){if(this.defaultSession!==_i)return;const e={msg:"Connecting to browser",id:"lh:driver:connect"};Log.time(e);const t=await this._page.target().createCDPSession();this._targetManager=new TargetManager(t),
-await this._targetManager.enable(),this.defaultSession=this._targetManager.rootSession(),this._executionContext=new ExecutionContext(this.defaultSession),this._fetcher=new Fetcher(this.defaultSession),Log.timeEnd(e)}async disconnect(){this.defaultSession!==_i&&(await(this._targetManager?.disable()),await this.defaultSession.dispose())}}function createDependencyError(e,t){return new Error(`Dependency "${e.id}" failed with exception: ${t.message}`)}const Ai={startInstrumentation:void 0,startSensitiveInstrumentation:"startInstrumentation",stopSensitiveInstrumentation:"startSensitiveInstrumentation",stopInstrumentation:"stopSensitiveInstrumentation",getArtifact:"stopInstrumentation"};async function collectPhaseArtifacts(e){const{driver:t,page:n,artifactDefinitions:a,artifactState:r,baseArtifacts:o,phase:i,gatherMode:s,computedCache:c,settings:l}=e,u=Ai[i],d=u&&r[u]||{},m="getArtifact"===i;for(const e of a){Log.verbose(`artifacts:${i}`,e.id)
-;const a=e.gatherer.instance,u=(d[e.id]||Promise.resolve()).then((async()=>{const u=m?await collectArtifactDependencies(e,r.getArtifact):{},d={msg:`Getting artifact: ${e.id}`,id:`lh:gather:getArtifact:${e.id}`};m&&Log.time(d);const p=await a[i]({gatherMode:s,driver:t,page:n,baseArtifacts:o,dependencies:u,computedCache:c,settings:l});return m&&Log.timeEnd(d),p}));await u.catch((()=>{})),r[i][e.id]=u}}async function collectArtifactDependencies(e,t){if(!e.dependencies)return{};const n=Object.entries(e.dependencies).map((async([e,n])=>{const a=t[n.id];if(void 0===a)throw new Error(`"${n.id}" did not run`);if(a instanceof Error)throw createDependencyError(n,a);const r=Promise.resolve().then((()=>a)).catch((e=>Promise.reject(createDependencyError(n,e))));return[e,await r]}));return Object.fromEntries(await Promise.all(n))}async function awaitArtifacts(e){const t={};for(const[n,a]of Object.entries(e.getArtifact)){const e=await a.catch((e=>e));void 0!==e&&(t[n]=e)}return t}
-const ki=Object.keys({fetchTime:"",LighthouseRunWarnings:"",BenchmarkIndex:"",BenchmarkIndexes:"",settings:"",Timing:"",URL:"",PageLoadError:"",HostFormFactor:"",HostUserAgent:"",GatherContext:""}),xi=[],Fi=["Stacks","NetworkUserAgent","FullPageScreenshot"];function getAuditIdsInCategories(e,t){if(!e)return new Set;const n=(t=t||Object.keys(e)).map((t=>e[t])).flatMap((e=>e?.auditRefs||[]));return new Set(n.map((e=>e.id)))}function filterCategoriesByAvailableAudits(e,t){if(!e)return e;const n=new Map(t.map((e=>[e.implementation.meta.id,e.implementation.meta]))),a=Object.entries(e).map((([e,t])=>{const a={...t,auditRefs:t.auditRefs.filter((e=>n.has(e.id)))},r=a.auditRefs.length<t.auditRefs.length,o=a.auditRefs.every((e=>{const t=n.get(e.id);return!!t&&t.scoreDisplayMode===Audit.SCORING_MODES.MANUAL}));return r&&o&&(a.auditRefs=[]),[e,a]})).filter((e=>"object"==typeof e[1]&&e[1].auditRefs.length));return Object.fromEntries(a)}function filterConfigByGatherMode(e,t){
-const n=function filterArtifactsByGatherMode(e,t){return e?e.filter((e=>e.gatherer.instance.meta.supportedModes.includes(t))):null}(e.artifacts,t),a=function filterAuditsByAvailableArtifacts(e,t){if(!e)return null;const n=new Set(t.map((e=>e.id)).concat(ki));return e.filter((e=>e.implementation.meta.requiredArtifacts.every((e=>n.has(e)))))}(function filterAuditsByGatherMode(e,t){return e?e.filter((e=>{const n=e.implementation.meta;return!n.supportedModes||n.supportedModes.includes(t)})):null}(e.audits,t),n||[]),r=filterCategoriesByAvailableAudits(function filterCategoriesByGatherMode(e,t){if(!e)return null;const n=Object.entries(e).filter((([e,n])=>!n.supportedModes||n.supportedModes.includes(t)));return Object.fromEntries(n)}(e.categories,t),a||[]);return{...e,artifacts:n,audits:a,categories:r}}function filterConfigByExplicitFilters(e,t){const{onlyAudits:n,onlyCategories:a,skipAudits:r}=t;!function warnOnUnknownOnlyCategories(e,t){
-if(t)for(const n of t)e?.[n]||Log.warn("config",`unrecognized category in 'onlyCategories': ${n}`)}(e.categories,a);let o=getAuditIdsInCategories(e.categories,void 0);a?o=getAuditIdsInCategories(e.categories,a):n?o=new Set:e.categories&&Object.keys(e.categories).length||(o=new Set(e.audits?.map((e=>e.implementation.meta.id))));const i=new Set([...o,...n||[],...xi].filter((e=>!r||!r.includes(e)))),s=i.size&&e.audits?e.audits.filter((e=>i.has(e.implementation.meta.id))):e.audits,c=function filterCategoriesByExplicitFilters(e,t){if(!e||!t)return e;const n=Object.entries(e).filter((([e])=>t.includes(e)));return Object.fromEntries(n)}(filterCategoriesByAvailableAudits(e.categories,s||[]),a);let l=function filterArtifactsByAvailableAudits(e,t){if(!e)return null;if(!t)return e;const n=new Map(e.map((e=>[e.id,e]))),a=new Set([...Fi,...t.flatMap((e=>e.implementation.meta.requiredArtifacts))]);let r=0;for(;r!==a.size;){r=a.size;for(const e of a){const t=n.get(e)
-;if(t&&t.dependencies)for(const e of Object.values(t.dependencies))a.add(e.id)}}return e.filter((e=>a.has(e.id)))}(e.artifacts,s);l&&e.settings.disableFullPageScreenshot&&(l=l.filter((({id:e})=>"FullPageScreenshot"!==e)));const u=function filterNavigationsByAvailableArtifacts(e,t){if(!e)return e;const n=new Set(t.map((e=>e.id)).concat(ki));return e.map((e=>({...e,artifacts:e.artifacts.filter((e=>n.has(e.id)))}))).filter((e=>e.artifacts.length))}(e.navigations,l||[]);return{...e,artifacts:l,navigations:u,audits:s,categories:c}}const Ri=Q.join(getModuleDirectory({url:"core/config/config.js"}),"../../config/default-config.js"),Ii={FullPageScreenshot:1,BFCacheFailures:1};function resolveExtensions(e){if(!e.extends)return e;if("lighthouse:default"!==e.extends)throw new Error("`lighthouse:default` is the only valid extension method.");const{artifacts:t,...n}=e,a=deepCloneConfigJson(hi),r=vi(a,n);return r.artifacts=function mergeConfigFragmentArrayByKey(e,t,n){const a=new Map,r=e||[]
-;for(let e=0;e<r.length;e++){const t=r[e];a.set(n(t),{index:e,item:t})}for(const e of t||[]){const t=a.get(n(e));if(t){const n=t.item,a="object"==typeof e&&"object"==typeof n?vi(n,e,!0):e;r[t.index]=a}else r.push(e)}return r}(a.artifacts,t,(e=>e.id)),r}function resolveArtifactDependencies(e,t,n){if(!("dependencies"in t.instance.meta))return;const a=Object.entries(t.instance.meta.dependencies).map((([a,r])=>{const o=n.get(r);o||throwInvalidDependencyOrder(e.id,a);return function isValidArtifactDependency(e,t){const n={timespan:0,snapshot:1,navigation:2},a=Math.min(...e.instance.meta.supportedModes.map((e=>n[e]))),r=Math.min(...t.instance.meta.supportedModes.map((e=>n[e])));return a===n.timespan?r===n.timespan:a!==n.snapshot||r===n.snapshot}(t,o.gatherer)||function throwInvalidArtifactDependency(e,t){throw new Error([`Dependency "${t}" for "${e}" artifact is invalid.`,"The dependency must be collected before the dependent."].join("\n"))}(e.id,a),[a,{id:o.id}]}))
-;return Object.fromEntries(a)}function resolveFakeNavigations(e,t){if(!e)return null;const n={msg:"Resolve navigation definitions",id:"lh:config:resolveNavigationsToDefns"};Log.time(n,"verbose");const a={...to,artifacts:e,pauseAfterFcpMs:t.pauseAfterFcpMs,pauseAfterLoadMs:t.pauseAfterLoadMs,networkQuietThresholdMs:t.networkQuietThresholdMs,cpuQuietThresholdMs:t.cpuQuietThresholdMs,blankPage:t.blankPage};!function overrideNavigationThrottlingWindows(e,t){e.disableThrottling||"simulate"!==t.throttlingMethod&&(e.cpuQuietThresholdMs=Math.max(e.cpuQuietThresholdMs||0,no.cpuQuietThresholdMs),e.networkQuietThresholdMs=Math.max(e.networkQuietThresholdMs||0,no.networkQuietThresholdMs),e.pauseAfterFcpMs=Math.max(e.pauseAfterFcpMs||0,no.pauseAfterFcpMs),e.pauseAfterLoadMs=Math.max(e.pauseAfterLoadMs||0,no.pauseAfterLoadMs))}(a,t);const r=[a];return function assertArtifactTopologicalOrder(e){const t=new Set;for(const n of e)for(const e of n.artifacts)if(t.add(e.id),
-e.dependencies)for(const[n,{id:a}]of Object.entries(e.dependencies))t.has(a)||throwInvalidDependencyOrder(e.id,n)}(r),Log.timeEnd(n),r}async function initializeConfig(e,t,n={}){const a={msg:"Initialize config",id:"lh:config"};Log.time(a,"verbose");let{configWorkingCopy:r,configDir:o}=function resolveWorkingCopy(e,t){let{configPath:n}=t;if(n&&!Q.isAbsolute(n))throw new Error("configPath must be an absolute path");e||(e=hi,n=Ri);const a=n?Q.dirname(n):void 0;return{configWorkingCopy:deepCloneConfigJson(e),configPath:n,configDir:a}}(t,n);r=resolveExtensions(r),r=await mergePlugins(r,o,n);const i=resolveSettings(r.settings||{},n);!function overrideSettingsForGatherMode(e,t){"timespan"===t&&"simulate"===e.throttlingMethod&&(e.throttlingMethod="devtools")}(i,e);const s=await async function resolveArtifactsToDefns(e,t){if(!e)return null;const n={msg:"Resolve artifact definitions",id:"lh:config:resolveArtifactsToDefns"};Log.time(n,"verbose");const a=[...e]
-;a.sort(((e,t)=>(Ii[e.id]||0)-(Ii[t.id]||0)));const r=new Map,o=Runner.getGathererList(),i=[];for(const e of a){const n=e.gatherer,a=await resolveGathererToDefn(n,o,t);if(!("meta"in a.instance))throw new Error(`${a.instance.name} gatherer does not have a Fraggle Rock meta obj`);const s={id:e.id,gatherer:a,dependencies:resolveArtifactDependencies(e,a,r)},c=s.gatherer.instance.meta.symbol;c&&r.set(c,s),i.push(s)}return Log.timeEnd(n),i}(r.artifacts,o);let c={artifacts:s,navigations:resolveFakeNavigations(s,i),audits:await resolveAuditsToDefns(r.audits,o),categories:r.categories||null,groups:r.groups||null,settings:i};const{warnings:l}=assertValidConfig(c);return c=filterConfigByGatherMode(c,e),c=filterConfigByExplicitFilters(c,i),Log.timeEnd(a),{resolvedConfig:c,warnings:l}}async function startTimespanGather(e,t={}){const{flags:n={},config:a}=t;Log.setLevel(n.logLevel||"error");const{resolvedConfig:r}=await initializeConfig("timespan",a,n),o=new Driver(e);await o.connect()
-;const i=new Map,s=r.artifacts||[],c=await getBaseArtifacts(r,o,{gatherMode:"timespan"}),l={startInstrumentation:{},startSensitiveInstrumentation:{},stopSensitiveInstrumentation:{},stopInstrumentation:{},getArtifact:{}},u={driver:o,page:e,artifactDefinitions:s,artifactState:l,baseArtifacts:c,computedCache:i,gatherMode:"timespan",settings:r.settings};await async function prepareTargetForTimespanMode(e,t){const n={msg:"Preparing target for timespan mode",id:"lh:prepare:timespanMode"};Log.time(n),await prepareDeviceEmulation(e,t),await prepareThrottlingAndNetwork(e.defaultSession,t,{disableThrottling:!1,blockedUrlPatterns:void 0}),await warmUpIntlSegmenter(e),Log.timeEnd(n)}(o,r.settings);const d=await enableAsyncStacks(o.defaultSession);return await collectPhaseArtifacts({phase:"startInstrumentation",...u}),await collectPhaseArtifacts({phase:"startSensitiveInstrumentation",...u}),{async endTimespanGather(){const e=await o.url(),t={resolvedConfig:r,computedCache:i};return{
-artifacts:await Runner.gather((async()=>{c.URL={finalDisplayedUrl:e},await collectPhaseArtifacts({phase:"stopSensitiveInstrumentation",...u}),await collectPhaseArtifacts({phase:"stopInstrumentation",...u}),await d(),await collectPhaseArtifacts({phase:"getArtifact",...u}),await o.disconnect();const t=await awaitArtifacts(l);return finalizeArtifacts(c,t)}),t),runnerOptions:t}}}}var Mi={};const Li="127.0.0.1",Ni=9222;async function _computeNavigationResult(e,t,n,a){const{navigationError:r,mainDocumentUrl:o}=a,i=[...n.warnings,...a.warnings],s=await async function _collectDebugData(e,t){const n=t.artifactDefinitions.find((e=>e.gatherer.instance.meta.symbol===DevtoolsLog.symbol)),a=t.artifactDefinitions.find((e=>e.gatherer.instance.meta.symbol===Trace.symbol)),r=[n,a].filter((e=>Boolean(e)));if(!r.length)return{};await collectPhaseArtifacts({...t,phase:"getArtifact",artifactDefinitions:r});const o=t.artifactState.getArtifact,i=n?.id,s=i&&await o[i],c=s&&await bo.request(s,e),l=a?.id;return{
-devtoolsLog:s,records:c,trace:l&&await o[l]}}(e,t),c=s.records?getPageLoadError(r,{url:o,loadFailureMode:e.navigation.loadFailureMode,networkRecords:s.records,warnings:i}):r;if(c){const t=e.resolvedConfig.settings.locale,n=getFormatted(c.friendlyMessage,t);Log.error("NavigationRunner",n,a.requestedUrl);const r={},o=`pageLoadError-${e.navigation.id}`;return s.devtoolsLog&&(r.devtoolsLogs={[o]:s.devtoolsLog}),s.trace&&(r.traces={[o]:s.trace}),{pageLoadError:c,artifacts:r,warnings:[...i,c.friendlyMessage]}}await collectPhaseArtifacts({phase:"getArtifact",...t});return{artifacts:await awaitArtifacts(t.artifactState),warnings:i,pageLoadError:void 0}}async function _navigation(e){const t={startInstrumentation:{},startSensitiveInstrumentation:{},stopSensitiveInstrumentation:{},stopInstrumentation:{},getArtifact:{}},n={url:await e.driver.url(),gatherMode:"navigation",driver:e.driver,page:e.page,computedCache:e.computedCache,artifactDefinitions:e.navigation.artifacts,artifactState:t,
-baseArtifacts:e.baseArtifacts,settings:e.resolvedConfig.settings},a=await async function _setupNavigation({requestor:e,driver:t,navigation:n,resolvedConfig:a}){"string"!=typeof e||a.settings.skipAboutBlank||await gotoURL(t,n.blankPage,{...n,waitUntil:["navigated"]});const{warnings:r}=await prepareTargetForIndividualNavigation(t.defaultSession,a.settings,{...n,requestor:e});return{warnings:r}}(e),r=await enableAsyncStacks(e.driver.defaultSession);await collectPhaseArtifacts({phase:"startInstrumentation",...n}),await collectPhaseArtifacts({phase:"startSensitiveInstrumentation",...n});const o=await async function _navigate(e){const{driver:t,resolvedConfig:n,requestor:a}=e;try{const{requestedUrl:r,mainDocumentUrl:o,warnings:i}=await gotoURL(t,a,{...e.navigation,debugNavigation:n.settings.debugNavigation,maxWaitForFcp:n.settings.maxWaitForFcp,maxWaitForLoad:n.settings.maxWaitForLoad,waitUntil:e.navigation.pauseAfterFcpMs?["fcp","load"]:["load"]});return{requestedUrl:r,mainDocumentUrl:o,
-navigationError:void 0,warnings:i}}catch(e){if(!(e instanceof LighthouseError))throw e;if("NO_FCP"!==e.code&&"PAGE_HUNG"!==e.code)throw e;if("string"!=typeof a)throw e;return{requestedUrl:a,mainDocumentUrl:a,navigationError:e,warnings:[]}}}(e);return Object.values(n.baseArtifacts).every(Boolean)||(n.baseArtifacts.URL={requestedUrl:o.requestedUrl,mainDocumentUrl:o.mainDocumentUrl,finalDisplayedUrl:await e.driver.url()}),n.url=o.mainDocumentUrl,await collectPhaseArtifacts({phase:"stopSensitiveInstrumentation",...n}),await collectPhaseArtifacts({phase:"stopInstrumentation",...n}),await r(),await async function _cleanupNavigation({driver:e}){await clearThrottling(e.defaultSession)}(e),_computeNavigationResult(e,n,a,o)}async function navigationGather(e,t,n={}){const{flags:a={},config:r}=n;Log.setLevel(a.logLevel||"error");const{resolvedConfig:o}=await initializeConfig("navigation",r,a),i=new Map,s="function"==typeof t,c={resolvedConfig:o,computedCache:i};return{
-artifacts:await Runner.gather((async()=>{const n=s?t:UrlUtils.normalizeUrl(t);let r,c;if(!e){const{hostname:t=Li,port:n=Ni}=a;r=await Mi.connect({browserURL:`http://${t}:${n}`,defaultViewport:null}),c=await r.newPage(),e=c}const l={driver:new Driver(e),lhBrowser:r,lhPage:c,resolvedConfig:o,requestor:n},{baseArtifacts:u}=await async function _setup({driver:e,resolvedConfig:t,requestor:n}){await e.connect(),"string"!=typeof n||t.settings.skipAboutBlank||await gotoURL(e,to.blankPage,{waitUntil:["navigated"]});const a=await getBaseArtifacts(t,e,{gatherMode:"navigation"});return await prepareTargetForNavigationMode(e,t.settings),{baseArtifacts:a}}(l),{artifacts:d}=await async function _navigations(e){const{driver:t,page:n,resolvedConfig:a,requestor:r,baseArtifacts:o,computedCache:i}=e;if(!a.artifacts||!a.navigations)throw new Error("No artifacts were defined on the config");const s={},c=[];for(const e of a.navigations){const l={driver:t,page:n,navigation:e,requestor:r,resolvedConfig:a,
-baseArtifacts:o,computedCache:i};let u=!1;const d=await _navigation(l);if("fatal"===e.loadFailureMode&&d.pageLoadError&&(s.PageLoadError=d.pageLoadError,u=!0),c.push(...d.warnings),Object.assign(s,d.artifacts),u)break}return{artifacts:{...s,LighthouseRunWarnings:c}}}({...l,page:e,baseArtifacts:u,computedCache:i});return await async function _cleanup({requestedUrl:e,driver:t,resolvedConfig:n,lhBrowser:a,lhPage:r}){!n.settings.disableStorageReset&&e&&await clearDataForOrigin(t.defaultSession,e),await t.disconnect(),await(r?.close()),await(a?.disconnect())}(l),finalizeArtifacts(u,d)}),c),runnerOptions:c}}async function legacyNavigation(e,t={},n,a){t.logLevel=t.logLevel||"error",Log.setLevel(t.logLevel);const r={resolvedConfig:await LegacyResolvedConfig.fromJson(n,t),computedCache:new Map},o=a||new ui(t.port,t.hostname),i=await Runner.gather((()=>{const t=UrlUtils.normalizeUrl(e);return Runner._gatherArtifactsFromBrowser(t,r,o)}),r);return Runner.audit(i,r)}
-async function navigation(e,t,n){const a=await navigationGather(e,t,n);return Runner.audit(a.artifacts,a.runnerOptions)}async function snapshot(e,t){const n=await async function snapshotGather(e,t={}){const{flags:n={},config:a}=t;Log.setLevel(n.logLevel||"error");const{resolvedConfig:r}=await initializeConfig("snapshot",a,n),o=new Driver(e);await o.connect();const i=new Map,s=await o.url(),c={resolvedConfig:r,computedCache:i};return{artifacts:await Runner.gather((async()=>{const t=await getBaseArtifacts(r,o,{gatherMode:"snapshot"});t.URL={finalDisplayedUrl:s};const n=r.artifacts||[],a={startInstrumentation:{},startSensitiveInstrumentation:{},stopSensitiveInstrumentation:{},stopInstrumentation:{},getArtifact:{}};return await collectPhaseArtifacts({phase:"getArtifact",gatherMode:"snapshot",driver:o,page:e,baseArtifacts:t,artifactDefinitions:n,artifactState:a,computedCache:i,settings:r.settings}),await o.disconnect(),finalizeArtifacts(t,await awaitArtifacts(a))}),c),runnerOptions:c}}(e,t)
-;return Runner.audit(n.artifacts,n.runnerOptions)}async function startTimespan(e,t){const{endTimespanGather:n}=await startTimespanGather(e,t);return{endTimespan:async()=>{const e=await n();return Runner.audit(e.artifacts,e.runnerOptions)}}}createIcuMessageFn("core/user-flow.js",{defaultFlowName:"User flow ({url})",defaultNavigationName:"Navigation report ({url})",defaultTimespanName:"Timespan report ({url})",defaultSnapshotName:"Snapshot report ({url})"});class RawConnection extends class Connection{constructor(){this._lastCommandId=0,this._callbacks=new Map,this._sessionIdToTargetType=new Map,this._eventEmitter=new EventEmitter}connect(){return Promise.reject(new Error("Not implemented"))}disconnect(){return Promise.reject(new Error("Not implemented"))}wsEndpoint(){return Promise.reject(new Error("Not implemented"))}sendCommand(e,t,...n){const a=n.length?n[0]:void 0;Log.formatProtocol("method => browser",{method:e,params:a},"verbose");const r=++this._lastCommandId,o=JSON.stringify({
-id:r,sessionId:t,method:e,params:a});return this.sendRawMessage(o),new Promise((t=>{this._callbacks.set(r,{method:e,resolve:t})}))}on(e,t){if("protocolevent"!==e)throw new Error('Only supports "protocolevent" events');if(!this._eventEmitter)throw new Error("Attempted to add event listener after connection disposed.");this._eventEmitter.on(e,t)}off(e,t){if("protocolevent"!==e)throw new Error('Only supports "protocolevent" events');if(!this._eventEmitter)throw new Error("Attempted to remove event listener after connection disposed.");this._eventEmitter.removeListener(e,t)}sendRawMessage(e){throw new Error("Not implemented")}handleRawMessage(e){const t=JSON.parse(e);if(!("id"in t)){if(Log.formatProtocol("<= event",{method:t.method,params:t.params},"verbose"),"Target.attachedToTarget"===t.method){const e=t.params.targetInfo.type;"page"!==e&&"iframe"!==e||this._sessionIdToTargetType.set(t.params.sessionId,e)}if(t.sessionId){const e=this._sessionIdToTargetType.get(t.sessionId)
-;e&&(t.targetType=e)}return void this.emitProtocolEvent(t)}const n=this._callbacks.get(t.id);if(n)this._callbacks.delete(t.id),n.resolve(Promise.resolve().then((e=>{if(t.error)throw Log.formatProtocol("method <= browser ERR",{method:n.method},"error"),LighthouseError.fromProtocolMessage(n.method,t.error);return Log.formatProtocol("method <= browser OK",{method:n.method,params:t.result},"verbose"),t.result})));else{const e=t.error?.message;Log.formatProtocol("disowned method <= browser "+(e?"ERR":"OK"),{method:"UNKNOWN",params:e||t.result},"verbose")}}emitProtocolEvent(e){if(!this._eventEmitter)throw new Error("Attempted to emit event after connection disposed.");this._eventEmitter.emit("protocolevent",e)}dispose(){this._eventEmitter&&(this._eventEmitter.removeAllListeners(),this._eventEmitter=null),this._sessionIdToTargetType.clear()}}{constructor(e){super(),this._port=e,this._port.on("message",this.handleRawMessage.bind(this)),this._port.on("close",this.dispose.bind(this))}connect(){
-return Promise.resolve()}disconnect(){return this._port.close(),Promise.resolve()}sendRawMessage(e){this._port.send(e)}}globalThis.Buffer=Buffer$1,"undefined"!=typeof self?(globalThis.isDevtools=!0,self.setUpWorkerConnection=function setUpWorkerConnection(e){return new RawConnection(e)},self.runLighthouse=legacyNavigation,self.runLighthouseNavigation=function runLighthouseNavigation(e,{page:t,...n}){return navigation(t,e,n)},self.navigation=navigation,self.startLighthouseTimespan=function startLighthouseTimespan({page:e,...t}){return startTimespan(e,t)},self.startTimespan=startTimespan,self.runLighthouseSnapshot=function runLighthouseSnapshot({page:e,...t}){return snapshot(e,t)},self.snapshot=snapshot,self.createConfig=function createConfig(e,t){const n={onlyCategories:e,screenEmulation:{disabled:!0}};return"desktop"===t&&(n.throttling=Jr.desktopDense4G,n.emulatedUserAgent=Zr.desktop,n.formFactor="desktop"),{extends:"lighthouse:default",plugins:["lighthouse-plugin-publisher-ads"],
-settings:n}},self.listenForStatus=function listenForStatus(e){Log.events.addListener("status",e),Log.events.addListener("warning",e)},self.registerLocaleData=function registerLocaleData(e,t){wr[e]=t},self.lookupLocale=function lookupCanonicalLocale(e){return lookupLocale(e,function getCanonicalLocales(){return Er}())}):(global.runBundledLighthouse=async function lighthouse(e,t={},n,a){return navigation(a,e,{config:n,flags:t})},global.runBundledLighthouseLegacyNavigation=legacyNavigation);var Pi=Object.freeze({__proto__:null,default:{}});async function runA11yChecks(){const e=window.axe,t=`lighthouse-${Math.random()}`;e.configure({branding:{application:t},noHtml:!0});const n=await e.run(document,{elementRef:!0,runOnly:{type:"tag",values:["wcag2a","wcag2aa"]},resultTypes:["violations","inapplicable"],rules:{accesskeys:{enabled:!0},"area-alt":{enabled:!1},"aria-dialog-name":{enabled:!0},"aria-roledescription":{enabled:!1},"aria-treeitem-name":{enabled:!0},"aria-text":{enabled:!0},
-"audio-caption":{enabled:!1},blink:{enabled:!1},"duplicate-id":{enabled:!1},"empty-heading":{enabled:!0},"frame-focusable-content":{enabled:!1},"frame-title-unique":{enabled:!1},"heading-order":{enabled:!0},"html-xml-lang-mismatch":{enabled:!0},"identical-links-same-purpose":{enabled:!0},"input-button-name":{enabled:!0},"landmark-one-main":{enabled:!0},"link-in-text-block":{enabled:!0},marquee:{enabled:!1},"meta-viewport":{enabled:!0},"nested-interactive":{enabled:!1},"no-autoplay-audio":{enabled:!1},"role-img-alt":{enabled:!1},"scrollable-region-focusable":{enabled:!1},"select-name":{enabled:!0},"server-side-image-map":{enabled:!1},"svg-img-alt":{enabled:!1},tabindex:{enabled:!0},"table-fake-caption":{enabled:!0},"target-size":{enabled:!0},"td-has-header":{enabled:!0}}});return document.documentElement.scrollTop=0,{violations:n.violations.map(createAxeRuleResultArtifact),incomplete:n.incomplete.map(createAxeRuleResultArtifact),notApplicable:n.inapplicable.map((e=>({id:e.id}))),
-passes:n.passes.map((e=>({id:e.id}))),version:n.testEngine.version}}async function runA11yChecksAndResetScroll(){const e={x:window.scrollX,y:window.scrollY};try{return await runA11yChecks()}finally{window.scrollTo(e.x,e.y)}}function createAxeRuleResultArtifact(e){const t=e.nodes.map((e=>{const{target:t,failureSummary:n,element:a}=e,r=getNodeDetails(a),o=new Set,impactToNumber=e=>[null,"minor","moderate","serious","critical"].indexOf(e),i=[...e.any,...e.all,...e.none].sort(((e,t)=>impactToNumber(t.impact)-impactToNumber(e.impact)));for(const e of i)for(const t of e.relatedNodes||[]){const e=t.element;if(o.size>=3)break;e&&(a!==e&&o.add(e))}return{target:t,failureSummary:n,node:r,relatedNodes:[...o].map(getNodeDetails)}})),n=e.error;let a;return n instanceof Error&&(a={name:n.name,message:n.message}),{id:e.id,impact:e.impact||void 0,tags:e.tags,nodes:t,error:a}}var Oi=Object.freeze({__proto__:null,default:class Accessibility extends FRGatherer{meta={
-supportedModes:["snapshot","navigation"]};static pageFns={runA11yChecks,createAxeRuleResultArtifact};getArtifact(e){return e.driver.executionContext.evaluate(runA11yChecksAndResetScroll,{args:[],useIsolation:!0,
-deps:['/*! axe v4.7.2\n * Copyright (c) 2023 Deque Systems, Inc.\n *\n * Your use of this Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n *\n * This entire copyright notice must appear in every copy of this file you\n * distribute or in any file that contains substantial portions of this source\n * code.\n */\n!function e(t){var n=t,a=t.document;function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o=o||{};function u(e){this.name="SupportError",this.cause=e.cause,this.message="`".concat(e.cause,"` - feature unsupported in your environment."),e.ruleId&&(this.ruleId=e.ruleId,this.message+=" Skipping ".concat(this.ruleId," rule.")),this.stack=(new Error).stack}o.version="4.7.2","function"==typeof define&&define.amd&&define("axe-core",[],(function(){return o})),"object"===("undefined"==typeof module?"undefined":r(module))&&module.exports&&"function"==typeof e.toString&&(o.source="("+e.toString()+\')(typeof window === "object" ? window : this);\',module.exports=o),"function"==typeof t.getComputedStyle&&(t.axe=o),(u.prototype=Object.create(Error.prototype)).constructor=u;var i=["node"],l=["variant"],s=["matches"],c=["chromium"],d=["noImplicit"],p=["noPresentational"],f=["precision","format","inGamut"],D=["space"],m=["algorithm"],h=["method"],g=["maxDeltaE","deltaEMethod","steps","maxSteps"],b=["node"],v=["nodes"],y=["node"],F=["relatedNodes"],w=["environmentData"],E=["environmentData"],C=["node"],x=["environmentData"],A=["environmentData"],k=["environmentData"];function B(e){return K(e)||U(e)||te(e)||Y()}function T(e,t,n){return(T=S()?Reflect.construct.bind():function(e,t,n){var a=[null];return a.push.apply(a,t),t=new(Function.bind.apply(e,a)),n&&R(t,n.prototype),t}).apply(null,arguments)}function N(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&R(e,t)}function R(e,t){return(R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function _(e){var t=S();return function(){var n,a=M(e);n=t?(n=M(this).constructor,Reflect.construct(a,arguments,n)):a.apply(this,arguments),a=this;if(n&&("object"===r(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return O(a)}}function O(e){if(void 0===e)throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");return e}function S(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function M(e){return(M=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function P(e,t,n){j(e,t),t.set(e,n)}function I(e,t){j(e,t),t.add(e)}function j(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function L(e,t){return(t=V(e,t,"get")).get?t.get.call(e):t.value}function q(e,t,n){if(t.has(e))return n;throw new TypeError("attempted to get private field on non-instance")}function z(e,t,n){if((t=V(e,t,"set")).set)t.set.call(e,n);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=n}}function V(e,t,n){if(t.has(e))return t.get(e);throw new TypeError("attempted to "+n+" private field on non-instance")}function $(e,t){if(null==e)return{};var n,a=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],0<=t.indexOf(n)||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols)for(var r=Object.getOwnPropertySymbols(e),o=0;o<r.length;o++)n=r[o],0<=t.indexOf(n)||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n]);return a}function H(e){return function(e){if(Array.isArray(e))return ne(e)}(e)||U(e)||te(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function U(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function G(){return(G=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n,a=arguments[t];for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e}).apply(this,arguments)}function W(e,t){return K(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,u,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(s)throw r}}return i}}(e,t)||te(e,t)||Y()}function Y(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function K(e){if(Array.isArray(e))return e}function X(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Z(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,Q(a.key),a)}}function J(e,t,n){return t&&Z(e.prototype,t),n&&Z(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Q(e){return e=function(e,t){if("object"!==r(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return String(e);if(n=n.call(e,t),"object"===r(n))throw new TypeError("@@toPrimitive must return a primitive value.");return n}(e,"string"),"symbol"===r(e)?e:String(e)}function ee(e,t){var n,a,r,o,u="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(u)return a=!(n=!0),{s:function(){u=u.call(e)},n:function(){var e=u.next();return n=e.done,e},e:function(e){a=!0,r=e},f:function(){try{n||null==u.return||u.return()}finally{if(a)throw r}}};if(Array.isArray(e)||(u=te(e))||t&&e&&"number"==typeof e.length)return u&&(e=u),o=0,{s:t=function(){},n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:t};throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function te(e,t){var n;if(e)return"string"==typeof e?ne(e,t):"Map"===(n="Object"===(n=Object.prototype.toString.call(e).slice(8,-1))&&e.constructor?e.constructor.name:n)||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ne(e,t):void 0}function ne(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ae(e,t){return function(){return t||e((t={exports:{}}).exports,t),t.exports}}function re(e,t){for(var n in t)pe(e,n,{get:t[n],enumerable:!0})}function oe(e){return function(e,t,n){if(t&&"object"===r(t)||"function"==typeof t){var a,o=ee(me(t));try{for(o.s();!(a=o.n()).done;)!function(){var r=a.value;De.call(e,r)||"default"===r||pe(e,r,{get:function(){return t[r]},enumerable:!(n=he(t,r))||n.enumerable})}()}catch(e){o.e(e)}finally{o.f()}}return e}((t=pe(null!=e?de(fe(e)):{},"default",e&&e.__esModule&&"default"in e?{get:function(){return e.default},enumerable:!0}:{value:e,enumerable:!0}),pe(t,"__esModule",{value:!0})),e);var t}function ue(e,t,n){e=e,n=n,(t="symbol"!==r(t)?t+"":t)in e?pe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n}var ie,le,se,ce,de=Object.create,pe=Object.defineProperty,fe=Object.getPrototypeOf,De=Object.prototype.hasOwnProperty,me=Object.getOwnPropertyNames,he=Object.getOwnPropertyDescriptor,ge=ae((function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isIdentStart=function(e){return"a"<=e&&e<="z"||"A"<=e&&e<="Z"||"-"===e||"_"===e},e.isIdent=function(e){return"a"<=e&&e<="z"||"A"<=e&&e<="Z"||"0"<=e&&e<="9"||"-"===e||"_"===e},e.isHex=function(e){return"a"<=e&&e<="f"||"A"<=e&&e<="F"||"0"<=e&&e<="9"},e.escapeIdentifier=function(t){for(var n=t.length,a="",r=0;r<n;){var o=t.charAt(r);if(e.identSpecialChars[o])a+="\\\\"+o;else if("_"===o||"-"===o||"A"<=o&&o<="Z"||"a"<=o&&o<="z"||0!==r&&"0"<=o&&o<="9")a+=o;else{if(55296==(63488&(o=o.charCodeAt(0)))){var u=t.charCodeAt(r++);if(55296!=(64512&o)||56320!=(64512&u))throw Error("UCS-2(decode): illegal sequence");o=((1023&o)<<10)+(1023&u)+65536}a+="\\\\"+o.toString(16)+" "}r++}return a},e.escapeStr=function(t){for(var n,a=t.length,r="",o=0;o<a;){var u=t.charAt(o);\'"\'===u?u=\'\\\\"\':"\\\\"===u?u="\\\\\\\\":void 0!==(n=e.strReplacementsRev[u])&&(u=n),r+=u,o++}return\'"\'+r+\'"\'},e.identSpecialChars={"!":!0,\'"\':!0,"#":!0,$:!0,"%":!0,"&":!0,"\'":!0,"(":!0,")":!0,"*":!0,"+":!0,",":!0,".":!0,"/":!0,";":!0,"<":!0,"=":!0,">":!0,"?":!0,"@":!0,"[":!0,"\\\\":!0,"]":!0,"^":!0,"`":!0,"{":!0,"|":!0,"}":!0,"~":!0},e.strReplacementsRev={"\\n":"\\\\n","\\r":"\\\\r","\\t":"\\\\t","\\f":"\\\\f","\\v":"\\\\v"},e.singleQuoteEscapeChars={n:"\\n",r:"\\r",t:"\\t",f:"\\f","\\\\":"\\\\","\'":"\'"},e.doubleQuotesEscapeChars={n:"\\n",r:"\\r",t:"\\t",f:"\\f","\\\\":"\\\\",\'"\':\'"\'}})),be=ae((function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=ge();e.parseCssSelector=function(e,n,a,r,o,u){var i=e.length,l="";function s(a,r){var o="";for(n++,l=e.charAt(n);n<i;){if(l===a)return n++,o;var u;if("\\\\"===l)if(n++,(l=e.charAt(n))===a)o+=a;else if(void 0!==(u=r[l]))o+=u;else{if(t.isHex(l)){var s=l;for(n++,l=e.charAt(n);t.isHex(l);)s+=l,n++,l=e.charAt(n);" "===l&&(n++,l=e.charAt(n)),o+=String.fromCharCode(parseInt(s,16));continue}o+=l}else o+=l;n++,l=e.charAt(n)}return o}function c(){var a="";for(l=e.charAt(n);n<i;){if(!t.isIdent(l)){if("\\\\"!==l)return a;if(i<=++n)throw Error("Expected symbol but end of file reached.");if(l=e.charAt(n),!t.identSpecialChars[l]&&t.isHex(l)){var r=l;for(n++,l=e.charAt(n);t.isHex(l);)r+=l,n++,l=e.charAt(n);" "===l&&(n++,l=e.charAt(n)),a+=String.fromCharCode(parseInt(r,16));continue}}a+=l,n++,l=e.charAt(n)}return a}function d(){for(l=e.charAt(n);" "===l||"\\t"===l||"\\n"===l||"\\r"===l||"\\f"===l;)n++,l=e.charAt(n)}function p(){var t=f();if(!t)return null;var a=t;for(l=e.charAt(n);","===l;){if(n++,d(),"selectors"!==a.type&&(a={type:"selectors",selectors:[t]}),!(t=f()))throw Error(\'Rule expected after ",".\');a.selectors.push(t)}return a}function f(){d();var t={type:"ruleSet"},a=D();if(!a)return null;for(var r=t;a&&(a.type="rule",r.rule=a,r=a,d(),l=e.charAt(n),!(i<=n||","===l||")"===l));)if(o[l]){var u=l;if(n++,d(),!(a=D()))throw Error(\'Rule expected after "\'+u+\'".\');a.nestingOperator=u}else(a=D())&&(a.nestingOperator=null);return t}function D(){for(var o=null;n<i;)if("*"===(l=e.charAt(n)))n++,(o=o||{}).tagName="*";else if(t.isIdentStart(l)||"\\\\"===l)(o=o||{}).tagName=c();else if("."===l)n++,((o=o||{}).classNames=o.classNames||[]).push(c());else if("#"===l)n++,(o=o||{}).id=c();else if("["===l){n++,d();var f={name:c()};if(d(),"]"===l)n++;else{var D="";if(r[l]&&(D=l,n++,l=e.charAt(n)),i<=n)throw Error(\'Expected "=" but end of file reached.\');if("="!==l)throw Error(\'Expected "=" but "\'+l+\'" found.\');f.operator=D+"=",n++,d();var m="";if(f.valueType="string",\'"\'===l)m=s(\'"\',t.doubleQuotesEscapeChars);else if("\'"===l)m=s("\'",t.singleQuoteEscapeChars);else if(u&&"$"===l)n++,m=c(),f.valueType="substitute";else{for(;n<i&&"]"!==l;)m+=l,n++,l=e.charAt(n);m=m.trim()}if(d(),i<=n)throw Error(\'Expected "]" but end of file reached.\');if("]"!==l)throw Error(\'Expected "]" but "\'+l+\'" found.\');n++,f.value=m}((o=o||{}).attrs=o.attrs||[]).push(f)}else{if(":"!==l)break;if(n++,f={name:D=c()},"("===l){n++;var h="";if(d(),"selector"===a[D])f.valueType="selector",h=p();else{if(f.valueType=a[D]||"string",\'"\'===l)h=s(\'"\',t.doubleQuotesEscapeChars);else if("\'"===l)h=s("\'",t.singleQuoteEscapeChars);else if(u&&"$"===l)n++,h=c(),f.valueType="substitute";else{for(;n<i&&")"!==l;)h+=l,n++,l=e.charAt(n);h=h.trim()}d()}if(i<=n)throw Error(\'Expected ")" but end of file reached.\');if(")"!==l)throw Error(\'Expected ")" but "\'+l+\'" found.\');n++,f.value=h}((o=o||{}).pseudos=o.pseudos||[]).push(f)}return o}var m=p();if(n<i)throw Error(\'Rule expected but "\'+e.charAt(n)+\'" found.\');return m}})),ve=ae((function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=ge();e.renderEntity=function e(n){var a="";switch(n.type){case"ruleSet":for(var r=n.rule,o=[];r;)r.nestingOperator&&o.push(r.nestingOperator),o.push(e(r)),r=r.rule;a=o.join(" ");break;case"selectors":a=n.selectors.map(e).join(", ");break;case"rule":n.tagName&&(a="*"===n.tagName?"*":t.escapeIdentifier(n.tagName)),n.id&&(a+="#"+t.escapeIdentifier(n.id)),n.classNames&&(a+=n.classNames.map((function(e){return"."+t.escapeIdentifier(e)})).join("")),n.attrs&&(a+=n.attrs.map((function(e){return"operator"in e?"substitute"===e.valueType?"["+t.escapeIdentifier(e.name)+e.operator+"$"+e.value+"]":"["+t.escapeIdentifier(e.name)+e.operator+t.escapeStr(e.value)+"]":"["+t.escapeIdentifier(e.name)+"]"})).join("")),n.pseudos&&(a+=n.pseudos.map((function(n){return n.valueType?"selector"===n.valueType?":"+t.escapeIdentifier(n.name)+"("+e(n.value)+")":"substitute"===n.valueType?":"+t.escapeIdentifier(n.name)+"($"+n.value+")":"numeric"===n.valueType?":"+t.escapeIdentifier(n.name)+"("+n.value+")":":"+t.escapeIdentifier(n.name)+"("+t.escapeIdentifier(n.value)+")":":"+t.escapeIdentifier(n.name)})).join(""));break;default:throw Error(\'Unknown entity type: "\'+n.type+\'".\')}return a}})),ye=ae((function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=be(),n=ve();function a(){this.pseudos={},this.attrEqualityMods={},this.ruleNestingOperators={},this.substitutesEnabled=!1}a.prototype.registerSelectorPseudos=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)this.pseudos[a[n]]="selector";return this},a.prototype.unregisterSelectorPseudos=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)delete this.pseudos[a[n]];return this},a.prototype.registerNumericPseudos=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)this.pseudos[a[n]]="numeric";return this},a.prototype.unregisterNumericPseudos=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)delete this.pseudos[a[n]];return this},a.prototype.registerNestingOperators=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)this.ruleNestingOperators[a[n]]=!0;return this},a.prototype.unregisterNestingOperators=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)delete this.ruleNestingOperators[a[n]];return this},a.prototype.registerAttrEqualityMods=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)this.attrEqualityMods[a[n]]=!0;return this},a.prototype.unregisterAttrEqualityMods=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)delete this.attrEqualityMods[a[n]];return this},a.prototype.enableSubstitutes=function(){return this.substitutesEnabled=!0,this},a.prototype.disableSubstitutes=function(){return this.substitutesEnabled=!1,this},a.prototype.parse=function(e){return t.parseCssSelector(e,0,this.pseudos,this.attrEqualityMods,this.ruleNestingOperators,this.substitutesEnabled)},a.prototype.render=function(e){return n.renderEntity(e).trim()},e.CssSelectorParser=a})),Fe=ae((function(e,t){"use strict";t.exports=function(){}})),we=ae((function(e,t){"use strict";var n=Fe()();t.exports=function(e){return e!==n&&null!==e}})),Ee=ae((function(e,t){"use strict";var n=we(),a=Array.prototype.forEach,r=Object.create;t.exports=function(e){var t=r(null);return a.call(arguments,(function(e){if(n(e)){var a,r=Object(e),o=t;for(a in r)o[a]=r[a]}})),t}})),Ce=ae((function(e,t){"use strict";t.exports=function(){var e=Math.sign;return"function"==typeof e&&1===e(10)&&-1===e(-20)}})),xe=ae((function(e,t){"use strict";t.exports=function(e){return e=Number(e),isNaN(e)||0===e?e:0<e?1:-1}})),Ae=ae((function(e,t){"use strict";t.exports=Ce()()?Math.sign:xe()})),ke=ae((function(e,t){"use strict";var n=Ae(),a=Math.abs,r=Math.floor;t.exports=function(e){return isNaN(e)?0:0!==(e=Number(e))&&isFinite(e)?n(e)*r(a(e)):e}})),Be=ae((function(e,t){"use strict";var n=ke(),a=Math.max;t.exports=function(e){return a(0,n(e))}})),Te=ae((function(e,t){"use strict";var n=Be();t.exports=function(e,t,a){return isNaN(e)?0<=t?a&&t?t-1:t:1:!1!==e&&n(e)}})),Ne=ae((function(e,t){"use strict";t.exports=function(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}})),Re=ae((function(e,t){"use strict";var n=we();t.exports=function(e){if(n(e))return e;throw new TypeError("Cannot use null or undefined")}})),_e=ae((function(e,t){"use strict";var n=Ne(),a=Re(),r=Function.prototype.bind,o=Function.prototype.call,u=Object.keys,i=Object.prototype.propertyIsEnumerable;t.exports=function(e,t){return function(l,s){var c,d=arguments[2],p=arguments[3];return l=Object(a(l)),n(s),c=u(l),p&&c.sort("function"==typeof p?r.call(p,l):void 0),"function"!=typeof e&&(e=c[e]),o.call(e,c,(function(e,n){return i.call(l,e)?o.call(s,d,l[e],e,l,n):t}))}}})),Oe=ae((function(e,t){"use strict";t.exports=_e()("forEach")})),Se=ae((function(){})),Me=ae((function(e,t){"use strict";t.exports=function(){var e=Object.assign;return"function"==typeof e&&(e(e={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),e.foo+e.bar+e.trzy==="razdwatrzy")}})),Pe=ae((function(e,t){"use strict";t.exports=function(){try{return Object.keys("primitive"),!0}catch(e){return!1}}})),Ie=ae((function(e,t){"use strict";var n=we(),a=Object.keys;t.exports=function(e){return a(n(e)?Object(e):e)}})),je=ae((function(e,t){"use strict";t.exports=Pe()()?Object.keys:Ie()})),Le=ae((function(e,t){"use strict";var n=je(),a=Re(),r=Math.max;t.exports=function(e,t){var o,u,i,l=r(arguments.length,2);for(e=Object(a(e)),i=function(n){try{e[n]=t[n]}catch(n){o=o||n}},u=1;u<l;++u)n(t=arguments[u]).forEach(i);if(void 0!==o)throw o;return e}})),qe=ae((function(e,t){"use strict";t.exports=Me()()?Object.assign:Le()})),ze=ae((function(e,t){"use strict";var n=we(),a={function:!0,object:!0};t.exports=function(e){return n(e)&&a[r(e)]||!1}})),Ve=ae((function(e,t){"use strict";var n=qe(),a=ze(),r=we(),o=Error.captureStackTrace;t.exports=function(e){e=new Error(e);var u=arguments[1],i=arguments[2];return r(i)||a(u)&&(i=u,u=null),r(i)&&n(e,i),r(u)&&(e.code=u),o&&o(e,t.exports),e}})),$e=ae((function(e,t){"use strict";var n=Re(),a=Object.defineProperty,r=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols;t.exports=function(e,t){var i,l=Object(n(t));if(e=Object(n(e)),o(l).forEach((function(n){try{a(e,n,r(t,n))}catch(n){i=n}})),"function"==typeof u&&u(l).forEach((function(n){try{a(e,n,r(t,n))}catch(n){i=n}})),void 0!==i)throw i;return e}})),He=ae((function(e,t){"use strict";function n(e,t){return t}var a,r,o,u,i,l=Be();try{Object.defineProperty(n,"length",{configurable:!0,writable:!1,enumerable:!1,value:1})}catch(e){}1===n.length?(a={configurable:!0,writable:!1,enumerable:!1},r=Object.defineProperty,t.exports=function(e,t){return t=l(t),e.length===t?e:(a.value=t,r(e,"length",a))}):(u=$e(),i=[],o=function(e){var t,n=0;if(i[e])return i[e];for(t=[];e--;)t.push("a"+(++n).toString(36));return new Function("fn","return function ("+t.join(", ")+") { return fn.apply(this, arguments); };")},t.exports=function(e,t){if(t=l(t),e.length===t)return e;t=o(t)(e);try{u(t,e)}catch(e){}return t})})),Ue=ae((function(e,t){"use strict";t.exports=function(e){return null!=e}})),Ge=ae((function(e,t){"use strict";var n=Ue(),a={object:!0,function:!0,undefined:!0};t.exports=function(e){return!!n(e)&&hasOwnProperty.call(a,r(e))}})),We=ae((function(e,t){"use strict";var n=Ge();t.exports=function(e){if(!n(e))return!1;try{return!!e.constructor&&e.constructor.prototype===e}catch(e){return!1}}})),Ye=ae((function(e,t){"use strict";var n=We();t.exports=function(e){if("function"!=typeof e)return!1;if(!hasOwnProperty.call(e,"length"))return!1;try{if("number"!=typeof e.length)return!1;if("function"!=typeof e.call)return!1;if("function"!=typeof e.apply)return!1}catch(e){return!1}return!n(e)}})),Ke=ae((function(e,t){"use strict";var n=Ye(),a=/^\\s*class[\\s{/}]/,r=Function.prototype.toString;t.exports=function(e){return!!n(e)&&!a.test(r.call(e))}})),Xe=ae((function(e,t){"use strict";var n="razdwatrzy";t.exports=function(){return"function"==typeof n.contains&&!0===n.contains("dwa")&&!1===n.contains("foo")}})),Ze=ae((function(e,t){"use strict";var n=String.prototype.indexOf;t.exports=function(e){return-1<n.call(this,e,arguments[1])}})),Je=ae((function(e,t){"use strict";t.exports=Xe()()?String.prototype.contains:Ze()})),Qe=ae((function(e,t){"use strict";var n=Ue(),a=Ke(),r=qe(),o=Ee(),u=Je();(t.exports=function(e,t){var a,i,l,s;return arguments.length<2||"string"!=typeof e?(s=t,t=e,e=null):s=arguments[2],n(e)?(a=u.call(e,"c"),i=u.call(e,"e"),l=u.call(e,"w")):i=!(a=l=!0),e={value:t,configurable:a,enumerable:i,writable:l},s?r(o(s),e):e}).gs=function(e,t,i){var l,s;return"string"!=typeof e?(s=i,i=t,t=e,e=null):s=arguments[3],n(t)?a(t)?n(i)?a(i)||(s=i,i=void 0):i=void 0:(s=t,t=i=void 0):t=void 0,e=n(e)?(l=u.call(e,"c"),u.call(e,"e")):!(l=!0),t={get:t,set:i,configurable:l,enumerable:e},s?r(o(s),t):t}})),et=ae((function(e,t){"use strict";var n=Qe(),a=Ne(),o=Function.prototype.apply,u=Function.prototype.call,i=Object.create,l=Object.defineProperty,s=Object.defineProperties,c=Object.prototype.hasOwnProperty,d={configurable:!0,enumerable:!1,writable:!0},p=function(e,t){var n;return a(t),c.call(this,"__ee__")?n=this.__ee__:(n=d.value=i(null),l(this,"__ee__",d),d.value=null),n[e]?"object"===r(n[e])?n[e].push(t):n[e]=[n[e],t]:n[e]=t,this},f=function(e,t){var n,r;return a(t),r=this,p.call(this,e,n=function(){D.call(r,e,n),o.call(t,this,arguments)}),n.__eeOnceListener__=t,this},D=function(e,t){var n,o,u,i;if(a(t),c.call(this,"__ee__")&&(n=this.__ee__)[e])if(o=n[e],"object"===r(o))for(i=0;u=o[i];++i)u!==t&&u.__eeOnceListener__!==t||(2===o.length?n[e]=o[i?0:1]:o.splice(i,1));else o!==t&&o.__eeOnceListener__!==t||delete n[e];return this},m=function(e){var t,n,a,i,l;if(c.call(this,"__ee__")&&(i=this.__ee__[e]))if("object"===r(i)){for(n=arguments.length,l=new Array(n-1),t=1;t<n;++t)l[t-1]=arguments[t];for(i=i.slice(),t=0;a=i[t];++t)o.call(a,this,l)}else switch(arguments.length){case 1:u.call(i,this);break;case 2:u.call(i,this,arguments[1]);break;case 3:u.call(i,this,arguments[1],arguments[2]);break;default:for(n=arguments.length,l=new Array(n-1),t=1;t<n;++t)l[t-1]=arguments[t];o.call(i,this,l)}},h={on:p,once:f,off:D,emit:m},g={on:n(p),once:n(f),off:n(D),emit:n(m)},b=s({},g);t.exports=e=function(e){return null==e?i(b):s(Object(e),g)},e.methods=h})),tt=ae((function(e,t){"use strict";t.exports=function(){var e,t=Array.from;return"function"==typeof t&&(e=t(t=["raz","dwa"]),Boolean(e&&e!==t&&"dwa"===e[1]))}})),nt=ae((function(e,t){"use strict";t.exports=function(){return"object"===("undefined"==typeof globalThis?"undefined":r(globalThis))&&!!globalThis&&globalThis.Array===Array}})),at=ae((function(e,n){function a(){if("object"===("undefined"==typeof self?"undefined":r(self))&&self)return self;if("object"===(void 0===t?"undefined":r(t))&&t)return t;throw new Error("Unable to resolve global `this`")}n.exports=function(){if(this)return this;try{Object.defineProperty(Object.prototype,"__global__",{get:function(){return this},configurable:!0})}catch(e){return a()}try{return __global__||a()}finally{delete Object.prototype.__global__}}()})),rt=ae((function(e,t){"use strict";t.exports=nt()()?globalThis:at()})),ot=ae((function(e,t){"use strict";var n=rt(),a={object:!0,symbol:!0};t.exports=function(){var e,t=n.Symbol;if("function"!=typeof t)return!1;e=t("test symbol");try{String(e)}catch(e){return!1}return!!a[r(t.iterator)]&&!!a[r(t.toPrimitive)]&&!!a[r(t.toStringTag)]}})),ut=ae((function(e,t){"use strict";t.exports=function(e){return!!e&&("symbol"===r(e)||!!e.constructor&&"Symbol"===e.constructor.name&&"Symbol"===e[e.constructor.toStringTag])}})),it=ae((function(e,t){"use strict";var n=ut();t.exports=function(e){if(n(e))return e;throw new TypeError(e+" is not a symbol")}})),lt=ae((function(e,t){"use strict";var n=Qe(),a=Object.create,r=Object.defineProperty,o=Object.prototype,u=a(null);t.exports=function(e){for(var t,a,i=0;u[e+(i||"")];)++i;return u[e+=i||""]=!0,r(o,t="@@"+e,n.gs(null,(function(e){a||(a=!0,r(this,t,n(e)),a=!1)}))),t}})),st=ae((function(e,t){"use strict";var n=Qe(),a=rt().Symbol;t.exports=function(e){return Object.defineProperties(e,{hasInstance:n("",a&&a.hasInstance||e("hasInstance")),isConcatSpreadable:n("",a&&a.isConcatSpreadable||e("isConcatSpreadable")),iterator:n("",a&&a.iterator||e("iterator")),match:n("",a&&a.match||e("match")),replace:n("",a&&a.replace||e("replace")),search:n("",a&&a.search||e("search")),species:n("",a&&a.species||e("species")),split:n("",a&&a.split||e("split")),toPrimitive:n("",a&&a.toPrimitive||e("toPrimitive")),toStringTag:n("",a&&a.toStringTag||e("toStringTag")),unscopables:n("",a&&a.unscopables||e("unscopables"))})}})),ct=ae((function(e,t){"use strict";var n=Qe(),a=it(),r=Object.create(null);t.exports=function(e){return Object.defineProperties(e,{for:n((function(t){return r[t]||(r[t]=e(String(t)))})),keyFor:n((function(e){for(var t in a(e),r)if(r[t]===e)return t}))})}})),dt=ae((function(e,t){"use strict";var n,a,o,u=Qe(),i=it(),l=rt().Symbol,s=lt(),c=st(),d=ct(),p=Object.create,f=Object.defineProperties,D=Object.defineProperty;if("function"==typeof l)try{String(l()),o=!0}catch(e){}else l=null;a=function(e){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return n(e)},t.exports=n=function e(t){var n;if(this instanceof e)throw new TypeError("Symbol is not a constructor");return o?l(t):(n=p(a.prototype),t=void 0===t?"":String(t),f(n,{__description__:u("",t),__name__:u("",s(t))}))},c(n),d(n),f(a.prototype,{constructor:u(n),toString:u("",(function(){return this.__name__}))}),f(n.prototype,{toString:u((function(){return"Symbol ("+i(this).__description__+")"})),valueOf:u((function(){return i(this)}))}),D(n.prototype,n.toPrimitive,u("",(function(){var e=i(this);return"symbol"===r(e)?e:e.toString()}))),D(n.prototype,n.toStringTag,u("c","Symbol")),D(a.prototype,n.toStringTag,u("c",n.prototype[n.toStringTag])),D(a.prototype,n.toPrimitive,u("c",n.prototype[n.toPrimitive]))})),pt=ae((function(e,t){"use strict";t.exports=ot()()?rt().Symbol:dt()})),ft=ae((function(e,t){"use strict";var n=Object.prototype.toString,a=n.call(function(){return arguments}());t.exports=function(e){return n.call(e)===a}})),Dt=ae((function(e,t){"use strict";var n=Object.prototype.toString,a=RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);t.exports=function(e){return"function"==typeof e&&a(n.call(e))}})),mt=ae((function(e,t){"use strict";var n=Object.prototype.toString,a=n.call("");t.exports=function(e){return"string"==typeof e||e&&"object"===r(e)&&(e instanceof String||n.call(e)===a)||!1}})),ht=ae((function(e,t){"use strict";var n=pt().iterator,a=ft(),r=Dt(),o=Be(),u=Ne(),i=Re(),l=we(),s=mt(),c=Array.isArray,d=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},f=Object.defineProperty;t.exports=function(e){var t,D,m,h,g,b,v,y,F,w,E=arguments[1],C=arguments[2];if(e=Object(i(e)),l(E)&&u(E),this&&this!==Array&&r(this))t=this;else{if(!E){if(a(e))return 1!==(g=e.length)?Array.apply(null,e):((h=new Array(1))[0]=e[0],h);if(c(e)){for(h=new Array(g=e.length),D=0;D<g;++D)h[D]=e[D];return h}}h=[]}if(!c(e))if(void 0!==(F=e[n])){for(v=u(F).call(e),t&&(h=new t),y=v.next(),D=0;!y.done;)w=E?d.call(E,C,y.value,D):y.value,t?(p.value=w,f(h,D,p)):h[D]=w,y=v.next(),++D;g=D}else if(s(e)){for(g=e.length,t&&(h=new t),m=D=0;D<g;++D)w=e[D],D+1<g&&55296<=(b=w.charCodeAt(0))&&b<=56319&&(w+=e[++D]),w=E?d.call(E,C,w,m):w,t?(p.value=w,f(h,m,p)):h[m]=w,++m;g=m}if(void 0===g)for(g=o(e.length),t&&(h=new t(g)),D=0;D<g;++D)w=E?d.call(E,C,e[D],D):e[D],t?(p.value=w,f(h,D,p)):h[D]=w;return t&&(p.value=null,h.length=g),h}})),gt=ae((function(e,t){"use strict";t.exports=tt()()?Array.from:ht()})),bt=ae((function(e,t){"use strict";var n=gt(),a=Array.isArray;t.exports=function(e){return a(e)?e:n(e)}})),vt=ae((function(e,t){"use strict";var n=bt(),a=we(),r=Ne(),o=Array.prototype.slice,u=function(e){return this.map((function(t,n){return t?t(e[n]):e[n]})).concat(o.call(e,this.length))};t.exports=function(e){return(e=n(e)).forEach((function(e){a(e)&&r(e)})),u.bind(e)}})),yt=ae((function(e,t){"use strict";var n=Ne();t.exports=function(e){var t;return"function"==typeof e?{set:e,get:e}:(t={get:n(e.get)},void 0!==e.set?(t.set=n(e.set),e.delete&&(t.delete=n(e.delete)),e.clear&&(t.clear=n(e.clear))):t.set=t.get,t)}})),Ft=ae((function(e,t){"use strict";var n=Ve(),a=He(),r=Qe(),o=et().methods,u=vt(),i=yt(),l=Function.prototype.apply,s=Function.prototype.call,c=Object.create,d=Object.defineProperties,p=o.on,f=o.emit;t.exports=function(e,t,o){var D,m,h,g,b,v,y,F,w,E,C,x=c(null),A=!1!==t?t:isNaN(e.length)?1:e.length;return o.normalizer&&(E=i(o.normalizer),m=E.get,h=E.set,g=E.delete,b=E.clear),null!=o.resolvers&&(C=u(o.resolvers)),E=m?a((function(t){var a,r,o=arguments;if(C&&(o=C(o)),null!==(a=m(o))&&hasOwnProperty.call(x,a))return y&&D.emit("get",a,o,this),x[a];if(r=1===o.length?s.call(e,this,o[0]):l.call(e,this,o),null===a){if(null!==(a=m(o)))throw n("Circular invocation","CIRCULAR_INVOCATION");a=h(o)}else if(hasOwnProperty.call(x,a))throw n("Circular invocation","CIRCULAR_INVOCATION");return x[a]=r,F&&D.emit("set",a,null,r),r}),A):0===t?function(){var t;if(hasOwnProperty.call(x,"data"))return y&&D.emit("get","data",arguments,this),x.data;if(t=arguments.length?l.call(e,this,arguments):s.call(e,this),hasOwnProperty.call(x,"data"))throw n("Circular invocation","CIRCULAR_INVOCATION");return x.data=t,F&&D.emit("set","data",null,t),t}:function(t){var a,r=arguments;if(C&&(r=C(arguments)),a=String(r[0]),hasOwnProperty.call(x,a))return y&&D.emit("get",a,r,this),x[a];if(r=1===r.length?s.call(e,this,r[0]):l.call(e,this,r),hasOwnProperty.call(x,a))throw n("Circular invocation","CIRCULAR_INVOCATION");return x[a]=r,F&&D.emit("set",a,null,r),r},D={original:e,memoized:E,profileName:o.profileName,get:function(e){return C&&(e=C(e)),m?m(e):String(e[0])},has:function(e){return hasOwnProperty.call(x,e)},delete:function(e){var t;hasOwnProperty.call(x,e)&&(g&&g(e),t=x[e],delete x[e],w)&&D.emit("delete",e,t)},clear:function(){var e=x;b&&b(),x=c(null),D.emit("clear",e)},on:function(e,t){return"get"===e?y=!0:"set"===e?F=!0:"delete"===e&&(w=!0),p.call(this,e,t)},emit:f,updateEnv:function(){e=D.original}},o=m?a((function(e){var t=arguments;C&&(t=C(t)),null!==(t=m(t))&&D.delete(t)}),A):0===t?function(){return D.delete("data")}:function(e){return C&&(e=C(arguments)[0]),D.delete(e)},A=a((function(){var e=arguments;return 0===t?x.data:(C&&(e=C(e)),e=m?m(e):String(e[0]),x[e])})),v=a((function(){var e=arguments;return 0===t?D.has("data"):(C&&(e=C(e)),null!==(e=m?m(e):String(e[0]))&&D.has(e))})),d(E,{__memoized__:r(!0),delete:r(o),clear:r(D.clear),_get:r(A),_has:r(v)}),D}})),wt=ae((function(e,t){"use strict";var n=Ne(),a=Oe(),r=Se(),o=Ft(),u=Te();t.exports=function e(t){var i,l,s;if(n(t),(i=Object(arguments[1])).async&&i.promise)throw new Error("Options \'async\' and \'promise\' cannot be used together");return hasOwnProperty.call(t,"__memoized__")&&!i.force?t:(l=u(i.length,t.length,i.async&&r.async),s=o(t,l,i),a(r,(function(e,t){i[t]&&e(i[t],s,i)})),e.__profiler__&&e.__profiler__(s),s.updateEnv(),s.memoized)}})),Et=ae((function(e,t){"use strict";t.exports=function(e){var t,n,a=e.length;if(!a)return"";for(t=String(e[n=0]);--a;)t+=""+e[++n];return t}})),Ct=ae((function(e,t){"use strict";t.exports=function(e){return e?function(t){for(var n=String(t[0]),a=0,r=e;--r;)n+=""+t[++a];return n}:function(){return""}}})),xt=ae((function(e,t){"use strict";t.exports=function(){var e=Number.isNaN;return"function"==typeof e&&!e({})&&e(NaN)&&!e(34)}})),At=ae((function(e,t){"use strict";t.exports=function(e){return e!=e}})),kt=ae((function(e,t){"use strict";t.exports=xt()()?Number.isNaN:At()})),Bt=ae((function(e,t){"use strict";var n=kt(),a=Be(),r=Re(),o=Array.prototype.indexOf,u=Object.prototype.hasOwnProperty,i=Math.abs,l=Math.floor;t.exports=function(e){var t,s,c;if(!n(e))return o.apply(this,arguments);for(s=a(r(this).length),e=arguments[1],t=e=isNaN(e)?0:0<=e?l(e):a(this.length)-l(i(e));t<s;++t)if(u.call(this,t)&&(c=this[t],n(c)))return t;return-1}})),Tt=ae((function(e,t){"use strict";var n=Bt(),a=Object.create;t.exports=function(){var e=0,t=[],r=a(null);return{get:function(e){var a,r=0,o=t,u=e.length;if(0===u)return o[u]||null;if(o=o[u]){for(;r<u-1;){if(-1===(a=n.call(o[0],e[r])))return null;o=o[1][a],++r}return-1===(a=n.call(o[0],e[r]))?null:o[1][a]||null}return null},set:function(a){var o,u=0,i=t,l=a.length;if(0===l)i[l]=++e;else{for(i[l]||(i[l]=[[],[]]),i=i[l];u<l-1;)-1===(o=n.call(i[0],a[u]))&&(o=i[0].push(a[u])-1,i[1].push([[],[]])),i=i[1][o],++u;-1===(o=n.call(i[0],a[u]))&&(o=i[0].push(a[u])-1),i[1][o]=++e}return r[e]=a,e},delete:function(e){var a,o=0,u=t,i=r[e],l=i.length,s=[];if(0===l)delete u[l];else if(u=u[l]){for(;o<l-1;){if(-1===(a=n.call(u[0],i[o])))return;s.push(u,a),u=u[1][a],++o}if(-1===(a=n.call(u[0],i[o])))return;for(e=u[1][a],u[0].splice(a,1),u[1].splice(a,1);!u[0].length&&s.length;)a=s.pop(),(u=s.pop())[0].splice(a,1),u[1].splice(a,1)}delete r[e]},clear:function(){t=[],r=a(null)}}}})),Nt=ae((function(e,t){"use strict";var n=Bt();t.exports=function(){var e=0,t=[],a=[];return{get:function(e){return-1===(e=n.call(t,e[0]))?null:a[e]},set:function(n){return t.push(n[0]),a.push(++e),e},delete:function(e){-1!==(e=n.call(a,e))&&(t.splice(e,1),a.splice(e,1))},clear:function(){t=[],a=[]}}}})),Rt=ae((function(e,t){"use strict";var n=Bt(),a=Object.create;t.exports=function(e){var t=0,r=[[],[]],o=a(null);return{get:function(t){for(var a,o=0,u=r;o<e-1;){if(-1===(a=n.call(u[0],t[o])))return null;u=u[1][a],++o}return-1!==(a=n.call(u[0],t[o]))&&u[1][a]||null},set:function(a){for(var u,i=0,l=r;i<e-1;)-1===(u=n.call(l[0],a[i]))&&(u=l[0].push(a[i])-1,l[1].push([[],[]])),l=l[1][u],++i;return-1===(u=n.call(l[0],a[i]))&&(u=l[0].push(a[i])-1),l[1][u]=++t,o[t]=a,t},delete:function(t){for(var a,u=0,i=r,l=[],s=o[t];u<e-1;){if(-1===(a=n.call(i[0],s[u])))return;l.push(i,a),i=i[1][a],++u}if(-1!==(a=n.call(i[0],s[u]))){for(t=i[1][a],i[0].splice(a,1),i[1].splice(a,1);!i[0].length&&l.length;)a=l.pop(),(i=l.pop())[0].splice(a,1),i[1].splice(a,1);delete o[t]}},clear:function(){r=[[],[]],o=a(null)}}}})),_t=ae((function(e,t){"use strict";var n=Ne(),a=Oe(),r=Function.prototype.call;t.exports=function(e,t){var o={},u=arguments[2];return n(t),a(e,(function(e,n,a,i){o[n]=r.call(t,u,e,n,a,i)})),o}})),Ot=ae((function(e,t){"use strict";function n(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}function o(e){var t,r,o=a.createTextNode(""),u=0;return new e((function(){var e;if(t)r&&(t=r.concat(t));else{if(!r)return;t=r}if(r=t,t=null,"function"==typeof r)e=r,r=null,e();else for(o.data=u=++u%2;r;)e=r.shift(),r.length||(r=null),e()})).observe(o,{characterData:!0}),function(e){n(e),t?"function"==typeof t?t=[t,e]:t.push(e):(t=e,o.data=u=++u%2)}}t.exports=function(){if("object"===("undefined"==typeof process?"undefined":r(process))&&process&&"function"==typeof process.nextTick)return process.nextTick;if("function"==typeof queueMicrotask)return function(e){queueMicrotask(n(e))};if("object"===(void 0===a?"undefined":r(a))&&a){if("function"==typeof MutationObserver)return o(MutationObserver);if("function"==typeof WebKitMutationObserver)return o(WebKitMutationObserver)}return"function"==typeof setImmediate?function(e){setImmediate(n(e))}:"function"==typeof setTimeout||"object"===("undefined"==typeof setTimeout?"undefined":r(setTimeout))?function(e){setTimeout(n(e),0)}:null}()})),St=ae((function(){"use strict";var e=gt(),t=_t(),n=$e(),a=He(),r=Ot(),o=Array.prototype.slice,u=Function.prototype.apply,i=Object.create;Se().async=function(l,s){var c,d,p,f=i(null),D=i(null),m=s.memoized,h=s.original;s.memoized=a((function(e){var t=arguments,n=t[t.length-1];return"function"==typeof n&&(c=n,t=o.call(t,0,-1)),m.apply(d=this,p=t)}),m);try{n(s.memoized,m)}catch(l){}s.on("get",(function(e){var t,n,a;c&&(f[e]?("function"==typeof f[e]?f[e]=[f[e],c]:f[e].push(c),c=null):(t=c,n=d,a=p,c=d=p=null,r((function(){var r;hasOwnProperty.call(D,e)?(r=D[e],s.emit("getasync",e,a,n),u.call(t,r.context,r.args)):(c=t,d=n,p=a,m.apply(n,a))}))))})),s.original=function(){var t,n,a,o;return c?(t=e(arguments),a=c,c=d=p=null,t.push(n=function t(n){var a,i,l=t.id;if(null==l)r(u.bind(t,this,arguments));else if(delete t.id,a=f[l],delete f[l],a)return i=e(arguments),s.has(l)&&(n?s.delete(l):(D[l]={context:this,args:i},s.emit("setasync",l,"function"==typeof a?1:a.length))),"function"==typeof a?o=u.call(a,this,i):a.forEach((function(e){o=u.call(e,this,i)}),this),o}),o=u.call(h,this,t),n.cb=a,c=n,o):u.call(h,this,arguments)},s.on("set",(function(e){c?(f[e]?"function"==typeof f[e]?f[e]=[f[e],c.cb]:f[e].push(c.cb):f[e]=c.cb,delete c.cb,c.id=e,c=null):s.delete(e)})),s.on("delete",(function(e){var t;hasOwnProperty.call(f,e)||D[e]&&(t=D[e],delete D[e],s.emit("deleteasync",e,o.call(t.args,1)))})),s.on("clear",(function(){var e=D;D=i(null),s.emit("clearasync",t(e,(function(e){return o.call(e.args,1)})))}))}})),Mt=ae((function(e,t){"use strict";var n=Array.prototype.forEach,a=Object.create;t.exports=function(e){var t=a(null);return n.call(arguments,(function(e){t[e]=!0})),t}})),Pt=ae((function(e,t){"use strict";t.exports=function(e){return"function"==typeof e}})),It=ae((function(e,t){"use strict";var n=Pt();t.exports=function(e){try{return e&&n(e.toString)?e.toString():String(e)}catch(e){throw new TypeError("Passed argument cannot be stringifed")}}})),jt=ae((function(e,t){"use strict";var n=Re(),a=It();t.exports=function(e){return a(n(e))}})),Lt=ae((function(e,t){"use strict";var n=Pt();t.exports=function(e){try{return e&&n(e.toString)?e.toString():String(e)}catch(e){return"<Non-coercible to string value>"}}})),qt=ae((function(e,t){"use strict";var n=Lt(),a=/[\\n\\r\\u2028\\u2029]/g;t.exports=function(e){return(e=100<(e=n(e)).length?e.slice(0,99)+"…":e).replace(a,(function(e){return JSON.stringify(e).slice(1,-1)}))}})),zt=ae((function(e,t){function n(e){return!!e&&("object"===r(e)||"function"==typeof e)&&"function"==typeof e.then}t.exports=n,t.exports.default=n})),Vt=ae((function(){"use strict";var e=_t(),t=Mt(),n=jt(),a=qt(),r=zt(),o=Ot(),u=Object.create,i=t("then","then:finally","done","done:finally");Se().promise=function(t,l){var s=u(null),c=u(null),d=u(null);if(!0===t)t=null;else if(t=n(t),!i[t])throw new TypeError("\'"+a(t)+"\' is not valid promise mode");l.on("set",(function(e,n,a){var u=!1;if(r(a)){s[e]=1,d[e]=a;var i=function(t){var n=s[e];if(u)throw new Error("Memoizee error: Detected unordered then|done & finally resolution, which in turn makes proper detection of success/failure impossible (when in \'done:finally\' mode)\\nConsider to rely on \'then\' or \'done\' mode instead.");n&&(delete s[e],c[e]=t,l.emit("setasync",e,n))},p=function(){u=!0,s[e]&&(delete s[e],delete d[e],l.delete(e))},f=t;if("then"===(f=f||"then")){var D=function(){o(p)};"function"==typeof(a=a.then((function(e){o(i.bind(this,e))}),D)).finally&&a.finally(D)}else if("done"===f){if("function"!=typeof a.done)throw new Error("Memoizee error: Retrieved promise does not implement \'done\' in \'done\' mode");a.done(i,p)}else if("done:finally"===f){if("function"!=typeof a.done)throw new Error("Memoizee error: Retrieved promise does not implement \'done\' in \'done:finally\' mode");if("function"!=typeof a.finally)throw new Error("Memoizee error: Retrieved promise does not implement \'finally\' in \'done:finally\' mode");a.done(i),a.finally(p)}}else c[e]=a,l.emit("setasync",e,1)})),l.on("get",(function(e,t,n){var a,u;s[e]?++s[e]:(a=d[e],u=function(){l.emit("getasync",e,t,n)},r(a)?"function"==typeof a.done?a.done(u):a.then((function(){o(u)})):u())})),l.on("delete",(function(e){var t;delete d[e],s[e]?delete s[e]:hasOwnProperty.call(c,e)&&(t=c[e],delete c[e],l.emit("deleteasync",e,[t]))})),l.on("clear",(function(){var t=c;c=u(null),s=u(null),d=u(null),l.emit("clearasync",e(t,(function(e){return[e]})))}))}})),$t=ae((function(){"use strict";var e=Ne(),t=Oe(),n=Se(),a=Function.prototype.apply;n.dispose=function(r,o,u){var i;e(r),u.async&&n.async||u.promise&&n.promise?(o.on("deleteasync",i=function(e,t){a.call(r,null,t)}),o.on("clearasync",(function(e){t(e,(function(e,t){i(t,e)}))}))):(o.on("delete",i=function(e,t){r(t)}),o.on("clear",(function(e){t(e,(function(e,t){i(t,e)}))})))}})),Ht=ae((function(e,t){"use strict";t.exports=2147483647})),Ut=ae((function(e,t){"use strict";var n=Be(),a=Ht();t.exports=function(e){if(e=n(e),a<e)throw new TypeError(e+" exceeds maximum possible timeout");return e}})),Gt=ae((function(){"use strict";var e=gt(),t=Oe(),n=Ot(),a=zt(),r=Ut(),o=Se(),u=Function.prototype,i=Math.max,l=Math.min,s=Object.create;o.maxAge=function(c,d,p){var f,D,m,h;(c=r(c))&&(f=s(null),D=p.async&&o.async||p.promise&&o.promise?"async":"",d.on("set"+D,(function(e){f[e]=setTimeout((function(){d.delete(e)}),c),"function"==typeof f[e].unref&&f[e].unref(),h&&(h[e]&&"nextTick"!==h[e]&&clearTimeout(h[e]),h[e]=setTimeout((function(){delete h[e]}),m),"function"==typeof h[e].unref)&&h[e].unref()})),d.on("delete"+D,(function(e){clearTimeout(f[e]),delete f[e],h&&("nextTick"!==h[e]&&clearTimeout(h[e]),delete h[e])})),p.preFetch&&(m=!0===p.preFetch||isNaN(p.preFetch)?.333:i(l(Number(p.preFetch),1),0))&&(h={},m=(1-m)*c,d.on("get"+D,(function(t,r,o){h[t]||(h[t]="nextTick",n((function(){var n;"nextTick"===h[t]&&(delete h[t],d.delete(t),p.async&&(r=e(r)).push(u),n=d.memoized.apply(o,r),p.promise)&&a(n)&&("function"==typeof n.done?n.done(u,u):n.then(u,u))})))}))),d.on("clear"+D,(function(){t(f,(function(e){clearTimeout(e)})),f={},h&&(t(h,(function(e){"nextTick"!==e&&clearTimeout(e)})),h={})})))}})),Wt=ae((function(e,t){"use strict";var n=Be(),a=Object.create,r=Object.prototype.hasOwnProperty;t.exports=function(e){var t,o=0,u=1,i=a(null),l=a(null),s=0;return e=n(e),{hit:function(n){var a=l[n],c=++s;if(i[c]=n,l[n]=c,!a)return++o<=e?void 0:(n=i[u],t(n),n);if(delete i[a],u===a)for(;!r.call(i,++u););},delete:t=function(e){var t=l[e];if(t&&(delete i[t],delete l[e],--o,u===t))if(o)for(;!r.call(i,++u););else s=0,u=1},clear:function(){o=0,u=1,i=a(null),l=a(null),s=0}}}})),Yt=ae((function(){"use strict";var e=Be(),t=Wt(),n=Se();n.max=function(a,r,o){var u;(a=e(a))&&(u=t(a),a=o.async&&n.async||o.promise&&n.promise?"async":"",r.on("set"+a,o=function(e){void 0!==(e=u.hit(e))&&r.delete(e)}),r.on("get"+a,o),r.on("delete"+a,u.delete),r.on("clear"+a,u.clear))}})),Kt=ae((function(){"use strict";var e=Qe(),t=Se(),n=Object.create,a=Object.defineProperties;t.refCounter=function(r,o,u){var i=n(null);u=u.async&&t.async||u.promise&&t.promise?"async":"";o.on("set"+u,(function(e,t){i[e]=t||1})),o.on("get"+u,(function(e){++i[e]})),o.on("delete"+u,(function(e){delete i[e]})),o.on("clear"+u,(function(){i={}})),a(o.memoized,{deleteRef:e((function(){var e=o.get(arguments);return null!==e&&i[e]?!--i[e]&&(o.delete(e),!0):null})),getRefCount:e((function(){var e=o.get(arguments);return null!==e&&i[e]||0}))})}})),Xt=ae((function(e,t){"use strict";var n=Ee(),a=Te(),r=wt();t.exports=function(e){var t,o=n(arguments[1]);return o.normalizer||0!==(t=o.length=a(o.length,e.length,o.async))&&(o.primitive?!1===t?o.normalizer=Et():1<t&&(o.normalizer=Ct()(t)):o.normalizer=!1===t?Tt()():1===t?Nt()():Rt()(t)),o.async&&St(),o.promise&&Vt(),o.dispose&&$t(),o.maxAge&&Gt(),o.max&&Yt(),o.refCounter&&Kt(),r(e,o)}})),Zt=ae((function(e,a){!function(){"use strict";var e={name:"doT",version:"1.1.1",templateSettings:{evaluate:/\\{\\{([\\s\\S]+?(\\}?)+)\\}\\}/g,interpolate:/\\{\\{=([\\s\\S]+?)\\}\\}/g,encode:/\\{\\{!([\\s\\S]+?)\\}\\}/g,use:/\\{\\{#([\\s\\S]+?)\\}\\}/g,useParams:/(^|[^\\w$])def(?:\\.|\\[[\\\'\\"])([\\w$\\.]+)(?:[\\\'\\"]\\])?\\s*\\:\\s*([\\w$\\.]+|\\"[^\\"]+\\"|\\\'[^\\\']+\\\'|\\{[^\\}]+\\})/g,define:/\\{\\{##\\s*([\\w\\.$]+)\\s*(\\:|=)([\\s\\S]+?)#\\}\\}/g,defineParams:/^\\s*([\\w$]+):([\\s\\S]+)/,conditional:/\\{\\{\\?(\\?)?\\s*([\\s\\S]*?)\\s*\\}\\}/g,iterate:/\\{\\{~\\s*(?:\\}\\}|([\\s\\S]+?)\\s*\\:\\s*([\\w$]+)\\s*(?:\\:\\s*([\\w$]+))?\\s*\\}\\})/g,varname:"it",strip:!0,append:!0,selfcontained:!1,doNotSkipEncoded:!1},template:void 0,compile:void 0,log:!0};if("object"!==("undefined"==typeof globalThis?"undefined":r(globalThis)))try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__}catch(e){t.globalThis=function(){if("undefined"!=typeof self)return self;if(void 0!==t)return t;if(void 0!==n)return n;if(void 0!==this)return this;throw new Error("Unable to locate global `this`")}()}e.encodeHTMLSource=function(e){var t={"&":"&#38;","<":"&#60;",">":"&#62;",\'"\':"&#34;","\'":"&#39;","/":"&#47;"},n=e?/[&<>"\'\\/]/g:/&(?!#?\\w+;)|<|>|"|\'|\\//g;return function(e){return e?e.toString().replace(n,(function(e){return t[e]||e})):""}},void 0!==a&&a.exports?a.exports=e:"function"==typeof define&&define.amd?define((function(){return e})):globalThis.doT=e;var o={append:{start:"\'+(",end:")+\'",startencode:"\'+encodeHTML("},split:{start:"\';out+=(",end:");out+=\'",startencode:"\';out+=encodeHTML("}},u=/$^/;function i(e){return e.replace(/\\\\(\'|\\\\)/g,"$1").replace(/[\\r\\t\\n]/g," ")}e.template=function(t,n,a){var r,l,s=(n=n||e.templateSettings).append?o.append:o.split,c=0;a=n.use||n.define?function e(t,n,a){return("string"==typeof n?n:n.toString()).replace(t.define||u,(function(e,n,r,o){return(n=0===n.indexOf("def.")?n.substring(4):n)in a||(":"===r?(t.defineParams&&o.replace(t.defineParams,(function(e,t,r){a[n]={arg:t,text:r}})),n in a||(a[n]=o)):new Function("def","def[\'"+n+"\']="+o)(a)),""})).replace(t.use||u,(function(n,r){return t.useParams&&(r=r.replace(t.useParams,(function(e,t,n,r){var o;if(a[n]&&a[n].arg&&r)return o=(n+":"+r).replace(/\'|\\\\/g,"_"),a.__exp=a.__exp||{},a.__exp[o]=a[n].text.replace(new RegExp("(^|[^\\\\w$])"+a[n].arg+"([^\\\\w$])","g"),"$1"+r+"$2"),t+"def.__exp[\'"+o+"\']"}))),(r=new Function("def","return "+r)(a))&&e(t,r,a)}))}(n,t,a||{}):t,a=("var out=\'"+(n.strip?a.replace(/(^|\\r|\\n)\\t* +| +\\t*(\\r|\\n|$)/g," ").replace(/\\r|\\n|\\t|\\/\\*[\\s\\S]*?\\*\\//g,""):a).replace(/\'|\\\\/g,"\\\\$&").replace(n.interpolate||u,(function(e,t){return s.start+i(t)+s.end})).replace(n.encode||u,(function(e,t){return r=!0,s.startencode+i(t)+s.end})).replace(n.conditional||u,(function(e,t,n){return t?n?"\';}else if("+i(n)+"){out+=\'":"\';}else{out+=\'":n?"\';if("+i(n)+"){out+=\'":"\';}out+=\'"})).replace(n.iterate||u,(function(e,t,n,a){return t?(c+=1,l=a||"i"+c,t=i(t),"\';var arr"+c+"="+t+";if(arr"+c+"){var "+n+","+l+"=-1,l"+c+"=arr"+c+".length-1;while("+l+"<l"+c+"){"+n+"=arr"+c+"["+l+"+=1];out+=\'"):"\';} } out+=\'"})).replace(n.evaluate||u,(function(e,t){return"\';"+i(t)+"out+=\'"}))+"\';return out;").replace(/\\n/g,"\\\\n").replace(/\\t/g,"\\\\t").replace(/\\r/g,"\\\\r").replace(/(\\s|;|\\}|^|\\{)out\\+=\'\';/g,"$1").replace(/\\+\'\'/g,"");r&&(n.selfcontained||!globalThis||globalThis._encodeHTML||(globalThis._encodeHTML=e.encodeHTMLSource(n.doNotSkipEncoded)),a="var encodeHTML = typeof _encodeHTML !== \'undefined\' ? _encodeHTML : ("+e.encodeHTMLSource.toString()+"("+(n.doNotSkipEncoded||"")+"));"+a);try{return new Function(n.varname,a)}catch(t){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+a),t}},e.compile=function(t,n){return e.template(t,null,n)}}()})),Jt=ae((function(e,o){var u;u=function(){"use strict";function e(e){return"function"==typeof e}var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},u=0,i=void 0,l=void 0,s=function(e,t){m[u]=e,m[u+1]=t,2===(u+=2)&&(l?l(h):y())},c=void 0!==t?t:void 0,d=(d=c||{}).MutationObserver||d.WebKitMutationObserver,p="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function D(){var e=setTimeout;return function(){return e(h,1)}}var m=new Array(1e3);function h(){for(var e=0;e<u;e+=2)(0,m[e])(m[e+1]),m[e]=void 0,m[e+1]=void 0;u=0}var g,b,v,y=void 0;function F(e,t){var n,a=this,r=new this.constructor(C),o=(void 0===r[E]&&M(r),a._state);return o?(n=arguments[o-1],s((function(){return O(o,r,n,a._result)}))):R(a,r,e,t),r}function w(e){var t;return e&&"object"===r(e)&&e.constructor===this?e:(k(t=new this(C),e),t)}y=p?function(){return process.nextTick(h)}:d?(b=0,p=new d(h),v=a.createTextNode(""),p.observe(v,{characterData:!0}),function(){v.data=b=++b%2}):f?((g=new MessageChannel).port1.onmessage=h,function(){return g.port2.postMessage(0)}):(void 0===c?function(){try{var e=Function("return this")().require("vertx");return void 0!==(i=e.runOnLoop||e.runOnContext)?function(){i(h)}:D()}catch(e){return D()}}:D)();var E=Math.random().toString(36).substring(2);function C(){}var x=void 0;function A(t,n,a){var r,o;n.constructor===t.constructor&&a===F&&n.constructor.resolve===w?(r=t,1===(o=n)._state?T(r,o._result):2===o._state?N(r,o._result):R(o,void 0,(function(e){return k(r,e)}),(function(e){return N(r,e)}))):void 0!==a&&e(a)?function(e,t,n){s((function(e){var a=!1,r=function(e,t,n,a){try{e.call(t,n,a)}catch(e){return e}}(n,t,(function(n){a||(a=!0,(t!==n?k:T)(e,n))}),(function(t){a||(a=!0,N(e,t))}),e._label);!a&&r&&(a=!0,N(e,r))}),e)}(t,n,a):T(t,n)}function k(e,t){if(e===t)N(e,new TypeError("You cannot resolve a promise with itself"));else if(a=r(n=t),null===n||"object"!==a&&"function"!==a)T(e,t);else{n=void 0;try{n=t.then}catch(t){return void N(e,t)}A(e,t,n)}var n,a}function B(e){e._onerror&&e._onerror(e._result),_(e)}function T(e,t){e._state===x&&(e._result=t,e._state=1,0!==e._subscribers.length)&&s(_,e)}function N(e,t){e._state===x&&(e._state=2,e._result=t,s(B,e))}function R(e,t,n,a){var r=e._subscribers,o=r.length;e._onerror=null,r[o]=t,r[o+1]=n,r[o+2]=a,0===o&&e._state&&s(_,e)}function _(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var a,r=void 0,o=e._result,u=0;u<t.length;u+=3)a=t[u],r=t[u+n],a?O(n,a,r,o):r(o);e._subscribers.length=0}}function O(t,n,a,r){var o=e(a),u=void 0,i=void 0,l=!0;if(o){try{u=a(r)}catch(t){l=!1,i=t}if(n===u)return void N(n,new TypeError("A promises callback cannot return that same promise."))}else u=r;n._state===x&&(o&&l?k(n,u):!1===l?N(n,i):1===t?T(n,u):2===t&&N(n,u))}var S=0;function M(e){e[E]=S++,e._state=void 0,e._result=void 0,e._subscribers=[]}I.prototype._enumerate=function(e){for(var t=0;this._state===x&&t<e.length;t++)this._eachEntry(e[t],t)},I.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,a=n.resolve;if(a===w){var r,o=void 0,u=void 0,i=!1;try{o=e.then}catch(t){i=!0,u=t}o===F&&e._state!==x?this._settledAt(e._state,t,e._result):"function"!=typeof o?(this._remaining--,this._result[t]=e):n===j?(r=new n(C),i?N(r,u):A(r,e,o),this._willSettleAt(r,t)):this._willSettleAt(new n((function(t){return t(e)})),t)}else this._willSettleAt(a(e),t)},I.prototype._settledAt=function(e,t,n){var a=this.promise;a._state===x&&(this._remaining--,2===e?N(a,n):this._result[t]=n),0===this._remaining&&T(a,this._result)},I.prototype._willSettleAt=function(e,t){var n=this;R(e,void 0,(function(e){return n._settledAt(1,t,e)}),(function(e){return n._settledAt(2,t,e)}))};var P=I;function I(e,t){this._instanceConstructor=e,this.promise=new e(C),this.promise[E]||M(this.promise),o(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0!==this.length&&(this.length=this.length||0,this._enumerate(t),0!==this._remaining)||T(this.promise,this._result)):N(this.promise,new Error("Array Methods must be provided an Array"))}L.prototype.catch=function(e){return this.then(null,e)},L.prototype.finally=function(t){var n=this.constructor;return e(t)?this.then((function(e){return n.resolve(t()).then((function(){return e}))}),(function(e){return n.resolve(t()).then((function(){throw e}))})):this.then(t,t)};var j=L;function L(e){if(this[E]=S++,this._result=this._state=void 0,this._subscribers=[],C!==e){if("function"!=typeof e)throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof L))throw new TypeError("Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.");var t=this;try{e((function(e){k(t,e)}),(function(e){N(t,e)}))}catch(e){N(t,e)}}}return j.prototype.then=F,j.all=function(e){return new P(this,e).promise},j.race=function(e){var t=this;return o(e)?new t((function(n,a){for(var r=e.length,o=0;o<r;o++)t.resolve(e[o]).then(n,a)})):new t((function(e,t){return t(new TypeError("You must pass an array to race."))}))},j.resolve=w,j.reject=function(e){var t=new this(C);return N(t,e),t},j._setScheduler=function(e){l=e},j._setAsap=function(e){s=e},j._asap=s,j.polyfill=function(){var e=void 0;if(void 0!==n)e=n;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var a=null;try{a=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===a&&!t.cast)return}e.Promise=j},j.Promise=j},"object"===r(e=e)&&void 0!==o?o.exports=u():"function"==typeof define&&define.amd?define(u):e.ES6Promise=u()})),Qt=ae((function(e){var t,n,a=(t=Object.prototype.toString,n=Object.prototype.hasOwnProperty,{Class:function(e){return t.call(e).replace(/^\\[object *|\\]$/g,"")},HasProperty:function(e,t){return t in e},HasOwnProperty:function(e,t){return n.call(e,t)},IsCallable:function(e){return"function"==typeof e},ToInt32:function(e){return e>>0},ToUint32:function(e){return e>>>0}}),o=Math.LN2,u=Math.abs,i=Math.floor,l=Math.log,s=Math.min,c=Math.pow,d=Math.round;function p(e,t,n){return e<t?t:n<e?n:e}var f,D,m,h,g,b,v,y,F,w,E,C=Object.getOwnPropertyNames||function(e){if(e!==Object(e))throw new TypeError("Object.getOwnPropertyNames called on non-object");var t,n=[];for(t in e)a.HasOwnProperty(e,t)&&n.push(t);return n};function x(e){if(C&&f)for(var t=C(e),n=0;n<t.length;n+=1)f(e,t[n],{value:e[t[n]],writable:!1,enumerable:!1,configurable:!1})}function A(e){if(f){if(e.length>1e5)throw new RangeError("Array too large for polyfill");for(var t=0;t<e.length;t+=1)!function(t){f(e,t,{get:function(){return e._getter(t)},set:function(n){e._setter(t,n)},enumerable:!0,configurable:!1})}(t)}}function k(e,t){return e<<(t=32-t)>>t}function B(e,t){return e<<(t=32-t)>>>t}function T(e){return B(e[0],8)}function N(e,t,n){var a,r,d,p,f,D,m,h=(1<<t-1)-1;function g(e){var t=i(e);return(e=e-t)<.5||!(.5<e||t%2)?t:t+1}for(e!=e?(r=(1<<t)-1,d=c(2,n-1),a=0):e===1/0||e===-1/0?(r=(1<<t)-1,a=e<(d=0)?1:0):0===e?a=1/e==-1/(d=r=0)?1:0:(a=e<0,(e=u(e))>=c(2,1-h)?(r=s(i(l(e)/o),1023),2<=(d=g(e/c(2,r)*c(2,n)))/c(2,n)&&(r+=1,d=1),h<r?(r=(1<<t)-1,d=0):(r+=h,d-=c(2,n))):(r=0,d=g(e/c(2,1-h-n)))),f=[],p=n;p;--p)f.push(d%2?1:0),d=i(d/2);for(p=t;p;--p)f.push(r%2?1:0),r=i(r/2);for(f.push(a?1:0),f.reverse(),D=f.join(""),m=[];D.length;)m.push(parseInt(D.substring(0,8),2)),D=D.substring(8);return m}function R(e,t,n){for(var a,r,o,u,i,l,s=[],d=e.length;d;--d)for(r=e[d-1],a=8;a;--a)s.push(r%2?1:0),r>>=1;return s.reverse(),l=s.join(""),o=(1<<t-1)-1,u=parseInt(l.substring(0,1),2)?-1:1,i=parseInt(l.substring(1,1+t),2),l=parseInt(l.substring(1+t),2),i===(1<<t)-1?0===l?1/0*u:NaN:0<i?u*c(2,i-o)*(1+l/c(2,n)):0!==l?u*c(2,-(o-1))*(l/c(2,n)):u<0?-0:0}function _(e){if((e=a.ToInt32(e))<0)throw new RangeError("ArrayBuffer size is not a small enough positive integer");var t;for(this.byteLength=e,this._bytes=[],this._bytes.length=e,t=0;t<this.byteLength;t+=1)this._bytes[t]=0;x(this)}function O(){}function S(e,t,n){var o=function(e,t,n){var u,i,l,s;if(arguments.length&&"number"!=typeof e)if("object"===r(e)&&e.constructor===o)for(this.length=(u=e).length,this.byteLength=this.length*this.BYTES_PER_ELEMENT,this.buffer=new _(this.byteLength),l=this.byteOffset=0;l<this.length;l+=1)this._setter(l,u._getter(l));else if("object"!==r(e)||e instanceof _||"ArrayBuffer"===a.Class(e)){if("object"!==r(e)||!(e instanceof _||"ArrayBuffer"===a.Class(e)))throw new TypeError("Unexpected argument type(s)");if(this.buffer=e,this.byteOffset=a.ToUint32(t),this.byteOffset>this.buffer.byteLength)throw new RangeError("byteOffset out of range");if(this.byteOffset%this.BYTES_PER_ELEMENT)throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size.");if(arguments.length<3){if(this.byteLength=this.buffer.byteLength-this.byteOffset,this.byteLength%this.BYTES_PER_ELEMENT)throw new RangeError("length of buffer minus byteOffset not a multiple of the element size");this.length=this.byteLength/this.BYTES_PER_ELEMENT}else this.length=a.ToUint32(n),this.byteLength=this.length*this.BYTES_PER_ELEMENT;if(this.byteOffset+this.byteLength>this.buffer.byteLength)throw new RangeError("byteOffset and length reference an area beyond the end of the buffer")}else for(this.length=a.ToUint32((i=e).length),this.byteLength=this.length*this.BYTES_PER_ELEMENT,this.buffer=new _(this.byteLength),l=this.byteOffset=0;l<this.length;l+=1)s=i[l],this._setter(l,Number(s));else{if(this.length=a.ToInt32(e),n<0)throw new RangeError("ArrayBufferView size is not a small enough positive integer");this.byteLength=this.length*this.BYTES_PER_ELEMENT,this.buffer=new _(this.byteLength),this.byteOffset=0}this.constructor=o,x(this),A(this)};return(o.prototype=new O).BYTES_PER_ELEMENT=e,o.prototype._pack=t,o.prototype._unpack=n,o.BYTES_PER_ELEMENT=e,o.prototype.get=o.prototype._getter=function(e){if(arguments.length<1)throw new SyntaxError("Not enough arguments");if(!((e=a.ToUint32(e))>=this.length)){for(var t=[],n=0,r=this.byteOffset+e*this.BYTES_PER_ELEMENT;n<this.BYTES_PER_ELEMENT;n+=1,r+=1)t.push(this.buffer._bytes[r]);return this._unpack(t)}},o.prototype._setter=function(e,t){if(arguments.length<2)throw new SyntaxError("Not enough arguments");if((e=a.ToUint32(e))<this.length)for(var n=this._pack(t),r=0,o=this.byteOffset+e*this.BYTES_PER_ELEMENT;r<this.BYTES_PER_ELEMENT;r+=1,o+=1)this.buffer._bytes[o]=n[r]},o.prototype.set=function(e,t){if(arguments.length<1)throw new SyntaxError("Not enough arguments");var n,o,u,i,l,s,c,d,p,f;if("object"===r(e)&&e.constructor===this.constructor){if(n=e,(u=a.ToUint32(t))+n.length>this.length)throw new RangeError("Offset plus length of array is out of range");if(d=this.byteOffset+u*this.BYTES_PER_ELEMENT,p=n.length*this.BYTES_PER_ELEMENT,n.buffer===this.buffer){for(f=[],l=0,s=n.byteOffset;l<p;l+=1,s+=1)f[l]=n.buffer._bytes[s];for(l=0,c=d;l<p;l+=1,c+=1)this.buffer._bytes[c]=f[l]}else for(l=0,s=n.byteOffset,c=d;l<p;l+=1,s+=1,c+=1)this.buffer._bytes[c]=n.buffer._bytes[s]}else{if("object"!==r(e)||void 0===e.length)throw new TypeError("Unexpected argument type(s)");if(i=a.ToUint32((o=e).length),(u=a.ToUint32(t))+i>this.length)throw new RangeError("Offset plus length of array is out of range");for(l=0;l<i;l+=1)s=o[l],this._setter(u+l,Number(s))}},o.prototype.subarray=function(e,t){e=a.ToInt32(e),t=a.ToInt32(t),arguments.length<1&&(e=0),arguments.length<2&&(t=this.length),e<0&&(e=this.length+e),t<0&&(t=this.length+t),e=p(e,0,this.length);var n=(t=p(t,0,this.length))-e;return new this.constructor(this.buffer,this.byteOffset+e*this.BYTES_PER_ELEMENT,n=n<0?0:n)},o}function M(e,t){return a.IsCallable(e.get)?e.get(t):e[t]}function P(t,n,r){if(0===arguments.length)t=new e.ArrayBuffer(0);else if(!(t instanceof e.ArrayBuffer||"ArrayBuffer"===a.Class(t)))throw new TypeError("TypeError");if(this.buffer=t||new e.ArrayBuffer(0),this.byteOffset=a.ToUint32(n),this.byteOffset>this.buffer.byteLength)throw new RangeError("byteOffset out of range");if(this.byteLength=arguments.length<3?this.buffer.byteLength-this.byteOffset:a.ToUint32(r),this.byteOffset+this.byteLength>this.buffer.byteLength)throw new RangeError("byteOffset and length reference an area beyond the end of the buffer");x(this)}function I(t){return function(n,r){if((n=a.ToUint32(n))+t.BYTES_PER_ELEMENT>this.byteLength)throw new RangeError("Array index out of range");n+=this.byteOffset;for(var o=new e.Uint8Array(this.buffer,n,t.BYTES_PER_ELEMENT),u=[],i=0;i<t.BYTES_PER_ELEMENT;i+=1)u.push(M(o,i));return Boolean(r)===Boolean(E)&&u.reverse(),M(new t(new e.Uint8Array(u).buffer),0)}}function j(t){return function(n,r,o){if((n=a.ToUint32(n))+t.BYTES_PER_ELEMENT>this.byteLength)throw new RangeError("Array index out of range");r=new t([r]);for(var u=new e.Uint8Array(r.buffer),i=[],l=0;l<t.BYTES_PER_ELEMENT;l+=1)i.push(M(u,l));Boolean(o)===Boolean(E)&&i.reverse(),new e.Uint8Array(this.buffer,n,t.BYTES_PER_ELEMENT).set(i)}}f=Object.defineProperty&&function(){try{return Object.defineProperty({},"x",{}),1}catch(e){}}()?Object.defineProperty:function(e,t,n){if(!e===Object(e))throw new TypeError("Object.defineProperty called on non-object");return a.HasProperty(n,"get")&&Object.prototype.__defineGetter__&&Object.prototype.__defineGetter__.call(e,t,n.get),a.HasProperty(n,"set")&&Object.prototype.__defineSetter__&&Object.prototype.__defineSetter__.call(e,t,n.set),a.HasProperty(n,"value")&&(e[t]=n.value),e},e.ArrayBuffer=e.ArrayBuffer||_,w=S(1,(function(e){return[255&e]}),(function(e){return k(e[0],8)})),D=S(1,(function(e){return[255&e]}),T),m=S(1,(function(e){return[(e=d(Number(e)))<0?0:255<e?255:255&e]}),T),h=S(2,(function(e){return[e>>8&255,255&e]}),(function(e){return k(e[0]<<8|e[1],16)})),g=S(2,(function(e){return[e>>8&255,255&e]}),(function(e){return B(e[0]<<8|e[1],16)})),b=S(4,(function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}),(function(e){return k(e[0]<<24|e[1]<<16|e[2]<<8|e[3],32)})),v=S(4,(function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}),(function(e){return B(e[0]<<24|e[1]<<16|e[2]<<8|e[3],32)})),y=S(4,(function(e){return N(e,8,23)}),(function(e){return R(e,8,23)})),F=S(8,(function(e){return N(e,11,52)}),(function(e){return R(e,11,52)})),e.Int8Array=e.Int8Array||w,e.Uint8Array=e.Uint8Array||D,e.Uint8ClampedArray=e.Uint8ClampedArray||m,e.Int16Array=e.Int16Array||h,e.Uint16Array=e.Uint16Array||g,e.Int32Array=e.Int32Array||b,e.Uint32Array=e.Uint32Array||v,e.Float32Array=e.Float32Array||y,e.Float64Array=e.Float64Array||F,w=new e.Uint16Array([4660]),E=18===M(new e.Uint8Array(w.buffer),0),P.prototype.getUint8=I(e.Uint8Array),P.prototype.getInt8=I(e.Int8Array),P.prototype.getUint16=I(e.Uint16Array),P.prototype.getInt16=I(e.Int16Array),P.prototype.getUint32=I(e.Uint32Array),P.prototype.getInt32=I(e.Int32Array),P.prototype.getFloat32=I(e.Float32Array),P.prototype.getFloat64=I(e.Float64Array),P.prototype.setUint8=j(e.Uint8Array),P.prototype.setInt8=j(e.Int8Array),P.prototype.setUint16=j(e.Uint16Array),P.prototype.setInt16=j(e.Int16Array),P.prototype.setUint32=j(e.Uint32Array),P.prototype.setInt32=j(e.Int32Array),P.prototype.setFloat32=j(e.Float32Array),P.prototype.setFloat64=j(e.Float64Array),e.DataView=e.DataView||P})),en=ae((function(e){!function(e){"use strict";var t,n,a;function o(){if(void 0===this)throw new TypeError("Constructor WeakMap requires \'new\'");if(a(this,"_id","_WeakMap_"+i()+"."+i()),0<arguments.length)throw new TypeError("WeakMap iterable is not supported")}function u(e,n){if(!l(e)||!t.call(e,"_id"))throw new TypeError(n+" method called on incompatible receiver "+r(e))}function i(){return Math.random().toString().substring(2)}function l(e){return Object(e)===e}e.WeakMap||(t=Object.prototype.hasOwnProperty,n=Object.defineProperty&&function(){try{return 1===Object.defineProperty({},"x",{value:1}).x}catch(e){}}(),e.WeakMap=((a=function(e,t,a){n?Object.defineProperty(e,t,{configurable:!0,writable:!0,value:a}):e[t]=a})(o.prototype,"delete",(function(e){var t;return u(this,"delete"),!!l(e)&&!(!(t=e[this._id])||t[0]!==e||(delete e[this._id],0))})),a(o.prototype,"get",(function(e){var t;return u(this,"get"),l(e)&&(t=e[this._id])&&t[0]===e?t[1]:void 0})),a(o.prototype,"has",(function(e){var t;return u(this,"has"),!!l(e)&&!(!(t=e[this._id])||t[0]!==e)})),a(o.prototype,"set",(function(e,t){var n;if(u(this,"set"),l(e))return(n=e[this._id])&&n[0]===e?n[1]=t:a(e,this._id,[e,t]),this;throw new TypeError("Invalid value used as weak map key")})),a(o,"_polyfill",!0),o))}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:void 0!==t?t:void 0!==n?n:e)})),tn={helpUrlBase:"https://dequeuniversity.com/rules/",gridSize:200,results:[],resultGroups:[],resultGroupMap:{},impact:Object.freeze(["minor","moderate","serious","critical"]),preload:Object.freeze({assets:["cssom","media"],timeout:1e4}),allOrigins:"<unsafe_all_origins>",sameOrigin:"<same_origin>"},nn=([{name:"NA",value:"inapplicable",priority:0,group:"inapplicable"},{name:"PASS",value:"passed",priority:1,group:"passes"},{name:"CANTTELL",value:"cantTell",priority:2,group:"incomplete"},{name:"FAIL",value:"failed",priority:3,group:"violations"}].forEach((function(e){var t=e.name,n=e.value,a=e.priority;e=e.group;tn[t]=n,tn[t+"_PRIO"]=a,tn[t+"_GROUP"]=e,tn.results[a]=n,tn.resultGroups[a]=e,tn.resultGroupMap[n]=e})),Object.freeze(tn.results),Object.freeze(tn.resultGroups),Object.freeze(tn.resultGroupMap),Object.freeze(tn),tn),an=function(){"object"===("undefined"==typeof console?"undefined":r(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},rn=/[\\t\\r\\n\\f]/g;function on(){X(this,on),this.parent=void 0}J(on,[{key:"props",get:function(){throw new Error(\'VirtualNode class must have a "props" object consisting of "nodeType" and "nodeName" properties\')}},{key:"attrNames",get:function(){throw new Error(\'VirtualNode class must have an "attrNames" property\')}},{key:"attr",value:function(){throw new Error(\'VirtualNode class must have an "attr" function\')}},{key:"hasAttr",value:function(){throw new Error(\'VirtualNode class must have a "hasAttr" function\')}},{key:"hasClass",value:function(e){var t=this.attr("class");return!!t&&(e=" "+e+" ",0<=(" "+t+" ").replace(rn," ").indexOf(e))}}]);var un=on,ln={},sn=(re(ln,{DqElement:function(){return Jn},aggregate:function(){return sn},aggregateChecks:function(){return mn},aggregateNodeResults:function(){return gn},aggregateResult:function(){return vn},areStylesSet:function(){return yn},assert:function(){return Fn},checkHelper:function(){return Qn},clone:function(){return ea},closest:function(){return ca},collectResultsFromFrames:function(){return tr},contains:function(){return nr},convertSelector:function(){return ia},cssParser:function(){return ta},deepMerge:function(){return ar},escapeSelector:function(){return En},extendMetaData:function(){return rr},filterHtmlAttrs:function(){return fp},finalizeRuleResult:function(){return hn},findBy:function(){return Ja},getAllChecks:function(){return Za},getAncestry:function(){return Gn},getBaseLang:function(){return td},getCheckMessage:function(){return sd},getCheckOption:function(){return cd},getEnvironmentData:function(){return dd},getFlattenedTree:function(){return ed},getFrameContexts:function(){return Ed},getFriendlyUriEnd:function(){return Bn},getNodeAttributes:function(){return Tn},getNodeFromTree:function(){return Xn},getPreloadConfig:function(){return up},getRootNode:function(){return lr},getRule:function(){return Cd},getScroll:function(){return xd},getScrollState:function(){return kd},getSelector:function(){return Hn},getSelectorData:function(){return qn},getShadowSelector:function(){return _n},getStandards:function(){return Bd},getStyleSheetFactory:function(){return Nd},getXpath:function(){return Wn},injectStyle:function(){return Rd},isHidden:function(){return _d},isHtmlElement:function(){return Od},isNodeInContext:function(){return Sd},isShadowRoot:function(){return ur},isValidLang:function(){return Ep},isXHTML:function(){return Rn},matchAncestry:function(){return Pd},matches:function(){return sa},matchesExpression:function(){return la},matchesSelector:function(){return Nn},memoize:function(){return Dr},mergeResults:function(){return er},nodeLookup:function(){return jd},nodeSorter:function(){return Id},parseCrossOriginStylesheet:function(){return $d},parseSameOriginStylesheet:function(){return zd},parseStylesheet:function(){return Vd},performanceTimer:function(){return Wd},pollyfillElementsFromPoint:function(){return Yd},preload:function(){return ip},preloadCssom:function(){return tp},preloadMedia:function(){return rp},processMessage:function(){return ld},publishMetaData:function(){return sp},querySelectorAll:function(){return cp},querySelectorAllFilter:function(){return ep},queue:function(){return ha},respondable:function(){return Ga},ruleShouldRun:function(){return pp},select:function(){return mp},sendCommandToFrame:function(){return Ya},setScrollState:function(){return hp},shadowSelect:function(){return gp},shadowSelectAll:function(){return bp},shouldPreload:function(){return op},toArray:function(){return wn},tokenList:function(){return Uc},uniqueArray:function(){return Zd},uuid:function(){return Ta},validInputTypes:function(){return vp},validLangs:function(){return Fp}}),function(e,t,n){return t=t.slice(),n&&t.push(n),n=t.map((function(t){return e.indexOf(t)})).sort(),e[n.pop()]}),cn=nn.CANTTELL_PRIO,dn=nn.FAIL_PRIO,pn=[],fn=(pn[nn.PASS_PRIO]=!0,pn[nn.CANTTELL_PRIO]=null,pn[nn.FAIL_PRIO]=!1,["any","all","none"]);function Dn(e,t){fn.reduce((function(n,a){return n[a]=(e[a]||[]).map((function(e){return t(e,a)})),n}),{})}var mn=function(e){var t=Object.assign({},e),n=(Dn(t,(function(e,t){var n=void 0===e.result?-1:pn.indexOf(e.result);e.priority=-1!==n?n:nn.CANTTELL_PRIO,"none"===t&&(e.priority===nn.PASS_PRIO?e.priority=nn.FAIL_PRIO:e.priority===nn.FAIL_PRIO&&(e.priority=nn.PASS_PRIO))})),{all:t.all.reduce((function(e,t){return Math.max(e,t.priority)}),0),none:t.none.reduce((function(e,t){return Math.max(e,t.priority)}),0),any:t.any.reduce((function(e,t){return Math.min(e,t.priority)}),4)%4}),a=(t.priority=Math.max(n.all,n.none,n.any),[]);return fn.forEach((function(e){t[e]=t[e].filter((function(a){return a.priority===t.priority&&a.priority===n[e]})),t[e].forEach((function(e){return a.push(e.impact)}))})),[cn,dn].includes(t.priority)?t.impact=sn(nn.impact,a):t.impact=null,Dn(t,(function(e){delete e.result,delete e.priority})),t.result=nn.results[t.priority],delete t.priority,t},hn=function(e){var t=o._audit.rules.find((function(t){return t.id===e.id}));return t&&t.impact&&e.nodes.forEach((function(e){["any","all","none"].forEach((function(n){(e[n]||[]).forEach((function(e){e.impact=t.impact}))}))})),Object.assign(e,gn(e.nodes)),delete e.nodes,e},gn=function(e){var t={},n=((e=e.map((function(e){if(e.any&&e.all&&e.none)return mn(e);if(Array.isArray(e.node))return hn(e);throw new TypeError("Invalid Result type")})))&&e.length?(n=e.map((function(e){return e.result})),t.result=sn(nn.results,n,t.result)):t.result="inapplicable",nn.resultGroups.forEach((function(e){return t[e]=[]})),e.forEach((function(e){var n=nn.resultGroupMap[e.result];t[n].push(e)})),nn.FAIL_GROUP);return 0===t[n].length&&(n=nn.CANTTELL_GROUP),0<t[n].length?(e=t[n].map((function(e){return e.impact})),t.impact=sn(nn.impact,e)||null):t.impact=null,t};function bn(e,t,n){var a=Object.assign({},t);a.nodes=(a[n]||[]).concat(),nn.resultGroups.forEach((function(e){delete a[e]})),e[n].push(a)}var vn=function(e){var t={};return nn.resultGroups.forEach((function(e){return t[e]=[]})),e.forEach((function(e){e.error?bn(t,e,nn.CANTTELL_GROUP):e.result===nn.NA?bn(t,e,nn.NA_GROUP):nn.resultGroups.forEach((function(n){Array.isArray(e[n])&&0<e[n].length&&bn(t,e,n)}))})),t},yn=function e(n,a,r){var o=t.getComputedStyle(n,null);if(!o)return!1;for(var u=0;u<a.length;++u){var i=a[u];if(o.getPropertyValue(i.property)===i.value)return!0}return!(!n.parentNode||n.nodeName.toUpperCase()===r.toUpperCase())&&e(n.parentNode,a,r)},Fn=function(e,t){if(!e)throw new Error(t)},wn=function(e){return Array.prototype.slice.call(e)},En=function(e){for(var t,n=String(e),a=n.length,r=-1,o="",u=n.charCodeAt(0);++r<a;)0==(t=n.charCodeAt(r))?o+="�":o+=1<=t&&t<=31||127==t||0==r&&48<=t&&t<=57||1==r&&48<=t&&t<=57&&45==u?"\\\\"+t.toString(16)+" ":0==r&&1==a&&45==t||!(128<=t||45==t||95==t||48<=t&&t<=57||65<=t&&t<=90||97<=t&&t<=122)?"\\\\"+n.charAt(r):n.charAt(r);return o};function Cn(e,t){return[e.substring(0,t),e.substring(t)]}function xn(e){return e.replace(/\\s+$/,"")}var An,kn,Bn=function(){var e,t,n,a,r,o,u,i,l=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",s=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};if(!(l.length<=1||"data:"===l.substr(0,5)||"javascript:"===l.substr(0,11)||l.includes("?")))return e=s.currentDomain,s=void 0===(s=s.maxLength)?25:s,u=o=i=r=a="",(n=l=l).includes("#")&&(l=(t=W(Cn(l,l.indexOf("#")),2))[0],u=t[1]),l.includes("?")&&(l=(t=W(Cn(l,l.indexOf("?")),2))[0],o=t[1]),l.includes("://")?(a=(t=W(l.split("://"),2))[0],r=(t=W(Cn(l=t[1],l.indexOf("/")),2))[0],l=t[1]):"//"===l.substr(0,2)&&(r=(t=W(Cn(l=l.substr(2),l.indexOf("/")),2))[0],l=t[1]),(r="www."===r.substr(0,4)?r.substr(4):r)&&r.includes(":")&&(r=(t=W(Cn(r,r.indexOf(":")),2))[0],i=t[1]),n=(t={original:n,protocol:a,domain:r,port:i,path:l,query:o,hash:u}).domain,a=t.hash,i=(r=t.path).substr(r.substr(0,r.length-2).lastIndexOf("/")+1),a?i&&(i+a).length<=s?xn(i+a):i.length<2&&2<a.length&&a.length<=s?xn(a):void 0:n&&n.length<s&&r.length<=1||r==="/"+i&&n&&e&&n!==e&&(n+r).length<=s?xn(n+r):(-1===(l=i.lastIndexOf("."))||1<l)&&(-1!==l||2<i.length)&&i.length<=s&&!i.match(/index(\\.[a-zA-Z]{2-4})?/)&&!function(e){var t=0<arguments.length&&void 0!==e?e:"";return 0!==t.length&&(t.match(/[0-9]/g)||"").length>=t.length/2}(i)?xn(i):void 0},Tn=function(e){return(e.attributes instanceof t.NamedNodeMap?e:e.cloneNode(!1)).attributes},Nn=function(e,t){return!!e[An=An&&e[An]?An:function(e){for(var t,n=["matches","matchesSelector","mozMatchesSelector","webkitMatchesSelector","msMatchesSelector"],a=n.length,r=0;r<a;r++)if(e[t=n[r]])return t}(e)]&&e[An](t)},Rn=function(e){return!!e.createElement&&"A"===e.createElement("A").localName},_n=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};if(!t)return"";var r=t.getRootNode&&t.getRootNode()||a;if(11!==r.nodeType)return e(t,n,r);for(var o=[];11===r.nodeType;){if(!r.host)return"";o.unshift({elm:t,doc:r}),r=(t=r.host).getRootNode()}return o.unshift({elm:t,doc:r}),o.map((function(t){var a=t.elm;t=t.doc;return e(a,n,t)}))},On=["class","style","id","selected","checked","disabled","tabindex","aria-checked","aria-selected","aria-invalid","aria-activedescendant","aria-busy","aria-disabled","aria-expanded","aria-grabbed","aria-pressed","aria-valuenow"],Sn=/([\\\\"])/g,Mn=/(\\r\\n|\\r|\\n)/g;function Pn(e){return e.replace(Sn,"\\\\$1").replace(Mn,"\\\\a ")}function In(e,t){var n,a=t.name;return-1!==a.indexOf("href")||-1!==a.indexOf("src")?(n=Bn(e.getAttribute(a)))?En(t.name)+\'$="\'+Pn(n)+\'"\':En(t.name)+\'="\'+Pn(e.getAttribute(a))+\'"\':En(a)+\'="\'+Pn(t.value)+\'"\'}function jn(e,t){return e.count<t.count?-1:e.count===t.count?0:1}function Ln(e){return!On.includes(e.name)&&-1===e.name.indexOf(":")&&(!e.value||e.value.length<31)}function qn(e){for(var t={classes:{},tags:{},attributes:{}},n=(e=Array.isArray(e)?e:[e]).slice(),a=[];n.length;)!function(){var e,r=n.pop(),o=r.actualNode;for(o.querySelectorAll&&(e=o.nodeName,t.tags[e]?t.tags[e]++:t.tags[e]=1,o.classList&&Array.from(o.classList).forEach((function(e){e=En(e),t.classes[e]?t.classes[e]++:t.classes[e]=1})),o.hasAttributes())&&Array.from(Tn(o)).filter(Ln).forEach((function(e){(e=In(o,e))&&(t.attributes[e]?t.attributes[e]++:t.attributes[e]=1)})),r.children.length&&(a.push(n),n=r.children.slice());!n.length&&a.length;)n=a.pop()}();return t}function zn(e){return void 0===kn&&(kn=Rn(a)),En(kn?e.localName:e.nodeName.toLowerCase())}function Vn(e,t){var n,a,r,o,u,i,l,s,c,d="",p=(a=e,r=[],o=t.classes,u=t.tags,a.classList&&Array.from(a.classList).forEach((function(e){e=En(e),o[e]<u[a.nodeName]&&r.push({name:e,count:o[e],species:"class"})})),r.sort(jn));i=e,l=[],s=t.attributes,c=t.tags,i.hasAttributes()&&Array.from(Tn(i)).filter(Ln).forEach((function(e){(e=In(i,e))&&s[e]<c[i.nodeName]&&l.push({name:e,count:s[e],species:"attribute"})})),t=l.sort(jn);return p.length&&1===p[0].count?n=[p[0]]:t.length&&1===t[0].count?(n=[t[0]],d=zn(e)):((n=p.concat(t)).sort(jn),(n=n.slice(0,3)).some((function(e){return"class"===e.species}))?n.sort((function(e,t){return e.species!==t.species&&"class"===e.species?-1:e.species===t.species?0:1})):d=zn(e)),d+n.reduce((function(e,t){switch(t.species){case"class":return e+"."+t.name;case"attribute":return e+"["+t.name+"]"}return e}),"")}function $n(e,t,n){if(!o._selectorData)throw new Error("Expect axe._selectorData to be set up");var r,u,i=void 0!==(t=t.toRoot)&&t;do{var l=function(e){var t;if(e.getAttribute("id"))return t=e.getRootNode&&e.getRootNode()||a,(e="#"+En(e.getAttribute("id")||"")).match(/player_uid_/)||1!==t.querySelectorAll(e).length?void 0:e}(e);l||(l=Vn(e,o._selectorData),l+=function(e,t){var n=e.parentNode&&Array.from(e.parentNode.children||"")||[];return n.find((function(n){return n!==e&&Nn(n,t)}))?":nth-child("+(1+n.indexOf(e))+")":""}(e,l)),r=r?l+" > "+r:l,u=u?u.filter((function(e){return Nn(e,r)})):Array.from(n.querySelectorAll(r)),e=e.parentElement}while((1<u.length||i)&&e&&11!==e.nodeType);return 1===u.length?r:-1!==r.indexOf(" > ")?":root"+r.substring(r.indexOf(" > ")):":root"}function Hn(e,t){return _n($n,e,t)}function Un(e){var t,n=e.nodeName.toLowerCase(),a=e.parentElement;return a?(t="","head"!==n&&"body"!==n&&1<a.children.length&&(e=Array.prototype.indexOf.call(a.children,e)+1,t=":nth-child(".concat(e,")")),Un(a)+" > "+n+t):n}function Gn(e,t){return _n(Un,e,t)}var Wn=function(e){return function e(t,n){var a,r,o,u;if(!t)return[];if(!n&&9===t.nodeType)return[{str:"html"}];if(n=n||[],t.parentNode&&t.parentNode!==t&&(n=e(t.parentNode,n)),t.previousSibling){for(r=1,a=t.previousSibling;1===a.nodeType&&a.nodeName===t.nodeName&&r++,a=a.previousSibling;);1===r&&(r=null)}else if(t.nextSibling)for(a=t.nextSibling;a=1===a.nodeType&&a.nodeName===t.nodeName?(r=1,null):(r=null,a.previousSibling););return 1===t.nodeType&&((o={}).str=t.nodeName.toLowerCase(),(u=t.getAttribute&&En(t.getAttribute("id")))&&1===t.ownerDocument.querySelectorAll("#"+u).length&&(o.id=t.getAttribute("id")),1<r&&(o.count=r),n.push(o)),n}(e).reduce((function(e,t){return t.id?"/".concat(t.str,"[@id=\'").concat(t.id,"\']"):e+"/".concat(t.str)+(0<t.count?"[".concat(t.count,"]"):"")}),"")},Yn={},Kn={set:function(e,t){var n;Fn("string"==typeof(n=e),"key must be a string, "+r(n)+" given"),Fn(""!==n,"key must not be empty"),Yn[e]=t},get:function(e,t){var n;return Fn("function"==typeof(n=t)||void 0===n,"creator must be a function or undefined, "+r(n)+" given"),e in Yn?Yn[e]:"function"==typeof t?(n=t(),Fn(void 0!==n,"Cache creator function should not return undefined"),this.set(e,n),Yn[e]):void 0},clear:function(){Yn={}}},Xn=function(e,t){return t=t||e,Kn.get("nodeMap")?Kn.get("nodeMap").get(t):null};function Zn(e){var n,a,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};this.spec=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},e instanceof un?(this._virtualNode=e,this._element=e.actualNode):(this._element=e,this._virtualNode=Xn(e)),this.fromFrame=1<(null==(n=this.spec.selector)?void 0:n.length),r.absolutePaths&&(this._options={toRoot:!0}),this.nodeIndexes=[],Array.isArray(this.spec.nodeIndexes)?this.nodeIndexes=this.spec.nodeIndexes:"number"==typeof(null==(n=this._virtualNode)?void 0:n.nodeIndex)&&(this.nodeIndexes=[this._virtualNode.nodeIndex]),this.source=null,o._audit.noHtml||(this.source=null!=(r=this.spec.source)?r:null!=(n=this._element)&&n.outerHTML?((r=n.outerHTML)||"function"!=typeof t.XMLSerializer||(r=(new t.XMLSerializer).serializeToString(n)),(n=r||"").length>(a=a||300)&&(a=n.indexOf(">"),n=n.substring(0,a+1)),n):"")}Zn.prototype={get selector(){return this.spec.selector||[Hn(this.element,this._options)]},get ancestry(){return this.spec.ancestry||[Gn(this.element)]},get xpath(){return this.spec.xpath||[Wn(this.element)]},get element(){return this._element},toJSON:function(){return{selector:this.selector,source:this.source,xpath:this.xpath,ancestry:this.ancestry,nodeIndexes:this.nodeIndexes}}},Zn.fromFrame=function(e,t,n){return e=Zn.mergeSpecs(e,n),new Zn(n.element,t,e)},Zn.mergeSpecs=function(e,t){return G({},e,{selector:[].concat(H(t.selector),H(e.selector)),ancestry:[].concat(H(t.ancestry),H(e.ancestry)),xpath:[].concat(H(t.xpath),H(e.xpath)),nodeIndexes:[].concat(H(t.nodeIndexes),H(e.nodeIndexes))})};var Jn=Zn,Qn=function(e,n,a,r){return{isAsync:!1,async:function(){return this.isAsync=!0,function(t){t instanceof Error==0?(e.result=t,a(e)):r(t)}},data:function(t){e.data=t},relatedNodes:function(a){t.Node&&(a=a instanceof t.Node||a instanceof un?[a]:wn(a),e.relatedNodes=[],a.forEach((function(a){(a=a instanceof un?a.actualNode:a)instanceof t.Node&&(a=new Jn(a,n),e.relatedNodes.push(a))})))}}},ea=function e(n){var a,o,u,i=n;if(null!=(a=t)&&a.Node&&n instanceof t.Node||null!=(a=t)&&a.HTMLCollection&&n instanceof t.HTMLCollection)return n;if(null!==n&&"object"===r(n))if(Array.isArray(n))for(i=[],o=0,u=n.length;o<u;o++)i[o]=e(n[o]);else for(o in i={},n)i[o]=e(n[o]);return i},ta=((Mo=new(oe(ye()).CssSelectorParser)).registerSelectorPseudos("not"),Mo.registerSelectorPseudos("is"),Mo.registerNestingOperators(">"),Mo.registerAttrEqualityMods("^","$","*","~"),Mo);function na(e,t){return u=t,1===(o=e).props.nodeType&&("*"===u.tag||o.props.nodeName===u.tag)&&(r=e,!(o=t).classes||o.classes.every((function(e){return r.hasClass(e.value)})))&&(a=e,!(u=t).attributes||u.attributes.every((function(e){var t=a.attr(e.key);return null!==t&&e.test(t)})))&&(o=e,!(u=t).id||o.props.id===u.id)&&(n=e,!((o=t).pseudos&&!o.pseudos.every((function(e){if("not"===e.name)return!e.expressions.some((function(e){return la(n,e)}));if("is"===e.name)return e.expressions.some((function(e){return la(n,e)}));throw new Error("the pseudo selector "+e.name+" has not yet been implemented")}))));var n,a,r,o,u}aa=/(?=[\\-\\[\\]{}()*+?.\\\\\\^$|,#\\s])/g;var aa,ra=function(e){return e.replace(aa,"\\\\")},oa=/\\\\/g;function ua(e){return e.map((function(e){for(var t=[],n=e.rule;n;)t.push({tag:n.tagName?n.tagName.toLowerCase():"*",combinator:n.nestingOperator||" ",id:n.id,attributes:function(e){if(e)return e.map((function(e){var t,n,a=e.name.replace(oa,""),r=(e.value||"").replace(oa,"");switch(e.operator){case"^=":n=new RegExp("^"+ra(r));break;case"$=":n=new RegExp(ra(r)+"$");break;case"~=":n=new RegExp("(^|\\\\s)"+ra(r)+"(\\\\s|$)");break;case"|=":n=new RegExp("^"+ra(r)+"(-|$)");break;case"=":t=function(e){return r===e};break;case"*=":t=function(e){return e&&e.includes(r)};break;case"!=":t=function(e){return r!==e};break;default:t=function(e){return null!==e}}return""===r&&/^[*$^]=$/.test(e.operator)&&(t=function(){return!1}),{key:a,value:r,type:void 0===e.value?"attrExist":"attrValue",test:t=t||function(e){return e&&n.test(e)}}}))}(n.attrs),classes:function(e){if(e)return e.map((function(e){return{value:e=e.replace(oa,""),regexp:new RegExp("(^|\\\\s)"+ra(e)+"(\\\\s|$)")}}))}(n.classNames),pseudos:function(e){if(e)return e.map((function(e){var t;return["is","not"].includes(e.name)&&(t=ua(t=(t=e.value).selectors||[t])),{name:e.name,expressions:t,value:e.value}}))}(n.pseudos)}),n=n.rule;return t}))}function ia(e){return ua((e=ta.parse(e)).selectors||[e])}function la(e,t,n){return function e(t,n,a,r){if(!t)return!1;for(var o=Array.isArray(n)?n[a]:n,u=na(t,o);!u&&r&&t.parent;)u=na(t=t.parent,o);if(0<a){if(!1===[" ",">"].includes(o.combinator))throw new Error("axe.utils.matchesExpression does not support the combinator: "+o.combinator);u=u&&e(t.parent,n,a-1," "===o.combinator)}return u}(e,t,t.length-1,n)}var sa=function(e,t){return ia(t).some((function(t){return la(e,t)}))},ca=function(e,t){for(;e;){if(sa(e,t))return e;if(void 0===e.parent)throw new TypeError("Cannot resolve parent for non-DOM nodes");e=e.parent}return null};function da(){}function pa(e){if("function"!=typeof e)throw new TypeError("Queue methods require functions as arguments")}for(var fa,Da,ma,ha=function(){function e(e){t=e,setTimeout((function(){null!=t&&an("Uncaught error (of queue)",t)}),1)}var t,n=[],a=0,o=0,u=da,i=!1,l=e;function s(e){return u=da,l(e),n}function c(){for(var e=n.length;a<e;a++){var t=n[a];try{t.call(null,function(e){return function(t){n[e]=t,--o||u===da||(i=!0,u(n))}}(a),s)}catch(e){s(e)}}}var d={defer:function(e){var a;if("object"===r(e)&&e.then&&e.catch&&(a=e,e=function(e,t){a.then(e).catch(t)}),pa(e),void 0===t){if(i)throw new Error("Queue already completed");return n.push(e),++o,c(),d}},then:function(e){if(pa(e),u!==da)throw new Error("queue `then` already set");return t||(u=e,o)||(i=!0,u(n)),d},catch:function(n){if(pa(n),l!==e)throw new Error("queue `catch` already set");return t?(n(t),t=null):l=n,d},abort:s};return d},ga=t.crypto||t.msCrypto,ba=(!fa&&ga&&ga.getRandomValues&&(Da=new Uint8Array(16),fa=function(){return ga.getRandomValues(Da),Da}),fa||(ma=new Array(16),fa=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),ma[t]=e>>>((3&t)<<3)&255;return ma}),"function"==typeof t.Buffer?t.Buffer:Array),va=[],ya={},Fa=0;Fa<256;Fa++)va[Fa]=(Fa+256).toString(16).substr(1),ya[va[Fa]]=Fa;function wa(e,t){return t=t||0,va[e[t++]]+va[e[t++]]+va[e[t++]]+va[e[t++]]+"-"+va[e[t++]]+va[e[t++]]+"-"+va[e[t++]]+va[e[t++]]+"-"+va[e[t++]]+va[e[t++]]+"-"+va[e[t++]]+va[e[t++]]+va[e[t++]]+va[e[t++]]+va[e[t++]]+va[e[+t]]}var Ea=[1|(Mo=fa())[0],Mo[1],Mo[2],Mo[3],Mo[4],Mo[5]],Ca=16383&(Mo[6]<<8|Mo[7]),xa=0,Aa=0;function ka(e,t,n){var a=t&&n||0,r=t||[],o=(n=null!=(e=e||{}).clockseq?e.clockseq:Ca,null!=e.msecs?e.msecs:(new Date).getTime()),u=null!=e.nsecs?e.nsecs:Aa+1;if((i=o-xa+(u-Aa)/1e4)<0&&null==e.clockseq&&(n=n+1&16383),1e4<=(u=(i<0||xa<o)&&null==e.nsecs?0:u))throw new Error("uuid.v1(): Can\'t create more than 10M uuids/sec");xa=o,Ca=n;for(var i=(1e4*(268435455&(o+=122192928e5))+(Aa=u))%4294967296,l=(u=(r[a++]=i>>>24&255,r[a++]=i>>>16&255,r[a++]=i>>>8&255,r[a++]=255&i,o/4294967296*1e4&268435455),r[a++]=u>>>8&255,r[a++]=255&u,r[a++]=u>>>24&15|16,r[a++]=u>>>16&255,r[a++]=n>>>8|128,r[a++]=255&n,e.node||Ea),s=0;s<6;s++)r[a+s]=l[s];return t||wa(r)}function Ba(e,t,n){var a=t&&n||0,r=("string"==typeof e&&(t="binary"==e?new ba(16):null,e=null),(e=e||{}).random||(e.rng||fa)());if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t)for(var o=0;o<16;o++)t[a+o]=r[o];return t||wa(r)}(Mo=Ba).v1=ka,Mo.v4=Ba,Mo.parse=function(e,t,n){var a=t&&n||0,r=0;for(t=t||[],e.toLowerCase().replace(/[0-9a-f]{2}/g,(function(e){r<16&&(t[a+r++]=ya[e])}));r<16;)t[a+r++]=0;return t},Mo.unparse=wa,Mo.BufferClass=ba,o._uuid=ka();var Ta=Ba,Na=Object.freeze(["EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function Ra(){var e="axeAPI",t="";return(e=void 0!==o&&o._audit&&o._audit.application?o._audit.application:e)+"."+(void 0!==o?o.version:t)}function _a(e){Sa(e),Fn(t.parent===e,"Source of the response must be the parent window.")}function Oa(e){Sa(e),Fn(e.parent===t,"Respondable target must be a frame in the current window")}function Sa(e){Fn(t!==e,"Messages can not be sent to the same window.")}var Ma={},Pa=[];function Ia(){var e="".concat(Ba(),":").concat(Ba());return Pa.includes(e)?Ia():(Pa.push(e),e)}function ja(e,t,n,a){var r,u;return"function"==typeof a&&function(e,t,n){var a=!(2<arguments.length&&void 0!==n)||n;Fn(!Ma[e],"A replyHandler already exists for this message channel."),Ma[e]={replyHandler:t,sendToParent:a}}(t.channelId,a,n),(n?_a:Oa)(e),t.message instanceof Error&&!n?(o.log(t.message),!1):(n=(a=G({messageId:Ia()},t)).topic,t=a.channelId,u=a.message,t={channelId:t,topic:n,messageId:a.messageId,keepalive:!!a.keepalive,source:Ra()},u instanceof Error?t.error={name:u.name,message:u.message,stack:u.stack}:t.payload=u,r=JSON.stringify(t),!(!(n=o._audit.allowedOrigins)||!n.length||(n.forEach((function(t){try{e.postMessage(r,t)}catch(n){if(n instanceof e.DOMException)throw new Error(\'allowedOrigins value "\'.concat(t,\'" is not a valid origin\'));throw n}})),0)))}function La(e,t,n){var a=!(2<arguments.length&&void 0!==n)||n;return function(n,r,o){ja(e,{channelId:t,message:n,keepalive:r},a,o)}}function qa(e,n){var a,u,i,l=e.origin,s=e.data;e=e.source;try{var c=function(e){var n,a,o,u;try{n=JSON.parse(e)}catch(e){return}if(null!==(e=n)&&"object"===r(e)&&"string"==typeof e.channelId&&e.source===Ra())return a=(e=n).topic,o=e.channelId,u=e.messageId,e=e.keepalive,{topic:a,message:"object"===r(n.error)?function(e){var n=e.message||"Unknown error occurred",a=Na.includes(e.name)?e.name:"Error";return a=t[a]||Error,e.stack&&(n+="\\n"+e.stack.replace(e.message,"")),new a(n)}(n.error):n.payload,messageId:u,channelId:o,keepalive:!!e}}(s)||{},d=c.channelId,p=c.message,f=c.messageId;if(u=l,((i=o._audit.allowedOrigins)&&i.includes("*")||i.includes(u))&&(a=f,!Pa.includes(a))&&(Pa.push(a),1))if(p instanceof Error&&e.parent!==t)o.log(p);else try{if(c.topic){var D=La(e,d);_a(e),n(c,D)}else{var m=e,h=(b=c).channelId,g=b.message,b=b.keepalive,v=(y=function(e){return Ma[e]}(h)||{}).replyHandler,y=y.sendToParent;if(v){(y?_a:Oa)(m),m=La(m,h,y),!b&&h&&function(e){delete Ma[e]}(h);try{v(g,b,m)}catch(n){o.log(n),m(n,b)}}}}catch(n){var F=e,w=n,E=d;if(!F.parent!==t)o.log(w);else try{ja(F,{topic:null,channelId:E,message:w,messageId:Ia(),keepalive:!0},!0)}catch(n){return void o.log(n)}}}catch(n){o.log(n)}}var za,Va,$a={open:function(e){var n;if("function"==typeof t.addEventListener)return t.addEventListener("message",n=function(t){qa(t,e)},!1),function(){t.removeEventListener("message",n,!1)}},post:function(e,n,a){return"function"==typeof t.addEventListener&&ja(e,n,!1,a)}};function Ha(e){e.updateMessenger($a)}var Ua={};function Ga(e,t,n,a,r){return t={topic:t,message:n,channelId:"".concat(Ba(),":").concat(Ba()),keepalive:a},Va(e,t,r)}function Wa(e,t){var n=e.topic,a=e.message;e=e.keepalive;if(n=Ua[n])try{n(a,e,t)}catch(n){o.log(n),t(n,e)}}function Ya(e,t,n,a){var r,o=e.contentWindow,u=null!=(u=null==(u=t.options)?void 0:u.pingWaitTime)?u:500;o?0===u?Ka(e,t,n,a):(r=setTimeout((function(){r=setTimeout((function(){t.debug?a(Xa("No response from frame",e)):n(null)}),0)}),u),Ga(o,"axe.ping",null,void 0,(function(){clearTimeout(r),Ka(e,t,n,a)}))):(an("Frame does not have a content window",e),n(null))}function Ka(e,t,n,a){var r=null!=(r=null==(r=t.options)?void 0:r.frameWaitTime)?r:6e4,o=e.contentWindow,u=setTimeout((function(){a(Xa("Axe in frame timed out",e))}),r);Ga(o,"axe.start",t,void 0,(function(e){clearTimeout(u),(e instanceof Error==0?n:a)(e)}))}function Xa(e,t){var n;return o._tree&&(n=Hn(t)),new Error(e+": "+(n||t))}Ga.updateMessenger=function(e){var t=e.open;e=e.post,Fn("function"==typeof t,"open callback must be a function"),Fn("function"==typeof e,"post callback must be a function"),za&&za(),t=t(Wa);za=t?(Fn("function"==typeof t,"open callback must return a cleanup function"),t):null,Va=e},Ga.subscribe=function(e,t){Fn("function"==typeof t,"Subscriber callback must be a function"),Fn(!Ua[e],"Topic ".concat(e," is already registered to.")),Ua[e]=t},Ga.isInFrame=function(){return!!(0<arguments.length&&void 0!==arguments[0]?arguments[0]:t).frameElement},Ha(Ga);var Za=function(e){return[].concat(e.any||[]).concat(e.all||[]).concat(e.none||[])},Ja=function(e,t,n){if(Array.isArray(e))return e.find((function(e){return"object"===r(e)&&e[t]===n}))};function Qa(e,t){for(var n=0<arguments.length&&void 0!==e?e:[],a=1<arguments.length&&void 0!==t?t:[],r=Math.max(null==n?void 0:n.length,null==a?void 0:a.length),o=0;o<r;o++){var u=null==n?void 0:n[o],i=null==a?void 0:a[o];if("number"!=typeof u||isNaN(u))return 0===o?1:-1;if("number"!=typeof i||isNaN(i))return 0===o?-1:1;if(u!==i)return u-i}return 0}var er=function(e,t){var n=[];return e.forEach((function(e){var a,r=(r=e)&&r.results?Array.isArray(r.results)?r.results.length?r.results:null:[r.results]:null;r&&r.length&&(a=function(e,t){return e.frameElement?new Jn(e.frameElement,t):e.frameSpec?e.frameSpec:null}(e,t),r.forEach((function(e){e.nodes&&a&&(u=e.nodes,r=t,o=a,u.forEach((function(e){e.node=Jn.fromFrame(e.node,r,o),Za(e).forEach((function(e){e.relatedNodes=e.relatedNodes.map((function(e){return Jn.fromFrame(e,r,o)}))}))})));var r,o,u=Ja(n,"id",e.id);if(u){if(e.nodes.length){for(var i=u.nodes,l=e.nodes,s=l[0].node,c=0;c<i.length;c++){var d=i[c].node,p=Qa(d.nodeIndexes,s.nodeIndexes);if(0<p||0===p&&s.selector.length<d.selector.length)return void i.splice.apply(i,[c,0].concat(H(l)))}i.push.apply(i,H(l))}}else n.push(e)})))})),n.forEach((function(e){e.nodes&&e.nodes.sort((function(e,t){return Qa(e.node.nodeIndexes,t.node.nodeIndexes)}))})),n};function tr(e,t,n,a,r,o){var u=ha();e.frames.forEach((function(e){var r=e.node,o=$(e,i);u.defer((function(e,u){Ya(r,{options:t,command:n,parameter:a,context:o},(function(t){return e(t?{results:t,frameElement:r}:null)}),u)}))})),u.then((function(e){r(er(e,t))})).catch(o)}function nr(e,t){if(!e.shadowId&&!t.shadowId&&e.actualNode&&"function"==typeof e.actualNode.contains)return e.actualNode.contains(t.actualNode);do{if(e===t)return!0;if(t.nodeIndex<e.nodeIndex)return!1}while(t=t.parent);return!1}var ar=function e(){for(var t={},n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return a.forEach((function(n){if(n&&"object"===r(n)&&!Array.isArray(n))for(var a=0,o=Object.keys(n);a<o.length;a++){var u=o[a];!t.hasOwnProperty(u)||"object"!==r(n[u])||Array.isArray(t[u])?t[u]=n[u]:t[u]=e(t[u],n[u])}})),t},rr=function(e,t){Object.assign(e,t),Object.keys(t).filter((function(e){return"function"==typeof t[e]})).forEach((function(n){e[n]=null;try{e[n]=t[n](e)}catch(n){}}))},or=["article","aside","blockquote","body","div","footer","h1","h2","h3","h4","h5","h6","header","main","nav","p","section","span"],ur=function(e){return!!(e.shadowRoot&&(e=e.nodeName.toLowerCase(),or.includes(e)||/^[a-z][a-z0-9_.-]*-[a-z0-9_.-]*$/.test(e)))},ir={},lr=(re(ir,{createGrid:function(){return Kr},findElmsInContext:function(){return cr},findNearbyElms:function(){return no},findUp:function(){return pr},findUpVirtual:function(){return dr},focusDisabled:function(){return co},getComposedParent:function(){return Mr},getElementByReference:function(){return mo},getElementCoordinates:function(){return Ir},getElementStack:function(){return Ao},getModalDialog:function(){return oo},getOverflowHiddenAncestors:function(){return gr},getRootNode:function(){return sr},getScrollOffset:function(){return Pr},getTabbableElements:function(){return ko},getTextElementStack:function(){return fi},getViewportSize:function(){return jr},getVisibleChildTextRects:function(){return pi},hasContent:function(){return vi},hasContentVirtual:function(){return bi},hasLangText:function(){return yi},idrefs:function(){return To},insertedIntoFocusOrder:function(){return Fi},isCurrentPageLink:function(){return Do},isFocusable:function(){return Jo},isHTML5:function(){return xi},isHiddenForEveryone:function(){return _r},isHiddenWithCSS:function(){return Ci},isInTabOrder:function(){return Ai},isInTextBlock:function(){return Ni},isInert:function(){return uo},isModalOpen:function(){return Ri},isMultiline:function(){return _i},isNativelyFocusable:function(){return Zo},isNode:function(){return Oi},isOffscreen:function(){return Lr},isOpaque:function(){return kc},isSkipLink:function(){return Bc},isVisible:function(){return _c},isVisibleOnScreen:function(){return zr},isVisibleToScreenReaders:function(){return Mu},isVisualContent:function(){return mi},reduceToElementsBelowFloating:function(){return Oc},shadowElementsFromPoint:function(){return jc},urlPropsFromAttribute:function(){return Lc},visuallyContains:function(){return Sc},visuallyOverlaps:function(){return qc},visuallySort:function(){return ho}}),function(e){var t=e.getRootNode&&e.getRootNode()||a;return t===e?a:t}),sr=lr,cr=function(e){var t=e.context,n=e.value,a=e.attr;e=void 0===(e=e.elm)?"":e,n=En(n),t=9===t.nodeType||11===t.nodeType?t:sr(t);return Array.from(t.querySelectorAll(e+"["+a+"="+n+"]"))},dr=function(e,t){var n=e.actualNode;if(!e.shadowId&&"function"==typeof e.actualNode.closest)return e.actualNode.closest(t)||null;for(;(n=(n=n.assignedSlot||n.parentNode)&&11===n.nodeType?n.host:n)&&!Nn(n,t)&&n!==a.documentElement;);return n&&Nn(n,t)?n:null},pr=function(e,t){return dr(Xn(e),t)},fr=oe(Xt()),Dr=(o._memoizedFns=[],function(e){return e=(0,fr.default)(e),o._memoizedFns.push(e),e});function mr(e,t){return(0|e.left)<(0|t.right)&&(0|e.right)>(0|t.left)&&(0|e.top)<(0|t.bottom)&&(0|e.bottom)>(0|t.top)}var hr=Dr((function(e){var t=[];return e?("hidden"===e.getComputedStylePropertyValue("overflow")&&t.push(e),t.concat(hr(e.parent))):t})),gr=hr,br=/rect\\s*\\(([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px\\s*\\)/,vr=/(\\w+)\\((\\d+)/;function yr(e){return["style","script","noscript","template"].includes(e.props.nodeName)}function Fr(e){return"area"!==e.props.nodeName&&"none"===e.getComputedStylePropertyValue("display")}function wr(e){return!(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).isAncestor&&["hidden","collapse"].includes(e.getComputedStylePropertyValue("visibility"))}function Er(e){return!!(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).isAncestor&&"hidden"===e.getComputedStylePropertyValue("content-visibility")}function Cr(e){return"true"===e.attr("aria-hidden")}function xr(e){return"0"===e.getComputedStylePropertyValue("opacity")}function Ar(e){var t=xd(e.actualNode),n=parseInt(e.getComputedStylePropertyValue("height"));e=parseInt(e.getComputedStylePropertyValue("width"));return!!t&&(0===n||0===e)}function kr(e){var t,n;return!(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).isAncestor&&(t=e.boundingClientRect,!!(n=gr(e)).length)&&n.some((function(e){return(e=e.boundingClientRect).width<2||e.height<2||!mr(t,e)}))}function Br(e){var t=e.getComputedStylePropertyValue("clip").match(br),n=e.getComputedStylePropertyValue("clip-path").match(vr);if(t&&5===t.length&&(e=e.getComputedStylePropertyValue("position"),["fixed","absolute"].includes(e)))return t[3]-t[1]<=0&&t[2]-t[4]<=0;if(n){e=n[1];var a=parseInt(n[2],10);switch(e){case"inset":return 50<=a;case"circle":return 0===a}}return!1}function Tr(e,t){var n,a=ca(e,"map");return!a||!((a=a.attr("name"))&&(e=lr(e.actualNode))&&9===e.nodeType&&(n=cp(o._tree,\'img[usemap="#\'.concat(En(a),\'"]\')))&&n.length)||n.some((function(e){return!t(e)}))}function Nr(e){var t;return"details"===(null==(t=e.parent)?void 0:t.props.nodeName)&&(("summary"!==e.props.nodeName||e.parent.children.find((function(e){return"summary"===e.props.nodeName}))!==e)&&!e.parent.hasAttr("open"))}var Rr=[Fr,wr,Er,Nr];function _r(e){var t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).skipAncestors,n=void 0!==(n=n.isAncestor)&&n;return e=jd(e).vNode,(t?Or:Sr)(e,n)}var Or=Dr((function(e,t){return!!yr(e)||!(!e.actualNode||!Rr.some((function(n){return n(e,{isAncestor:t})}))&&e.actualNode.isConnected)})),Sr=Dr((function(e,t){return!!Or(e,t)||!!e.parent&&Sr(e.parent,!0)})),Mr=function e(t){if(t.assignedSlot)return e(t.assignedSlot);if(t.parentNode){if(1===(t=t.parentNode).nodeType)return t;if(t.host)return t.host}return null},Pr=function(e){var t,n;return 9===(e=!e.nodeType&&e.document?e.document:e).nodeType?(t=e.documentElement,n=e.body,{left:t&&t.scrollLeft||n&&n.scrollLeft||0,top:t&&t.scrollTop||n&&n.scrollTop||0}):{left:e.scrollLeft,top:e.scrollTop}},Ir=function(e){var t=(n=Pr(a)).left,n=n.top;return{top:(e=e.getBoundingClientRect()).top+n,right:e.right+t,bottom:e.bottom+n,left:e.left+t,width:e.right-e.left,height:e.bottom-e.top}},jr=function(e){var t=e.document,n=t.documentElement;return e.innerWidth?{width:e.innerWidth,height:e.innerHeight}:n?{width:n.clientWidth,height:n.clientHeight}:{width:(e=t.body).clientWidth,height:e.clientHeight}},Lr=function(e){if((1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).isAncestor)return!1;var n=jd(e).domNode;if(n){var r=a.documentElement,o=t.getComputedStyle(n),u=t.getComputedStyle(a.body||r).getPropertyValue("direction"),i=Ir(n);if(i.bottom<0&&(function(e,t){for(e=Mr(e);e&&"html"!==e.nodeName.toLowerCase();){if(e.scrollTop&&0<=(t+=e.scrollTop))return;e=Mr(e)}return 1}(n,i.bottom)||"absolute"===o.position))return!0;if(0!==i.left||0!==i.right)if("ltr"===u){if(i.right<=0)return!0}else if(n=Math.max(r.scrollWidth,jr(t).width),i.left>=n)return!0;return!1}},qr=[xr,Ar,kr,Br,Lr];function zr(e){return e=jd(e).vNode,Vr(e)}var Vr=Dr((function(e,t){return e.actualNode&&"area"===e.props.nodeName?!Tr(e,Vr):!(_r(e,{skipAncestors:!0,isAncestor:t})||e.actualNode&&qr.some((function(n){return n(e,{isAncestor:t})})))&&(!e.parent||Vr(e.parent,!0))}));function $r(e,n){var a=Math.min(e.top,n.top),r=Math.max(e.right,n.right),o=Math.max(e.bottom,n.bottom);e=Math.min(e.left,n.left);return new t.DOMRect(e,a,r-e,o-a)}function Hr(e,t){var n=e.x,a=(e=e.y,t.top),r=t.right,o=t.bottom;t=t.left;return a<=e&&n<=r&&e<=o&&t<=n}var Ur=0,Gr=.2,Wr=.3,Yr=0;function Kr(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:a.body,n=1<arguments.length?arguments[1]:void 0,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Kn.get("gridCreated")||r){Kn.set("gridCreated",!0),r||(i=(i=Xn(a.documentElement))||new Hc(a.documentElement),Yr=0,i._stackingOrder=[Zr(Ur,null)],Jr(n=null!=n?n:new Qr,i),xd(i.actualNode)&&(u=new Qr(i),i._subGrid=u));for(var u,i,l=a.createTreeWalker(e,t.NodeFilter.SHOW_ELEMENT,null,!1),s=r?l.nextNode():l.currentNode;s;){var c=Xn(s),d=(d=(c&&c.parent?r=c.parent:s.assignedSlot?r=Xn(s.assignedSlot):s.parentElement?r=Xn(s.parentElement):s.parentNode&&Xn(s.parentNode)&&(r=Xn(s.parentNode)),(c=c||new o.VirtualNode(s,r))._stackingOrder=function(e,t,n){var a=t._stackingOrder.slice();if(function(e,t){var n=e.getComputedStylePropertyValue("position"),a=e.getComputedStylePropertyValue("z-index");return"fixed"===n||"sticky"===n||"auto"!==a&&"static"!==n||"1"!==e.getComputedStylePropertyValue("opacity")||"none"!==(e.getComputedStylePropertyValue("-webkit-transform")||e.getComputedStylePropertyValue("-ms-transform")||e.getComputedStylePropertyValue("transform")||"none")||(n=e.getComputedStylePropertyValue("mix-blend-mode"))&&"normal"!==n||(n=e.getComputedStylePropertyValue("filter"))&&"none"!==n||(n=e.getComputedStylePropertyValue("perspective"))&&"none"!==n||(n=e.getComputedStylePropertyValue("clip-path"))&&"none"!==n||"none"!==(e.getComputedStylePropertyValue("-webkit-mask")||e.getComputedStylePropertyValue("mask")||"none")||"none"!==(e.getComputedStylePropertyValue("-webkit-mask-image")||e.getComputedStylePropertyValue("mask-image")||"none")||"none"!==(e.getComputedStylePropertyValue("-webkit-mask-border")||e.getComputedStylePropertyValue("mask-border")||"none")||"isolate"===e.getComputedStylePropertyValue("isolation")||"transform"===(n=e.getComputedStylePropertyValue("will-change"))||"opacity"===n||"touch"===e.getComputedStylePropertyValue("-webkit-overflow-scrolling")?1:(n=e.getComputedStylePropertyValue("contain"),["layout","paint","strict","content"].includes(n)||"auto"!==a&&Xr(t)?1:void 0)}(e,t)){var r=(-1!==(r=a.findIndex((function(e){return e=e.value,[Ur,Gr,Wr].includes(e)})))&&a.splice(r,a.length-r),function(e,t){return"static"!==e.getComputedStylePropertyValue("position")||Xr(t)?e.getComputedStylePropertyValue("z-index"):"auto"}(e,t));if(["auto","0"].includes(r)){for(var o=n.toString();o.length<10;)o="0"+o;a.push(Zr(parseFloat("".concat(.1).concat(o)),e))}else a.push(Zr(parseInt(r),e))}else"static"!==e.getComputedStylePropertyValue("position")?a.push(Zr(Wr,e)):"none"!==e.getComputedStylePropertyValue("float")&&a.push(Zr(Gr,e));return a}(c,r,Yr++),function(e,t){for(var n=null,a=[e];t;){if(xd(t.actualNode)){n=t;break}if(t._scrollRegionParent){n=t._scrollRegionParent;break}a.push(t),t=Xn(t.actualNode.parentElement||t.actualNode.parentNode)}return a.forEach((function(e){return e._scrollRegionParent=n})),n}(c,r)))?d._subGrid:n,p=(xd(c.actualNode)&&(p=new Qr(c),c._subGrid=p),c.boundingClientRect);0!==p.width&&0!==p.height&&zr(s)&&Jr(d,c),ur(s)&&Kr(s.shadowRoot,d,c),s=l.nextNode()}}return nn.gridSize}function Xr(e){if(e)return e=e.getComputedStylePropertyValue("display"),["flex","inline-flex","grid","inline-grid"].includes(e)}function Zr(e,t){return{value:e,vNode:t}}function Jr(e,t){t.clientRects.forEach((function(n){null==t._grid&&(t._grid=e),n=e.getGridPositionOfRect(n),e.loopGridPosition(n,(function(e){e.includes(t)||e.push(t)}))}))}J(eo,[{key:"toGridIndex",value:function(e){return Math.floor(e/nn.gridSize)}},{key:"getCellFromPoint",value:function(e){var t=e.x;e=e.y,Fn(this.boundaries,"Grid does not have cells added"),e=this.toGridIndex(e),t=this.toGridIndex(t);return null!=(t=(e=(Fn(Hr({y:e,x:t},this.boundaries),"Element midpoint exceeds the grid bounds"),null!=(e=this.cells[e-this.cells._negativeIndex])?e:[]))[t-e._negativeIndex])?t:[]}},{key:"loopGridPosition",value:function(e,t){var n=(o=e).left,a=o.right,r=o.top,o=o.bottom;this.boundaries&&(e=$r(this.boundaries,e)),this.boundaries=e,to(this.cells,r,o,(function(e,r){to(e,n,a,(function(e,n){t(e,{row:r,col:n})}))}))}},{key:"getGridPositionOfRect",value:function(e){var n=e.top,a=e.right,r=e.bottom,o=e.left,u=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;n=this.toGridIndex(n-u),a=this.toGridIndex(a+u-1),r=this.toGridIndex(r+u-1),o=this.toGridIndex(o-u);return new t.DOMRect(o,n,a-o,r-n)}}]);var Qr=eo;function eo(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null;X(this,eo),this.container=e,this.cells=[]}function to(e,t,n,a){if(null!=e._negativeIndex||(e._negativeIndex=0),t<e._negativeIndex){for(var r=0;r<e._negativeIndex-t;r++)e.splice(0,0,[]);e._negativeIndex=t}for(var o,u=t-e._negativeIndex,i=n-e._negativeIndex,l=u;l<=i;l++)null==e[o=l]&&(e[o]=[]),a(e[l],l+e._negativeIndex)}function no(e){var t,n,a,r,o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;return Kr(),null!=(a=e._grid)&&null!=(a=a.cells)&&a.length?(a=e.boundingClientRect,t=e._grid,n=ao(e),a=t.getGridPositionOfRect(a,o),r=[],t.loopGridPosition(a,(function(t){var a,o=ee(t);try{for(o.s();!(a=o.n()).done;){var u=a.value;u&&u!==e&&!r.includes(u)&&n===ao(u)&&r.push(u)}}catch(t){o.e(t)}finally{o.f()}})),r):[]}var ao=Dr((function(e){return!!e&&("fixed"===e.getComputedStylePropertyValue("position")||ao(e.parent))}));function ro(e,n){var a=Math.max(e.left,n.left),r=Math.min(e.right,n.right),o=Math.max(e.top,n.top);e=Math.min(e.bottom,n.bottom);return r<=a||e<=o?null:new t.DOMRect(a,o,r-a,e-o)}var oo=Dr((function(){var e;return o._tree&&(e=ep(o._tree[0],"dialog[open]",(function(e){var t=e.boundingClientRect;return a.elementsFromPoint(t.left+1,t.top+1).includes(e.actualNode)&&zr(e)}))).length?e.find((function(e){var t=e.boundingClientRect;return a.elementsFromPoint(t.left-10,t.top-10).includes(e.actualNode)}))||(null!=(e=e.find((function(e){var n=(e=null!=(e=function(e){Kr();var n=o._tree[0]._grid,a=new t.DOMRect(0,0,t.innerWidth,t.innerHeight);if(n)for(var r=0;r<n.cells.length;r++){var u=n.cells[r];if(u)for(var i=0;i<u.length;i++){var l=u[i];if(l)for(var s=0;s<l.length;s++){var c=l[s],d=ro(c.boundingClientRect,a);if("html"!==c.props.nodeName&&c!==e&&"none"!==c.getComputedStylePropertyValue("pointer-events")&&d)return{vNode:c,rect:d}}}}}(e))?e:{}).vNode;e=e.rect;return!!n&&!a.elementsFromPoint(e.left+1,e.top+1).includes(n.actualNode)})))?e:null):null}));function uo(e){var t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).skipAncestors,n=n.isAncestor;return(t?io:lo)(e,n)}var io=Dr((function(e,t){return!!e.hasAttr("inert")||!(t||!e.actualNode||!(t=oo())||nr(t,e))})),lo=Dr((function(e,t){return!!io(e,t)||!!e.parent&&lo(e.parent,!0)})),so=["button","command","fieldset","keygen","optgroup","option","select","textarea","input"],co=function(e){var t=jd(e).vNode;if(e=t.props.nodeName,so.includes(e)&&t.hasAttr("disabled")||uo(t))return!0;for(var n=t.parent,a=[],r=!1;n&&n.shadowId===t.shadowId&&!r&&(a.push(n),"legend"!==n.props.nodeName);){if(void 0!==n._inDisabledFieldset){r=n._inDisabledFieldset;break}"fieldset"===n.props.nodeName&&n.hasAttr("disabled")&&(r=!0),n=n.parent}return a.forEach((function(e){return e._inDisabledFieldset=r})),!!r||"area"!==t.props.nodeName&&!!t.actualNode&&_r(t)},po=/^\\/\\#/,fo=/^#[!/]/;function Do(e){var n,a,r,o,u=e.getAttribute("href");return!(!u||"#"===u)&&(!!po.test(u)||(o=e.hash,n=e.protocol,a=e.hostname,r=e.port,e=e.pathname,!fo.test(o)&&("#"===u.charAt(0)||("string"!=typeof(null==(o=t.location)?void 0:o.origin)||-1===t.location.origin.indexOf("://")?null:(u=t.location.origin+t.location.pathname,o=a?"".concat(n,"//").concat(a).concat(r?":".concat(r):""):t.location.origin,(o+=e?("/"!==e[0]?"/":"")+e:t.location.pathname)===u)))))}var mo=function(e,t){var n=e.getAttribute(t);return n&&("href"!==t||Do(e))?(-1!==n.indexOf("#")&&(n=decodeURIComponent(n.substr(n.indexOf("#")+1))),(t=a.getElementById(n))||((t=a.getElementsByName(n)).length?t[0]:null)):null};function ho(e,n){Kr();for(var a=Math.max(e._stackingOrder.length,n._stackingOrder.length),r=0;r<a;r++){if(void 0===n._stackingOrder[r])return-1;if(void 0===e._stackingOrder[r])return 1;if(n._stackingOrder[r].value>e._stackingOrder[r].value)return 1;if(n._stackingOrder[r].value<e._stackingOrder[r].value)return-1}var o=e.actualNode,u=n.actualNode;if(o.getRootNode&&o.getRootNode()!==u.getRootNode()){for(var i=[];o;)i.push({root:o.getRootNode(),node:o}),o=o.getRootNode().host;for(;u&&!i.find((function(e){return e.root===u.getRootNode()}));)u=u.getRootNode().host;if((o=i.find((function(e){return e.root===u.getRootNode()})).node)===u)return e.actualNode.getRootNode()!==o.getRootNode()?-1:1}var l,s=(d=t.Node).DOCUMENT_POSITION_FOLLOWING,c=d.DOCUMENT_POSITION_CONTAINS,d=d.DOCUMENT_POSITION_CONTAINED_BY;s=(l=o.compareDocumentPosition(u))&s?1:-1,c=l&c||l&d;return(l=go(e))===(d=go(n))||c?s:d-l}function go(e){return-1!==e.getComputedStylePropertyValue("display").indexOf("inline")?2:function e(t){if(!t)return!1;if(void 0!==t._isFloated)return t._isFloated;var n=t.getComputedStylePropertyValue("float");return"none"!==n?t._isFloated=!0:(n=e(t.parent),t._isFloated=n,n)}(e)?1:0}var bo={};function vo(e,t){e=e.boundingClientRect,t=t.boundingClientRect;var n,a,r,o=(n=e,a=t,r={},[["x","left","right","width"],["y","top","bottom","height"]].forEach((function(e){var t,o=(e=W(e,4))[0],u=e[1],i=e[2];e=e[3];a[u]<n[u]&&a[i]>n[i]?r[o]=n[u]+n[e]/2:(e=a[u]+a[e]/2,t=Math.abs(e-n[u]),e=Math.abs(e-n[i]),r[o]=e<=t?n[u]:n[i])})),r);e=function(e,t,n){var a=e.x;if(function(e,t){var n=e.x;return(e=e.y)>=t.top&&n<=t.right&&e<=t.bottom&&n>=t.left}({x:a,y:e=e.y},n)){if(null!==(i=function(e,t,n){var a,r,o=e.x;e=e.y;return o===t.left&&t.right<n.right?a=t.right:o===t.right&&t.left>n.left&&(a=t.left),e===t.top&&t.bottom<n.bottom?r=t.bottom:e===t.bottom&&t.top>n.top&&(r=t.top),a||r?r?a&&Math.abs(o-a)<Math.abs(e-r)?{x:a,y:e}:{x:o,y:r}:{x:a,y:e}:null}({x:a,y:e},t,n)))return i;n=t}t=(i=n).top,n=i.right;var r=i.bottom,o=(i=i.left)<=a&&a<=n,u=t<=e&&e<=r,i=Math.abs(i-a)<Math.abs(n-a)?i:n;n=Math.abs(t-e)<Math.abs(r-e)?t:r;return!o&&u?{x:i,y:e}:o&&!u?{x:a,y:n}:o||u?Math.abs(a-i)<Math.abs(e-n)?{x:i,y:e}:{x:a,y:n}:{x:i,y:n}}(o,e,t);return t=o,o=e,e=Math.abs(t.x-o.x),t=Math.abs(t.y-o.y),e&&t?Math.sqrt(Math.pow(e,2)+Math.pow(t,2)):e||t}function yo(e){var n=e.left,a=e.top,r=e.width;e=e.height;return new t.DOMPoint(n+r/2,a+e/2)}function Fo(e,t){var n=e.boundingClientRect,a=t.boundingClientRect;return!(n.left>=a.right||n.right<=a.left||n.top>=a.bottom||n.bottom<=a.top)&&0<ho(e,t)}function wo(e,t){var n,a=[e],r=ee(t);try{function o(){var e=n.value;a=a.reduce((function(t,n){return t.concat(function(e,t){var n=e.top,a=e.left,r=e.bottom,o=e.right,u=n<t.bottom&&r>t.top,i=a<t.right&&o>t.left,l=[];return Eo(t.top,n,r)&&i&&l.push({top:n,left:a,bottom:t.top,right:o}),Eo(t.right,a,o)&&u&&l.push({top:n,left:t.right,bottom:r,right:o}),Eo(t.bottom,n,r)&&i&&l.push({top:t.bottom,right:o,bottom:r,left:a}),Eo(t.left,a,o)&&u&&l.push({top:n,left:a,bottom:r,right:t.left}),0===l.length&&l.push(e),l.map(Co)}(n,e))}),[])}for(r.s();!(n=r.n()).done;)o()}catch(e){r.e(e)}finally{r.f()}return a}re(bo,{getBoundingRect:function(){return $r},getIntersectionRect:function(){return ro},getOffset:function(){return vo},getRectCenter:function(){return yo},hasVisualOverlap:function(){return Fo},isPointInRect:function(){return Hr},rectsOverlap:function(){return mr},splitRects:function(){return wo}});var Eo=function(e,t,n){return t<e&&e<n};function Co(e){return G({},e,{x:e.left,y:e.top,height:e.bottom-e.top,width:e.right-e.left})}function xo(e,t,n){var r=2<arguments.length&&void 0!==n&&n,o=yo(t),u=e.getCellFromPoint(o)||[],i=Math.floor(o.x),l=Math.floor(o.y);o=u.filter((function(e){return e.clientRects.some((function(e){var t=e.left,n=e.top;return i<Math.floor(t+e.width)&&i>=Math.floor(t)&&l<Math.floor(n+e.height)&&l>=Math.floor(n)}))}));return(u=e.container)&&(o=xo(u._grid,u.boundingClientRect,!0).concat(o)),r?o:o.sort(ho).map((function(e){return e.actualNode})).concat(a.documentElement).filter((function(e,t,n){return n.indexOf(e)===t}))}var Ao=function(e){Kr();var t=(e=Xn(e))._grid;return t?xo(t,e.boundingClientRect):[]},ko=function(e){return cp(e,"*").filter((function(e){var t=e.isFocusable;return(e=(e=e.actualNode.getAttribute("tabindex"))&&!isNaN(parseInt(e,10))?parseInt(e):null)?t&&0<=e:t}))},Bo={},To=(re(Bo,{accessibleText:function(){return No},accessibleTextVirtual:function(){return ti},autocomplete:function(){return ri},formControlValue:function(){return Ku},formControlValueMethods:function(){return Wu},hasUnicode:function(){return Zu},isHumanInterpretable:function(){return ai},isIconLigature:function(){return Ju},isValidAutocomplete:function(){return oi},label:function(){return si},labelText:function(){return Bu},labelVirtual:function(){return li},nativeElementType:function(){return ci},nativeTextAlternative:function(){return Ou},nativeTextMethods:function(){return _u},removeUnicode:function(){return ni},sanitize:function(){return Xo},subtreeText:function(){return ku},titleText:function(){return Eu},unsupported:function(){return Su},visible:function(){return ii},visibleTextNodes:function(){return di},visibleVirtual:function(){return Iu}}),function(e,t){e=e.actualNode||e;try{var n=sr(e),a=[];if(r=e.getAttribute(t))for(var r=Uc(r),o=0;o<r.length;o++)a.push(n.getElementById(r[o]));return a}catch(e){throw new TypeError("Cannot resolve id references for non-DOM nodes")}}),No=function(e,t){return e=Xn(e),ti(e,t)},Ro=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=jd(e).vNode;return 1!==(null==n?void 0:n.props.nodeType)||1!==n.props.nodeType||t.inLabelledByContext||t.inControlContext||!n.attr("aria-labelledby")?"":To(n,"aria-labelledby").filter((function(e){return e})).reduce((function(e,a){return a=No(a,G({inLabelledByContext:!0,startNode:t.startNode||n},t)),e?"".concat(e," ").concat(a):a}),"")};function _o(e){return 1===(null==(e=jd(e).vNode)?void 0:e.props.nodeType)&&e.attr("aria-label")||""}var Oo={"aria-activedescendant":{type:"idref",allowEmpty:!0},"aria-atomic":{type:"boolean",global:!0},"aria-autocomplete":{type:"nmtoken",values:["inline","list","both","none"]},"aria-braillelabel":{type:"string",global:!0},"aria-brailleroledescription":{type:"string",global:!0},"aria-busy":{type:"boolean",global:!0},"aria-checked":{type:"nmtoken",values:["false","mixed","true","undefined"]},"aria-colcount":{type:"int",minValue:-1},"aria-colindex":{type:"int",minValue:1},"aria-colspan":{type:"int",minValue:1},"aria-controls":{type:"idrefs",allowEmpty:!0,global:!0},"aria-current":{type:"nmtoken",allowEmpty:!0,values:["page","step","location","date","time","true","false"],global:!0},"aria-describedby":{type:"idrefs",allowEmpty:!0,global:!0},"aria-description":{type:"string",allowEmpty:!0,global:!0},"aria-details":{type:"idref",allowEmpty:!0,global:!0},"aria-disabled":{type:"boolean",global:!0},"aria-dropeffect":{type:"nmtokens",values:["copy","execute","link","move","none","popup"],global:!0},"aria-errormessage":{type:"idref",allowEmpty:!0,global:!0},"aria-expanded":{type:"nmtoken",values:["true","false","undefined"]},"aria-flowto":{type:"idrefs",allowEmpty:!0,global:!0},"aria-grabbed":{type:"nmtoken",values:["true","false","undefined"],global:!0},"aria-haspopup":{type:"nmtoken",allowEmpty:!0,values:["true","false","menu","listbox","tree","grid","dialog"],global:!0},"aria-hidden":{type:"nmtoken",values:["true","false","undefined"],global:!0},"aria-invalid":{type:"nmtoken",values:["grammar","false","spelling","true"],global:!0},"aria-keyshortcuts":{type:"string",allowEmpty:!0,global:!0},"aria-label":{type:"string",allowEmpty:!0,global:!0},"aria-labelledby":{type:"idrefs",allowEmpty:!0,global:!0},"aria-level":{type:"int",minValue:1},"aria-live":{type:"nmtoken",values:["assertive","off","polite"],global:!0},"aria-modal":{type:"boolean"},"aria-multiline":{type:"boolean"},"aria-multiselectable":{type:"boolean"},"aria-orientation":{type:"nmtoken",values:["horizontal","undefined","vertical"]},"aria-owns":{type:"idrefs",allowEmpty:!0,global:!0},"aria-placeholder":{type:"string",allowEmpty:!0},"aria-posinset":{type:"int",minValue:1},"aria-pressed":{type:"nmtoken",values:["false","mixed","true","undefined"]},"aria-readonly":{type:"boolean"},"aria-relevant":{type:"nmtokens",values:["additions","all","removals","text"],global:!0},"aria-required":{type:"boolean"},"aria-roledescription":{type:"string",allowEmpty:!0,global:!0},"aria-rowcount":{type:"int",minValue:-1},"aria-rowindex":{type:"int",minValue:1},"aria-rowspan":{type:"int",minValue:0},"aria-selected":{type:"nmtoken",values:["false","true","undefined"]},"aria-setsize":{type:"int",minValue:-1},"aria-sort":{type:"nmtoken",values:["ascending","descending","none","other"]},"aria-valuemax":{type:"decimal"},"aria-valuemin":{type:"decimal"},"aria-valuenow":{type:"decimal"},"aria-valuetext":{type:"string"}},So={alert:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"]},alertdialog:{type:"widget",allowedAttrs:["aria-expanded","aria-modal"],superclassRole:["alert","dialog"],accessibleNameRequired:!0},application:{type:"landmark",allowedAttrs:["aria-activedescendant","aria-expanded"],superclassRole:["structure"],accessibleNameRequired:!0},article:{type:"structure",allowedAttrs:["aria-posinset","aria-setsize","aria-expanded"],superclassRole:["document"]},banner:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},blockquote:{type:"structure",superclassRole:["section"]},button:{type:"widget",allowedAttrs:["aria-expanded","aria-pressed"],superclassRole:["command"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},caption:{type:"structure",requiredContext:["figure","table","grid","treegrid"],superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},cell:{type:"structure",requiredContext:["row"],allowedAttrs:["aria-colindex","aria-colspan","aria-rowindex","aria-rowspan","aria-expanded"],superclassRole:["section"],nameFromContent:!0},checkbox:{type:"widget",requiredAttrs:["aria-checked"],allowedAttrs:["aria-readonly","aria-required"],superclassRole:["input"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},code:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},columnheader:{type:"structure",requiredContext:["row"],allowedAttrs:["aria-sort","aria-colindex","aria-colspan","aria-expanded","aria-readonly","aria-required","aria-rowindex","aria-rowspan","aria-selected"],superclassRole:["cell","gridcell","sectionhead"],accessibleNameRequired:!1,nameFromContent:!0},combobox:{type:"widget",requiredAttrs:["aria-expanded","aria-controls"],allowedAttrs:["aria-owns","aria-autocomplete","aria-readonly","aria-required","aria-activedescendant","aria-orientation"],superclassRole:["select"],accessibleNameRequired:!0},command:{type:"abstract",superclassRole:["widget"]},complementary:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},composite:{type:"abstract",superclassRole:["widget"]},contentinfo:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},comment:{type:"structure",allowedAttrs:["aria-level","aria-posinset","aria-setsize"],superclassRole:["article"]},definition:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"]},deletion:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},dialog:{type:"widget",allowedAttrs:["aria-expanded","aria-modal"],superclassRole:["window"],accessibleNameRequired:!0},directory:{type:"structure",deprecated:!0,allowedAttrs:["aria-expanded"],superclassRole:["list"],nameFromContent:!0},document:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["structure"]},emphasis:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},feed:{type:"structure",requiredOwned:["article"],allowedAttrs:["aria-expanded"],superclassRole:["list"]},figure:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],nameFromContent:!0},form:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},grid:{type:"composite",requiredOwned:["rowgroup","row"],allowedAttrs:["aria-level","aria-multiselectable","aria-readonly","aria-activedescendant","aria-colcount","aria-expanded","aria-rowcount"],superclassRole:["composite","table"],accessibleNameRequired:!1},gridcell:{type:"widget",requiredContext:["row"],allowedAttrs:["aria-readonly","aria-required","aria-selected","aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan"],superclassRole:["cell","widget"],nameFromContent:!0},group:{type:"structure",allowedAttrs:["aria-activedescendant","aria-expanded"],superclassRole:["section"]},heading:{type:"structure",requiredAttrs:["aria-level"],allowedAttrs:["aria-expanded"],superclassRole:["sectionhead"],accessibleNameRequired:!1,nameFromContent:!0},img:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],accessibleNameRequired:!0,childrenPresentational:!0},input:{type:"abstract",superclassRole:["widget"]},insertion:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},landmark:{type:"abstract",superclassRole:["section"]},link:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["command"],accessibleNameRequired:!0,nameFromContent:!0},list:{type:"structure",requiredOwned:["listitem"],allowedAttrs:["aria-expanded"],superclassRole:["section"]},listbox:{type:"widget",requiredOwned:["group","option"],allowedAttrs:["aria-multiselectable","aria-readonly","aria-required","aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["select"],accessibleNameRequired:!0},listitem:{type:"structure",requiredContext:["list"],allowedAttrs:["aria-level","aria-posinset","aria-setsize","aria-expanded"],superclassRole:["section"],nameFromContent:!0},log:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"]},main:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},marquee:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"]},math:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],childrenPresentational:!0},menu:{type:"composite",requiredOwned:["group","menuitemradio","menuitem","menuitemcheckbox","menu","separator"],allowedAttrs:["aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["select"]},menubar:{type:"composite",requiredOwned:["group","menuitemradio","menuitem","menuitemcheckbox","menu","separator"],allowedAttrs:["aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["menu"]},menuitem:{type:"widget",requiredContext:["menu","menubar","group"],allowedAttrs:["aria-posinset","aria-setsize","aria-expanded"],superclassRole:["command"],accessibleNameRequired:!0,nameFromContent:!0},menuitemcheckbox:{type:"widget",requiredContext:["menu","menubar","group"],requiredAttrs:["aria-checked"],allowedAttrs:["aria-expanded","aria-posinset","aria-readonly","aria-setsize"],superclassRole:["checkbox","menuitem"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},menuitemradio:{type:"widget",requiredContext:["menu","menubar","group"],requiredAttrs:["aria-checked"],allowedAttrs:["aria-expanded","aria-posinset","aria-readonly","aria-setsize"],superclassRole:["menuitemcheckbox","radio"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},meter:{type:"structure",requiredAttrs:["aria-valuenow"],allowedAttrs:["aria-valuemax","aria-valuemin","aria-valuetext"],superclassRole:["range"],accessibleNameRequired:!0,childrenPresentational:!0},mark:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},navigation:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},none:{type:"structure",superclassRole:["structure"],prohibitedAttrs:["aria-label","aria-labelledby"]},note:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"]},option:{type:"widget",requiredContext:["group","listbox"],allowedAttrs:["aria-selected","aria-checked","aria-posinset","aria-setsize"],superclassRole:["input"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},paragraph:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},presentation:{type:"structure",superclassRole:["structure"],prohibitedAttrs:["aria-label","aria-labelledby"]},progressbar:{type:"widget",allowedAttrs:["aria-expanded","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],superclassRole:["range"],accessibleNameRequired:!0,childrenPresentational:!0},radio:{type:"widget",requiredAttrs:["aria-checked"],allowedAttrs:["aria-posinset","aria-setsize","aria-required"],superclassRole:["input"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},radiogroup:{type:"composite",allowedAttrs:["aria-readonly","aria-required","aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["select"],accessibleNameRequired:!1},range:{type:"abstract",superclassRole:["widget"]},region:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"],accessibleNameRequired:!1},roletype:{type:"abstract",superclassRole:[]},row:{type:"structure",requiredContext:["grid","rowgroup","table","treegrid"],requiredOwned:["cell","columnheader","gridcell","rowheader"],allowedAttrs:["aria-colindex","aria-level","aria-rowindex","aria-selected","aria-activedescendant","aria-expanded","aria-posinset","aria-setsize"],superclassRole:["group","widget"],nameFromContent:!0},rowgroup:{type:"structure",requiredContext:["grid","table","treegrid"],requiredOwned:["row"],superclassRole:["structure"],nameFromContent:!0},rowheader:{type:"structure",requiredContext:["row"],allowedAttrs:["aria-sort","aria-colindex","aria-colspan","aria-expanded","aria-readonly","aria-required","aria-rowindex","aria-rowspan","aria-selected"],superclassRole:["cell","gridcell","sectionhead"],accessibleNameRequired:!1,nameFromContent:!0},scrollbar:{type:"widget",requiredAttrs:["aria-valuenow"],allowedAttrs:["aria-controls","aria-orientation","aria-valuemax","aria-valuemin","aria-valuetext"],superclassRole:["range"],childrenPresentational:!0},search:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},searchbox:{type:"widget",allowedAttrs:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-placeholder","aria-readonly","aria-required"],superclassRole:["textbox"],accessibleNameRequired:!0},section:{type:"abstract",superclassRole:["structure"],nameFromContent:!0},sectionhead:{type:"abstract",superclassRole:["structure"],nameFromContent:!0},select:{type:"abstract",superclassRole:["composite","group"]},separator:{type:"structure",requiredAttrs:["aria-valuenow"],allowedAttrs:["aria-valuemax","aria-valuemin","aria-orientation","aria-valuetext"],superclassRole:["structure","widget"],childrenPresentational:!0},slider:{type:"widget",requiredAttrs:["aria-valuenow"],allowedAttrs:["aria-valuemax","aria-valuemin","aria-orientation","aria-readonly","aria-required","aria-valuetext"],superclassRole:["input","range"],accessibleNameRequired:!0,childrenPresentational:!0},spinbutton:{type:"widget",allowedAttrs:["aria-valuemax","aria-valuemin","aria-readonly","aria-required","aria-activedescendant","aria-valuetext","aria-valuenow"],superclassRole:["composite","input","range"],accessibleNameRequired:!0},status:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"]},strong:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},structure:{type:"abstract",superclassRole:["roletype"]},subscript:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},superscript:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},switch:{type:"widget",requiredAttrs:["aria-checked"],allowedAttrs:["aria-readonly","aria-required"],superclassRole:["checkbox"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},suggestion:{type:"structure",requiredOwned:["insertion","deletion"],superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},tab:{type:"widget",requiredContext:["tablist"],allowedAttrs:["aria-posinset","aria-selected","aria-setsize","aria-expanded"],superclassRole:["sectionhead","widget"],nameFromContent:!0,childrenPresentational:!0},table:{type:"structure",requiredOwned:["rowgroup","row"],allowedAttrs:["aria-colcount","aria-rowcount","aria-expanded"],superclassRole:["section"],accessibleNameRequired:!1,nameFromContent:!0},tablist:{type:"composite",requiredOwned:["tab"],allowedAttrs:["aria-level","aria-multiselectable","aria-orientation","aria-activedescendant","aria-expanded"],superclassRole:["composite"]},tabpanel:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"],accessibleNameRequired:!1},term:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],nameFromContent:!0},text:{type:"structure",superclassRole:["section"],nameFromContent:!0},textbox:{type:"widget",allowedAttrs:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-placeholder","aria-readonly","aria-required"],superclassRole:["input"],accessibleNameRequired:!0},time:{type:"structure",superclassRole:["section"]},timer:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["status"]},toolbar:{type:"structure",allowedAttrs:["aria-orientation","aria-activedescendant","aria-expanded"],superclassRole:["group"],accessibleNameRequired:!0},tooltip:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],nameFromContent:!0},tree:{type:"composite",requiredOwned:["group","treeitem"],allowedAttrs:["aria-multiselectable","aria-required","aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["select"],accessibleNameRequired:!1},treegrid:{type:"composite",requiredOwned:["rowgroup","row"],allowedAttrs:["aria-activedescendant","aria-colcount","aria-expanded","aria-level","aria-multiselectable","aria-orientation","aria-readonly","aria-required","aria-rowcount"],superclassRole:["grid","tree"],accessibleNameRequired:!1},treeitem:{type:"widget",requiredContext:["group","tree"],allowedAttrs:["aria-checked","aria-expanded","aria-level","aria-posinset","aria-selected","aria-setsize"],superclassRole:["listitem","option"],accessibleNameRequired:!0,nameFromContent:!0},widget:{type:"abstract",superclassRole:["roletype"]},window:{type:"abstract",superclassRole:["roletype"]}},Mo={a:{variant:{href:{matches:"[href]",contentTypes:["interactive","phrasing","flow"],allowedRoles:["button","checkbox","menuitem","menuitemcheckbox","menuitemradio","option","radio","switch","tab","treeitem","doc-backlink","doc-biblioref","doc-glossref","doc-noteref"],namingMethods:["subtreeText"]},default:{contentTypes:["phrasing","flow"],allowedRoles:!0}}},abbr:{contentTypes:["phrasing","flow"],allowedRoles:!0},address:{contentTypes:["flow"],allowedRoles:!0},area:{variant:{href:{matches:"[href]",allowedRoles:!1},default:{allowedRoles:["button","link"]}},contentTypes:["phrasing","flow"],namingMethods:["altText"]},article:{contentTypes:["sectioning","flow"],allowedRoles:["feed","presentation","none","document","application","main","region"],shadowRoot:!0},aside:{contentTypes:["sectioning","flow"],allowedRoles:["feed","note","presentation","none","region","search","doc-dedication","doc-example","doc-footnote","doc-pullquote","doc-tip"]},audio:{variant:{controls:{matches:"[controls]",contentTypes:["interactive","embedded","phrasing","flow"]},default:{contentTypes:["embedded","phrasing","flow"]}},allowedRoles:["application"],chromiumRole:"Audio"},b:{contentTypes:["phrasing","flow"],allowedRoles:!0},base:{allowedRoles:!1,noAriaAttrs:!0},bdi:{contentTypes:["phrasing","flow"],allowedRoles:!0},bdo:{contentTypes:["phrasing","flow"],allowedRoles:!0},blockquote:{contentTypes:["flow"],allowedRoles:!0,shadowRoot:!0},body:{allowedRoles:!1,shadowRoot:!0},br:{contentTypes:["phrasing","flow"],allowedRoles:["presentation","none"],namingMethods:["titleText","singleSpace"]},button:{contentTypes:["interactive","phrasing","flow"],allowedRoles:["checkbox","combobox","link","menuitem","menuitemcheckbox","menuitemradio","option","radio","switch","tab"],namingMethods:["subtreeText"]},canvas:{allowedRoles:!0,contentTypes:["embedded","phrasing","flow"],chromiumRole:"Canvas"},caption:{allowedRoles:!1},cite:{contentTypes:["phrasing","flow"],allowedRoles:!0},code:{contentTypes:["phrasing","flow"],allowedRoles:!0},col:{allowedRoles:!1,noAriaAttrs:!0},colgroup:{allowedRoles:!1,noAriaAttrs:!0},data:{contentTypes:["phrasing","flow"],allowedRoles:!0},datalist:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0,implicitAttrs:{"aria-multiselectable":"false"}},dd:{allowedRoles:!1},del:{contentTypes:["phrasing","flow"],allowedRoles:!0},dfn:{contentTypes:["phrasing","flow"],allowedRoles:!0},details:{contentTypes:["interactive","flow"],allowedRoles:!1},dialog:{contentTypes:["flow"],allowedRoles:["alertdialog"]},div:{contentTypes:["flow"],allowedRoles:!0,shadowRoot:!0},dl:{contentTypes:["flow"],allowedRoles:["group","list","presentation","none"],chromiumRole:"DescriptionList"},dt:{allowedRoles:["listitem"]},em:{contentTypes:["phrasing","flow"],allowedRoles:!0},embed:{contentTypes:["interactive","embedded","phrasing","flow"],allowedRoles:["application","document","img","presentation","none"],chromiumRole:"EmbeddedObject"},fieldset:{contentTypes:["flow"],allowedRoles:["none","presentation","radiogroup"],namingMethods:["fieldsetLegendText"]},figcaption:{allowedRoles:["group","none","presentation"]},figure:{contentTypes:["flow"],allowedRoles:!0,namingMethods:["figureText","titleText"]},footer:{contentTypes:["flow"],allowedRoles:["group","none","presentation","doc-footnote"],shadowRoot:!0},form:{contentTypes:["flow"],allowedRoles:["search","none","presentation"]},h1:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"1"}},h2:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"2"}},h3:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"3"}},h4:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"4"}},h5:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"5"}},h6:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"6"}},head:{allowedRoles:!1,noAriaAttrs:!0},header:{contentTypes:["flow"],allowedRoles:["group","none","presentation","doc-footnote"],shadowRoot:!0},hgroup:{contentTypes:["heading","flow"],allowedRoles:!0},hr:{contentTypes:["flow"],allowedRoles:["none","presentation","doc-pagebreak"],namingMethods:["titleText","singleSpace"]},html:{allowedRoles:!1,noAriaAttrs:!0},i:{contentTypes:["phrasing","flow"],allowedRoles:!0},iframe:{contentTypes:["interactive","embedded","phrasing","flow"],allowedRoles:["application","document","img","none","presentation"],chromiumRole:"Iframe"},img:{variant:{nonEmptyAlt:{matches:[{attributes:{alt:"/.+/"}},{hasAccessibleName:!0}],allowedRoles:["button","checkbox","link","menuitem","menuitemcheckbox","menuitemradio","option","progressbar","radio","scrollbar","separator","slider","switch","tab","treeitem","doc-cover"]},usemap:{matches:"[usemap]",contentTypes:["interactive","embedded","flow"]},default:{allowedRoles:["presentation","none"],contentTypes:["embedded","flow"]}},namingMethods:["altText"]},input:{variant:{button:{matches:{properties:{type:"button"}},allowedRoles:["checkbox","combobox","link","menuitem","menuitemcheckbox","menuitemradio","option","radio","switch","tab"]},buttonType:{matches:{properties:{type:["button","submit","reset"]}},namingMethods:["valueText","titleText","buttonDefaultText"]},checkboxPressed:{matches:{properties:{type:"checkbox"},attributes:{"aria-pressed":"/.*/"}},allowedRoles:["button","menuitemcheckbox","option","switch"],implicitAttrs:{"aria-checked":"false"}},checkbox:{matches:{properties:{type:"checkbox"},attributes:{"aria-pressed":null}},allowedRoles:["menuitemcheckbox","option","switch"],implicitAttrs:{"aria-checked":"false"}},noRoles:{matches:{properties:{type:["color","date","datetime-local","file","month","number","password","range","reset","submit","time","week"]}},allowedRoles:!1},hidden:{matches:{properties:{type:"hidden"}},contentTypes:["flow"],allowedRoles:!1,noAriaAttrs:!0},image:{matches:{properties:{type:"image"}},allowedRoles:["link","menuitem","menuitemcheckbox","menuitemradio","radio","switch"],namingMethods:["altText","valueText","labelText","titleText","buttonDefaultText"]},radio:{matches:{properties:{type:"radio"}},allowedRoles:["menuitemradio"],implicitAttrs:{"aria-checked":"false"}},textWithList:{matches:{properties:{type:"text"},attributes:{list:"/.*/"}},allowedRoles:!1},default:{contentTypes:["interactive","flow"],allowedRoles:["combobox","searchbox","spinbutton"],implicitAttrs:{"aria-valuenow":""},namingMethods:["labelText","placeholderText"]}}},ins:{contentTypes:["phrasing","flow"],allowedRoles:!0},kbd:{contentTypes:["phrasing","flow"],allowedRoles:!0},label:{contentTypes:["interactive","phrasing","flow"],allowedRoles:!1,chromiumRole:"Label"},legend:{allowedRoles:!1},li:{allowedRoles:["menuitem","menuitemcheckbox","menuitemradio","option","none","presentation","radio","separator","tab","treeitem","doc-biblioentry","doc-endnote"],implicitAttrs:{"aria-setsize":"1","aria-posinset":"1"}},link:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},main:{contentTypes:["flow"],allowedRoles:!1,shadowRoot:!0},map:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},math:{contentTypes:["embedded","phrasing","flow"],allowedRoles:!1},mark:{contentTypes:["phrasing","flow"],allowedRoles:!0},menu:{contentTypes:["flow"],allowedRoles:["directory","group","listbox","menu","menubar","none","presentation","radiogroup","tablist","toolbar","tree"]},meta:{variant:{itemprop:{matches:"[itemprop]",contentTypes:["phrasing","flow"]}},allowedRoles:!1,noAriaAttrs:!0},meter:{contentTypes:["phrasing","flow"],allowedRoles:!1,chromiumRole:"progressbar"},nav:{contentTypes:["sectioning","flow"],allowedRoles:["doc-index","doc-pagelist","doc-toc","menu","menubar","none","presentation","tablist"],shadowRoot:!0},noscript:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},object:{variant:{usemap:{matches:"[usemap]",contentTypes:["interactive","embedded","phrasing","flow"]},default:{contentTypes:["embedded","phrasing","flow"]}},allowedRoles:["application","document","img"],chromiumRole:"PluginObject"},ol:{contentTypes:["flow"],allowedRoles:["directory","group","listbox","menu","menubar","none","presentation","radiogroup","tablist","toolbar","tree"]},optgroup:{allowedRoles:!1},option:{allowedRoles:!1,implicitAttrs:{"aria-selected":"false"}},output:{contentTypes:["phrasing","flow"],allowedRoles:!0,namingMethods:["subtreeText"]},p:{contentTypes:["flow"],allowedRoles:!0,shadowRoot:!0},param:{allowedRoles:!1,noAriaAttrs:!0},picture:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},pre:{contentTypes:["flow"],allowedRoles:!0},progress:{contentTypes:["phrasing","flow"],allowedRoles:!1,implicitAttrs:{"aria-valuemax":"100","aria-valuemin":"0","aria-valuenow":"0"}},q:{contentTypes:["phrasing","flow"],allowedRoles:!0},rp:{allowedRoles:!0},rt:{allowedRoles:!0},ruby:{contentTypes:["phrasing","flow"],allowedRoles:!0},s:{contentTypes:["phrasing","flow"],allowedRoles:!0},samp:{contentTypes:["phrasing","flow"],allowedRoles:!0},script:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},section:{contentTypes:["sectioning","flow"],allowedRoles:["alert","alertdialog","application","banner","complementary","contentinfo","dialog","document","feed","group","log","main","marquee","navigation","none","note","presentation","search","status","tabpanel","doc-abstract","doc-acknowledgments","doc-afterword","doc-appendix","doc-bibliography","doc-chapter","doc-colophon","doc-conclusion","doc-credit","doc-credits","doc-dedication","doc-endnotes","doc-epigraph","doc-epilogue","doc-errata","doc-example","doc-foreword","doc-glossary","doc-index","doc-introduction","doc-notice","doc-pagelist","doc-part","doc-preface","doc-prologue","doc-pullquote","doc-qna","doc-toc"],shadowRoot:!0},select:{variant:{combobox:{matches:{attributes:{multiple:null,size:[null,"1"]}},allowedRoles:["menu"]},default:{allowedRoles:!1}},contentTypes:["interactive","phrasing","flow"],implicitAttrs:{"aria-valuenow":""},namingMethods:["labelText"]},slot:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},small:{contentTypes:["phrasing","flow"],allowedRoles:!0},source:{allowedRoles:!1,noAriaAttrs:!0},span:{contentTypes:["phrasing","flow"],allowedRoles:!0,shadowRoot:!0},strong:{contentTypes:["phrasing","flow"],allowedRoles:!0},style:{allowedRoles:!1,noAriaAttrs:!0},svg:{contentTypes:["embedded","phrasing","flow"],allowedRoles:!0,chromiumRole:"SVGRoot",namingMethods:["svgTitleText"]},sub:{contentTypes:["phrasing","flow"],allowedRoles:!0},summary:{allowedRoles:!1,namingMethods:["subtreeText"]},sup:{contentTypes:["phrasing","flow"],allowedRoles:!0},table:{contentTypes:["flow"],allowedRoles:!0,namingMethods:["tableCaptionText","tableSummaryText"]},tbody:{allowedRoles:!0},template:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},textarea:{contentTypes:["interactive","phrasing","flow"],allowedRoles:!1,implicitAttrs:{"aria-valuenow":"","aria-multiline":"true"},namingMethods:["labelText","placeholderText"]},tfoot:{allowedRoles:!0},thead:{allowedRoles:!0},time:{contentTypes:["phrasing","flow"],allowedRoles:!0},title:{allowedRoles:!1,noAriaAttrs:!0},td:{allowedRoles:!0},th:{allowedRoles:!0},tr:{allowedRoles:!0},track:{allowedRoles:!1,noAriaAttrs:!0},u:{contentTypes:["phrasing","flow"],allowedRoles:!0},ul:{contentTypes:["flow"],allowedRoles:["directory","group","listbox","menu","menubar","none","presentation","radiogroup","tablist","toolbar","tree"]},var:{contentTypes:["phrasing","flow"],allowedRoles:!0},video:{variant:{controls:{matches:"[controls]",contentTypes:["interactive","embedded","phrasing","flow"]},default:{contentTypes:["embedded","phrasing","flow"]}},allowedRoles:["application"],chromiumRole:"video"},wbr:{contentTypes:["phrasing","flow"],allowedRoles:["presentation","none"]}},Po={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Io={ariaAttrs:Oo,ariaRoles:G({},So,{"doc-abstract":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-acknowledgments":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-afterword":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-appendix":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-backlink":{type:"link",allowedAttrs:["aria-expanded"],nameFromContent:!0,superclassRole:["link"]},"doc-biblioentry":{type:"listitem",allowedAttrs:["aria-expanded","aria-level","aria-posinset","aria-setsize"],superclassRole:["listitem"],deprecated:!0},"doc-bibliography":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-biblioref":{type:"link",allowedAttrs:["aria-expanded"],nameFromContent:!0,superclassRole:["link"]},"doc-chapter":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-colophon":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-conclusion":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-cover":{type:"img",allowedAttrs:["aria-expanded"],superclassRole:["img"]},"doc-credit":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-credits":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-dedication":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-endnote":{type:"listitem",allowedAttrs:["aria-expanded","aria-level","aria-posinset","aria-setsize"],superclassRole:["listitem"],deprecated:!0},"doc-endnotes":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-epigraph":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-epilogue":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-errata":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-example":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-footnote":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-foreword":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-glossary":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-glossref":{type:"link",allowedAttrs:["aria-expanded"],nameFromContent:!0,superclassRole:["link"]},"doc-index":{type:"navigation",allowedAttrs:["aria-expanded"],superclassRole:["navigation"]},"doc-introduction":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-noteref":{type:"link",allowedAttrs:["aria-expanded"],nameFromContent:!0,superclassRole:["link"]},"doc-notice":{type:"note",allowedAttrs:["aria-expanded"],superclassRole:["note"]},"doc-pagebreak":{type:"separator",allowedAttrs:["aria-expanded","aria-orientation"],superclassRole:["separator"],childrenPresentational:!0},"doc-pagelist":{type:"navigation",allowedAttrs:["aria-expanded"],superclassRole:["navigation"]},"doc-part":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-preface":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-prologue":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-pullquote":{type:"none",superclassRole:["none"]},"doc-qna":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-subtitle":{type:"sectionhead",allowedAttrs:["aria-expanded"],superclassRole:["sectionhead"]},"doc-tip":{type:"note",allowedAttrs:["aria-expanded"],superclassRole:["note"]},"doc-toc":{type:"navigation",allowedAttrs:["aria-expanded"],superclassRole:["navigation"]}},{"graphics-document":{type:"structure",superclassRole:["document"],accessibleNameRequired:!0},"graphics-object":{type:"structure",superclassRole:["group"],nameFromContent:!0},"graphics-symbol":{type:"structure",superclassRole:["img"],accessibleNameRequired:!0,childrenPresentational:!0}}),htmlElms:Mo,cssColors:Po},jo=G({},Io),Lo=jo,qo=function(e){return!!(e=Lo.ariaRoles[e])&&!!e.unsupported},zo=function(e){var t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).allowAbstract,n=void 0!==(n=n.flagUnsupported)&&n,a=Lo.ariaRoles[e],r=qo(e);return!(!a||n&&r||!t&&"abstract"===a.type)},Vo=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=t.fallback,a=t.abstracts,r=t.dpub;return 1===(e=e instanceof un?e:Xn(e)).props.nodeType&&(t=(e.attr("role")||"").trim().toLowerCase(),(n?Uc(t):[t]).find((function(e){return!(!r&&"doc-"===e.substr(0,4))&&zo(e,{allowAbstract:a})})))||null},$o=function(e){return Object.keys(Lo.htmlElms).filter((function(t){return(t=Lo.htmlElms[t]).contentTypes?t.contentTypes.includes(e):!!t.variant&&!(!t.variant.default||!t.variant.default.contentTypes)&&t.variant.default.contentTypes.includes(e)}))},Ho=function(){return Kn.get("globalAriaAttrs",(function(){return Object.keys(Lo.ariaAttrs).filter((function(e){return Lo.ariaAttrs[e].global}))}))},Uo=Dr((function(e){for(var t=[],n=e.rows,a=0,r=n.length;a<r;a++)for(var o=n[a].cells,u=(t[a]=t[a]||[],0),i=0,l=o.length;i<l;i++)for(var s=0;s<o[i].colSpan;s++){for(var c=o[i].getAttribute("rowspan"),d=0===parseInt(c)||0===o[i].rowspan?n.length:o[i].rowSpan,p=0;p<d;p++){for(t[a+p]=t[a+p]||[];t[a+p][u];)u++;t[a+p][u]=o[i]}u++}return t})),Go=Dr((function(e,t){var n,a;for(t=t||Uo(pr(e,"table")),n=0;n<t.length;n++)if(t[n]&&-1!==(a=t[n].indexOf(e)))return{x:a,y:n}})),Wo=function(e){var t,n=(e=jd(e)).vNode,a=(e=e.domNode,n.attr("scope")),r=n.attr("role");if(["td","th"].includes(n.props.nodeName))return"columnheader"===r?"col":"rowheader"===r?"row":"col"===a||"row"===a?a:"th"===n.props.nodeName&&(n.actualNode?(r=Uo(pr(e,"table")))[(t=Go(e,r)).y].reduce((function(e,t){return e&&"TH"===t.nodeName.toUpperCase()}),!0)?"col":r.map((function(e){return e[t.x]})).reduce((function(e,t){return e&&t&&"TH"===t.nodeName.toUpperCase()}),!0)?"row":"auto":"auto");throw new TypeError("Expected TD or TH element")},Yo=function(e){return-1!==["col","auto"].indexOf(Wo(e))},Ko=function(e){return["row","auto"].includes(Wo(e))},Xo=function(e){return e?e.replace(/\\r\\n/g,"\\n").replace(/\\u00A0/g," ").replace(/[\\s]{2,}/g," ").trim():""},Zo=function(e){var t=jd(e).vNode;if(t&&!co(t))switch(t.props.nodeName){case"a":case"area":if(t.hasAttr("href"))return!0;break;case"input":return"hidden"!==t.props.type;case"textarea":case"select":case"summary":case"button":return!0;case"details":return!cp(t,"summary").length}return!1};function Jo(e){return 1===(e=jd(e).vNode).props.nodeType&&!(co(e)||!Zo(e)&&(!(e=e.attr("tabindex"))||isNaN(parseInt(e,10))))}var Qo=$o("sectioning").map((function(e){return"".concat(e,":not([role])")})).join(", ")+" , main:not([role]), [role=article], [role=complementary], [role=main], [role=navigation], [role=region]";function eu(e){var t=Xo(Ro(e));e=Xo(_o(e));return t||e}var tu={a:function(e){return e.hasAttr("href")?"link":null},area:function(e){return e.hasAttr("href")?"link":null},article:"article",aside:"complementary",body:"document",button:"button",datalist:"listbox",dd:"definition",dfn:"term",details:"group",dialog:"dialog",dt:"term",fieldset:"group",figure:"figure",footer:function(e){return ca(e,Qo)?null:"contentinfo"},form:function(e){return eu(e)?"form":null},h1:"heading",h2:"heading",h3:"heading",h4:"heading",h5:"heading",h6:"heading",header:function(e){return ca(e,Qo)?null:"banner"},hr:"separator",img:function(e){var t=e.hasAttr("alt")&&!e.attr("alt"),n=Ho().find((function(t){return e.hasAttr(t)}));return!t||n||Jo(e)?"img":"presentation"},input:function(e){var t,n;switch(e.hasAttr("list")&&(n=(t=To(e.actualNode,"list").filter((function(e){return!!e}))[0])&&"datalist"===t.nodeName.toLowerCase()),e.props.type){case"checkbox":return"checkbox";case"number":return"spinbutton";case"radio":return"radio";case"range":return"slider";case"search":return n?"combobox":"searchbox";case"button":case"image":case"reset":case"submit":return"button";case"text":case"tel":case"url":case"email":case"":return n?"combobox":"textbox";default:return"textbox"}},li:"listitem",main:"main",math:"math",menu:"list",nav:"navigation",ol:"list",optgroup:"group",option:"option",output:"status",progress:"progressbar",section:function(e){return eu(e)?"region":null},select:function(e){return e.hasAttr("multiple")||1<parseInt(e.attr("size"))?"listbox":"combobox"},summary:"button",table:"table",tbody:"rowgroup",td:function(e){return e=ca(e,"table"),e=Vo(e),["grid","treegrid"].includes(e)?"gridcell":"cell"},textarea:"textbox",tfoot:"rowgroup",th:function(e){return Yo(e)?"columnheader":Ko(e)?"rowheader":void 0},thead:"rowgroup",tr:"row",ul:"list"},nu=function(e,t){var n=r(t);if(Array.isArray(t)&&void 0!==e)return t.includes(e);if("function"===n)return!!t(e);if(null!=e){if(t instanceof RegExp)return t.test(e);if(/^\\/.*\\/$/.test(t))return n=t.substring(1,t.length-1),new RegExp(n).test(e)}return t===e};function au(e,t){return nu(!!ti(e),t)}var ru=function(e,t){if("object"!==r(t)||Array.isArray(t)||t instanceof RegExp)throw new Error("Expect matcher to be an object");return Object.keys(t).every((function(n){return nu(e(n),t[n])}))};function ou(e,t){return e=jd(e).vNode,ru((function(t){return e.attr(t)}),t)}function uu(e,t){return!!t(e)}function iu(e,t){return nu(Vo(e),t)}function lu(e,t){return nu(gu(e),t)}function su(e,t){return e=jd(e).vNode,nu(e.props.nodeName,t)}function cu(e,t){return e=jd(e).vNode,ru((function(t){return e.props[t]}),t)}function du(e,t){return nu(Fu(e),t)}var pu={hasAccessibleName:au,attributes:ou,condition:uu,explicitRole:iu,implicitRole:lu,nodeName:su,properties:cu,semanticRole:du},fu=function e(t,n){return t=jd(t).vNode,Array.isArray(n)?n.some((function(n){return e(t,n)})):"string"==typeof n?sa(t,n):Object.keys(n).every((function(e){var a;if(pu[e])return a=n[e],(0,pu[e])(t,a);throw new Error(\'Unknown matcher type "\'.concat(e,\'"\'))}))},Du=function(e,t){return fu(e,t)},mu=(Du.hasAccessibleName=au,Du.attributes=ou,Du.condition=uu,Du.explicitRole=iu,Du.fromDefinition=fu,Du.fromFunction=ru,Du.fromPrimative=nu,Du.implicitRole=lu,Du.nodeName=su,Du.properties=cu,Du.semanticRole=du,Du),hu=function(e){var t=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).noMatchAccessibleName,n=void 0!==t&&t,a=Lo.htmlElms[e.props.nodeName];if(!a)return{};if(!a.variant)return a;var r,o,u=a.variant,i=$(a,l);for(r in u)if(u.hasOwnProperty(r)&&"default"!==r){for(var c=u[r],d=c.matches,p=$(c,s),f=Array.isArray(d)?d:[d],D=0;D<f.length&&n;D++)if(f[D].hasOwnProperty("hasAccessibleName"))return a;if(mu(e,d))for(var m in p)p.hasOwnProperty(m)&&(i[m]=p[m])}for(o in u.default)u.default.hasOwnProperty(o)&&void 0===i[o]&&(i[o]=u.default[o]);return i},gu=function(e){var t,n=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).chromium,a=e instanceof un?e:Xn(e);if(e=a.actualNode,a)return t=a.props.nodeName,!(t=tu[t])&&n?hu(a).chromiumRole||null:"function"==typeof t?t(a):t||null;throw new ReferenceError("Cannot get implicit role of a node outside the current scope.")},bu={td:["tr"],th:["tr"],tr:["thead","tbody","tfoot","table"],thead:["table"],tbody:["table"],tfoot:["table"],li:["ol","ul"],dt:["dl","div"],dd:["dl","div"],div:["dl"]};function vu(e,t){var n=t.chromium;t=$(t,c);return(n=gu(e,{chromium:n}))?function e(t,n){var a=bu[t.props.nodeName];if(a){if(t.parent)return a.includes(t.parent.props.nodeName)?(a=Vo(t.parent,n),["none","presentation"].includes(a)&&!yu(t.parent)?a:a?null:e(t.parent,n)):null;if(t.actualNode)throw new ReferenceError("Cannot determine role presentational inheritance of a required parent outside the current scope.")}return null}(e,t)||n:null}function yu(e){return Ho().some((function(t){return e.hasAttr(t)}))||Jo(e)}var Fu=function(e){var t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).noPresentational,n=function(e,t){var n,a=(r=1<arguments.length&&void 0!==t?t:{}).noImplicit,r=$(r,d),o=jd(e).vNode;return 1!==o.props.nodeType?null:!(n=Vo(o,r))||["presentation","none"].includes(n)&&yu(o)?a?null:vu(o,r):n}(e,$(n,p));return t&&["presentation","none"].includes(n)?null:n},wu=["iframe"],Eu=function(e){var t=jd(e).vNode;return 1!==t.props.nodeType||!e.hasAttr("title")||!Du(t,wu)&&["none","presentation"].includes(Fu(t))?"":t.attr("title")},Cu=function(e){var t,n,a=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).strict;return 1===(e=e instanceof un?e:Xn(e)).props.nodeType&&(t=Fu(e),!(!(n=Lo.ariaRoles[t])||!n.nameFromContent)||!a&&(!n||["presentation","none"].includes(t)))},xu=function(e){var t=e.actualNode,n=e.children;if(n)return e.hasAttr("aria-owns")?(e=To(t,"aria-owns").filter((function(e){return!!e})).map((function(e){return o.utils.getNodeFromTree(e)})),[].concat(H(n),H(e))):H(n);throw new Error("getOwnedVirtual requires a virtual node")},Au=$o("phrasing").concat(["#text"]),ku=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=ti.alreadyProcessed;t.startNode=t.startNode||e;var a=(o=t).strict,r=o.inControlContext,o=o.inLabelledByContext,u=hu(e,{noMatchAccessibleName:!0}).contentTypes;return n(e,t)||1!==e.props.nodeType||null!=u&&u.includes("embedded")||!Cu(e,{strict:a})&&!t.subtreeDescendant?"":(a||(t=G({subtreeDescendant:!r&&!o},t)),xu(e).reduce((function(e,n){var a=t,r=n.props.nodeName;return(n=ti(n,a))?(Au.includes(r)||(" "!==n[0]&&(n+=" "),e&&" "!==e[e.length-1]&&(n=" "+n)),e+n):e}),""))},Bu=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=ti.alreadyProcessed;if(t.inControlContext||t.inLabelledByContext||n(e,t))return"";t.startNode||(t.startNode=e);var a,r=G({inControlContext:!0},t);n=function(e){if(!e.attr("id"))return[];if(e.actualNode)return cr({elm:"label",attr:"for",value:e.attr("id"),context:e.actualNode});throw new TypeError("Cannot resolve explicit label reference for non-DOM nodes")}(e);return(t=ca(e,"label"))?(a=[].concat(H(n),[t.actualNode])).sort(Id):a=n,a.map((function(e){return No(e,r)})).filter((function(e){return""!==e})).join(" ")},Tu={submit:"Submit",image:"Submit",reset:"Reset",button:""};function Nu(e,t){return t.attr(e)||""}function Ru(e,t,n){t=t.actualNode;var a=[e=e.toLowerCase(),t.nodeName.toLowerCase()].join(",");return(t=t.querySelector(a))&&t.nodeName.toLowerCase()===e?No(t,n):""}var _u={valueText:function(e){return e.actualNode.value||""},buttonDefaultText:function(e){return e=e.actualNode,Tu[e.type]||""},tableCaptionText:Ru.bind(null,"caption"),figureText:Ru.bind(null,"figcaption"),svgTitleText:Ru.bind(null,"title"),fieldsetLegendText:Ru.bind(null,"legend"),altText:Nu.bind(null,"alt"),tableSummaryText:Nu.bind(null,"summary"),titleText:Eu,subtreeText:ku,labelText:Bu,singleSpace:function(){return" "},placeholderText:Nu.bind(null,"placeholder")},Ou=function(e){var t,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},a=e.actualNode;return 1!==e.props.nodeType||["presentation","none"].includes(Fu(e))?"":(t=(hu(e,{noMatchAccessibleName:!0}).namingMethods||[]).map((function(e){return _u[e]})).reduce((function(t,a){return t||a(e,n)}),""),n.debug&&o.log(t||"{empty-value}",a,n),t)},Su={accessibleNameFromFieldValue:["combobox","listbox","progressbar"]};function Mu(e){return e=jd(e).vNode,Pu(e)}var Pu=Dr((function(e,t){return!Cr(e)&&!uo(e,{skipAncestors:!0,isAncestor:t})&&(e.actualNode&&"area"===e.props.nodeName?!Tr(e,Pu):!_r(e,{skipAncestors:!0,isAncestor:t})&&(!e.parent||Pu(e.parent,!0)))})),Iu=function e(t,n,a){var r=jd(t).vNode,o=n?Mu:zr,u=!t.actualNode||t.actualNode&&o(t);o=r.children.map((function(t){var r=(o=t.props).nodeType,o=o.nodeValue;if(3===r){if(o&&u)return o}else if(!a)return e(t,n)})).join("");return Xo(o)},ju=["button","checkbox","color","file","hidden","image","password","radio","reset","submit"],Lu=function(e){var t=(e=e instanceof un?e:Xn(e)).props.nodeName;return"textarea"===t||"input"===t&&!ju.includes((e.attr("type")||"").toLowerCase())},qu=function(e){return"select"===(e=e instanceof un?e:Xn(e)).props.nodeName},zu=function(e){return"textbox"===Vo(e)},Vu=function(e){return"listbox"===Vo(e)},$u=function(e){return"combobox"===Vo(e)},Hu=["progressbar","scrollbar","slider","spinbutton"],Uu=function(e){return e=Vo(e),Hu.includes(e)},Gu=["textbox","progressbar","scrollbar","slider","spinbutton","combobox","listbox"],Wu={nativeTextboxValue:function(e){return e=jd(e).vNode,Lu(e)&&e.props.value||""},nativeSelectValue:function(e){if(e=jd(e).vNode,!qu(e))return"";var t=(e=cp(e,"option")).filter((function(e){return e.props.selected}));return t.length||t.push(e[0]),t.map((function(e){return Iu(e)})).join(" ")||""},ariaTextboxValue:function(e){var t=(e=jd(e)).vNode;e=e.domNode;return zu(t)?e&&_r(e)?e.textContent:Iu(t,!0):""},ariaListboxValue:Yu,ariaComboboxValue:function(e,t){e=jd(e).vNode;return $u(e)&&(e=xu(e).filter((function(e){return"listbox"===Fu(e)}))[0])?Yu(e,t):""},ariaRangeValue:function(e){e=jd(e).vNode;return Uu(e)&&e.hasAttr("aria-valuenow")?(e=+e.attr("aria-valuenow"),isNaN(e)?"0":String(e)):""}};function Yu(e,t){e=jd(e).vNode;return Vu(e)&&0!==(e=xu(e).filter((function(e){return"option"===Fu(e)&&"true"===e.attr("aria-selected")}))).length?ti(e[0],t):""}var Ku=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=e.actualNode,a=Su.accessibleNameFromFieldValue||[],r=Fu(e);return t.startNode===e||!Gu.includes(r)||a.includes(r)?"":(a=Object.keys(Wu).map((function(e){return Wu[e]})).reduce((function(n,a){return n||a(e,t)}),""),t.debug&&an(a||"{empty-value}",n,t),a)};function Xu(){return/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g}var Zu=function(e,t){var n=t.emoji,a=t.nonBmp;t=t.punctuations;return n?/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g.test(e):a?/[\\u1D00-\\u1D7F\\u1D80-\\u1DBF\\u1DC0-\\u1DFF\\u20A0-\\u20CF\\u20D0-\\u20FF\\u2100-\\u214F\\u2150-\\u218F\\u2190-\\u21FF\\u2200-\\u22FF\\u2300-\\u23FF\\u2400-\\u243F\\u2440-\\u245F\\u2460-\\u24FF\\u2500-\\u257F\\u2580-\\u259F\\u25A0-\\u25FF\\u2600-\\u26FF\\u2700-\\u27BF\\uE000-\\uF8FF]/g.test(e)||/[\\uDB80-\\uDBBF][\\uDC00-\\uDFFF]/g.test(e):!!t&&/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\\'!"#$%&\\xa3\\xa2\\xa5\\xa7\\u20ac()*+,\\-.\\/:;<=>?@\\[\\]^_`{|}~\\xb1]/g.test(e)},Ju=function(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:.15,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:3,o=e.actualNode.nodeValue.trim();if(!Xo(o)||Zu(o,{emoji:!0,nonBmp:!0}))return!1;var u=Kn.get("canvasContext",(function(){return a.createElement("canvas").getContext("2d",{willReadFrequently:!0})})),i=u.canvas,l=(Kn.get("fonts")||Kn.set("fonts",{}),Kn.get("fonts"));if(l[D=t.getComputedStyle(e.parent.actualNode).getPropertyValue("font-family")]||(l[D]={occurrences:0,numLigatures:0}),(l=l[D]).occurrences>=r){if(l.numLigatures/l.occurrences==1)return!0;if(0===l.numLigatures)return!1}l.occurrences++;var s="".concat(r=30,"px ").concat(D),c=(u.font=s,o.charAt(0)),d=u.measureText(c).width,p=(d<30&&(d*=p=30/d,s="".concat(r*=p,"px ").concat(D)),i.width=d,i.height=r,u.font=s,u.textAlign="left",u.textBaseline="top",u.fillText(c,0,0),new Uint32Array(u.getImageData(0,0,d,r).data.buffer));if(!p.some((function(e){return e})))return l.numLigatures++,!0;u.clearRect(0,0,d,r),u.fillText(o,0,0);var f=new Uint32Array(u.getImageData(0,0,d,r).data.buffer),D=p.reduce((function(e,t,n){return 0===t&&0===f[n]||0!==t&&0!==f[n]?e:++e}),0);i=o.split("").reduce((function(e,t){return e+u.measureText(t).width}),0),s=u.measureText(o).width;return n<=D/p.length&&n<=1-s/i&&(l.numLigatures++,!0)};function Qu(e){var t,n,a,r,u,i=function(e,t){return t.startNode||(t=G({startNode:e},t)),1===e.props.nodeType&&t.inLabelledByContext&&void 0===t.includeHidden&&(t=G({includeHidden:!Mu(e)},t)),t}(e,1<arguments.length&&void 0!==arguments[1]?arguments[1]:{});return function(e,t){if(e&&1===e.props.nodeType&&!t.includeHidden)return!Mu(e)}(e,i)||(t=e,n=(u=i).ignoreIconLigature,a=u.pixelThreshold,r=null!=(r=u.occurrenceThreshold)?r:u.occuranceThreshold,3===t.props.nodeType&&n&&Ju(t,a,r))?"":(u=[Ro,_o,Ou,Ku,ku,ei,Eu].reduce((function(t,n){return""!==(t=i.startNode===e?Xo(t):t)?t:n(e,i)}),""),i.debug&&o.log(u||"{empty-value}",e.actualNode,i),u)}function ei(e){return 3!==e.props.nodeType?"":e.props.nodeValue}Qu.alreadyProcessed=function(e,t){return t.processed=t.processed||[],!!t.processed.includes(e)||(t.processed.push(e),!1)};var ti=Qu,ni=function(e,t){var n=t.emoji,a=t.nonBmp;t=t.punctuations;return n&&(e=e.replace(/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g,"")),a&&(e=(e=e.replace(/[\\u1D00-\\u1D7F\\u1D80-\\u1DBF\\u1DC0-\\u1DFF\\u20A0-\\u20CF\\u20D0-\\u20FF\\u2100-\\u214F\\u2150-\\u218F\\u2190-\\u21FF\\u2200-\\u22FF\\u2300-\\u23FF\\u2400-\\u243F\\u2440-\\u245F\\u2460-\\u24FF\\u2500-\\u257F\\u2580-\\u259F\\u25A0-\\u25FF\\u2600-\\u26FF\\u2700-\\u27BF\\uE000-\\uF8FF]/g,"")).replace(/[\\uDB80-\\uDBBF][\\uDC00-\\uDFFF]/g,"")),t?e.replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\\'!"#$%&\\xa3\\xa2\\xa5\\xa7\\u20ac()*+,\\-.\\/:;<=>?@\\[\\]^_`{|}~\\xb1]/g,""):e},ai=function(e){return e.length&&!["x","i"].includes(e)&&(e=ni(e,{emoji:!0,nonBmp:!0,punctuations:!0}),Xo(e))?1:0},ri={stateTerms:["on","off"],standaloneTerms:["name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","username","new-password","current-password","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","url","photo","one-time-code"],qualifiers:["home","work","mobile","fax","pager"],qualifiedTerms:["tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-local-prefix","tel-local-suffix","tel-extension","email","impp"],locations:["billing","shipping"]},oi=function(e){var t=void 0!==(t=(u=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).looseTyped)&&t,n=void 0===(n=u.stateTerms)?[]:n,a=void 0===(a=u.locations)?[]:a,r=void 0===(r=u.qualifiers)?[]:r,o=void 0===(o=u.standaloneTerms)?[]:o,u=void 0===(u=u.qualifiedTerms)?[]:u;return e=e.toLowerCase().trim(),!(!(n=n.concat(ri.stateTerms)).includes(e)&&""!==e)||(r=r.concat(ri.qualifiers),a=a.concat(ri.locations),o=o.concat(ri.standaloneTerms),u=u.concat(ri.qualifiedTerms),!("webauthn"===(n=e.split(/\\s+/g))[n.length-1]&&(n.pop(),0===n.length)||!t&&(8<n[0].length&&"section-"===n[0].substr(0,8)&&n.shift(),a.includes(n[0])&&n.shift(),r.includes(n[0])&&(n.shift(),o=[]),1!==n.length))&&(t=n[n.length-1],o.includes(t)||u.includes(t)))},ui=function(e){var t;return e.attr("aria-labelledby")&&(t=To(e.actualNode,"aria-labelledby").map((function(e){return(e=Xn(e))?Iu(e):""})).join(" ").trim())?t:(t=(t=e.attr("aria-label"))&&Xo(t))||null},ii=function(e,t,n){return e=Xn(e),Iu(e,t,n)},li=function(e){if(t=ui(e))return t;if(e.attr("id")){if(!e.actualNode)throw new TypeError("Cannot resolve explicit label reference for non-DOM nodes");var t,n=En(e.attr("id"));if(t=(n=sr(e.actualNode).querySelector(\'label[for="\'+n+\'"]\'))&&ii(n,!0))return t}return(t=(n=ca(e,"label"))&&Iu(n,!0))||null},si=function(e){return e=Xn(e),li(e)},ci=[{matches:[{nodeName:"textarea"},{nodeName:"input",properties:{type:["text","password","search","tel","email","url"]}}],namingMethods:"labelText"},{matches:{nodeName:"input",properties:{type:["button","submit","reset"]}},namingMethods:["valueText","titleText","buttonDefaultText"]},{matches:{nodeName:"input",properties:{type:"image"}},namingMethods:["altText","valueText","labelText","titleText","buttonDefaultText"]},{matches:"button",namingMethods:"subtreeText"},{matches:"fieldset",namingMethods:"fieldsetLegendText"},{matches:"OUTPUT",namingMethods:"subtreeText"},{matches:[{nodeName:"select"},{nodeName:"input",properties:{type:/^(?!text|password|search|tel|email|url|button|submit|reset)/}}],namingMethods:"labelText"},{matches:"summary",namingMethods:"subtreeText"},{matches:"figure",namingMethods:["figureText","titleText"]},{matches:"img",namingMethods:"altText"},{matches:"table",namingMethods:["tableCaptionText","tableSummaryText"]},{matches:["hr","br"],namingMethods:["titleText","singleSpace"]}],di=function e(t){var n=zr(t),a=[];return t.children.forEach((function(t){3===t.actualNode.nodeType?n&&a.push(t):a=a.concat(e(t))})),a},pi=Dr((function(e){var t=Xn(e),n=t.boundingClientRect,r=[],o=gr(t);return e.childNodes.forEach((function(e){var t,u,i,l;3!==e.nodeType||""===Xo(e.nodeValue)||(e=e,(t=a.createRange()).selectNodeContents(e),e=Array.from(t.getClientRects()),u=n,e.some((function(e){return!Hr(yo(e),u)})))||r.push.apply(r,H((i=o,l=[],e.forEach((function(e){e.width<1||e.height<1||(e=i.reduce((function(e,t){return e&&ro(e,t.boundingClientRect)}),e))&&l.push(e)})),l)))})),r.length?r:[n]})),fi=function(e){Kr();var t=Xn(e)._grid;return t?pi(e).map((function(e){return xo(t,e)})):[]},Di=["checkbox","img","meter","progressbar","scrollbar","radio","slider","spinbutton","textbox"],mi=function(e){var t=jd(e).vNode;if(e=o.commons.aria.getExplicitRole(t))return-1!==Di.indexOf(e);switch(t.props.nodeName){case"img":case"iframe":case"object":case"video":case"audio":case"canvas":case"svg":case"math":case"button":case"select":case"textarea":case"keygen":case"progress":case"meter":return!0;case"input":return"hidden"!==t.props.type;default:return!1}},hi=["head","title","template","script","style","iframe","object","video","audio","noscript"];function gi(e){return!hi.includes(e.props.nodeName)&&e.children.some((function(e){return 3===(e=e.props).nodeType&&e.nodeValue.trim()}))}var bi=function e(t,n,a){return gi(t)||mi(t.actualNode)||!a&&!!ui(t)||!n&&t.children.some((function(t){return 1===t.actualNode.nodeType&&e(t)}))},vi=function(e,t,n){return e=Xn(e),bi(e,t,n)};function yi(e){return!(void 0!==e.children&&!gi(e))||(1===e.props.nodeType&&mi(e)?!!o.commons.text.accessibleTextVirtual(e):e.children.some((function(e){return!e.attr("lang")&&yi(e)&&!_r(e)})))}var Fi=function(e){return-1<parseInt(e.getAttribute("tabindex"),10)&&Jo(e)&&!Zo(e)};function wi(e,t){var n=(e=jd(e)).vNode;e=e.domNode;return n?(void 0===n._isHiddenWithCSS&&(n._isHiddenWithCSS=Ei(e,t)),n._isHiddenWithCSS):Ei(e,t)}function Ei(e,n){if(9===e.nodeType)return!1;if(11===e.nodeType&&(e=e.host),["STYLE","SCRIPT"].includes(e.nodeName.toUpperCase()))return!1;var a,r=t.getComputedStyle(e,null);if(r)return"none"===r.getPropertyValue("display")||(a=["hidden","collapse"],r=r.getPropertyValue("visibility"),!(!a.includes(r)||n))||!!(a.includes(r)&&n&&a.includes(n))||!(!(n=Mr(e))||a.includes(r))&&wi(n,r);throw new Error("Style does not exist for the given element.")}var Ci=wi,xi=function(e){return null!==(e=e.doctype)&&"html"===e.name&&!e.publicId&&!e.systemId};function Ai(e){return 1===(e=jd(e).vNode).props.nodeType&&!(parseInt(e.attr("tabindex",10))<=-1)&&Jo(e)}var ki=function(e){(e instanceof un||null!=(n=t)&&n.Node&&e instanceof t.Node)&&(e=o.commons.aria.getRole(e));var n=Lo.ariaRoles[e];return(null==n?void 0:n.type)||null},Bi=["block","list-item","table","flex","grid","inline-block"];function Ti(e){return e=t.getComputedStyle(e).getPropertyValue("display"),Bi.includes(e)||"table-"===e.substr(0,6)}var Ni=function(e,t){var n,a,r,o;return!Ti(e)&&(n=function(e){for(var t=Mr(e);t&&!Ti(t);)t=Mr(t);return Xn(t)}(e),r=a="",o=0,function e(t,n){!1!==n(t.actualNode)&&t.children.forEach((function(t){return e(t,n)}))}(n,(function(t){if(2===o)return!1;if(3===t.nodeType&&(a+=t.nodeValue),1===t.nodeType){var n=(t.nodeName||"").toUpperCase();if(t===e&&(o=1),!["BR","HR"].includes(n))return!("none"===t.style.display||"hidden"===t.style.overflow||!["",null,"none"].includes(t.style.float)||!["",null,"relative"].includes(t.style.position))&&("widget"===ki(t)?(r+=t.textContent,!1):void 0);0===o?r=a="":o=2}})),a=Xo(a),null!=t&&t.noLengthCompare?0!==a.length:(r=Xo(r),a.length>r.length))},Ri=function(e){if(e=(e=e||{}).modalPercent||.75,Kn.get("isModalOpen"))return Kn.get("isModalOpen");if(ep(o._tree[0],"dialog, [role=dialog], [aria-modal=true]",zr).length)return Kn.set("isModalOpen",!0),!0;for(var n=jr(t),u=n.width*e,i=n.height*e,l=(e=(n.width-u)/2,(n.height-i)/2),s=[{x:e,y:l},{x:n.width-e,y:l},{x:n.width/2,y:n.height/2},{x:e,y:n.height-l},{x:n.width-e,y:n.height-l}].map((function(e){return Array.from(a.elementsFromPoint(e.x,e.y))})),c=0;c<s.length;c++){var d=function(e){var n=s[e].find((function(e){return e=t.getComputedStyle(e),parseInt(e.width,10)>=u&&parseInt(e.height,10)>=i&&"none"!==e.getPropertyValue("pointer-events")&&("absolute"===e.position||"fixed"===e.position)}));if(n&&s.every((function(e){return e.includes(n)})))return Kn.set("isModalOpen",!0),{v:!0}}(c);if("object"===r(d))return d.v}Kn.set("isModalOpen",void 0)};function _i(e){var t,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:2,a=e.ownerDocument.createRange(),r=(a.setStart(e,0),a.setEnd(e,e.childNodes.length),0),o=0,u=ee(a.getClientRects());try{for(u.s();!(t=u.n()).done;){var i=t.value;if(!(i.height<=n))if(r>i.top+n)r=Math.max(r,i.bottom);else{if(0!==o)return!0;r=i.bottom,o++}}}catch(e){u.e(e)}finally{u.f()}return!1}var Oi=function(e){return e instanceof t.Node},Si={},Mi={set:function(e,t){if("string"!=typeof e)throw new Error("Incomplete data: key must be a string");return t&&(Si[e]=t),Si[e]},get:function(e){return Si[e]},clear:function(){Si={}}},Pi=function(e,n){var a=e.nodeName.toUpperCase();return["IMG","CANVAS","OBJECT","IFRAME","VIDEO","SVG"].includes(a)?(Mi.set("bgColor","imgNode"),!0):((e="none"!==(a=(n=n||t.getComputedStyle(e)).getPropertyValue("background-image")))&&(n=/gradient/.test(a),Mi.set("bgColor",n?"bgGradient":"bgImage")),e)},Ii=(re(Mo={},{Colorjs:function(){return Dc},CssSelectorParser:function(){return Ii.CssSelectorParser},doT:function(){return ji.default},emojiRegexText:function(){return Xu},memoize:function(){return Li.default}}),oe(ye())),ji=oe(Zt()),Li=oe(Xt());function qi(e,t){var n=e.length,a=(Array.isArray(e[0])||(e=[e]),(t=Array.isArray(t[0])?t:t.map((function(e){return[e]})))[0].length),r=t[0].map((function(e,n){return t.map((function(e){return e[n]}))}));e=e.map((function(e){return r.map((function(t){var n=0;if(Array.isArray(e))for(var a=0;a<e.length;a++)n+=e[a]*(t[a]||0);else{var r,o=ee(t);try{for(o.s();!(r=o.n()).done;){var u=r.value;n+=e*u}}catch(t){o.e(t)}finally{o.f()}}return n}))}));return 1===n&&(e=e[0]),1===a?e.map((function(e){return e[0]})):e}function zi(e){return"string"===Vi(e)}function Vi(e){return(Object.prototype.toString.call(e).match(/^\\[object\\s+(.*?)\\]$/)[1]||"").toLowerCase()}function $i(e,t){e=+e,t=+t;var n=(Math.floor(e)+"").length;return n<t?+e.toFixed(t-n):(n=Math.pow(10,n-t),Math.round(e/n)*n)}function Hi(e){var t,n;if(e)return e=e.trim(),t=/^-?[\\d.]+$/,(e=e.match(/^([a-z]+)\\((.+?)\\)$/i))?(n=[],e[2].replace(/\\/?\\s*([-\\w.]+(?:%|deg)?)/g,(function(e,a){/%$/.test(a)?(a=new Number(a.slice(0,-1)/100)).type="<percentage>":/deg$/.test(a)?((a=new Number(+a.slice(0,-3))).type="<angle>",a.unit="deg"):t.test(a)&&((a=new Number(a)).type="<number>"),e.startsWith("/")&&((a=a instanceof Number?a:new Number(a)).alpha=!0),n.push(a)})),{name:e[1].toLowerCase(),rawName:e[1],rawArgs:e[2],args:n}):void 0}function Ui(e){return e[e.length-1]}function Gi(e,t,n){return isNaN(e)?t:isNaN(t)?e:e+(t-e)*n}function Wi(e,t,n){return(n-e)/(t-e)}function Yi(e,t,n){return Gi(t[0],t[1],Wi(e[0],e[1],n))}function Ki(e){return e.map((function(e){return e.split("|").map((function(e){var t,n=(e=e.trim()).match(/^(<[a-z]+>)\\[(-?[.\\d]+),\\s*(-?[.\\d]+)\\]?$/);return n?((t=new String(n[1])).range=[+n[2],+n[3]],t):e}))}))}function Xi(){X(this,Xi)}Po=Object.freeze({__proto__:null,isString:zi,type:Vi,toPrecision:$i,parseFunction:Hi,last:Ui,interpolate:Gi,interpolateInv:Wi,mapRange:Yi,parseCoordGrammar:Ki,multiplyMatrices:qi}),J(Xi,[{key:"add",value:function(e,t,n){if("string"!=typeof arguments[0])for(var e in arguments[0])this.add(e,arguments[0][e],t);else(Array.isArray(e)?e:[e]).forEach((function(e){this[e]=this[e]||[],t&&this[e][n?"unshift":"push"](t)}),this)}},{key:"run",value:function(e,t){this[e]=this[e]||[],this[e].forEach((function(e){e.call(t&&t.context?t.context:t,t)}))}}]);var Zi=new Xi,Ji={gamut_mapping:"lch.c",precision:5,deltaE:"76"},Qi={D50:[.3457/.3585,1,.2958/.3585],D65:[.3127/.329,1,.3583/.329]};function el(e){return Array.isArray(e)?e:Qi[e]}function tl(e,t,n,a){var r=3<arguments.length&&void 0!==a?a:{};if(e=el(e),t=el(t),!e||!t)throw new TypeError("Missing white point to convert ".concat(e?"":"from").concat(e||t?"":"/").concat(t?"":"to"));if(e===t)return n;if(r={W1:e,W2:t,XYZ:n,options:r},Zi.run("chromatic-adaptation-start",r),r.M||(r.W1===Qi.D65&&r.W2===Qi.D50?r.M=[[1.0479298208405488,.022946793341019088,-.05019222954313557],[.029627815688159344,.990434484573249,-.01707382502938514],[-.009243058152591178,.015055144896577895,.7518742899580008]]:r.W1===Qi.D50&&r.W2===Qi.D65&&(r.M=[[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]])),Zi.run("chromatic-adaptation-end",r),r.M)return qi(r.M,r.XYZ);throw new TypeError("Only Bradford CAT with white points D50 and D65 supported for now.")}function nl(e){X(this,nl),I(this,se),I(this,ie),P(this,le,{writable:!0,value:void 0}),this.id=e.id,this.name=e.name,this.base=e.base?nl.get(e.base):null,this.aliases=e.aliases,this.base&&(this.fromBase=e.fromBase,this.toBase=e.toBase);var t,n=null!=(n=e.coords)?n:this.base.coords;this.coords=n,n=null!=(n=null!=(n=e.white)?n:this.base.white)?n:"D65";for(t in this.white=el(n),this.formats=null!=(n=e.formats)?n:{},this.formats){var a=this.formats[t];a.type||(a.type="function"),a.name||(a.name=t)}!e.cssId||null!=(n=this.formats.functions)&&n.color?null==(n=this.formats)||!n.color||null!=(n=this.formats)&&n.color.id||(this.formats.color.id=this.id):(this.formats.color={id:e.cssId},Object.defineProperty(this,"cssId",{value:e.cssId})),this.referred=e.referred,z(this,le,q(this,se,rl).call(this).reverse()),Zi.run("colorspace-init-end",this)}function al(e){var t;return e.coords&&!e.coordGrammar&&(e.type||(e.type="function"),e.name||(e.name="color"),e.coordGrammar=Ki(e.coords),t=Object.entries(this.coords).map((function(t,n){(t=W(t,2))[0],t=t[1],n=e.coordGrammar[n][0],t=t.range||t.refRange;var a=n.range,r="";return"<percentage>"==n?(a=[0,100],r="%"):"<angle>"==n&&(r="deg"),{fromRange:t,toRange:a,suffix:r}})),e.serializeCoords=function(e,n){return e.map((function(e,a){var r=(a=t[a]).fromRange,o=a.toRange;a=a.suffix;return e=$i(e=r&&o?Yi(r,o,e):e,n),a&&(e+=a),e}))}),e}function rl(){for(var e=[this],t=this;t=t.base;)e.push(t);return e}ie=new WeakSet,le=new WeakMap,se=new WeakSet,J(nl,[{key:"inGamut",value:function(e){var t,n=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).epsilon,a=void 0===n?75e-6:n;return this.isPolar?(e=this.toBase(e),this.base.inGamut(e,{epsilon:a})):(t=Object.values(this.coords),e.every((function(e,n){var r;return"angle"===(n=t[n]).type||!n.range||!!Number.isNaN(e)||(r=(n=W(n.range,2))[0],n=n[1],(void 0===r||r-a<=e)&&(void 0===n||e<=n+a))})))}},{key:"cssId",get:function(){var e;return(null==(e=this.formats.functions)||null==(e=e.color)?void 0:e.id)||this.id}},{key:"isPolar",get:function(){for(var e in this.coords)if("angle"===this.coords[e].type)return!0;return!1}},{key:"getFormat",value:function(e){return"object"===r(e)||(e="default"===e?Object.values(this.formats)[0]:this.formats[e])?q(this,ie,al).call(this,e):null}},{key:"to",value:function(e,t){var n;if(1===arguments.length&&(e=(n=[e.space,e.coords])[0],t=n[1]),this!==(e=nl.get(e))){t=t.map((function(e){return Number.isNaN(e)?0:e}));for(var a,r,o=L(this,le),u=L(e,le),i=0;i<o.length&&o[i]===u[i];i++)a=o[i],r=i;if(!a)throw new Error("Cannot convert between color spaces ".concat(this," and ").concat(e,": no connection space was found"));for(var l=o.length-1;r<l;l--)t=o[l].toBase(t);for(var s=r+1;s<u.length;s++)t=u[s].fromBase(t)}return t}},{key:"from",value:function(e,t){var n;return 1===arguments.length&&(e=(n=[e.space,e.coords])[0],t=n[1]),(e=nl.get(e)).to(this,t)}},{key:"toString",value:function(){return"".concat(this.name," (").concat(this.id,")")}},{key:"getMinCoords",value:function(){var e,t=[];for(e in this.coords){var n=(n=this.coords[e]).range||n.refRange;t.push(null!=(n=null==n?void 0:n.min)?n:0)}return t}}],[{key:"all",get:function(){return H(new Set(Object.values(nl.registry)))}},{key:"register",value:function(e,t){if(1===arguments.length&&(e=(t=arguments[0]).id),t=this.get(t),this.registry[e]&&this.registry[e]!==t)throw new Error("Duplicate color space registration: \'".concat(e,"\'"));if(this.registry[e]=t,1===arguments.length&&t.aliases){var n,a=ee(t.aliases);try{for(a.s();!(n=a.n()).done;){var r=n.value;this.register(r,t)}}catch(e){a.e(e)}finally{a.f()}}return t}},{key:"get",value:function(e){if(!e||e instanceof nl)return e;if("string"===Vi(e)){var t=nl.registry[e.toLowerCase()];if(t)return t;throw new TypeError(\'No color space found with id = "\'.concat(e,\'"\'))}for(var n=arguments.length,a=new Array(1<n?n-1:0),r=1;r<n;r++)a[r-1]=arguments[r];if(a.length)return nl.get.apply(nl,a);throw new TypeError("".concat(e," is not a valid color space"))}},{key:"resolveCoord",value:function(e,t){var n,a;if(a="string"===Vi(e)?e.includes(".")?(n=(a=W(e.split("."),2))[0],a[1]):(n=void 0,e):Array.isArray(e)?(n=(a=W(e,2))[0],a[1]):(n=e.space,e.coordId),!(n=(n=nl.get(n))||t))throw new TypeError("Cannot resolve coordinate reference ".concat(e,": No color space specified and relative references are not allowed here"));if(("number"===(t=Vi(a))||"string"===t&&0<=a)&&(e=Object.entries(n.coords)[a]))return G({space:n,id:e[0],index:a},e[1]);n=nl.get(n);var r,o=a.toLowerCase(),u=0;for(r in n.coords){var i,l=n.coords[r];if(r.toLowerCase()===o||(null==(i=l.name)?void 0:i.toLowerCase())===o)return G({space:n,id:r,index:u},l);u++}throw new TypeError(\'No "\'.concat(a,\'" coordinate found in \').concat(n.name,". Its coordinates are: ").concat(Object.keys(n.coords).join(", ")))}}]);var ol,ul=nl,il=(ue(ul,"registry",{}),ue(ul,"DEFAULT_FORMAT",{type:"functions",name:"color"}),new ul({id:"xyz-d65",name:"XYZ D65",coords:{x:{name:"X"},y:{name:"Y"},z:{name:"Z"}},white:"D65",formats:{color:{ids:["xyz-d65","xyz"]}},aliases:["xyz"]}));N(ll,ul),ol=_(ll),ye=J(ll);function ll(e){var t;return X(this,ll),e.coords||(e.coords={r:{range:[0,1],name:"Red"},g:{range:[0,1],name:"Green"},b:{range:[0,1],name:"Blue"}}),e.base||(e.base=il),e.toXYZ_M&&e.fromXYZ_M&&(null==e.toBase&&(e.toBase=function(n){return n=qi(e.toXYZ_M,n),t.white!==t.base.white?tl(t.white,t.base.white,n):n}),null==e.fromBase)&&(e.fromBase=function(n){return n=tl(t.base.white,t.white,n),qi(e.fromXYZ_M,n)}),null==e.referred&&(e.referred="display"),t=ol.call(this,e)}function sl(e){var t={str:null==(n=String(e))?void 0:n.trim()};if(Zi.run("parse-start",t),t.color)return t.color;if(t.parsed=Hi(t.str),t.parsed){var n=function(){var e=t.parsed.name;if("color"===e){var n,a=t.parsed.args.shift(),o=0<t.parsed.rawArgs.indexOf("/")?t.parsed.args.pop():1,u=ee(ul.all);try{for(u.s();!(n=u.n()).done;){var i,l=n.value,s=l.getFormat("color");if(s&&(a===s.id||null!=(i=s.ids)&&i.includes(a))){var c=function(){var e=Object.keys(l.coords).length,n=Array(e).fill(0);return n.forEach((function(e,a){return n[a]=t.parsed.args[a]||0})),{v:{v:{spaceId:l.id,coords:n,alpha:o}}}}();if("object"===r(c))return c.v}}}catch(n){u.e(n)}finally{u.f()}var d,p="";throw a in ul.registry&&(d=null==(d=ul.registry[a].formats)||null==(d=d.functions)||null==(d=d.color)?void 0:d.id)&&(p="Did you mean color(".concat(d,")?")),new TypeError("Cannot parse color(".concat(a,"). ")+(p||"Missing a plugin?"))}var f,D=ee(ul.all);try{for(D.s();!(f=D.n()).done;){var m=function(){var n,a,r=f.value,o=r.getFormat(e);if(o&&"function"===o.type)return n=1,(o.lastAlpha||Ui(t.parsed.args).alpha)&&(n=t.parsed.args.pop()),a=t.parsed.args,o.coordGrammar&&Object.entries(r.coords).forEach((function(t,n){var r=(t=W(t,2))[0],u=(t=t[1],o.coordGrammar[n]),i=null==(l=a[n])?void 0:l.type;if(!(u=u.find((function(e){return e==i}))))throw l=t.name||r,new TypeError("".concat(i," not allowed for ").concat(l," in ").concat(e,"()"));r=u.range;var l=t.range||t.refRange;(r="<percentage>"===i?r||[0,1]:r)&&l&&(a[n]=Yi(r,l,a[n]))})),{v:{v:{spaceId:r.id,coords:a,alpha:n}}}}();if("object"===r(m))return m.v}}catch(n){D.e(n)}finally{D.f()}}();if("object"===r(n))return n.v}else{var a,o=ee(ul.all);try{for(o.s();!(a=o.n()).done;){var u,i=a.value;for(u in i.formats){var l=i.formats[u];if("custom"===l.type&&(!l.test||l.test(t.str))){var s=l.parse(t.str);if(s)return null==s.alpha&&(s.alpha=1),s}}}}catch(e){o.e(e)}finally{o.f()}}throw new TypeError("Could not parse ".concat(e," as a color. Missing a plugin?"))}function cl(e){var t;if(e)return(t=(e=zi(e)?sl(e):e).space||e.spaceId)instanceof ul||(e.space=ul.get(t)),void 0===e.alpha&&(e.alpha=1),e;throw new TypeError("Empty color reference")}function dl(e,t){return(t=ul.get(t)).from(e)}function pl(e,t){var n=(t=ul.resolveCoord(t,e.space)).space;t=t.index;return dl(e,n)[t]}function fl(e,t,n){return t=ul.get(t),e.coords=t.to(e.space,n),e}function Dl(e,t,n){if(e=cl(e),2===arguments.length&&"object"===Vi(t)){var a,r=t;for(a in r)Dl(e,a,r[a])}else{"function"==typeof n&&(n=n(pl(e,t)));var o=(u=ul.resolveCoord(t,e.space)).space,u=u.index,i=dl(e,o);i[u]=n,fl(e,o,i)}return e}Xt=new ul({id:"xyz-d50",name:"XYZ D50",white:"D50",base:il,fromBase:function(e){return tl(il.white,"D50",e)},toBase:function(e){return tl("D50",il.white,e)},formats:{color:{}}});var ml=24389/27,hl=Qi.D50,gl=new ul({id:"lab",name:"Lab",coords:{l:{refRange:[0,100],name:"L"},a:{refRange:[-125,125]},b:{refRange:[-125,125]}},white:hl,base:Xt,fromBase:function(e){return[116*(e=e.map((function(e,t){return e/hl[t]})).map((function(e){return 216/24389<e?Math.cbrt(e):(ml*e+16)/116})))[1]-16,500*(e[0]-e[1]),200*(e[1]-e[2])]},toBase:function(e){var t=[];return t[1]=(e[0]+16)/116,t[0]=e[1]/500+t[1],t[2]=t[1]-e[2]/200,[24/116<t[0]?Math.pow(t[0],3):(116*t[0]-16)/ml,8<e[0]?Math.pow((e[0]+16)/116,3):e[0]/ml,24/116<t[2]?Math.pow(t[2],3):(116*t[2]-16)/ml].map((function(e,t){return e*hl[t]}))},formats:{lab:{coords:["<number> | <percentage>","<number>","<number>"]}}});function bl(e){return(e%360+360)%360}var vl=new ul({id:"lch",name:"LCH",coords:{l:{refRange:[0,100],name:"Lightness"},c:{refRange:[0,150],name:"Chroma"},h:{refRange:[0,360],type:"angle",name:"Hue"}},base:gl,fromBase:function(e){var t=(e=W(e,3))[0],n=e[1],a=(e=e[2],Math.abs(n)<.02&&Math.abs(e)<.02?NaN:180*Math.atan2(e,n)/Math.PI);return[t,Math.sqrt(Math.pow(n,2)+Math.pow(e,2)),bl(a)]},toBase:function(e){var t=(e=W(e,3))[0],n=e[1];e=e[2];return n<0&&(n=0),isNaN(e)&&(e=0),[t,n*Math.cos(e*Math.PI/180),n*Math.sin(e*Math.PI/180)]},formats:{lch:{coords:["<number> | <percentage>","<number>","<number> | <angle>"]}}}),yl=Math.pow(25,7),Fl=Math.PI,wl=180/Fl,El=Fl/180;function Cl(e,t){var n=void 0===(n=(r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).kL)?1:n,a=void 0===(a=r.kC)?1:a,r=void 0===(r=r.kH)?1:r,o=(i=W(gl.from(e),3))[0],u=i[1],i=i[2],l=vl.from(gl,[o,u,i])[1],s=(d=W(gl.from(t),3))[0],c=d[1],d=d[2],p=(l=((l=l<0?0:l)+(p=(p=vl.from(gl,[s,c,d])[1])<0?0:p))/2,Math.pow(l,7)),f=(p=(1+(l=.5*(1-Math.sqrt(p/(p+yl)))))*u,u=(1+l)*c,l=Math.sqrt(Math.pow(p,2)+Math.pow(i,2)),c=Math.sqrt(Math.pow(u,2)+Math.pow(d,2)),i=0==p&&0===i?0:Math.atan2(i,p),p=0==u&&0===d?0:Math.atan2(d,u),d=(i<0&&(i+=2*Fl),p<0&&(p+=2*Fl),s-o),u=c-l,(p*=wl)-(i*=wl)),D=(i=i+p,p=Math.abs(f),f=(l*c==0?D=0:p<=180?D=f:180<f?D=f-360:f<-180?D=360+f:console.log("the unthinkable has happened"),2*Math.sqrt(c*l)*Math.sin(D*El/2)),(o+s)/2);o=(l+c)/2,s=Math.pow(o,7),l=l*c==0?i:p<=180?i/2:i<360?(i+360)/2:(i-360)/2,p=1+.015*(c=Math.pow(D-50,2))/Math.sqrt(20+c),i=1+.045*o,D=1,c=1+.015*o*((D-=.17*Math.cos((l-30)*El))+.24*Math.cos(2*l*El)+.32*Math.cos((3*l+6)*El)-.2*Math.cos((4*l-63)*El)),o=30*Math.exp(-1*Math.pow((l-275)/25,2)),D=2*Math.sqrt(s/(s+yl)),l=-1*Math.sin(2*o*El)*D,s=Math.pow(d/(n*p),2),s=(s+=Math.pow(u/(a*i),2))+Math.pow(f/(r*c),2)+u/(a*i)*l*(f/(r*c));return Math.sqrt(s)}var xl=75e-6;function Al(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:e.space,n=void 0===(n=(2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).epsilon)?xl:n,a=(e=cl(e),t=ul.get(t),e.coords);return t!==e.space&&(a=t.from(e)),t.inGamut(a,{epsilon:n})}function kl(e){return{space:e.space,coords:e.coords.slice(),alpha:e.alpha}}function Bl(e){var t=void 0===(t=(r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).method)?Ji.gamut_mapping:t,n=void 0===(r=r.space)?e.space:r;if(zi(arguments[1])&&(n=arguments[1]),!Al(e,n=ul.get(n),{epsilon:0})){var a,r=Tl(e,n);if("clip"!==t&&!Al(e,n)){var o=Bl(kl(r),{method:"clip",space:n});if(2<Cl(e,o)){for(var u=ul.resolveCoord(t),i=u.space,l=u.id,s=Tl(r,i),c=(u.range||u.refRange)[0],d=pl(s,l);.01<d-c;)Cl(s,Bl(kl(s),{space:n,method:"clip"}))-2<.01?c=pl(s,l):d=pl(s,l),Dl(s,l,(c+d)/2);r=Tl(s,n)}else r=o}"clip"!==t&&Al(r,n,{epsilon:0})||(a=Object.values(n.coords).map((function(e){return e.range||[]})),r.coords=r.coords.map((function(e,t){var n=(t=W(a[t],2))[0];t=t[1];return void 0!==n&&(e=Math.max(n,e)),void 0!==t?Math.min(e,t):e}))),n!==e.space&&(r=Tl(r,e.space)),e.coords=r.coords}return e}function Tl(e,t){var n=(2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).inGamut,a=(e=cl(e),(t=ul.get(t)).from(e));a={space:t,coords:a,alpha:e.alpha};return n?Bl(a):a}function Nl(e){var t=void 0===(n=(r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).precision)?Ji.precision:n,n=void 0===(n=r.format)?"default":n,a=void 0===(a=r.inGamut)||a,r=$(r,f),o=n,u=(n=null!=(u=null!=(u=(e=cl(e)).space.getFormat(n))?u:e.space.getFormat("default"))?u:ul.DEFAULT_FORMAT,a=a||n.toGamut,(u=e.coords).map((function(e){return e||0})));if(a&&!Al(e)&&(u=Bl(kl(e),!0===a?void 0:a).coords),"custom"===n.type){if(r.precision=t,!n.serialize)throw new TypeError("format ".concat(o," can only be used to parse colors, not for serialization"));i=n.serialize(u,e.alpha,r)}else{a=n.name||"color",o=(n.serializeCoords?u=n.serializeCoords(u,t):null!==t&&(u=u.map((function(e){return $i(e,t)}))),H(u)),r=("color"===a&&(u=n.id||(null==(r=n.ids)?void 0:r[0])||e.space.id,o.unshift(u)),e.alpha),u=(null!==t&&(r=$i(r,t)),e.alpha<1&&!n.noAlpha?"".concat(n.commas?",":" /"," ").concat(r):"");var i="".concat(a,"(").concat(o.join(n.commas?", ":" ")).concat(u,")")}return i}Tl.returns=Bl.returns="color";var Rl=new ye({id:"rec2020-linear",name:"Linear REC.2020",white:"D65",toXYZ_M:[[.6369580483012914,.14461690358620832,.1688809751641721],[.2627002120112671,.6779980715188708,.05930171646986196],[0,.028072693049087428,1.060985057710791]],fromXYZ_M:[[1.716651187971268,-.355670783776392,-.25336628137366],[-.666684351832489,1.616481236634939,.0157685458139111],[.017639857445311,-.042770613257809,.942103121235474]],formats:{color:{}}}),_l=1.09929682680944,Ol=.018053968510807,Sl=new ye({id:"rec2020",name:"REC.2020",base:Rl,toBase:function(e){return e.map((function(e){return e<4.5*Ol?e/4.5:Math.pow((e+_l-1)/_l,1/.45)}))},fromBase:function(e){return e.map((function(e){return Ol<=e?_l*Math.pow(e,.45)-(_l-1):4.5*e}))},formats:{color:{}}}),Ml=new ye({id:"p3-linear",name:"Linear P3",white:"D65",toXYZ_M:[[.4865709486482162,.26566769316909306,.1982172852343625],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],fromXYZ_M:[[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]]}),Pl=new ye({id:"srgb-linear",name:"Linear sRGB",white:"D65",toXYZ_M:[[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],fromXYZ_M:[[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],formats:{color:{}}}),Il={aliceblue:[240/255,248/255,1],antiquewhite:[250/255,235/255,215/255],aqua:[0,1,1],aquamarine:[127/255,1,212/255],azure:[240/255,1,1],beige:[245/255,245/255,220/255],bisque:[1,228/255,196/255],black:[0,0,0],blanchedalmond:[1,235/255,205/255],blue:[0,0,1],blueviolet:[138/255,43/255,226/255],brown:[165/255,42/255,42/255],burlywood:[222/255,184/255,135/255],cadetblue:[95/255,158/255,160/255],chartreuse:[127/255,1,0],chocolate:[210/255,105/255,30/255],coral:[1,127/255,80/255],cornflowerblue:[100/255,149/255,237/255],cornsilk:[1,248/255,220/255],crimson:[220/255,20/255,60/255],cyan:[0,1,1],darkblue:[0,0,139/255],darkcyan:[0,139/255,139/255],darkgoldenrod:[184/255,134/255,11/255],darkgray:[169/255,169/255,169/255],darkgreen:[0,100/255,0],darkgrey:[169/255,169/255,169/255],darkkhaki:[189/255,183/255,107/255],darkmagenta:[139/255,0,139/255],darkolivegreen:[85/255,107/255,47/255],darkorange:[1,140/255,0],darkorchid:[.6,50/255,.8],darkred:[139/255,0,0],darksalmon:[233/255,150/255,122/255],darkseagreen:[143/255,188/255,143/255],darkslateblue:[72/255,61/255,139/255],darkslategray:[47/255,79/255,79/255],darkslategrey:[47/255,79/255,79/255],darkturquoise:[0,206/255,209/255],darkviolet:[148/255,0,211/255],deeppink:[1,20/255,147/255],deepskyblue:[0,191/255,1],dimgray:[105/255,105/255,105/255],dimgrey:[105/255,105/255,105/255],dodgerblue:[30/255,144/255,1],firebrick:[178/255,34/255,34/255],floralwhite:[1,250/255,240/255],forestgreen:[34/255,139/255,34/255],fuchsia:[1,0,1],gainsboro:[220/255,220/255,220/255],ghostwhite:[248/255,248/255,1],gold:[1,215/255,0],goldenrod:[218/255,165/255,32/255],gray:[128/255,128/255,128/255],green:[0,128/255,0],greenyellow:[173/255,1,47/255],grey:[128/255,128/255,128/255],honeydew:[240/255,1,240/255],hotpink:[1,105/255,180/255],indianred:[205/255,92/255,92/255],indigo:[75/255,0,130/255],ivory:[1,1,240/255],khaki:[240/255,230/255,140/255],lavender:[230/255,230/255,250/255],lavenderblush:[1,240/255,245/255],lawngreen:[124/255,252/255,0],lemonchiffon:[1,250/255,205/255],lightblue:[173/255,216/255,230/255],lightcoral:[240/255,128/255,128/255],lightcyan:[224/255,1,1],lightgoldenrodyellow:[250/255,250/255,210/255],lightgray:[211/255,211/255,211/255],lightgreen:[144/255,238/255,144/255],lightgrey:[211/255,211/255,211/255],lightpink:[1,182/255,193/255],lightsalmon:[1,160/255,122/255],lightseagreen:[32/255,178/255,170/255],lightskyblue:[135/255,206/255,250/255],lightslategray:[119/255,136/255,.6],lightslategrey:[119/255,136/255,.6],lightsteelblue:[176/255,196/255,222/255],lightyellow:[1,1,224/255],lime:[0,1,0],limegreen:[50/255,205/255,50/255],linen:[250/255,240/255,230/255],magenta:[1,0,1],maroon:[128/255,0,0],mediumaquamarine:[.4,205/255,170/255],mediumblue:[0,0,205/255],mediumorchid:[186/255,85/255,211/255],mediumpurple:[147/255,112/255,219/255],mediumseagreen:[60/255,179/255,113/255],mediumslateblue:[123/255,104/255,238/255],mediumspringgreen:[0,250/255,154/255],mediumturquoise:[72/255,209/255,.8],mediumvioletred:[199/255,21/255,133/255],midnightblue:[25/255,25/255,112/255],mintcream:[245/255,1,250/255],mistyrose:[1,228/255,225/255],moccasin:[1,228/255,181/255],navajowhite:[1,222/255,173/255],navy:[0,0,128/255],oldlace:[253/255,245/255,230/255],olive:[128/255,128/255,0],olivedrab:[107/255,142/255,35/255],orange:[1,165/255,0],orangered:[1,69/255,0],orchid:[218/255,112/255,214/255],palegoldenrod:[238/255,232/255,170/255],palegreen:[152/255,251/255,152/255],paleturquoise:[175/255,238/255,238/255],palevioletred:[219/255,112/255,147/255],papayawhip:[1,239/255,213/255],peachpuff:[1,218/255,185/255],peru:[205/255,133/255,63/255],pink:[1,192/255,203/255],plum:[221/255,160/255,221/255],powderblue:[176/255,224/255,230/255],purple:[128/255,0,128/255],rebeccapurple:[.4,.2,.6],red:[1,0,0],rosybrown:[188/255,143/255,143/255],royalblue:[65/255,105/255,225/255],saddlebrown:[139/255,69/255,19/255],salmon:[250/255,128/255,114/255],sandybrown:[244/255,164/255,96/255],seagreen:[46/255,139/255,87/255],seashell:[1,245/255,238/255],sienna:[160/255,82/255,45/255],silver:[192/255,192/255,192/255],skyblue:[135/255,206/255,235/255],slateblue:[106/255,90/255,205/255],slategray:[112/255,128/255,144/255],slategrey:[112/255,128/255,144/255],snow:[1,250/255,250/255],springgreen:[0,1,127/255],steelblue:[70/255,130/255,180/255],tan:[210/255,180/255,140/255],teal:[0,128/255,128/255],thistle:[216/255,191/255,216/255],tomato:[1,99/255,71/255],turquoise:[64/255,224/255,208/255],violet:[238/255,130/255,238/255],wheat:[245/255,222/255,179/255],white:[1,1,1],whitesmoke:[245/255,245/255,245/255],yellow:[1,1,0],yellowgreen:[154/255,205/255,50/255]},jl=new ye({id:"srgb",name:"sRGB",base:Pl,fromBase:function(e){return e.map((function(e){var t=e<0?-1:1,n=e*t;return.0031308<n?t*(1.055*Math.pow(n,1/2.4)-.055):12.92*e}))},toBase:function(e){return e.map((function(e){var t=e<0?-1:1,n=e*t;return n<.04045?e/12.92:t*Math.pow((.055+n)/1.055,2.4)}))},formats:{rgb:{coords:jl=Array(3).fill("<percentage> | <number>[0, 255]")},rgb_number:{name:"rgb",commas:!0,coords:Ll=Array(3).fill("<number>[0, 255]"),noAlpha:!0},color:{},rgba:{coords:jl,commas:!0,lastAlpha:!0},rgba_number:{name:"rgba",commas:!0,coords:Ll},hex:{type:"custom",toGamut:!0,test:function(e){return/^#([a-f0-9]{3,4}){1,2}$/i.test(e)},parse:function(e){e.length<=5&&(e=e.replace(/[a-f0-9]/gi,"$&$&"));var t=[];return e.replace(/[a-f0-9]{2}/gi,(function(e){t.push(parseInt(e,16)/255)})),{spaceId:"srgb",coords:t.slice(0,3),alpha:t.slice(3)[0]}},serialize:function(e,t){var n=void 0===(n=(2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).collapse)||n,a=(t<1&&e.push(t),e=e.map((function(e){return Math.round(255*e)})),n&&e.every((function(e){return e%17==0})));return"#"+e.map((function(e){return a?(e/17).toString(16):e.toString(16).padStart(2,"0")})).join("")}},keyword:{type:"custom",test:function(e){return/^[a-z]+$/i.test(e)},parse:function(e){var t={spaceId:"srgb",coords:null,alpha:1};if("transparent"===(e=e.toLowerCase())?(t.coords=Il.black,t.alpha=0):t.coords=Il[e],t.coords)return t}}}}),Ll=new ye({id:"p3",name:"P3",base:Ml,fromBase:jl.fromBase,toBase:jl.toBase,formats:{color:{id:"display-p3"}}});if(Ji.display_space=jl,"undefined"!=typeof CSS&&CSS.supports)for(var ql=0,zl=[gl,Sl,Ll];ql<zl.length;ql++){var Vl=zl[ql],$l=Vl.getMinCoords();$l=Nl({space:Vl,coords:$l,alpha:1});if(CSS.supports("color",$l)){Ji.display_space=Vl;break}}function Hl(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"lab",a=(n=ul.get(n)).from(e),r=n.from(t);return Math.sqrt(a.reduce((function(e,t,n){return n=r[n],isNaN(t)||isNaN(n)?e:e+Math.pow(n-t,2)}),0))}function Ul(e){return pl(e,[il,"y"])}function Gl(e,t){Dl(e,[il,"y"],t)}var Wl=Object.freeze({__proto__:null,getLuminance:Ul,setLuminance:Gl,register:function(e){Object.defineProperty(e.prototype,"luminance",{get:function(){return Ul(this)},set:function(e){Gl(this,e)}})}});function Yl(e){return.022<=e?e:e+Math.pow(.022-e,1.414)}function Kl(e){var t=e<0?-1:1;e=Math.abs(e);return t*Math.pow(e,2.4)}var Xl=24389/27,Zl=Qi.D65,Jl=new ul({id:"lab-d65",name:"Lab D65",coords:{l:{refRange:[0,100],name:"L"},a:{refRange:[-125,125]},b:{refRange:[-125,125]}},white:Zl,base:il,fromBase:function(e){return[116*(e=e.map((function(e,t){return e/Zl[t]})).map((function(e){return 216/24389<e?Math.cbrt(e):(Xl*e+16)/116})))[1]-16,500*(e[0]-e[1]),200*(e[1]-e[2])]},toBase:function(e){var t=[];return t[1]=(e[0]+16)/116,t[0]=e[1]/500+t[1],t[2]=t[1]-e[2]/200,[24/116<t[0]?Math.pow(t[0],3):(116*t[0]-16)/Xl,8<e[0]?Math.pow((e[0]+16)/116,3):e[0]/Xl,24/116<t[2]?Math.pow(t[2],3):(116*t[2]-16)/Xl].map((function(e,t){return e*Zl[t]}))},formats:{"lab-d65":{coords:["<number> | <percentage>","<number>","<number>"]}}}),Ql=.5*Math.pow(5,.5)+.5,es=Object.freeze({__proto__:null,contrastWCAG21:function(e,t){var n;return e=cl(e),t=cl(t),(e=Math.max(Ul(e),0))<(t=Math.max(Ul(t),0))&&(e=(n=[t,e])[0],t=n[1]),(e+.05)/(t+.05)},contrastAPCA:function(e,t){t=cl(t),e=cl(e);var n=(t=W((t=Tl(t,"srgb")).coords,3))[0],a=t[1],r=(t=t[2],.2126729*Kl(n)+.7151522*Kl(a)+.072175*Kl(t));n=(e=W((e=Tl(e,"srgb")).coords,3))[0],a=e[1],t=e[2],e=.2126729*Kl(n)+.7151522*Kl(a)+.072175*Kl(t),t=(n=Yl(r))<(a=Yl(e)),r=Math.abs(a-n)<5e-4?0:t?1.14*(Math.pow(a,.56)-Math.pow(n,.57)):1.14*(Math.pow(a,.65)-Math.pow(n,.62));return 100*(Math.abs(r)<.1?0:0<r?r-.027:r+.027)},contrastMichelson:function(e,t){e=cl(e),t=cl(t);var n=((e=Math.max(Ul(e),0))<(t=Math.max(Ul(t),0))&&(e=(n=[t,e])[0],t=n[1]),e+t);return 0===n?0:(e-t)/n},contrastWeber:function(e,t){var n;return e=cl(e),t=cl(t),(e=Math.max(Ul(e),0))<(t=Math.max(Ul(t),0))&&(e=(n=[t,e])[0],t=n[1]),0===t?5e4:(e-t)/t},contrastLstar:function(e,t){return e=cl(e),t=cl(t),e=pl(e,[gl,"l"]),t=pl(t,[gl,"l"]),Math.abs(e-t)},contrastDeltaPhi:function(e,t){return e=cl(e),t=cl(t),e=pl(e,[Jl,"l"]),t=pl(t,[Jl,"l"]),e=Math.abs(Math.pow(e,Ql)-Math.pow(t,Ql)),(t=Math.pow(e,1/Ql)*Math.SQRT2-40)<7.5?0:t}});function ts(e){var t=(e=W(dl(e,il),3))[0],n=e[1];return[4*t/(e=t+15*n+3*e[2]),9*n/e]}function ns(e){var t=(e=W(dl(e,il),3))[0],n=e[1];return[t/(e=t+n+e[2]),n/e]}var as=Object.freeze({__proto__:null,uv:ts,xy:ns,register:function(e){Object.defineProperty(e.prototype,"uv",{get:function(){return ts(this)}}),Object.defineProperty(e.prototype,"xy",{get:function(){return ns(this)}})}}),rs=Math.PI/180,os=new ul({id:"xyz-abs-d65",name:"Absolute XYZ D65",coords:{x:{refRange:[0,9504.7],name:"Xa"},y:{refRange:[0,1e4],name:"Ya"},z:{refRange:[0,10888.3],name:"Za"}},base:il,fromBase:function(e){return e.map((function(e){return Math.max(203*e,0)}))},toBase:function(e){return e.map((function(e){return Math.max(e/203,0)}))}}),us=2610/Math.pow(2,14),is=Math.pow(2,14)/2610,ls=3424/Math.pow(2,12),ss=2413/Math.pow(2,7),cs=2392/Math.pow(2,7),ds=1.7*2523/Math.pow(2,5),ps=Math.pow(2,5)/(1.7*2523),fs=16295499532821565e-27,Ds=[[.41478972,.579999,.014648],[-.20151,1.120649,.0531008],[-.0166008,.2648,.6684799]],ms=[[1.9242264357876067,-1.0047923125953657,.037651404030618],[.35031676209499907,.7264811939316552,-.06538442294808501],[-.09098281098284752,-.3127282905230739,1.5227665613052603]],hs=[[.5,.5,0],[3.524,-4.066708,.542708],[.199076,1.096799,-1.295875]],gs=[[1,.1386050432715393,.05804731615611886],[.9999999999999999,-.1386050432715393,-.05804731615611886],[.9999999999999998,-.09601924202631895,-.8118918960560388]],bs=new ul({id:"jzazbz",name:"Jzazbz",coords:{jz:{refRange:[0,1],name:"Jz"},az:{refRange:[-.5,.5]},bz:{refRange:[-.5,.5]}},base:os,fromBase:function(e){var t=(e=W(e,3))[0],n=e[1];e=e[2],n=qi(Ds,[1.15*t-(1.15-1)*e,.66*n-(.66-1)*t,e]).map((function(e){var t=ls+ss*Math.pow(e/1e4,us);e=1+cs*Math.pow(e/1e4,us);return Math.pow(t/e,ds)})),e=(t=W(qi(hs,n),3))[0],n=t[1],t=t[2];return[(1-.56)*e/(1+-.56*e)-fs,n,t]},toBase:function(e){var t=(e=W(e,3))[0],n=e[1];e=e[2],t=qi(gs,[(t+fs)/(1-.56- -.56*(t+fs)),n,e]).map((function(e){var t=ls-Math.pow(e,ps);e=cs*Math.pow(e,ps)-ss;return 1e4*Math.pow(t/e,is)})),e=(n=W(qi(ms,t),3))[0],t=n[1];return[e=(e+(1.15-1)*(n=n[2]))/1.15,(t+(.66-1)*e)/.66,n]},formats:{color:{}}}),vs=new ul({id:"jzczhz",name:"JzCzHz",coords:{jz:{refRange:[0,1],name:"Jz"},cz:{refRange:[0,1],name:"Chroma"},hz:{refRange:[0,360],type:"angle",name:"Hue"}},base:bs,fromBase:function(e){var t=(e=W(e,3))[0],n=e[1],a=(e=e[2],Math.abs(n)<2e-4&&Math.abs(e)<2e-4?NaN:180*Math.atan2(e,n)/Math.PI);return[t,Math.sqrt(Math.pow(n,2)+Math.pow(e,2)),bl(a)]},toBase:function(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]},formats:{color:{}}}),ys=2610/16384,Fs=[[.3592,.6976,-.0358],[-.1922,1.1004,.0755],[.007,.0749,.8434]],ws=[[.5,.5,0],[6610/4096,-13613/4096,7003/4096],[17933/4096,-17390/4096,-543/4096]],Es=[[.9999888965628402,.008605050147287059,.11103437159861648],[1.00001110343716,-.008605050147287059,-.11103437159861648],[1.0000320633910054,.56004913547279,-.3206339100541203]],Cs=[[2.0701800566956137,-1.326456876103021,.20661600684785517],[.3649882500326575,.6804673628522352,-.04542175307585323],[-.04959554223893211,-.04942116118675749,1.1879959417328034]],xs=new ul({id:"ictcp",name:"ICTCP",coords:{i:{refRange:[0,1],name:"I"},ct:{refRange:[-.5,.5],name:"CT"},cp:{refRange:[-.5,.5],name:"CP"}},base:os,fromBase:function(e){var t=e=qi(Fs,e);return t=e.map((function(e){var t=.8359375+2413/128*Math.pow(e/1e4,ys);e=1+18.6875*Math.pow(e/1e4,ys);return Math.pow(t/e,2523/32)})),qi(ws,t)},toBase:function(e){return e=qi(Es,e).map((function(e){var t=Math.max(Math.pow(e,32/2523)-.8359375,0);e=2413/128-18.6875*Math.pow(e,32/2523);return 1e4*Math.pow(t/e,16384/2610)})),qi(Cs,e)},formats:{color:{}}}),As=[[.8190224432164319,.3619062562801221,-.12887378261216414],[.0329836671980271,.9292868468965546,.03614466816999844],[.048177199566046255,.26423952494422764,.6335478258136937]],ks=[[1.2268798733741557,-.5578149965554813,.28139105017721583],[-.04057576262431372,1.1122868293970594,-.07171106666151701],[-.07637294974672142,-.4214933239627914,1.5869240244272418]],Bs=[[.2104542553,.793617785,-.0040720468],[1.9779984951,-2.428592205,.4505937099],[.0259040371,.7827717662,-.808675766]],Ts=[[.9999999984505198,.39633779217376786,.2158037580607588],[1.0000000088817609,-.10556134232365635,-.06385417477170591],[1.0000000546724108,-.08948418209496575,-1.2914855378640917]],Ns=new ul({id:"oklab",name:"OKLab",coords:{l:{refRange:[0,1],name:"L"},a:{refRange:[-.4,.4]},b:{refRange:[-.4,.4]}},white:"D65",base:il,fromBase:function(e){return e=qi(As,e).map((function(e){return Math.cbrt(e)})),qi(Bs,e)},toBase:function(e){return e=qi(Ts,e).map((function(e){return Math.pow(e,3)})),qi(ks,e)},formats:{oklab:{coords:["<number> | <percentage>","<number>","<number>"]}}}),Rs=Object.freeze({__proto__:null,deltaE76:function(e,t){return Hl(e,t,"lab")},deltaECMC:function(e,t){var n=void 0===(n=(a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).l)?2:n,a=void 0===(a=a.c)?1:a,r=(u=W(gl.from(e),3))[0],o=u[1],u=u[2],i=(l=W(vl.from(gl,[r,o,u]),3))[1],l=l[2],s=(d=W(gl.from(t),3))[0],c=d[1],d=d[2],p=vl.from(gl,[s,c,d])[1];s=r-s,p=(i=i<0?0:i)-(p=p<0?0:p),u-=d,d=Math.pow(o-c,2)+Math.pow(u,2)-Math.pow(p,2),o=.511,16<=r&&(o=.040975*r/(1+.01765*r)),c=.0638*i/(1+.0131*i)+.638,u=164<=(l=Number.isNaN(l)?0:l)&&l<=345?.56+Math.abs(.2*Math.cos((l+168)*rs)):.36+Math.abs(.4*Math.cos((l+35)*rs)),r=Math.pow(i,4),i=c*((l=Math.sqrt(r/(r+1900)))*u+1-l),r=Math.pow(s/(n*o),2),r=(r+=Math.pow(p/(a*c),2))+d/Math.pow(i,2);return Math.sqrt(r)},deltaE2000:Cl,deltaEJz:function(e,t){var n=(e=W(vs.from(e),3))[0],a=e[1],r=(e=e[2],(t=W(vs.from(t),3))[0]),o=t[1];t=t[2],n-=r,r=a-o,Number.isNaN(e)&&Number.isNaN(t)?t=e=0:Number.isNaN(e)?e=t:Number.isNaN(t)&&(t=e),e-=t,t=2*Math.sqrt(a*o)*Math.sin(e/2*(Math.PI/180));return Math.sqrt(Math.pow(n,2)+Math.pow(r,2)+Math.pow(t,2))},deltaEITP:function(e,t){var n=(e=W(xs.from(e),3))[0],a=e[1],r=(e=e[2],(t=W(xs.from(t),3))[0]),o=t[1];t=t[2];return 720*Math.sqrt(Math.pow(n-r,2)+.25*Math.pow(a-o,2)+Math.pow(e-t,2))},deltaEOK:function(e,t){var n=(e=W(Ns.from(e),3))[0],a=e[1],r=(e=e[2],(t=W(Ns.from(t),3))[0]);a-=t[1],e-=t[2];return Math.sqrt(Math.pow(n-r,2)+Math.pow(a,2)+Math.pow(e,2))}});function _s(e,t){var n,a,r=(a=a=zi(a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{})?{method:a}:a).method,o=void 0===r?Ji.deltaE:r,u=$(a,h);for(n in e=cl(e),t=cl(t),Rs)if("deltae"+o.toLowerCase()===n.toLowerCase())return Rs[n](e,t,u);throw new TypeError("Unknown deltaE method: ".concat(o))}var Os=Object.freeze({__proto__:null,lighten:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:.25;return Dl(e,[ul.get("oklch","lch"),"l"],(function(e){return e*(1+t)}))},darken:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:.25;return Dl(e,[ul.get("oklch","lch"),"l"],(function(e){return e*(1-t)}))}});function Ss(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:.5,a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},r=(e=(r=[cl(e),cl(t)])[0],t=r[1],"object"===Vi(n)&&(n=(r=[.5,n])[0],a=r[1]),a);return Ps(e,t,{space:r.space,outputSpace:r.outputSpace,premultiplied:r.premultiplied})(n)}function Ms(e,t){var n,a,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},o=(s=(Is(e)&&(r=t,e=(s=W((n=e).rangeArgs.colors,2))[0],t=s[1]),r)).maxDeltaE,u=s.deltaEMethod,i=(r=void 0===(r=s.steps)?2:r,void 0===(l=s.maxSteps)?1e3:l),l=$(s,g),s=(n||(e=(s=[cl(e),cl(t)])[0],t=s[1],n=Ps(e,t,l)),_s(e,t)),c=(l=0<o?Math.max(r,Math.ceil(s/o)+1):r,[]);if(void 0!==i&&(l=Math.min(l,i)),c=1===l?[{p:.5,color:n(.5)}]:(a=1/(l-1),Array.from({length:l},(function(e,t){return{p:t*=a,color:n(t)}}))),0<o)for(var d=c.reduce((function(e,t,n){return 0===n?0:(t=_s(t.color,c[n-1].color,u),Math.max(e,t))}),0);o<d;){d=0;for(var p=1;p<c.length&&c.length<i;p++){var f=c[p-1],D=c[p],m=(D.p+f.p)/2,h=n(m);d=Math.max(d,_s(h,f.color),_s(h,D.color));c.splice(p,0,{p:m,color:n(m)}),p++}}return c=c.map((function(e){return e.color}))}function Ps(e,t){var n,a,r,o,u,i,l,s,c,d,p,f,D=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return Is(e)?(r=e,o=t,Ps.apply(void 0,H(r.rangeArgs.colors).concat([G({},r.rangeArgs.options,o)]))):(p=D.space,f=D.outputSpace,n=D.progression,a=D.premultiplied,e=cl(e),t=cl(t),e=kl(e),t=kl(t),r={colors:[e,t],options:D},p=p?ul.get(p):ul.registry[Ji.interpolationSpace]||e.space,f=f?ul.get(f):p,e=Tl(e,p),t=Tl(t,p),e=Bl(e),t=Bl(t),p.coords.h&&"angle"===p.coords.h.type&&(o=D.hue=D.hue||"shorter",s=[u=(i=[pl(e,D=[p,"h"]),pl(t,D)])[0],i=i[1]],l="raw"===(l=o)?s:(c=(s=W(s.map(bl),2))[0],d=(s=s[1])-c,"increasing"===l?d<0&&(s+=360):"decreasing"===l?0<d&&(c+=360):"longer"===l?-180<d&&d<180&&(0<d?s+=360:c+=360):"shorter"===l&&(180<d?c+=360:d<-180&&(s+=360)),[c,s]),u=(d=W(l,2))[0],i=d[1],Dl(e,D,u),Dl(t,D,i)),a&&(e.coords=e.coords.map((function(t){return t*e.alpha})),t.coords=t.coords.map((function(e){return e*t.alpha}))),Object.assign((function(r){r=n?n(r):r;var o=e.coords.map((function(e,n){return Gi(e,t.coords[n],r)})),u=Gi(e.alpha,t.alpha,r);o={space:p,coords:o,alpha:u};return a&&(o.coords=o.coords.map((function(e){return e/u}))),f!==p?Tl(o,f):o}),{rangeArgs:r}))}function Is(e){return"function"===Vi(e)&&!!e.rangeArgs}Ji.interpolationSpace="lab";var js=Object.freeze({__proto__:null,mix:Ss,steps:Ms,range:Ps,isRange:Is,register:function(e){e.defineFunction("mix",Ss,{returns:"color"}),e.defineFunction("range",Ps,{returns:"function<color>"}),e.defineFunction("steps",Ms,{returns:"array<color>"})}}),Ls=new ul({id:"hsl",name:"HSL",coords:{h:{refRange:[0,360],type:"angle",name:"Hue"},s:{range:[0,100],name:"Saturation"},l:{range:[0,100],name:"Lightness"}},base:jl,fromBase:function(e){var t=Math.max.apply(Math,H(e)),n=Math.min.apply(Math,H(e)),a=(e=W(e,3))[0],r=e[1],o=e[2],u=NaN,i=(e=0,(n+t)/2),l=t-n;if(0!=l){switch(e=0==i||1==i?0:(t-i)/Math.min(i,1-i),t){case a:u=(r-o)/l+(r<o?6:0);break;case r:u=(o-a)/l+2;break;case o:u=(a-r)/l+4}u*=60}return[u,100*e,100*i]},toBase:function(e){var t=(e=W(e,3))[0],n=e[1],a=e[2];function r(e){e=(e+t/30)%12;var r=n*Math.min(a,1-a);return a-r*Math.max(-1,Math.min(e-3,9-e,1))}return(t%=360)<0&&(t+=360),n/=100,a/=100,[r(0),r(8),r(4)]},formats:{hsl:{toGamut:!0,coords:["<number> | <angle>","<percentage>","<percentage>"]},hsla:{coords:["<number> | <angle>","<percentage>","<percentage>"],commas:!0,lastAlpha:!0}}}),qs=new ul({id:"hsv",name:"HSV",coords:{h:{refRange:[0,360],type:"angle",name:"Hue"},s:{range:[0,100],name:"Saturation"},v:{range:[0,100],name:"Value"}},base:Ls,fromBase:function(e){var t=(e=W(e,3))[0],n=e[1];e=e[2];return[t,0==(n=(e/=100)+(n/=100)*Math.min(e,1-e))?0:200*(1-e/n),100*n]},toBase:function(e){var t=(e=W(e,3))[0],n=e[1];e=e[2];return[t,0==(n=(e/=100)*(1-(n/=100)/2))||1==n?0:(e-n)/Math.min(n,1-n)*100,100*n]},formats:{color:{toGamut:!0}}}),zs=new ul({id:"hwb",name:"HWB",coords:{h:{refRange:[0,360],type:"angle",name:"Hue"},w:{range:[0,100],name:"Whiteness"},b:{range:[0,100],name:"Blackness"}},base:qs,fromBase:function(e){var t=(e=W(e,3))[0],n=e[1];return[t,(e=e[2])*(100-n)/100,100-e]},toBase:function(e){var t=(e=W(e,3))[0],n=e[1],a=(e=e[2],(n/=100)+(e/=100));return 1<=a?[t,0,n/a*100]:[t,100*(0==(a=1-e)?0:1-n/a),100*a]},formats:{hwb:{toGamut:!0,coords:["<number> | <angle>","<percentage>","<percentage>"]}}}),Vs=new ye({id:"a98rgb-linear",name:"Linear Adobe® 98 RGB compatible",white:"D65",toXYZ_M:[[.5766690429101305,.1855582379065463,.1882286462349947],[.29734497525053605,.6273635662554661,.07529145849399788],[.02703136138641234,.07068885253582723,.9913375368376388]],fromXYZ_M:[[2.0415879038107465,-.5650069742788596,-.34473135077832956],[-.9692436362808795,1.8759675015077202,.04155505740717557],[.013444280632031142,-.11836239223101838,1.0151749943912054]]}),$s=new ye({id:"a98rgb",name:"Adobe® 98 RGB compatible",base:Vs,toBase:function(e){return e.map((function(e){return Math.pow(Math.abs(e),563/256)*Math.sign(e)}))},fromBase:function(e){return e.map((function(e){return Math.pow(Math.abs(e),256/563)*Math.sign(e)}))},formats:{color:{id:"a98-rgb"}}}),Hs=new ye({id:"prophoto-linear",name:"Linear ProPhoto",white:"D50",base:Xt,toXYZ_M:[[.7977604896723027,.13518583717574031,.0313493495815248],[.2880711282292934,.7118432178101014,8565396060525902e-20],[0,0,.8251046025104601]],fromXYZ_M:[[1.3457989731028281,-.25558010007997534,-.05110628506753401],[-.5446224939028347,1.5082327413132781,.02053603239147973],[0,0,1.2119675456389454]]}),Us=new ye({id:"prophoto",name:"ProPhoto",base:Hs,toBase:function(e){return e.map((function(e){return e<.03125?e/16:Math.pow(e,1.8)}))},fromBase:function(e){return e.map((function(e){return 1/512<=e?Math.pow(e,1/1.8):16*e}))},formats:{color:{id:"prophoto-rgb"}}}),Gs=new ul({id:"oklch",name:"OKLCh",coords:{l:{refRange:[0,1],name:"Lightness"},c:{refRange:[0,.4],name:"Chroma"},h:{refRange:[0,360],type:"angle",name:"Hue"}},white:"D65",base:Ns,fromBase:function(e){var t=(e=W(e,3))[0],n=e[1],a=(e=e[2],Math.abs(n)<2e-4&&Math.abs(e)<2e-4?NaN:180*Math.atan2(e,n)/Math.PI);return[t,Math.sqrt(Math.pow(n,2)+Math.pow(e,2)),bl(a)]},toBase:function(e){var t,n=(e=W(e,3))[0],a=e[1];e=e[2],a=isNaN(e)?t=0:(t=a*Math.cos(e*Math.PI/180),a*Math.sin(e*Math.PI/180));return[n,t,a]},formats:{oklch:{coords:["<number> | <percentage>","<number>","<number> | <angle>"]}}}),Ws=2610/Math.pow(2,14),Ys=Math.pow(2,14)/2610,Ks=2523/Math.pow(2,5),Xs=Math.pow(2,5)/2523,Zs=3424/Math.pow(2,12),Js=2413/Math.pow(2,7),Qs=2392/Math.pow(2,7),ec=new ye({id:"rec2100pq",name:"REC.2100-PQ",base:Rl,toBase:function(e){return e.map((function(e){return 1e4*Math.pow(Math.max(Math.pow(e,Xs)-Zs,0)/(Js-Qs*Math.pow(e,Xs)),Ys)/203}))},fromBase:function(e){return e.map((function(e){e=Math.max(203*e/1e4,0);var t=Zs+Js*Math.pow(e,Ws);e=1+Qs*Math.pow(e,Ws);return Math.pow(t/e,Ks)}))},formats:{color:{id:"rec2100-pq"}}}),tc=.17883277,nc=.28466892,ac=.55991073,rc=3.7743,oc=new ye({id:"rec2100hlg",cssid:"rec2100-hlg",name:"REC.2100-HLG",referred:"scene",base:Rl,toBase:function(e){return e.map((function(e){return e<=.5?Math.pow(e,2)/3*rc:Math.exp((e-ac)/tc+nc)/12*rc}))},fromBase:function(e){return e.map((function(e){return(e/=rc)<=1/12?Math.sqrt(3*e):tc*Math.log(12*e-nc)+ac}))},formats:{color:{id:"rec2100-hlg"}}}),uc={};function ic(e){var t=e.id;e.toCone_M,e.fromCone_M,uc[t]=e}function lc(e,t,n){var a=uc[2<arguments.length&&void 0!==n?n:"Bradford"],r=(u=W(qi(a.toCone_M,e),3))[0],o=u[1],u=u[2],i=W(qi(a.toCone_M,t),3);r=qi([[i[0]/r,0,0],[0,i[1]/o,0],[0,0,i[2]/u]],a.toCone_M);return qi(a.fromCone_M,r)}Zi.add("chromatic-adaptation-start",(function(e){e.options.method&&(e.M=lc(e.W1,e.W2,e.options.method))})),Zi.add("chromatic-adaptation-end",(function(e){e.M||(e.M=lc(e.W1,e.W2,e.options.method))})),ic({id:"von Kries",toCone_M:[[.40024,.7076,-.08081],[-.2263,1.16532,.0457],[0,0,.91822]],fromCone_M:[[1.8599364,-1.1293816,.2198974],[.3611914,.6388125,-64e-7],[0,0,1.0890636]]}),ic({id:"Bradford",toCone_M:[[.8951,.2664,-.1614],[-.7502,1.7135,.0367],[.0389,-.0685,1.0296]],fromCone_M:[[.9869929,-.1470543,.1599627],[.4323053,.5183603,.0492912],[-.0085287,.0400428,.9684867]]}),ic({id:"CAT02",toCone_M:[[.7328,.4296,-.1624],[-.7036,1.6975,.0061],[.003,.0136,.9834]],fromCone_M:[[1.0961238,-.278869,.1827452],[.454369,.4735332,.0720978],[-.0096276,-.005698,1.0153256]]}),ic({id:"CAT16",toCone_M:[[.401288,.650173,-.051461],[-.250268,1.204414,.045854],[-.002079,.048952,.953127]],fromCone_M:[[1.862067855087233,-1.011254630531685,.1491867754444518],[.3875265432361372,.6214474419314753,-.008973985167612518],[-.01584149884933386,-.03412293802851557,1.04996443687785]]}),Object.assign(Qi,{A:[1.0985,1,.35585],C:[.98074,1,1.18232],D55:[.95682,1,.92149],D75:[.94972,1,1.22638],E:[1,1,1],F2:[.99186,1,.67393],F7:[.95041,1,1.08747],F11:[1.00962,1,.6435]}),Qi.ACES=[.32168/.33767,1,.34065/.33767];var sc=new ye({id:"acescg",name:"ACEScg",coords:{r:{range:[0,65504],name:"Red"},g:{range:[0,65504],name:"Green"},b:{range:[0,65504],name:"Blue"}},referred:"scene",white:Qi.ACES,toXYZ_M:[[.6624541811085053,.13400420645643313,.1561876870049078],[.27222871678091454,.6740817658111484,.05368951740793705],[-.005574649490394108,.004060733528982826,1.0103391003129971]],fromXYZ_M:[[1.6410233796943257,-.32480329418479,-.23642469523761225],[-.6636628587229829,1.6153315916573379,.016756347685530137],[.011721894328375376,-.008284441996237409,.9883948585390215]],formats:{color:{}}}),cc=Math.pow(2,-16),dc=-.35828683,pc=(Math.log2(65504)+9.72)/17.52,fc=(ye=new ye({id:"acescc",name:"ACEScc",coords:{r:{range:[dc,pc],name:"Red"},g:{range:[dc,pc],name:"Green"},b:{range:[dc,pc],name:"Blue"}},referred:"scene",base:sc,toBase:function(e){return e.map((function(e){return e<=(9.72-15)/17.52?2*(Math.pow(2,17.52*e-9.72)-cc):e<pc?Math.pow(2,17.52*e-9.72):65504}))},fromBase:function(e){return e.map((function(e){return e<=0?(Math.log2(cc)+9.72)/17.52:e<cc?(Math.log2(cc+.5*e)+9.72)/17.52:(Math.log2(e)+9.72)/17.52}))},formats:{color:{}}}),Object.freeze({__proto__:null,XYZ_D65:il,XYZ_D50:Xt,XYZ_ABS_D65:os,Lab_D65:Jl,Lab:gl,LCH:vl,sRGB_Linear:Pl,sRGB:jl,HSL:Ls,HWB:zs,HSV:qs,P3_Linear:Ml,P3:Ll,A98RGB_Linear:Vs,A98RGB:$s,ProPhoto_Linear:Hs,ProPhoto:Us,REC_2020_Linear:Rl,REC_2020:Sl,OKLab:Ns,OKLCH:Gs,Jzazbz:bs,JzCzHz:vs,ICTCP:xs,REC_2100_PQ:ec,REC_2100_HLG:oc,ACEScg:sc,ACEScc:ye})),Dc=(ce=new WeakMap,J(mc,[{key:"space",get:function(){return L(this,ce)}},{key:"spaceId",get:function(){return L(this,ce).id}},{key:"clone",value:function(){return new mc(this.space,this.coords,this.alpha)}},{key:"toJSON",value:function(){return{spaceId:this.spaceId,coords:this.coords,alpha:this.alpha}}},{key:"display",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a=function(e){var t=void 0===(t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).space)?Ji.display_space:t,n=$(n,D),a=Nl(e,n);return"undefined"==typeof CSS||CSS.supports("color",a)||!Ji.display_space?(a=new String(a)).color=e:(t=Tl(e,t),(a=new String(Nl(t,n))).color=t),a}.apply(void 0,[this].concat(t));return a.color=new mc(a.color),a}}],[{key:"get",value:function(e){if(e instanceof mc)return e;for(var t=arguments.length,n=new Array(1<t?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return T(mc,[e].concat(n))}},{key:"defineFunction",value:function(e,t){function n(){var e,n=t.apply(void 0,arguments);return"color"===o?n=mc.get(n):"function<color>"===o?(e=n,n=function(){var t=e.apply(void 0,arguments);return mc.get(t)},Object.assign(n,e)):"array<color>"===o&&(n=n.map((function(e){return mc.get(e)}))),n}var a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:t,r=void 0===(r=a.instance)||r,o=a.returns;e in mc||(mc[e]=n),r&&(mc.prototype[e]=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return n.apply(void 0,[this].concat(t))})}},{key:"defineFunctions",value:function(e){for(var t in e)mc.defineFunction(t,e[t],e[t])}},{key:"extend",value:function(e){if(e.register)e.register(mc);else for(var t in e)mc.defineFunction(t,e[t])}}]),mc);function mc(){var e=this;X(this,mc),P(this,ce,{writable:!0,value:void 0});for(var t,n,a,r=arguments.length,o=new Array(r),u=0;u<r;u++)o[u]=arguments[u];a=(a=1===o.length?cl(o[0]):a)?(t=a.space||a.spaceId,n=a.coords,a.alpha):(t=o[0],n=o[1],o[2]),z(this,ce,ul.get(t)),this.coords=n?n.slice():[0,0,0],this.alpha=a<1?a:1;for(var i=0;i<this.coords.length;i++)"NaN"===this.coords[i]&&(this.coords[i]=NaN);for(var l in L(this,ce).coords)!function(t){Object.defineProperty(e,t,{get:function(){return e.get(t)},set:function(n){return e.set(t,n)}})}(l)}Dc.defineFunctions({get:pl,getAll:dl,set:Dl,setAll:fl,to:Tl,equals:function(e,t){return e=cl(e),t=cl(t),e.space===t.space&&e.alpha===t.alpha&&e.coords.every((function(e,n){return e===t.coords[n]}))},inGamut:Al,toGamut:Bl,distance:Hl,toString:Nl}),Object.assign(Dc,{util:Po,hooks:Zi,WHITES:Qi,Space:ul,spaces:ul.registry,parse:sl,defaults:Ji});for(var hc,gc=0,bc=Object.keys(fc);gc<bc.length;gc++){var vc=bc[gc];ul.register(fc[vc])}for(hc in ul.registry)yc(hc,ul.registry[hc]);function yc(e,t){Object.keys(t.coords),Object.values(t.coords).map((function(e){return e.name}));var n=e.replace(/-/g,"_");Object.defineProperty(Dc.prototype,n,{get:function(){var n=this,a=this.getAll(e);return"undefined"==typeof Proxy?a:new Proxy(a,{has:function(e,n){try{return ul.resolveCoord([t,n]),!0}catch(e){}return Reflect.has(e,n)},get:function(e,n,a){if(n&&"symbol"!==r(n)&&!(n in e)){var o=ul.resolveCoord([t,n]).index;if(0<=o)return e[o]}return Reflect.get(e,n,a)},set:function(a,o,u,i){if(o&&"symbol"!==r(o)&&!(o in a)||0<=o){var l=ul.resolveCoord([t,o]).index;if(0<=l)return a[l]=u,n.setAll(e,a),!0}return Reflect.set(a,o,u,i)}})},set:function(t){this.setAll(e,t)},configurable:!0,enumerable:!0})}Zi.add("colorspace-init-end",(function(e){var t;yc(e.id,e),null!=(t=e.aliases)&&t.forEach((function(t){yc(t,e)}))})),Dc.extend(Rs),Dc.extend({deltaE:_s}),Dc.extend(Os),Dc.extend({contrast:function(e,t){var n,a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},r=(a=a=zi(a)?{algorithm:a}:a).algorithm,o=$(a,m);if(!r)throw a=Object.keys(es).map((function(e){return e.replace(/^contrast/,"")})).join(", "),new TypeError("contrast() function needs a contrast algorithm. Please specify one of: ".concat(a));for(n in e=cl(e),t=cl(t),es)if("contrast"+r.toLowerCase()===n.toLowerCase())return es[n](e,t,o);throw new TypeError("Unknown contrast algorithm: ".concat(r))}}),Dc.extend(as),Dc.extend(Wl),Dc.extend(js),Dc.extend(es);dc=oe(Jt()),Xt=oe(Qt());var Fc=(oe(en()),ji.default.templateSettings.strip=!1,"Promise"in t||dc.default.polyfill(),"Uint32Array"in t||(t.Uint32Array=Xt.Uint32Array),t.Uint32Array&&("some"in t.Uint32Array.prototype||Object.defineProperty(t.Uint32Array.prototype,"some",{value:Array.prototype.some}),"reduce"in t.Uint32Array.prototype||Object.defineProperty(t.Uint32Array.prototype,"reduce",{value:Array.prototype.reduce})),/^#[0-9a-f]{3,8}$/i),wc=/hsl\\(\\s*([\\d.]+)(rad|turn)/;function Ec(e,t,n){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:1;X(this,Ec),this.red=e,this.green=t,this.blue=n,this.alpha=a}J(Ec,[{key:"toHexString",value:function(){var e=Math.round(this.red).toString(16),t=Math.round(this.green).toString(16),n=Math.round(this.blue).toString(16);return"#"+(15.5<this.red?e:"0"+e)+(15.5<this.green?t:"0"+t)+(15.5<this.blue?n:"0"+n)}},{key:"toJSON",value:function(){return{red:this.red,green:this.green,blue:this.blue,alpha:this.alpha}}},{key:"parseString",value:function(e){e=e.replace(wc,(function(e,t,n){var a=t+n;switch(n){case"rad":return e.replace(a,180*t/Math.PI);case"turn":return e.replace(a,360*t)}}));try{var t=new Dc(e).to("srgb");this.red=Math.round(255*xc(t.r,0,1)),this.green=Math.round(255*xc(t.g,0,1)),this.blue=Math.round(255*xc(t.b,0,1)),this.alpha=+t.alpha}catch(t){throw new Error(\'Unable to parse color "\'.concat(e,\'"\'))}return this}},{key:"parseRgbString",value:function(e){this.parseString(e)}},{key:"parseHexString",value:function(e){e.match(Fc)&&![6,8].includes(e.length)&&this.parseString(e)}},{key:"parseColorFnString",value:function(e){this.parseString(e)}},{key:"getRelativeLuminance",value:function(){var e=this.red/255,t=this.green/255,n=this.blue/255;return.2126*(e<=.03928?e/12.92:Math.pow((.055+e)/1.055,2.4))+.7152*(t<=.03928?t/12.92:Math.pow((.055+t)/1.055,2.4))+.0722*(n<=.03928?n/12.92:Math.pow((.055+n)/1.055,2.4))}}]);var Cc=Ec;function xc(e,t,n){return Math.min(Math.max(t,e),n)}var Ac=function(e){var t=new Cc;return t.parseString(e.getPropertyValue("background-color")),0!==t.alpha&&(e=e.getPropertyValue("opacity"),t.alpha=t.alpha*e),t},kc=function(e){var n=t.getComputedStyle(e);return Pi(e,n)||1===Ac(n).alpha};function Bc(e){var t;return!(!e.href||(t=Kn.get("firstPageLink",Tc))&&e.compareDocumentPosition(t.actualNode)!==e.DOCUMENT_POSITION_FOLLOWING)}function Tc(){return(t.location.origin?cp(o._tree,\'a[href]:not([href^="javascript:"])\').find((function(e){return!Do(e.actualNode)})):cp(o._tree,\'a:not([href^="#"]):not([href^="/#"]):not([href^="javascript:"])\')[0])||null}var Nc=/rect\\s*\\(([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px\\s*\\)/,Rc=/(\\w+)\\((\\d+)/;var _c=function e(n,a,r){if(!n)throw new TypeError("Cannot determine if element is visible for non-DOM nodes");var u,i,l,s=n instanceof un?n:Xn(n),c=(n=s?s.actualNode:n,"_isVisible"+(a?"ScreenReader":"")),d=(p=null!=(p=t.Node)?p:{}).DOCUMENT_NODE,p=p.DOCUMENT_FRAGMENT_NODE,f=(s?s.props:n).nodeType,D=s?s.props.nodeName:n.nodeName.toLowerCase();return s&&void 0!==s[c]?s[c]:f===d||!["style","script","noscript","template"].includes(D)&&(n&&f===p&&(n=n.host),(!a||"true"!==(s?s.attr("aria-hidden"):n.getAttribute("aria-hidden")))&&(n?null!==(d=t.getComputedStyle(n,null))&&("area"===D?(u=a,i=r,!!(p=pr(f=n,"map"))&&!!(p=p.getAttribute("name"))&&!(!(f=sr(f))||9!==f.nodeType||!(l=cp(o._tree,\'img[usemap="#\'.concat(En(p),\'"]\')))||!l.length)&&l.some((function(t){return e(t.actualNode,u,i)}))):"none"!==d.getPropertyValue("display")&&(D=parseInt(d.getPropertyValue("height")),f=parseInt(d.getPropertyValue("width")),l=(p=xd(n))&&0===D,p=p&&0===f,D="absolute"===d.getPropertyValue("position")&&(D<2||f<2)&&"hidden"===d.getPropertyValue("overflow"),!(!a&&(function(e){var t=e.getPropertyValue("clip").match(Nc),n=e.getPropertyValue("clip-path").match(Rc);if(t&&5===t.length&&(e=e.getPropertyValue("position"),["fixed","absolute"].includes(e)))return t[3]-t[1]<=0&&t[2]-t[4]<=0;if(n){e=n[1];var a=parseInt(n[2],10);switch(e){case"inset":return 50<=a;case"circle":return 0===a}}}(d)||"0"===d.getPropertyValue("opacity")||l||p||D)||!r&&("hidden"===d.getPropertyValue("visibility")||!a&&Lr(n))))&&(f=!1,(p=n.assignedSlot||n.parentNode)&&(f=e(p,a,!0)),s&&(s[c]=f),f)):(D=!0,(r=s.parent)&&(D=e(r,a,!0)),s&&(s[c]=D),D)))},Oc=function(e,n){for(var a=["fixed","sticky"],r=[],o=!1,u=0;u<e.length;++u){var i=e[u],l=(i===n&&(o=!0),t.getComputedStyle(i));o||-1===a.indexOf(l.position)?r.push(i):r=[]}return r};function Sc(e,n){var a=Mc(n);do{var r,o,u,i,l,s,c=Mc(e);if(c===a||c===n)return i=e,r=n,u=(o=t.getComputedStyle(r)).getPropertyValue("overflow"),"inline"===o.getPropertyValue("display")||(i=Array.from(i.getClientRects()),l=r.getBoundingClientRect(),s={left:l.left,top:l.top,width:l.width,height:l.height},(["scroll","auto"].includes(u)||r instanceof t.HTMLHtmlElement)&&(s.width=r.scrollWidth,s.height=r.scrollHeight),1===i.length&&"hidden"===u&&"nowrap"===o.getPropertyValue("white-space")&&(i[0]=s),i.some((function(e){return!(Math.ceil(e.left)<Math.floor(s.left)||Math.ceil(e.top)<Math.floor(s.top)||Math.floor(e.left+e.width)>Math.ceil(s.left+s.width)||Math.floor(e.top+e.height)>Math.ceil(s.top+s.height))})))}while(e=c);return!1}function Mc(e){for(var t=Xn(e).parent;t;){if(xd(t.actualNode))return t.actualNode;t=t.parent}}var Pc,Ic,jc=function e(t,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:a,o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:0;if(999<o)throw new Error("Infinite loop detected");return Array.from(r.elementsFromPoint(t,n)||[]).filter((function(e){return sr(e)===r})).reduce((function(a,r){var u;return ur(r)&&(u=e(t,n,r.shadowRoot,o+1),!(a=a.concat(u)).length||!Sc(a[0],r))||a.push(r),a}),[])},Lc=function(e,t){var n,r;if(e.hasAttribute(t))return r=e.nodeName.toUpperCase(),n=e,["A","AREA"].includes(r)&&!e.ownerSVGElement||((n=a.createElement("a")).href=e.getAttribute(t)),r=["https:","ftps:"].includes(n.protocol)?n.protocol.replace(/s:$/,":"):n.protocol,t=(e=(e=(t=e=/^\\//.test(n.pathname)?n.pathname:"/".concat(n.pathname)).split("/").pop())&&-1!==e.indexOf(".")?{pathname:t.replace(e,""),filename:/index./.test(e)?"":e}:{pathname:t,filename:""}).pathname,e=e.filename,{protocol:r,hostname:n.hostname,port:(r=n.port,["443","80"].includes(r)?"":r),pathname:/\\/$/.test(t)?t:"".concat(t,"/"),search:function(e){var t={};if(e&&e.length){var n=e.substring(1).split("&");if(n&&n.length)for(var a=0;a<n.length;a++){var r=(o=W(n[a].split("="),2))[0],o=void 0===(o=o[1])?"":o;t[decodeURIComponent(r)]=decodeURIComponent(o)}}return t}(n.search),hash:(r=n.hash)&&(t=r.match(/#!?\\/?/g))&&"#"!==W(t,1)[0]?r:"",filename:e}},qc=function(e,n){var a=n.getBoundingClientRect(),r=a.top,o=a.left,u=r-n.scrollTop,i=(r=r-n.scrollTop+n.scrollHeight,o-n.scrollLeft);o=o-n.scrollLeft+n.scrollWidth;return!(e.left>o&&e.left>a.right||e.top>r&&e.top>a.bottom||e.right<i&&e.right<a.left||e.bottom<u&&e.bottom<a.top)&&(o=t.getComputedStyle(n),!(e.left>a.right||e.top>a.bottom)||"scroll"===o.overflow||"auto"===o.overflow||n instanceof t.HTMLBodyElement||n instanceof t.HTMLHtmlElement)},zc=0;function Vc(e,t,n){var a;return X(this,Vc),(a=Ic.call(this)).shadowId=n,a.children=[],a.actualNode=e,(a.parent=t)||(zc=0),a.nodeIndex=zc++,a._isHidden=null,a._cache={},void 0===Pc&&(Pc=Rn(e.ownerDocument)),a._isXHTML=Pc,"input"===e.nodeName.toLowerCase()&&(n=e.getAttribute("type"),n=a._isXHTML?n:(n||"").toLowerCase(),vp().includes(n)||(n="text"),a._type=n),Kn.get("nodeMap")&&Kn.get("nodeMap").set(e,O(a)),a}N(Vc,un),Ic=_(Vc),J(Vc,[{key:"props",get:function(){var e,t,n,a,r,o,u,i,l;return this._cache.hasOwnProperty("props")||(e=(l=this.actualNode).nodeType,t=l.nodeName,n=l.id,a=l.multiple,r=l.nodeValue,o=l.value,u=l.selected,i=l.checked,l=l.indeterminate,this._cache.props={nodeType:e,nodeName:this._isXHTML?t:t.toLowerCase(),id:n,type:this._type,multiple:a,nodeValue:r,value:o,selected:u,checked:i,indeterminate:l}),this._cache.props}},{key:"attr",value:function(e){return"function"!=typeof this.actualNode.getAttribute?null:this.actualNode.getAttribute(e)}},{key:"hasAttr",value:function(e){return"function"==typeof this.actualNode.hasAttribute&&this.actualNode.hasAttribute(e)}},{key:"attrNames",get:function(){var e;return this._cache.hasOwnProperty("attrNames")||(e=(this.actualNode.attributes instanceof t.NamedNodeMap?this.actualNode:this.actualNode.cloneNode(!1)).attributes,this._cache.attrNames=Array.from(e).map((function(e){return e.name}))),this._cache.attrNames}},{key:"getComputedStylePropertyValue",value:function(e){var n="computedStyle_"+e;return this._cache.hasOwnProperty(n)||(this._cache.hasOwnProperty("computedStyle")||(this._cache.computedStyle=t.getComputedStyle(this.actualNode)),this._cache[n]=this._cache.computedStyle.getPropertyValue(e)),this._cache[n]}},{key:"isFocusable",get:function(){return this._cache.hasOwnProperty("isFocusable")||(this._cache.isFocusable=Jo(this.actualNode)),this._cache.isFocusable}},{key:"tabbableElements",get:function(){return this._cache.hasOwnProperty("tabbableElements")||(this._cache.tabbableElements=ko(this)),this._cache.tabbableElements}},{key:"clientRects",get:function(){return this._cache.hasOwnProperty("clientRects")||(this._cache.clientRects=Array.from(this.actualNode.getClientRects()).filter((function(e){return 0<e.width}))),this._cache.clientRects}},{key:"boundingClientRect",get:function(){return this._cache.hasOwnProperty("boundingClientRect")||(this._cache.boundingClientRect=this.actualNode.getBoundingClientRect()),this._cache.boundingClientRect}}]);var $c,Hc=Vc,Uc=function(e){return(e||"").trim().replace(/\\s{2,}/g," ").split(" ")},Gc=" [idsMap]";function Wc(e,t,n){var a=e[0]._selectorMap;if(a){for(var r=e[0].shadowId,o=0;o<t.length;o++)if(1<t[o].length&&t[o].some(Yc))return;var u=new Set,i=(t.forEach((function(e){var t,n=function(e,t,n){var a=e[e.length-1],r=null,o=1<e.length||!!a.pseudos||!!a.classes;if(Yc(a))r=t["*"];else{if(a.id){if(!t[Gc]||null==(e=t[Gc][a.id])||!e.length)return;r=t[Gc][a.id].filter((function(e){return e.shadowId===n}))}if(a.tag&&"*"!==a.tag){if(null==(e=t[a.tag])||!e.length)return;e=t[a.tag];r=r?Kc(e,r):e}if(a.classes){if(null==(e=t["[class]"])||!e.length)return;e=t["[class]"],r=r?Kc(e,r):e}if(a.attributes)for(var u=0;u<a.attributes.length;u++){var i=a.attributes[u];if("attrValue"===i.type&&(o=!0),null==(l=t["[".concat(i.key,"]")])||!l.length)return;var l=t["[".concat(i.key,"]")];r=r?Kc(l,r):l}}return{nodes:r,isComplexSelector:o}}(e,a,r);null!=n&&null!=(t=n.nodes)&&t.forEach((function(t){n.isComplexSelector&&!la(t,e)||u.add(t)}))})),[]);return u.forEach((function(e){return i.push(e)})),(i=n?i.filter(n):i).sort((function(e,t){return e.nodeIndex-t.nodeIndex}))}}function Yc(e){return"*"===e.tag&&!e.attributes&&!e.id&&!e.classes}function Kc(e,t){return e.filter((function(e){return t.includes(e)}))}function Xc(e,t,n){n[e]=n[e]||[],n[e].push(t)}function Zc(e,t){1===e.props.nodeType&&(Xc(e.props.nodeName,e,t),Xc("*",e,t),e.attrNames.forEach((function(n){"id"===n&&(t[Gc]=t[Gc]||{},Uc(e.attr(n)).forEach((function(n){Xc(n,e,t[Gc])}))),Xc("[".concat(n,"]"),e,t)})))}function Jc(e,t,n){return Zc(e=new Hc(e,t,n),Kn.get("selectorMap")),e}function Qc(e,n,a){var r,o,u;function i(e,t,a){return(t=Qc(t,n,a))?e.concat(t):e}return u=(e=e.documentElement?e.documentElement:e).nodeName.toLowerCase(),ur(e)?($c=!0,r=Jc(e,a,n),n="a"+Math.random().toString().substring(2),o=Array.from(e.shadowRoot.childNodes),r.children=o.reduce((function(e,t){return i(e,t,r)}),[]),[r]):"content"===u&&"function"==typeof e.getDistributedNodes?(o=Array.from(e.getDistributedNodes())).reduce((function(e,t){return i(e,t,a)}),[]):"slot"===u&&"function"==typeof e.assignedNodes?((o=Array.from(e.assignedNodes())).length||(o=function(e){var t=[];for(e=e.firstChild;e;)t.push(e),e=e.nextSibling;return t}(e)),t.getComputedStyle(e),o.reduce((function(e,t){return i(e,t,a)}),[])):1===e.nodeType?(r=Jc(e,a,n),o=Array.from(e.childNodes),r.children=o.reduce((function(e,t){return i(e,t,r)}),[]),[r]):3===e.nodeType?[Jc(e,a)]:void 0}var ed=function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:a.documentElement,t=1<arguments.length?arguments[1]:void 0,n=($c=!1,{});return Kn.set("nodeMap",new WeakMap),Kn.set("selectorMap",n),(e=Qc(e,t,null))[0]._selectorMap=n,e[0]._hasShadowRoot=$c,e},td=function(e){return e?e.trim().split("-")[0].toLowerCase():""},nd=function(e){var t={};return t.none=e.none.concat(e.all),t.any=e.any,Object.keys(t).map((function(e){var n;return t[e].length&&(n=o._audit.data.failureSummaries[e])&&"function"==typeof n.failureMessage?n.failureMessage(t[e].map((function(e){return e.message||""}))):void 0})).filter((function(e){return void 0!==e})).join("\\n\\n")};function ad(){var e=o._audit.data.incompleteFallbackMessage;return"string"!=typeof(e="function"==typeof e?e():e)?"":e}var rd=nn.resultGroups,od=function(e,t){var n=o.utils.aggregateResult(e);return rd.forEach((function(e){t.resultTypes&&!t.resultTypes.includes(e)&&(n[e]||[]).forEach((function(e){Array.isArray(e.nodes)&&0<e.nodes.length&&(e.nodes=[e.nodes[0]])})),n[e]=(n[e]||[]).map((function(e){return e=Object.assign({},e),Array.isArray(e.nodes)&&0<e.nodes.length&&(e.nodes=e.nodes.map((function(e){var n,a;return"object"===r(e.node)&&(e.html=e.node.source,t.elementRef&&!e.node.fromFrame&&(e.element=e.node.element),!1===t.selectors&&!e.node.fromFrame||(e.target=e.node.selector),t.ancestry&&(e.ancestry=e.node.ancestry),t.xpath)&&(e.xpath=e.node.xpath),delete e.result,delete e.node,n=e,a=t,["any","all","none"].forEach((function(e){Array.isArray(n[e])&&n[e].filter((function(e){return Array.isArray(e.relatedNodes)})).forEach((function(e){e.relatedNodes=e.relatedNodes.map((function(e){var t,n={html:null!=(n=null==e?void 0:e.source)?n:"Undefined"};return!a.elementRef||null!=e&&e.fromFrame||(n.element=null!=(t=null==e?void 0:e.element)?t:null),(!1!==a.selectors||null!=e&&e.fromFrame)&&(n.target=null!=(t=null==e?void 0:e.selector)?t:[":root"]),a.ancestry&&(n.ancestry=null!=(t=null==e?void 0:e.ancestry)?t:[":root"]),a.xpath&&(n.xpath=null!=(t=null==e?void 0:e.xpath)?t:["/"]),n}))}))})),e}))),rd.forEach((function(t){return delete e[t]})),delete e.pageLevel,delete e.result,e}))})),n},ud=/\\$\\{\\s?data\\s?\\}/g;function id(e,t){if("string"==typeof t)return e.replace(ud,t);for(var n in t){var a;t.hasOwnProperty(n)&&(a=new RegExp("\\\\${\\\\s?data\\\\."+n+"\\\\s?}","g"),n=void 0===t[n]?"":String(t[n]),e=e.replace(a,n))}return e}var ld=function e(t,n){var a;if(t)return Array.isArray(n)?(n.values=n.join(", "),"string"==typeof t.singular&&"string"==typeof t.plural?id(1===n.length?t.singular:t.plural,n):id(t,n)):"string"==typeof t?id(t,n):"string"==typeof n?id(t[n],n):(a=t.default||ad(),e(a=n&&n.messageKey&&t[n.messageKey]?t[n.messageKey]:a,n))},sd=function(e,t,n){var a=o._audit.data.checks[e];if(!a)throw new Error("Cannot get message for unknown check: ".concat(e,"."));if(a.messages[t])return ld(a.messages[t],n);throw new Error(\'Check "\'.concat(e,\'"" does not have a "\').concat(t,\'" message.\'))},cd=function(e,t,n){t=((n.rules&&n.rules[t]||{}).checks||{})[e.id];var a=(n.checks||{})[e.id],r=e.enabled;e=e.options;return a&&(a.hasOwnProperty("enabled")&&(r=a.enabled),a.hasOwnProperty("options"))&&(e=a.options),t&&(t.hasOwnProperty("enabled")&&(r=t.enabled),t.hasOwnProperty("options"))&&(e=t.options),{enabled:r,options:e,absolutePaths:n.absolutePaths}};function dd(){var e,n,a,u,i=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null,l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t;return i&&"object"===r(i)?i:"object"!==r(l)?{}:{testEngine:{name:"axe-core",version:o.version},testRunner:{name:o._audit.brand},testEnvironment:(i=l).navigator&&"object"===r(i.navigator)?(e=i.navigator,n=i.innerHeight,a=i.innerWidth,i=function(e){return(e=e.screen).orientation||e.msOrientation||e.mozOrientation}(i)||{},u=i.angle,i=i.type,{userAgent:e.userAgent,windowWidth:a,windowHeight:n,orientationAngle:u,orientationType:i}):{},timestamp:(new Date).toISOString(),url:null==(e=l.location)?void 0:e.href}}function pd(e,t){var n=t.focusable;t=t.page;return{node:e,include:[],exclude:[],initiator:!1,focusable:n&&(!(n=(n=e).getAttribute("tabindex"))||(n=parseInt(n,10),isNaN(n))||0<=n),size:function(e){var t=parseInt(e.getAttribute("width"),10),n=parseInt(e.getAttribute("height"),10);return(isNaN(t)||isNaN(n))&&(e=e.getBoundingClientRect(),t=isNaN(t)?e.width:t,n=isNaN(n)?e.height:n),{width:t,height:n}}(e),page:t}}function fd(e){var n=0<arguments.length&&void 0!==e?e:[],a=[];bd(n)||(n=[n]);for(var r=0;r<n.length;r++){var o=function(e){return e instanceof t.Node?e:"string"==typeof e?[e]:(hd(e)?(function(e){vd(Array.isArray(e.fromFrames),"fromFrames property must be an array"),vd(e.fromFrames.every((function(e){return!yd(e,"fromFrames")})),"Invalid context; fromFrames selector must be appended, rather than nested"),vd(!yd(e,"fromShadowDom"),"fromFrames and fromShadowDom cannot be used on the same object")}(e),e=e.fromFrames):gd(e)&&(e=[e]),function(e){if(Array.isArray(e)){var t,n=[],a=ee(e);try{for(a.s();!(t=a.n()).done;){var r=t.value;if(gd(r)&&(function(e){vd(Array.isArray(e.fromShadowDom),"fromShadowDom property must be an array"),vd(e.fromShadowDom.every((function(e){return!yd(e,"fromFrames")})),"shadow selector must be inside fromFrame instead"),vd(e.fromShadowDom.every((function(e){return!yd(e,"fromShadowDom")})),"fromShadowDom selector must be appended, rather than nested")}(r),r=r.fromShadowDom),"string"!=typeof r&&!function(e){return Array.isArray(e)&&e.every((function(e){return"string"==typeof e}))}(r))return;n.push(r)}}catch(e){a.e(e)}finally{a.f()}return n}}(e))}(n[r]);o&&a.push(o)}return a}function Dd(e){return["include","exclude"].some((function(t){return yd(e,t)&&md(e[t])}))}function md(e){return"string"==typeof e||e instanceof t.Node||hd(e)||gd(e)||bd(e)}function hd(e){return yd(e,"fromFrames")}function gd(e){return yd(e,"fromShadowDom")}function bd(e){return e&&"object"===r(e)&&"number"==typeof e.length&&e instanceof t.Node==0}function vd(e,t){Fn(e,"Invalid context; ".concat(t,"\\nSee: https://github.com/dequelabs/axe-core/blob/master/doc/context.md"))}function yd(e,t){return!(!e||"object"!==r(e))&&Object.prototype.hasOwnProperty.call(e,t)}function Fd(e,n){for(var a=[],r=0,o=e[n].length;r<o;r++){var u=e[n][r];u instanceof t.Node?u.documentElement instanceof t.Node?a.push(e.flatTree[0]):a.push(Xn(u)):u&&u.length&&(1<u.length?function(e,t,n){e.frames=e.frames||[],bp(n.shift()).forEach((function(a){var r=e.frames.find((function(e){return e.node===a}));r||(r=pd(a,e),e.frames.push(r)),r[t].push(n)}))}(e,n,u):(u=bp(u[0]),a.push.apply(a,H(u.map((function(e){return Xn(e)}))))))}return a.filter((function(e){return e}))}function wd(e,n){var o=this,u=(e=ea(e),this.frames=[],this.page="boolean"==typeof(null==(u=e)?void 0:u.page)?e.page:void 0,this.initiator="boolean"!=typeof(null==(u=e)?void 0:u.initiator)||e.initiator,this.focusable="boolean"!=typeof(null==(u=e)?void 0:u.focusable)||e.focusable,this.size="object"===r(null==(u=e)?void 0:u.size)?e.size:{},e=function(e){if(Dd(e)){var t=" must be used inside include or exclude. It should not be on the same object.";vd(!yd(e,"fromFrames"),"fromFrames"+t),vd(!yd(e,"fromShadowDom"),"fromShadowDom"+t)}else{if(!md(e))return{include:[a],exclude:[]};e={include:e,exclude:[]}}return 0===(t=fd(e.include)).length&&t.push(a),{include:t,exclude:e=fd(e.exclude)}}(e),this.flatTree=null!=n?n:ed(function(e){for(var n=e.include,r=(e=e.exclude,Array.from(n).concat(Array.from(e))),o=0;o<r.length;o++){var u=r[o];if(u instanceof t.Element)return u.ownerDocument.documentElement;if(u instanceof t.Document)return u.documentElement}return a.documentElement}(e)),this.exclude=e.exclude,this.include=e.include,this.include=Fd(this,"include"),this.exclude=Fd(this,"exclude"),mp("frame, iframe",this).forEach((function(e){var t;Sd(e,o)&&(t=o,Mu(e=e.actualNode))&&!Ja(t.frames,"node",e)&&t.frames.push(pd(e,t))})),void 0===this.page&&(this.page=function(e){return 1===(e=e.include).length&&e[0].actualNode===a.documentElement}(this),this.frames.forEach((function(e){e.page=o.page}))),this);if(0===u.include.length&&0===u.frames.length)throw u=Ga.isInFrame()?"frame":"page",new Error("No elements found for include in "+u+" Context");Array.isArray(this.include)||(this.include=Array.from(this.include)),this.include.sort(Id)}function Ed(e){return!1===(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).iframes?[]:new wd(e).frames.map((function(e){var t=e.node;return(e=$(e,b)).initiator=!1,{frameSelector:Gn(t),frameContext:e}}))}var Cd=function(e){var t=o._audit.rules.find((function(t){return t.id===e}));if(t)return t;throw new Error("Cannot find rule by id: ".concat(e))};function xd(e){var n,a,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,o=e.scrollWidth>e.clientWidth+r;r=e.scrollHeight>e.clientHeight+r;if(o||r)return n=Ad(a=t.getComputedStyle(e),"overflow-x"),a=Ad(a,"overflow-y"),o&&n||r&&a?{elm:e,top:e.scrollTop,left:e.scrollLeft}:void 0}function Ad(e,t){return e=e.getPropertyValue(t),["scroll","auto"].includes(e)}var kd=function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:t,n=e.document.documentElement;return[void 0!==e.pageXOffset?{elm:e,top:e.pageYOffset,left:e.pageXOffset}:{elm:n,top:n.scrollTop,left:n.scrollLeft}].concat(function e(t){return Array.from(t.children||t.childNodes||[]).reduce((function(t,n){var a=xd(n);return a&&t.push(a),t.concat(e(n))}),[])}(a.body))};function Bd(){return ea(Lo)}var Td,Nd=function(e){if(e)return function(t){var n=t.data,a=void 0!==(a=t.isCrossOrigin)&&a,r=t.shadowId,o=t.root,u=t.priority,i=(t=void 0!==(t=t.isLink)&&t,e.createElement("style"));return t?(t=e.createTextNode(\'@import "\'.concat(n.href,\'"\')),i.appendChild(t)):i.appendChild(e.createTextNode(n)),e.head.appendChild(i),{sheet:i.sheet,isCrossOrigin:a,shadowId:r,root:o,priority:u}};throw new Error("axe.utils.getStyleSheetFactory should be invoked with an argument")},Rd=function(e){var t;return Td&&Td.parentNode?(void 0===Td.styleSheet?Td.appendChild(a.createTextNode(e)):Td.styleSheet.cssText+=e,Td):e?(t=a.head||a.getElementsByTagName("head")[0],(Td=a.createElement("style")).type="text/css",void 0===Td.styleSheet?Td.appendChild(a.createTextNode(e)):Td.styleSheet.cssText=e,t.appendChild(Td),Td):void 0},_d=function e(n,a){var r,o=Xn(n);return 9!==n.nodeType&&(11===n.nodeType&&(n=n.host),o&&null!==o._isHidden?o._isHidden:!(r=t.getComputedStyle(n,null))||!n.parentNode||"none"===r.getPropertyValue("display")||!a&&"hidden"===r.getPropertyValue("visibility")||"true"===n.getAttribute("aria-hidden")||(a=e(n.assignedSlot||n.parentNode,!0),o&&(o._isHidden=a),a))},Od=function(e){var t=null!=(t=null==(t=e.props)?void 0:t.nodeName)?t:e.nodeName.toLowerCase();return"http://www.w3.org/2000/svg"!==e.namespaceURI&&!!Lo.htmlElms[t]};function Sd(e,t){var n=void 0===(n=t.include)?[]:n;t=void 0===(t=t.exclude)?[]:t;return 0!==(n=n.filter((function(t){return nr(t,e)}))).length&&(0===(t=t.filter((function(t){return nr(t,e)}))).length||(n=Md(n),nr(Md(t),n)))}function Md(e){var t,n,a=ee(e);try{for(a.s();!(n=a.n()).done;){var r=n.value;t&&nr(r,t)||(t=r)}}catch(e){a.e(e)}finally{a.f()}return t}var Pd=function(e,t){return e.length===t.length&&e.every((function(e,n){var a=t[n];return Array.isArray(e)?e.length===a.length&&e.every((function(e,t){return a[t]===e})):e===a}))},Id=function(e,t){return(e=e.actualNode||e)===(t=t.actualNode||t)?0:4&e.compareDocumentPosition(t)?-1:1};function jd(e){return e instanceof un?{vNode:e,domNode:e.actualNode}:{vNode:Xn(e),domNode:e}}var Ld,qd,zd=function(e,t,n,a){var r,o=4<arguments.length&&void 0!==arguments[4]&&arguments[4],u=Array.from(e.cssRules);return u?(r=u.filter((function(e){return 3===e.type}))).length?(r=r.filter((function(e){return e.href})).map((function(e){return e.href})).filter((function(e){return!a.includes(e)})).map((function(e,r){r=[].concat(H(n),[r]);var o=/^https?:\\/\\/|^\\/\\//i.test(e);return $d(e,t,r,a,o)})),(u=u.filter((function(e){return 3!==e.type}))).length&&r.push(Promise.resolve(t.convertDataToStylesheet({data:u.map((function(e){return e.cssText})).join(),isCrossOrigin:o,priority:n,root:t.rootNode,shadowId:t.shadowId}))),Promise.all(r)):Promise.resolve({isCrossOrigin:o,priority:n,root:t.rootNode,shadowId:t.shadowId,sheet:e}):Promise.resolve()},Vd=function(e,t,n,a){var r=4<arguments.length&&void 0!==arguments[4]&&arguments[4];return function(e){try{return!(!e.cssRules&&e.href)}catch(e){return!1}}(e)?zd(e,t,n,a,r):$d(e.href,t,n,a,!0)},$d=function(e,n,a,r,o){return r.push(e),new Promise((function(n,a){var r=new t.XMLHttpRequest;r.open("GET",e),r.timeout=nn.preload.timeout,r.addEventListener("error",a),r.addEventListener("timeout",a),r.addEventListener("loadend",(function(e){if(e.loaded&&r.responseText)return n(r.responseText);a(r.responseText)})),r.send()})).then((function(e){return e=n.convertDataToStylesheet({data:e,isCrossOrigin:o,priority:a,root:n.rootNode,shadowId:n.shadowId}),Vd(e.sheet,n,a,r,e.isCrossOrigin)}))};function Hd(){if(t.performance&&t.performance)return t.performance.now()}Ld=null,qd=Hd();var Ud,Gd,Wd={start:function(){this.mark("mark_axe_start")},end:function(){this.mark("mark_axe_end"),this.measure("axe","mark_axe_start","mark_axe_end"),this.logMeasures("axe")},auditStart:function(){this.mark("mark_audit_start")},auditEnd:function(){this.mark("mark_audit_end"),this.measure("audit_start_to_end","mark_audit_start","mark_audit_end"),this.logMeasures()},mark:function(e){t.performance&&void 0!==t.performance.mark&&t.performance.mark(e)},measure:function(e,n,a){t.performance&&void 0!==t.performance.measure&&t.performance.measure(e,n,a)},logMeasures:function(e){function n(e){an("Measure "+e.name+" took "+e.duration+"ms")}if(t.performance&&void 0!==t.performance.getEntriesByType)for(var a=t.performance.getEntriesByName("mark_axe_start")[0],r=t.performance.getEntriesByType("measure").filter((function(e){return e.startTime>=a.startTime})),o=0;o<r.length;++o){var u=r[o];if(u.name===e)return void n(u);n(u)}},timeElapsed:function(){return Hd()-qd},reset:function(){Ld=Ld||Hd(),qd=Hd()}};function Yd(){var e,t,n,r;return a.elementsFromPoint||a.msElementsFromPoint||((e=a.createElement("x")).style.cssText="pointer-events:auto",e="auto"===e.style.pointerEvents,t=e?"pointer-events":"visibility",n=e?"none":"hidden",(r=a.createElement("style")).innerHTML=e?"* { pointer-events: all }":"* { visibility: visible }",function(e,o){var u,i,l,s=[],c=[];for(a.head.appendChild(r);(u=a.elementFromPoint(e,o))&&-1===s.indexOf(u);)s.push(u),c.push({value:u.style.getPropertyValue(t),priority:u.style.getPropertyPriority(t)}),u.style.setProperty(t,n,"important");for(s.indexOf(a.documentElement)<s.length-1&&(s.splice(s.indexOf(a.documentElement),1),s.push(a.documentElement)),i=c.length;l=c[--i];)s[i].style.setProperty(t,l.value||"",l.priority);return a.head.removeChild(r),s})}function Kd(e){return"function"==typeof e||"[object Function]"===Ud.call(e)}function Xd(e){return e=function(e){return e=Number(e),isNaN(e)?0:0!==e&&isFinite(e)?(0<e?1:-1)*Math.floor(Math.abs(e)):e}(e),Math.min(Math.max(e,0),Gd)}"function"!=typeof Object.assign&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n<arguments.length;n++){var a=arguments[n];if(null!=a)for(var r in a)a.hasOwnProperty(r)&&(t[r]=a[r])}return t}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var t,n=Object(this),a=n.length>>>0,r=arguments[1],o=0;o<a;o++)if(t=n[o],e.call(r,t,o,n))return t}}),Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e,t){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var n,a=Object(this),r=a.length>>>0,o=0;o<r;o++)if(n=a[o],e.call(t,n,o,a))return o;return-1}}),"function"==typeof t.addEventListener&&(a.elementsFromPoint=Yd()),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e){var t=Object(this),n=parseInt(t.length,10)||0;if(0!==n){var a,r,o=parseInt(arguments[1],10)||0;for(0<=o?a=o:(a=n+o)<0&&(a=0);a<n;){if(e===(r=t[a])||e!=e&&r!=r)return!0;a++}}return!1}}),Array.prototype.some||Object.defineProperty(Array.prototype,"some",{value:function(e){if(null==this)throw new TypeError("Array.prototype.some called on null or undefined");if("function"!=typeof e)throw new TypeError;for(var t=Object(this),n=t.length>>>0,a=2<=arguments.length?arguments[1]:void 0,r=0;r<n;r++)if(r in t&&e.call(a,t[r],r,t))return!0;return!1}}),Array.from||Object.defineProperty(Array,"from",{value:(Ud=Object.prototype.toString,Gd=Math.pow(2,53)-1,function(e){var t=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var n,a=1<arguments.length?arguments[1]:void 0;if(void 0!==a){if(!Kd(a))throw new TypeError("Array.from: when provided, the second argument must be a function");2<arguments.length&&(n=arguments[2])}for(var r,o=Xd(t.length),u=Kd(this)?Object(new this(o)):new Array(o),i=0;i<o;)r=t[i],u[i]=a?void 0===n?a(r,i):a.call(n,r,i):r,i+=1;return u.length=o,u})}),String.prototype.includes||(String.prototype.includes=function(e,t){return!((t="number"!=typeof t?0:t)+e.length>this.length)&&-1!==this.indexOf(e,t)}),Array.prototype.flat||Object.defineProperty(Array.prototype,"flat",{configurable:!0,value:function e(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,(function(n,a){return Array.isArray(a)?n.push.apply(n,e.call(a,t-1)):n.push(a),n}),[]):Array.prototype.slice.call(this)},writable:!0}),!t.Node||"isConnected"in t.Node.prototype||Object.defineProperty(t.Node.prototype,"isConnected",{get:function(){return!(this.ownerDocument&&this.ownerDocument.compareDocumentPosition(this)&this.DOCUMENT_POSITION_DISCONNECTED)}});var Zd=function(e,t){return e.concat(t).filter((function(e,t,n){return n.indexOf(e)===t}))};function Jd(e,t,n,a,r){return(r=r||{}).vNodes=e,r.vNodesIndex=0,r.anyLevel=t,r.thisLevel=n,r.parentShadowId=a,r}var Qd=[],ep=function(e,t,n){if(a=Wc(e=Array.isArray(e)?e:[e],t=ia(t),n))return a;for(var a=e,r=(e=t,n),o=[],u=Jd(Array.isArray(a)?a:[a],e,null,a[0].shadowId,Qd.pop()),i=[];u.vNodesIndex<u.vNodes.length;){for(var l,s=u.vNodes[u.vNodesIndex++],c=null,d=null,p=((null==(l=u.anyLevel)?void 0:l.length)||0)+((null==(l=u.thisLevel)?void 0:l.length)||0),f=!1,D=0;D<p;D++){var m=D<((null==(m=u.anyLevel)?void 0:m.length)||0)?u.anyLevel[D]:u.thisLevel[D-((null==(m=u.anyLevel)?void 0:m.length)||0)];if((!m[0].id||s.shadowId===u.parentShadowId)&&la(s,m[0]))if(1===m.length)f||r&&!r(s)||(i.push(s),f=!0);else{var h=m.slice(1);if(!1===[" ",">"].includes(h[0].combinator))throw new Error("axe.utils.querySelectorAll does not support the combinator: "+m[1].combinator);(">"===h[0].combinator?c=c||[]:d=d||[]).push(h)}m[0].id&&s.shadowId!==u.parentShadowId||null==(h=u.anyLevel)||!h.includes(m)||(d=d||[]).push(m)}for(s.children&&s.children.length&&(o.push(u),u=Jd(s.children,d,c,s.shadowId,Qd.pop()));u.vNodesIndex===u.vNodes.length&&o.length;)Qd.push(u),u=o.pop()}return i},tp=function(e){var t,n,r,u;e=void 0===(e=e.treeRoot)?o._tree[0]:e;return t=[],e=ep(e=e,"*",(function(e){return!t.includes(e.shadowId)&&(t.push(e.shadowId),!0)})).map((function(e){return{shadowId:e.shadowId,rootNode:lr(e.actualNode)}})),(e=Zd(e,[])).length?(n=a.implementation.createHTMLDocument("Dynamic document for loading cssom"),n=Nd(n),r=n,u=[],e.forEach((function(e,t){var n=e.rootNode,a=function(e,t,n){return function(e){var t=[];return e.filter((function(e){if(e.href){if(t.includes(e.href))return!1;t.push(e.href)}return!0}))}(t=11===e.nodeType&&t?function(e,t){return Array.from(e.children).filter(np).reduce((function(n,a){var r=a.nodeName.toUpperCase();a="STYLE"===r?a.textContent:a,a=t({data:a,isLink:"LINK"===r,root:e});return n.push(a.sheet),n}),[])}(e,n):function(e){return Array.from(e.styleSheets).filter((function(e){return!!e.media&&ap(e.media.mediaText)}))}(e))}(n,e=e.shadowId,r);if(!a)return Promise.all(u);var o=t+1,i={rootNode:n,shadowId:e,convertDataToStylesheet:r,rootIndex:o},l=[];t=Promise.all(a.map((function(e,t){return Vd(e,i,[o,t],l)})));u.push(t)})),Promise.all(u).then((function e(t){return t.reduce((function(t,n){return Array.isArray(n)?t.concat(e(n)):t.concat(n)}),[])}))):Promise.resolve()};function np(e){var t=e.nodeName.toUpperCase(),n=e.getAttribute("href"),a=e.getAttribute("rel");n="LINK"===t&&n&&a&&e.rel.toUpperCase().includes("STYLESHEET");return"STYLE"===t||n&&ap(e.media)}function ap(e){return!e||!e.toUpperCase().includes("PRINT")}var rp=function(e){return e=void 0===(e=e.treeRoot)?o._tree[0]:e,e=ep(e,"video, audio",(function(e){return(e=e.actualNode).hasAttribute("src")?!!e.getAttribute("src"):!(Array.from(e.getElementsByTagName("source")).filter((function(e){return!!e.getAttribute("src")})).length<=0)})),Promise.all(e.map((function(e){var t;e=e.actualNode;return t=e,new Promise((function(e){0<t.readyState&&e(t),t.addEventListener("loadedmetadata",(function n(){t.removeEventListener("loadedmetadata",n),e(t)}))}))})))};function op(e){return!e||void 0===e.preload||null===e.preload||("boolean"==typeof e.preload?e.preload:(e=e.preload,"object"===r(e)&&Array.isArray(e.assets)))}function up(e){var t=(n=nn.preload).assets,n=n.timeout;n={assets:t,timeout:n};if(e.preload&&"boolean"!=typeof e.preload){if(!e.preload.assets.every((function(e){return t.includes(e.toLowerCase())})))throw new Error("Requested assets, not supported. Supported assets are: ".concat(t.join(", "),"."));n.assets=Zd(e.preload.assets.map((function(e){return e.toLowerCase()})),[]),e.preload.timeout&&"number"==typeof e.preload.timeout&&!isNaN(e.preload.timeout)&&(n.timeout=e.preload.timeout)}return n}var ip=function(e){var t={cssom:tp,media:rp};return op(e)?new Promise((function(n,a){var r=(o=up(e)).assets,o=o.timeout,u=setTimeout((function(){return a(new Error("Preload assets timed out."))}),o);Promise.all(r.map((function(n){return t[n](e).then((function(e){return t={},e=e,(a=Q(a=n))in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t;var t,a}))}))).then((function(e){e=e.reduce((function(e,t){return G({},e,t)}),{}),clearTimeout(u),n(e)})).catch((function(e){clearTimeout(u),a(e)}))})):Promise.resolve()};function lp(e,t,n){return function(a){var o,u=(o=e[a.id]||{}).messages||{};delete(o=Object.assign({},o)).messages,n.reviewOnFail||void 0!==a.result?o.message=a.result===t?u.pass:u.fail:("object"!==r(u.incomplete)||Array.isArray(a.data)||(o.message=function(e,t){function n(e){return e.incomplete&&e.incomplete.default?e.incomplete.default:ad()}if(!e||!e.missingData)return e&&e.messageKey?t.incomplete[e.messageKey]:n(t);try{var a=t.incomplete[e.missingData[0].reason];if(a)return a;throw new Error}catch(a){return"string"==typeof e.missingData?t.incomplete[e.missingData]:n(t)}}(a.data,u)),o.message||(o.message=u.incomplete)),"function"!=typeof o.message&&(o.message=ld(o.message,a.data)),rr(a,o)}}var sp=function(e){var t=o._audit.data.checks||{},n=o._audit.data.rules||{},a=Ja(o._audit.rules,"id",e.id)||{},r=(e.tags=ea(a.tags||[]),lp(t,!0,a)),u=lp(t,!1,a);e.nodes.forEach((function(e){e.any.forEach(r),e.all.forEach(r),e.none.forEach(u)})),rr(e,ea(n[e.id]||{}))},cp=function(e,t){return ep(e,t)};function dp(e,t){var n,a=o._audit&&o._audit.tagExclude?o._audit.tagExclude:[],r=t.hasOwnProperty("include")||t.hasOwnProperty("exclude")?(n=t.include||[],n=Array.isArray(n)?n:[n],r=t.exclude||[],(r=Array.isArray(r)?r:[r]).concat(a.filter((function(e){return-1===n.indexOf(e)})))):(n=Array.isArray(t)?t:[t],a.filter((function(e){return-1===n.indexOf(e)})));return!!(n.some((function(t){return-1!==e.tags.indexOf(t)}))||0===n.length&&!1!==e.enabled)&&r.every((function(t){return-1===e.tags.indexOf(t)}))}var pp=function(e,t,n){var a=n.runOnly||{};n=(n.rules||{})[e.id];return!(e.pageLevel&&!t.page)&&("rule"===a.type?-1!==a.values.indexOf(e.id):n&&"boolean"==typeof n.enabled?n.enabled:"tag"===a.type&&a.values?dp(e,a.values):dp(e,[]))};function fp(e,t){var n,a,r;return t?(r=e.cloneNode(!1),n=Tn(r),r=1===r.nodeType?(a=r.outerHTML,Kn.get(a,(function(){return Dp(r,n,e,t)}))):Dp(r,n,e,t),Array.from(e.childNodes).forEach((function(e){r.appendChild(fp(e,t))})),r):e}function Dp(e,t,n,r){return t&&(e=a.createElement(e.nodeName),Array.from(t).forEach((function(t){var a,o,u;a=n,o=t.name,void 0!==(u=r)[o]&&(!0===u[o]||Nn(a,u[o]))||e.setAttribute(t.name,t.value)}))),e}function mp(e,t){var n=[];if(o._selectCache)for(var a=0,r=o._selectCache.length;a<r;a++){var u=o._selectCache[a];if(u.selector===e)return u.result}for(var i,l=t.include.reduce((function(e,t){return e.length&&nr(e[e.length-1],t)||e.push(t),e}),[]),s=(i=t).exclude&&0!==i.exclude.length?function(e){return Sd(e,i)}:null,c=0;c<l.length;c++){var d=l[c];n=function(e,t){if(0===e.length)return t;var n;e.length<t.length&&(n=e,e=t,t=n);for(var a=0,r=t.length;a<r;a++)e.includes(t[a])||e.push(t[a]);return e}(n,ep(d,e,s))}return o._selectCache&&o._selectCache.push({selector:e,result:n}),n}var hp=function(e){e.forEach((function(e){var n=e.elm,a=e.top;e=e.left;if(n===t)return n.scroll(e,a);n.scrollTop=a,n.scrollLeft=e}))};function gp(e){return function e(t,n){var a=t.shift();return n=a?n.querySelector(a):null,0===t.length?n:null!=n&&n.shadowRoot?e(t,n.shadowRoot):null}(Array.isArray(e)?H(e):[e],a)}function bp(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:a,n=Array.isArray(e)?H(e):[e];return 0===e.length?[]:function e(t,n){var a=(t=B(t))[0],r=t.slice(1);if(t=n.querySelectorAll(a),0===r.length)return Array.from(t);var o,u=[],i=ee(t);try{for(i.s();!(o=i.n()).done;){var l=o.value;null!=l&&l.shadowRoot&&u.push.apply(u,H(e(r,l.shadowRoot)))}}catch(e){i.e(e)}finally{i.f()}return u}(n,t)}var vp=function(){return["hidden","text","search","tel","url","email","password","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]},yp=[,[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,,,,,1,1,1,1,,,1,1,1,,1,,1,,1,1],[1,1,1,,1,1,,1,1,1,,1,,,1,1,1,,,1,1,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,,,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1],[,1,,,,,,1,,1,,,,,1,,1,,,,1,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,,,1,,,,,1,1,1,,1,,1,,1,,,,,,1],[1,,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,,1,,1,,,,,1,,1,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,,1,1,1,,1,,1,1,1,,,1,1,1,1,1,1,1,1],[,,1,,,1,,1,,,,1,1,1,,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1,1,1,1,1,,,1,1,1],[1,1,1,1,1,,,1,,,1,,,1,1,1,,,,,1,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1],[,1,,1,1,1,,1,1,,1,,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,,,1,1,1,,,1,1,,,,,,1,1],[1,1,1,,,,,1,,,,1,1,,1,,,,,,1,,,,,1],[,1,,,1,,,1,,,,,,1],[,1,,1,,,,1,,,,1],[1,,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,,1,,,1,1,1,1],[,1,1,1,1,1,,,1,,,1,,1,1,,1,,1,,,,,1,,1],[,1,,,,1,,,1,1,,1,,1,1,1,1,,1,1,,,1,,,1],[,1,1,,,,,,1,,,,1,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,,1,1,1,,,1,1,1,1,1,1,,1,,,,,1,1,,1,,1],[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,1,1],[,1,1,1,,,,1,1,1,,1,1,,,1,1,,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,,1,,,,,1,1,1,,,1,,1,,,1,1],[,,,,1,,,,,,,,,,,,,,,,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,,1,1,1,,1,1,,,,1,1,1,1,1,,,1,1,1,,,,,1],[1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,1,,,,,,,1],[,1,1,,1,1,,1,,,,,,,,,,,,,1],,[1,1,1,,,,,,,,,,,,,1],[,,,,,,,,1,,,1,,,1,1,,,,,1]],[,[1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,,1],[,,,1,,,,,,,,,,,,,,,1],[,1,,,1,1,,1,,1,1,,,,1,1,,,1,1,,,,1],[1,,,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,,,,1],,[,1,1,1,1,1,,1,1,1,,1,1,,1,1,,,1,1,1,1,,1,1,,1],[,1,,,1,,,1,,1,,,1,1,1,1,,,1,1,,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,,,1,1,1,1,1,1,1,,,1,,,1,,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,,,,1],[,,,,,,,1,,,,1,,1,1],[,1,1,1,1,1,1,1,,,,1,1,1,1,1,,,1,1,,1,1,1,1,1],[,1,,,1,1,,1,,1,1,1,,,1,1,,,1,,1,1,1,1,,1],[,1,1,1,,1,1,,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1],[,,,,,,,,,,,,,,,,1],,[,1,1,1,1,1,,1,1,1,,,1,,1,1,,1,1,1,1,1,,1,,1],[,,1,,,1,,,1,1,,,1,,1,1,,1],[,1,1,,1,,,,1,1,,1,,1,1,1,1,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,1,,1,,1,1],,[,1,1,,1,,,1,,1,,,,1,1,1,,,,,,1,,,,1],[1,1,,,1,1,,1,,,,,1,,1]],[,[,1],[,,,1,,,,1,,,,1,,,,1,,,1,,,1],[,,,,,,,,,,,,,,,,,,1,1,,,,,,1],,[1,,,,,1],[,1,,,,1,,,,1],[,1,,,,,,,,,,,1,,,1,,,,,,,,,1,1],[,,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,1,,1],[,1],[,1,,1,,1,,1,,1,,1,1,1,,1,1,,1,,,,,,,1],[1,,,,,1,,,1,1,,1,,1,,1,1,,,,,1,,,1],[,1,1,,,1,,1,,1,,1,,1,1,1,1,,,1,,1,,1,1,1],[1,1,1,1,1,,1,,1,,,,1,1,1,1,,1,1,,,1,1,1,1],[1,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],,[,1,,,,,,1,1,1,,1,,,,1,,,1,1,1,,,1],[1,,,,,1,,1,1,1,,1,1,1,1,1,,1,,1,,1,,,1,1],[1,,1,1,,,,,1,,,,,,1,1,,,1,1,1,1,,,1,,1],[1,,,,,,,,,,,,,,,,,1],[,,,,,1,,,1,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,,,1],[,1,,,,1]],[,[1,1,1,,1,,1,1,1,1,1,1,1,1,1,,1,,1,,1,1,,,1,1,1],[,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],,[,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1],,[1,1,,,,1,1,,,,,,1,,,,1,,1,,1,1,,1],[1],[,,,,,,,,,,,1,,,,,,,,,,,1],[,1,,,,,,,1,1,,,1,,1,,,,1,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,,1],[,,1,,,,,1,,1],[1,,,,1,,,,,1,,,,1,1,,,,1,1,,,,,1],[,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[1,,,1,1,,,,,,,1,,1,,1,1,1,1,1,1],[,,,,,1,,,,,,,1,,,,,,,1],,[,,1,1,1,1,1,,1,1,1,,,1,1,,,1,1,,1,1,1,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,,,,1],,[1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,,,1,1,1,1,,,,,,1,,1,,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,,,,1,,1,,,1,1,1,1,1],[,,,,,,,,,,,1,,,,,,,,,1,,,,1],[,1,1,,1,1,,1,,,,1,1,,1,1,,,1,,1,1,,1],[,1,,1,,1,,,1,,,1,1,,1,1,,,1,1,1],[,1,1,1,1,1,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,,,,,,,,,1,,1,,1,1,,,,1,,,1],[,1,,,1,1,,,,,,,,,1,1,1,,,,,1],[1,,,1,1,,,,1,1,1,1,1,,,1,,,1,,,1,,1,,1],[,1,1,,1,1,,1,1,,,,1,1,1,,,1,1,,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,,,,1,,,,,,,,,1],[,1,,,,,,,,1,,,,,1,,,,1,,,1],[,1,1,1,1,,,1,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1],[,,,,,1,,1,,,,,1,1,1,1,1,,,1,,,,1],[,1,,,,,,,,1,,,,,,,,,,,,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,1,,,,1,,1,1,1,1,1,,1,1,,,,,,1],[,1,1,1,1,1,1,1,,1,1,,,1,1,,,,1,,1,1,,1,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,1,1,,1,,,1,1,1,1,,,1,,,,,,,1],[,1,,,,,,,,1,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1],[,1,1,,,,,,,,,,,,1,1,,,,,,1],[,1,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,,,,,1],[1,1,,,1,,,1,1,1,,,,1],,[,,,,,,,,,,,,,1,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,1,,,,,,,1],[1,1,1,,1,,1,1,1,1,1,1,1,1,,1,,,1,,1,,,1,1],[,,,,,,,,,1],[,1,,,,1,,,,,,1,,,1,,,,,1],[,1,1,,1,1,,,,,,,,,,,,,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,1,1,1,,,,1,1,,,,1,,1],[1,1,1,1,1,1,,,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,,1,1],[,,,,,,,,,,,,,,,1,,,,1],,[1,1,,1,,1,,,,,,1,,1,,1,1,,1,,1,1,,1,1,,1],[,,1,,,,,,1,,,,1,,1,,,,,1],[1,,,,,,,,,1,,,,,,1,,,,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,,1,,,,,,1,,,1,,,,,,,,1],[,1,,1,,,,,,,,,,,,1],,[1,1,,,,,,,,,,,,,,,,,,,,,,1,1],[1]],[,[1,,,,,,,,,1,,,,,1,,1,,1],[,1,1,,1,1,,1,1,1,,,1,1,1,,,,1,,,1,,,,1],[,1,,,,,,,1,,,,1,,,,,,1],[1,1,1,1,1,1,,,,1,,,,,,,,,1,1,1,1],[1],[,1,1,,,1,1,,,,,1,,1,,,,,,,,1,,,,1],[1,,1,,,1,,1,,,,,1,1,1,1,,,,1,,,,1],[,,1,,,,,,,1,,,,,,,1,,,,,,,1],[1,,,,,,,,,,,,,,1,,,,1],[,,,1,,1,,,,,1,,,,1,1,,,,1],[1,,,,,1,,,,1,,1,1,,,1,1,,1,1,1,,1,1,1,,1],[,1,1,,,,,1,,1,,1,1,1,,1,1,,,1,,1,1,1],[,1,,,,1,,,,1,,,1,,1,1,,,1,1,,,,,,1],[1,,1,1,,1,,1,1,,1,,1,1,1,1,1,,,1,1,,,,,,1],[1,,,,,,,,,,,,,,,,,,1,,,1,,1],[,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,,1,,1],[,1,,,,1,,,1,1,,1,,,1,1,,,1,,,1,,,1,1],[1,1,,1,1,1,,1,1,1,,1,,1,1,1,,,1,,1,1],[1,,1,1,1,1,,,,1,,1,1,1,,1,,,1,1,1,,1,1,1,1,1],[1,,,,,,,,,,,,,1],[,,1,,,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,,,1,,1,,1,,,,1],[,,,1,,,,,,,,,1],[,1,,,,,,,,,,,,,,1,,,,,,,,,1],[,,,,,,,,1,1,,,,,,,,,1,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,,,1,1,1],[,,,,,1,,,,1,1,1,,,1,1,,,1,,1,1,,1],[,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,1,,,,,,,,,,,,,1],[,,1,,,1,,1,1,1,,1,1,,1,,,,1,,1,1],,[,,1,,,1,,,,,,1,,,,1],[,,,,,,,,,1,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,,1,1,,1,,1,,,1,1,1,,,1],[,,,,,1,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,1,,1,1,,1,,,1],[,,,,,1,,,,,,,,,,,,,,1],[,1,1,1,1,,,,,1,,,1,,1,,,,1,1,,,,1,1],[,1,,,1,,,1,,1,1,,1,,,,,,,1],[,,1,,1,,,1,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,,,,,,,,,,1,,1,1],[,,,,,,,,,,,,1],,[,1,1,1,1,,,,1,1,,1,1,1,1,1,1,,1,1,1,1,,1,,1],[1,,,,1,,,,,,,,,,1],[1,,,,,,,,,1],,[,1,,,,1,,,,,,,,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,,1,,,,1,1,,,1,1,,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,1],[1,1,1,,,,,1,1,1,,1,1,1,1,,,1,1,,1,1,,,,,1],[,1,,,,,,,1,1,,,1,1,1,,1,,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,,,1,,,,1,,,1,,,,1,,,,,,,1,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1],[1,1,1,,1,,,1,1,1,1,,1,1,1,1,,,,1,,1,,1,,,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,,1,1,,,,,,,,,1],,[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,,1,,1,,,,1],[,1,,,1,1,,1,1,1,,,1,1,1,1,1,,1,1,1,,1,,,1],[1,,,1,,,,1,1,1,,,,,1,1,,,,1,,1],[1,1,,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,,1,,1,,,,,,,,1,,1],[,1,,,,1,,1,1,,,,1,1,,1,,,,1,1,1,,1],,[,1,,,,,,1,,,,,,,1],[,,,,,,,,1,,,,1,,1,,,,,,,,,,,,1]],[,[,1,1,,1,1,1,1,,1,1,1,,1,1,,1,1,,1,1,1,1,1,1,,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,,,1,,,,,,,,1,,,,,,1,,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,,1,,1,1,1,1,1,1,1,,1,1,,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1],[,1,1,,,,,1,1,1,,,1,,1,1,,,,1,,1,,,1,1],[,,,,,,,1,,,,1,1,1,1,1,,1,,,,,,,,1],[1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,,1,,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,1,1,,1,,1,1,1,,1,,1,1,,1,1,,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,,1,,,,,1,,1],[,1,1,1,,1,,1,,1,,,,1,,1,,,1,,,,,,1,1],[,1,,,1,1,,1,,1,,1,1,1,1,1,,1,1,,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,,1,,1,,1,,,,,,1,,1,,,,1,1]],[,[,1,,1,,,,,,,,,,,,,,,1,,,,1],[,,,,,,,,,1,,1,1,1,,1,,,1,,1,1],[1,1,,,,,,,1,,,,,,,1,,,,,,1],[,1,,,,,,,,,,1,,,,,,,,,1,1],,[,,,,,,,,,,,,,,,1,,,,1,,1],[,,1,1,,1,,1,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,,,,,,,,1],[1,,1,1,,,,1,,,,,,,,,1,,,1,,,1,1],[,1,1,,1,1,,1,1,1,1,1,1,1,1,1,,,1,1,,1,1,,1],[,1,,,1,1,,,,,,1,,1,,1,,,1,,1,1],[1,1,1,1,,1,,1,,1,,1,1,,1,1,1,1,1,,1,1,1,1,1],[,1,1,,,1,,1,,1,1,1,,,1,1,1,,1,1,1,1,,1,1],[,,,,1,,,1,,,,,,,1,,,,1,1],[,1,,,,,,,,,,1,,1,,1,,,,,1,,,,,1],,[1,1,,1,,1,,1,1,,,,,,1,1,,,1,1,1,1,1,1,1,1,1],[1,1,,1,,,,,,1,,,,,,1,1,,,,1,1,,,1],[,1,1,,1,1,,,,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,,,1,,,,1,,,,1,1],[,,,,1],[,,,,,,,,,1,,,1],,[,,1,,1,,,,,,,,,1,,,,,,,,,,,,1],[,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,,,1],[,1,,1,,,,,,1,,,,,1,1,,,,,1,1],[,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,,,1,,1,1,1],[,1,,,,1,,,,,,,1],[,1,,,1,,,1,,1,,1,1,,1,,,,,1,,1,,,,1,1],[,1,,,1,,,1,1,1,,1,1,1,1,1,,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,1,1,,,,1,1,,,,,,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,,1,1,,1,1,1,1,1],[,1,,,,1,,,,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,1,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,,1,1,1,,1,1,1,,,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,,,,,,,1,1,,,,,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,1,,1,1,1,1],,[,1,1,,,,,1,,1,,,,1,1,1,,,1,,,,,1],[,,,,,,,,,,,,,1],[,,,,,1,,,,,,,,1,1,,,,,1,,1,,,1,1],[,,,,,,,,,,,,,,1]],[,[,1],,,,,,,,,,,,,,,,,,,,[1,1,1,1,1,,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,1,1,1,1],[,1,,1,,1,,,1,1,1,,1,1,1,1,1,,,1,,,,1,,1,1],[,1,,1,,1,,,1,,,,,1,,,,,,1,1],[,1,,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1],[,1,,,,,,,,,,,,,,,1]],[,[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,,,,,,,,,1,1,,,,1],[,,,,,,1],[,,1],[,1,1,,,1,,1,,1,1,,1,1,1,,,,1,1,1,,,,,1],,[,1,,,,1,,,,,,1,,,1,,,,1,1,,1],[,,,,,,,1,,,,,,,,,1],[,1,,,,1,1,,,,,,1,1,1,,,,1,,1,1],[,,,,,,,1,,1,,,,,,,,,,1],[,1,1,,,,,,1,1,,,,1,,,,,,,1,,,1],,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,,1,,,1,,,,,1,,1,,1,,1,,,,,1],[1,1,1,1,1,1,1,1,,,,,1,1,,1,1,,1,,,1,,1],[,,,,,,,,,,,,,,1,,,,,,1],,[,,,,,,,,,1,,,,,,1,,,,,1],[,,1,,,,,,,1,,,1,1],[,,,1,,,,,1,,,,,1,,,,,,1,,,,1],[1,,1,1,,1,1,1,1,1,,1,,,,1,1,1,,,1,1,,,,1,1],,[1,1,,,,,,,,,,1,,1,,1,,,1],[,,,,1,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,1],[,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,,1,,,1,,,,,,,,1,,,,,,1,,,,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,1,,,,1,1,1,1,1,1,,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,1,,1,1,,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,,1,,1,,1,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,,,,,,1,,1,,,,,1,1,,,,,1],[1,,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,,1,,,,1,1,1,1,1,,,1,1,,1,,1],[,1,1,1,1,,,,,1,,1,1,1,1,1,,,1,1,,,,1,1,1],[,1,1,1,1,1,,1,,,,,1,,1,,1,,,1,,,1,1,,1]],[,[1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,,,,,1,,,,,1,1,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,,,,1,,1,1,,1,1,1,1,1,,,1,,1,,1],[1,1,1,,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,,1,,,,,,,,,,1,1,1,1,1,1,1,,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,1,1,,,,,,1,1,1,1,1,,,,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,,1,1,1],[,1,1,1,,1,,1,1,1,1,,,1,1,1,,1,1,1,1,1,,,1,1],[1,1,,,,1,,,1,1,1,,1,,1,,1,,1,1,1,1,1,,1,,1],[,1,,,,,,,1,,1,,1,1,1,1,,,,,,,,,1]],[,[,,,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,1,,,1,,,,,,1,,,1,,,,1],,[,1,,,,1,,1,,1,1,,1,1,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],[1,1,1,,,1,,,,,,,,,1,1,,,,,,,,,,1],[,1,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1,,,1],[,,,,,,,,,1],[1,1,,,,,,1,1,1,,1,1,,,,1,1,,1,,1,1,1,,1],[,1,1,1,,1,1,,,1,,1,1,1,1,,,,,,,1,,1],[,1,1,1,1,,,1,,1,,,,1,1,1,1,,1,1,,1],[,1,,,1,1,,1,,,,1,,1,1,,1,,1,,,1,,,1,,1],[,,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,,,,,1],,[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1],[,1,,,,,,,1,1,,1,,,,,1,,,1,,1],[,1,,,,1,,,1,,,,,,,,1,,1,,,1],[,,,,,,,,,,,,,1,1,,,,1,,,1],[,,,,,1,,,1,,,,1],[,1],,[,1],[1,,,,,,,,,,,,,,1,,,,,1]],[,[,1,,,,1,1,1,1,1,1,,1,1,1,1,1,,1,1,,1,1,,,1],[,,1,,,,,,,,,1],,,[1,,,1,1,,,,,,,,1,1,,1,1,,1],,[,,,,,,,,,,,,,,,,,,1,,1],,[1,,,1,1,,1,1,,,,,1,,1,,,,,1,1,,1],,[,1,,,,,,,,1,1,1,1,1,,1,1,,,,1,1],[,,,,,,,,,,,,,,,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,1,1,1,1],[,,,,,,,,,,,1,,1,,,1],[1,,,,,,,,,,,,,,,,,,1,,1],,,[,1,,,,,,,,,,,,,,1,,,,1,1],[,,,,,,,,,1,,,1,,,,,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,1,1,,,,,,1],,[,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,1,1,,1,1,1,1,1,1,,,1,1,1,1,1,,1,1],[,1,,,,,,,,1],[,,,,1,,,1,,,1,1,,,,,,,,,,1,,,,1],[,1,,1,1,,,1,1,1,,,,1,1,1,1,,1,1,1,1,,1],[,,,,,,,1],[,1,1,,,,,1,,1,,,,,,1,,,,,,1,,1,,1],[,1,,,,,,1,,,,1,,,,,,,,,,1],[,,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1,1,1,1,,1],[,1,,,,,,,,1],[,1,1,,1,,,,,,,,1,,,,,,1,,,1,,1,,1],[,1,,1,,1,,1,1,1,,1,1,1,,1,,,1,1,,1,1,1,1,1],[,1,1,1,1,1,,,1,1,,,,1,1,1,,,,1,1,,,1,1],[,,1,1,1,1,,1,,1,,1,,1,1,1,1,,,,,1,,1,,1],[1,1,1,1,1,1,1,1,,1,,1,,1,1,1,,,1,1,,,,1,,1],[,,,1],,[,1,1,,1,,,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1],[,1,,,,,,1,,1,,1,,,,,,,1,1,,1,1],[,,,,,,1,,1,1,,1,,1,,,,,,,,,,1],[,1,1,,1,,,,1,,,,1,1,1,,,,1,,1,1,1,,1,1],,[,1,1,,,,,,,,,,,,,1,,,1,,,,,1],[,1,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,1,,,,1,,,,,1,,,,,,,1]],[,[,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[,1,1,1,1,1,,1,,1,1,,,1,1,1,1,,1,,,,,1,1,1],[,,1,1,,1,,1,1,,,,1,1,1,1,,,1,,1,1,1,1,,1],[,1,,1,,,,,,,,1,,1,,1,,,,,,,,,,1],[,,1,,1,,,1,,,,,1,1,,,1,,1,1,1,1],[,1],[,1,1,,1,,1,1,,1,,,1,1,1,,,,1,,,1,,1],[1,1,,1,1,1,,,,,,,,,,,,,1,,1,1,1],[,1,1,,,,,,,1,,,1,,1,,1,,1,1,,,1,,,1],[,,1,,,,,,,,,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,,1,,,,,1,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,1,1,1,,,,1,1],[,,,1,1,,,1,,1,,1,,1,1,1,1,,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,,1,,1,,,,1,1,,,1,1,,1,1,,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1,,1,1,,,1],[,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,,1,,,1,,,1,,1,1,1,1,1,,1,,1,1],[,,,,,1,,,,1,,,,,1,1,,,,1],[,1,,1,1,1,,1,,,1,1,1,,,1,,,1,,1,,,1],[,,1,,,,,,,,,1,,1,,,,,1,,1],[,1,1,,,,,,,,1,1,1,,,,,,,,1,,,,,1],[,,,,,,,,1,,,,,1,,,1]],[,[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,,1,1,1,1,1,1,1,1,,,,,,,,,1,1],[,,,,,,,,1,,,,1,,1,,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,1,,1,,1,,,,1,1,,1,,1,,,,1,1,1,1,1,,,1],,[,1,,,,,,,,1,,,1,1,,,1,,1,1,,1,,1],[,1,,,1,,,,,,,,1,,,,,,,1],[1,1,,,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1],,[,1,,,,,,1,,1,,1,1,1,1,1,,,1,,1,1,,,,1],[,1,1,,,1,,1,,1,,,1,1,1,1,,,1,,,1,,,,1],[,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1],[,1,,,1,1,,1,1,,,1,1,,1,1,,1,,1,,1],[1,,1,,,,,1,,1,,1,1,1,1,,,,,1,1,,,,1,1],[,1,1,,,,,1,1,,,1,,1,1,1,1,,,,,,,,,,1],,[,1,1,,,1,,,,1,,1,1,1,1,1,,,,1,,,,1,,1],[,,,1,1,,,1,,,,,1,,1,1,1,,1,1,,,,,,1],[,1,,,,,,,,,,,1,,,,1,,,,,,,1,,1],[,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,1,,,,,1,,1,,,1,1,,1,1,,1],[,1,,,,,,1,,,,,1,1,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1,,,1,,,,,1],[,,,,,,,1,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,,1,,,,,,,1,,,,,,,,1,,,1],[,1,,,,,,,1],[,,,,,,,,,,1],[,1,,,,,,1,1,,,,,,1],,[,1,1,,,,,,1,,,,,1,1,,,,1],[1,,1,,1,,,,,1,,,,,1,,,,,,,,,1,1],[,1,1,,,,,,,,,1,1,1,1,,,,1,,,,,1,,,1],,[,1,1,,1,,,1,1,,,1,,,1,1,1,,1,,1,1,1,,,,1],[,,,,,1,,,,,1,,,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,,,1,,,,,1,,,,,1,,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,1],[,1,,,,,,1,,,,,,,1,1,1,,,1],[,1,,,,,,,,,,1,1,1,,,,,1,,,1],[,,,,,1,,1,,,,,1,1,1,,1,1,,1,1,1,,,1,1],[1,1,,,,,,,1,,,,,1,1,,,,,,,,,,,1],,[,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,,1,,,,,1,,,1,,,,1,,1],[,1,,,,,,,,,1]]];function Fp(e){e=Array.isArray(e)?e:yp;var t=[];return e.forEach((function(e,n){var a=String.fromCharCode(n+96).replace("`","");Array.isArray(e)?t=t.concat(Fp(e).map((function(e){return a+e}))):t.push(a)})),t}var wp,Ep=function(e){for(var t=yp;e.length<3;)e+="`";for(var n=0;n<=e.length-1;n++)if(!(t=t[e.charCodeAt(n)-96]))return!1;return!0};N(Cp,un),wp=_(Cp),J(Cp,[{key:"props",get:function(){return this._props}},{key:"attr",value:function(e){return null!=(e=this._attrs[e])?e:null}},{key:"hasAttr",value:function(e){return void 0!==this._attrs[e]}},{key:"attrNames",get:function(){return Object.keys(this._attrs)}}]),os=Cp;function Cp(e){var t,n,a;return X(this,Cp),(t=wp.call(this))._props=function(e){var t=null!=(t=e.nodeName)?t:kp[e.nodeType],n=null!=(n=null!=(n=e.nodeType)?n:Ap[e.nodeName])?n:1,a=(Fn("number"==typeof n,"nodeType has to be a number, got \'".concat(n,"\'")),Fn("string"==typeof t,"nodeName has to be a string, got \'".concat(t,"\'")),t=t.toLowerCase(),null);return"input"===t&&(a=(e.type||e.attributes&&e.attributes.type||"").toLowerCase(),vp().includes(a)||(a="text")),e=G({},e,{nodeType:n,nodeName:t}),a&&(e.type=a),delete e.attributes,Object.freeze(e)}(e),t._attrs=(e=(e=e).attributes,n=void 0===e?{}:e,a={htmlFor:"for",className:"class"},Object.keys(n).reduce((function(e,t){var o=n[t];return Fn("object"!==r(o)||null===o,"expects attributes not to be an object, \'".concat(t,"\' was")),void 0!==o&&(e[a[t]||t]=null!==o?String(o):null),e}),{})),t}var xp,Ap={"#cdata-section":2,"#text":3,"#comment":8,"#document":9,"#document-fragment":11},kp={},Bp=(Object.keys(Ap).forEach((function(e){kp[Ap[e]]=e})),os),Tp=function(e,t){if(e=e||function(){},t=t||o.log,!o._audit)throw new Error("No audit configured");var n=o.utils.queue(),r=[],u=(Object.keys(o.plugins).forEach((function(e){n.defer((function(t){function n(e){r.push(e),t()}try{o.plugins[e].cleanup(t,n)}catch(e){n(e)}}))})),o.utils.getFlattenedTree(a.body));o.utils.querySelectorAll(u,"iframe, frame").forEach((function(e){n.defer((function(t,n){return o.utils.sendCommandToFrame(e.actualNode,{command:"cleanup-plugin"},t,n)}))})),n.then((function(n){0===r.length?e(n):t(r)})).catch(t)},Np={};function Rp(e){return Np.hasOwnProperty(e)}function _p(e){return"string"==typeof e&&Np[e]?Np[e]:"function"==typeof e?e:xp}var Op={},Sp=(re(Op,{allowedAttr:function(){return Sp},arialabelText:function(){return _o},arialabelledbyText:function(){return Ro},getAccessibleRefs:function(){return Pp},getElementUnallowedRoles:function(){return qp},getExplicitRole:function(){return Vo},getImplicitRole:function(){return gu},getOwnedVirtual:function(){return xu},getRole:function(){return Fu},getRoleType:function(){return ki},getRolesByType:function(){return Vp},getRolesWithNameFromContents:function(){return Gp},implicitNodes:function(){return Yp},implicitRole:function(){return gu},isAccessibleRef:function(){return Kp},isAriaRoleAllowedOnElement:function(){return Ip},isComboboxPopup:function(){return Xp},isUnsupportedRole:function(){return qo},isValidRole:function(){return zo},label:function(){return Jp},labelVirtual:function(){return ui},lookupTable:function(){return Wp},namedFromContents:function(){return Cu},requiredAttr:function(){return Qp},requiredContext:function(){return ef},requiredOwned:function(){return tf},validateAttr:function(){return af},validateAttrValue:function(){return nf}}),function(e){e=Lo.ariaRoles[e];var t=H(Ho());return e&&(e.allowedAttrs&&t.push.apply(t,H(e.allowedAttrs)),e.requiredAttrs)&&t.push.apply(t,H(e.requiredAttrs)),t}),Mp=/^idrefs?$/,Pp=function(e){e=e.actualNode||e;var t=(t=sr(e)).documentElement||t,n=Kn.get("idRefsByRoot",(function(){return new WeakMap})),a=n.get(t);return a||(n.set(t,a={}),function e(t,n,a){if(t.hasAttribute){var r;"LABEL"===t.nodeName.toUpperCase()&&t.hasAttribute("for")&&(n[r=t.getAttribute("for")]=n[r]||[],n[r].push(t));for(var o=0;o<a.length;++o){var u=a[o];if(u=Xo(t.getAttribute(u)||""))for(var i=Uc(u),l=0;l<i.length;++l)n[i[l]]=n[i[l]]||[],n[i[l]].push(t)}}for(var s=0;s<t.childNodes.length;s++)1===t.childNodes[s].nodeType&&e(t.childNodes[s],n,a)}(t,a,Object.keys(Lo.ariaAttrs).filter((function(e){return e=Lo.ariaAttrs[e].type,Mp.test(e)})))),a[e.id]||[]},Ip=function(e,t){e=e instanceof un?e:Xn(e);var n=gu(e);e=hu(e);return Array.isArray(e.allowedRoles)?e.allowedRoles.includes(t):t!==n&&!!e.allowedRoles},jp=["doc-backlink","doc-biblioentry","doc-biblioref","doc-cover","doc-endnote","doc-glossref","doc-noteref"],Lp={header:"banner",footer:"contentinfo"},qp=function(e){var t,n,a,r=!(1<arguments.length&&void 0!==arguments[1])||arguments[1],o=jd(e).vNode;return Od(o)?(a=o.props.nodeName,t=gu(o)||Lp[a],a=[],((n=o)?(n.hasAttr("role")&&(n=Uc(n.attr("role").toLowerCase()),a=a.concat(n)),a.filter((function(e){return zo(e)}))):a).filter((function(e){var n=o,a=t;return!(r&&e===a||(!jp.includes(e)||ki(e)===a)&&Ip(n,e))}))):[]},zp=function(e){return Object.keys(Lo.ariaRoles).filter((function(t){return Lo.ariaRoles[t].type===e}))},Vp=function(e){return zp(e)},$p=function(){return Kn.get("ariaRolesNameFromContent",(function(){return Object.keys(Lo.ariaRoles).filter((function(e){return Lo.ariaRoles[e].nameFromContent}))}))};function Hp(e){return null===e}function Up(e){return null!==e}var Gp=function(){return $p()},Wp=((Pl={attributes:{"aria-activedescendant":{type:"idref",allowEmpty:!0,unsupported:!1},"aria-atomic":{type:"boolean",values:["true","false"],unsupported:!1},"aria-autocomplete":{type:"nmtoken",values:["inline","list","both","none"],unsupported:!1},"aria-busy":{type:"boolean",values:["true","false"],unsupported:!1},"aria-checked":{type:"nmtoken",values:["true","false","mixed","undefined"],unsupported:!1},"aria-colcount":{type:"int",unsupported:!1},"aria-colindex":{type:"int",unsupported:!1},"aria-colspan":{type:"int",unsupported:!1},"aria-controls":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-current":{type:"nmtoken",allowEmpty:!0,values:["page","step","location","date","time","true","false"],unsupported:!1},"aria-describedby":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-describedat":{unsupported:!0,unstandardized:!0},"aria-details":{type:"idref",allowEmpty:!0,unsupported:!1},"aria-disabled":{type:"boolean",values:["true","false"],unsupported:!1},"aria-dropeffect":{type:"nmtokens",values:["copy","move","reference","execute","popup","none"],unsupported:!1},"aria-errormessage":{type:"idref",allowEmpty:!0,unsupported:!1},"aria-expanded":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-flowto":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-grabbed":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-haspopup":{type:"nmtoken",allowEmpty:!0,values:["true","false","menu","listbox","tree","grid","dialog"],unsupported:!1},"aria-hidden":{type:"boolean",values:["true","false"],unsupported:!1},"aria-invalid":{type:"nmtoken",allowEmpty:!0,values:["true","false","spelling","grammar"],unsupported:!1},"aria-keyshortcuts":{type:"string",allowEmpty:!0,unsupported:!1},"aria-label":{type:"string",allowEmpty:!0,unsupported:!1},"aria-labelledby":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-level":{type:"int",unsupported:!1},"aria-live":{type:"nmtoken",values:["off","polite","assertive"],unsupported:!1},"aria-modal":{type:"boolean",values:["true","false"],unsupported:!1},"aria-multiline":{type:"boolean",values:["true","false"],unsupported:!1},"aria-multiselectable":{type:"boolean",values:["true","false"],unsupported:!1},"aria-orientation":{type:"nmtoken",values:["horizontal","vertical"],unsupported:!1},"aria-owns":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-placeholder":{type:"string",allowEmpty:!0,unsupported:!1},"aria-posinset":{type:"int",unsupported:!1},"aria-pressed":{type:"nmtoken",values:["true","false","mixed","undefined"],unsupported:!1},"aria-readonly":{type:"boolean",values:["true","false"],unsupported:!1},"aria-relevant":{type:"nmtokens",values:["additions","removals","text","all"],unsupported:!1},"aria-required":{type:"boolean",values:["true","false"],unsupported:!1},"aria-roledescription":{type:"string",allowEmpty:!0,unsupported:!1},"aria-rowcount":{type:"int",unsupported:!1},"aria-rowindex":{type:"int",unsupported:!1},"aria-rowspan":{type:"int",unsupported:!1},"aria-selected":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-setsize":{type:"int",unsupported:!1},"aria-sort":{type:"nmtoken",values:["ascending","descending","other","none"],unsupported:!1},"aria-valuemax":{type:"decimal",unsupported:!1},"aria-valuemin":{type:"decimal",unsupported:!1},"aria-valuenow":{type:"decimal",unsupported:!1},"aria-valuetext":{type:"string",unsupported:!1}},globalAttributes:["aria-atomic","aria-busy","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-dropeffect","aria-flowto","aria-grabbed","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-live","aria-owns","aria-relevant","aria-roledescription"]}).role={alert:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},alertdialog:{type:"widget",attributes:{allowed:["aria-expanded","aria-modal","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["dialog","section"]},application:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage","aria-activedescendant"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["article","audio","embed","iframe","object","section","svg","video"]},article:{type:"structure",attributes:{allowed:["aria-expanded","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["article"],unsupported:!1},banner:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["header"],unsupported:!1,allowedElements:["section"]},button:{type:"widget",attributes:{allowed:["aria-expanded","aria-pressed","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["button",\'input[type="button"]\',\'input[type="image"]\',\'input[type="reset"]\',\'input[type="submit"]\',"summary"],unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},cell:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-rowindex","aria-rowspan","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["td","th"],unsupported:!1},checkbox:{type:"widget",attributes:{allowed:["aria-checked","aria-required","aria-readonly","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:[\'input[type="checkbox"]\'],unsupported:!1,allowedElements:["button"]},columnheader:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-required","aria-readonly","aria-selected","aria-sort","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["th"],unsupported:!1},combobox:{type:"composite",attributes:{allowed:["aria-autocomplete","aria-required","aria-activedescendant","aria-orientation","aria-errormessage"],required:["aria-expanded"]},owned:{all:["listbox","tree","grid","dialog","textbox"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:"input",properties:{type:["text","search","tel","url","email"]}}]},command:{nameFrom:["author"],type:"abstract",unsupported:!1},complementary:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["aside"],unsupported:!1,allowedElements:["section"]},composite:{nameFrom:["author"],type:"abstract",unsupported:!1},contentinfo:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["footer"],unsupported:!1,allowedElements:["section"]},definition:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["dd","dfn"],unsupported:!1},dialog:{type:"widget",attributes:{allowed:["aria-expanded","aria-modal","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["dialog"],unsupported:!1,allowedElements:["section"]},directory:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:["ol","ul"]},document:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["body"],unsupported:!1,allowedElements:["article","embed","iframe","object","section","svg"]},"doc-abstract":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-acknowledgments":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-afterword":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-appendix":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-backlink":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},"doc-biblioentry":{type:"listitem",attributes:{allowed:["aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author"],context:["doc-bibliography"],unsupported:!1,allowedElements:["li"]},"doc-bibliography":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["doc-biblioentry"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-biblioref":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},"doc-chapter":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-colophon":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-conclusion":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-cover":{type:"img",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1},"doc-credit":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-credits":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-dedication":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-endnote":{type:"listitem",attributes:{allowed:["aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,namefrom:["author"],context:["doc-endnotes"],unsupported:!1,allowedElements:["li"]},"doc-endnotes":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["doc-endnote"]},namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-epigraph":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1},"doc-epilogue":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-errata":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-example":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","section"]},"doc-footnote":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","footer","header"]},"doc-foreword":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-glossary":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:["term","definition"],namefrom:["author"],context:null,unsupported:!1,allowedElements:["dl"]},"doc-glossref":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},"doc-index":{type:"navigation",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},"doc-introduction":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-noteref":{type:"link",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},"doc-notice":{type:"note",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-pagebreak":{type:"separator",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["hr"]},"doc-pagelist":{type:"navigation",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},"doc-part":{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-preface":{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-prologue":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-pullquote":{type:"none",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","section"]},"doc-qna":{type:"section",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-subtitle":{type:"sectionhead",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["h1","h2","h3","h4","h5","h6"]}},"doc-tip":{type:"note",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside"]},"doc-toc":{type:"navigation",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},feed:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["article"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["article","aside","section"]},figure:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["figure"],unsupported:!1},form:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["form"],unsupported:!1},grid:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-colcount","aria-level","aria-multiselectable","aria-readonly","aria-rowcount","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,implicit:["table"],unsupported:!1},gridcell:{type:"widget",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-selected","aria-readonly","aria-required","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["td","th"],unsupported:!1},group:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["details","optgroup"],unsupported:!1,allowedElements:["dl","figcaption","fieldset","figure","footer","header","ol","ul"]},heading:{type:"structure",attributes:{required:["aria-level"],allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["h1","h2","h3","h4","h5","h6"],unsupported:!1},img:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["img"],unsupported:!1,allowedElements:["embed","iframe","object","svg"]},input:{nameFrom:["author"],type:"abstract",unsupported:!1},landmark:{nameFrom:["author"],type:"abstract",unsupported:!1},link:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["a[href]","area[href]"],unsupported:!1,allowedElements:["button",{nodeName:"input",properties:{type:["image","button"]}}]},list:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{all:["listitem"]},nameFrom:["author"],context:null,implicit:["ol","ul","dl"],unsupported:!1},listbox:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-multiselectable","aria-readonly","aria-required","aria-expanded","aria-orientation","aria-errormessage"]},owned:{all:["option"]},nameFrom:["author"],context:null,implicit:["select"],unsupported:!1,allowedElements:["ol","ul"]},listitem:{type:"structure",attributes:{allowed:["aria-level","aria-posinset","aria-setsize","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["list"],implicit:["li","dt"],unsupported:!1},log:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},main:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["main"],unsupported:!1,allowedElements:["article","section"]},marquee:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},math:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["math"],unsupported:!1},menu:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:{one:["menuitem","menuitemradio","menuitemcheckbox"]},nameFrom:["author"],context:null,implicit:[\'menu[type="context"]\'],unsupported:!1,allowedElements:["ol","ul"]},menubar:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:{one:["menuitem","menuitemradio","menuitemcheckbox"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},menuitem:{type:"widget",attributes:{allowed:["aria-posinset","aria-setsize","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:[\'menuitem[type="command"]\'],unsupported:!1,allowedElements:["button","li",{nodeName:"iput",properties:{type:["image","button"]}},{nodeName:"a",attributes:{href:Up}}]},menuitemcheckbox:{type:"widget",attributes:{allowed:["aria-checked","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:[\'menuitem[type="checkbox"]\'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["checkbox","image","button"]}},{nodeName:"a",attributes:{href:Up}}]},menuitemradio:{type:"widget",attributes:{allowed:["aria-checked","aria-selected","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:[\'menuitem[type="radio"]\'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["image","button","radio"]}},{nodeName:"a",attributes:{href:Up}}]},navigation:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["nav"],unsupported:!1,allowedElements:["section"]},none:{type:"structure",attributes:null,owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:["article","aside","dl","embed","figcaption","fieldset","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hr","iframe","li","ol","section","ul"]},{nodeName:"img",attributes:{alt:Up}}]},note:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["aside"]},option:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize","aria-checked","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["listbox"],implicit:["option"],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["checkbox","button"]}},{nodeName:"a",attributes:{href:Up}}]},presentation:{type:"structure",attributes:null,owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:["article","aside","dl","embed","figcaption","fieldset","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hr","iframe","li","ol","section","ul"]},{nodeName:"img",attributes:{alt:Up}}]},progressbar:{type:"widget",attributes:{allowed:["aria-valuetext","aria-valuenow","aria-valuemax","aria-valuemin","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["progress"],unsupported:!1},radio:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize","aria-required","aria-errormessage","aria-checked"]},owned:null,nameFrom:["author","contents"],context:null,implicit:[\'input[type="radio"]\'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["image","button"]}}]},radiogroup:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-required","aria-expanded","aria-readonly","aria-errormessage","aria-orientation"]},owned:{all:["radio"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["ol","ul","fieldset"]}},range:{nameFrom:["author"],type:"abstract",unsupported:!1},region:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["section[aria-label]","section[aria-labelledby]","section[title]"],unsupported:!1,allowedElements:{nodeName:["article","aside"]}},roletype:{type:"abstract",unsupported:!1},row:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-colindex","aria-expanded","aria-level","aria-selected","aria-rowindex","aria-errormessage"]},owned:{one:["cell","columnheader","rowheader","gridcell"]},nameFrom:["author","contents"],context:["rowgroup","grid","treegrid","table"],implicit:["tr"],unsupported:!1},rowgroup:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-errormessage"]},owned:{all:["row"]},nameFrom:["author","contents"],context:["grid","table","treegrid"],implicit:["tbody","thead","tfoot"],unsupported:!1},rowheader:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-required","aria-readonly","aria-selected","aria-sort","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["th"],unsupported:!1},scrollbar:{type:"widget",attributes:{required:["aria-controls","aria-valuenow"],allowed:["aria-valuetext","aria-orientation","aria-errormessage","aria-valuemax","aria-valuemin"]},owned:null,nameFrom:["author"],context:null,unsupported:!1},search:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["aside","form","section"]}},searchbox:{type:"widget",attributes:{allowed:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-readonly","aria-required","aria-placeholder","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:[\'input[type="search"]\'],unsupported:!1,allowedElements:{nodeName:"input",properties:{type:"text"}}},section:{nameFrom:["author","contents"],type:"abstract",unsupported:!1},sectionhead:{nameFrom:["author","contents"],type:"abstract",unsupported:!1},select:{nameFrom:["author"],type:"abstract",unsupported:!1},separator:{type:"structure",attributes:{allowed:["aria-expanded","aria-orientation","aria-valuenow","aria-valuemax","aria-valuemin","aria-valuetext","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["hr"],unsupported:!1,allowedElements:["li"]},slider:{type:"widget",attributes:{allowed:["aria-valuetext","aria-orientation","aria-readonly","aria-errormessage","aria-valuemax","aria-valuemin"],required:["aria-valuenow"]},owned:null,nameFrom:["author"],context:null,implicit:[\'input[type="range"]\'],unsupported:!1},spinbutton:{type:"widget",attributes:{allowed:["aria-valuetext","aria-required","aria-readonly","aria-errormessage","aria-valuemax","aria-valuemin"],required:["aria-valuenow"]},owned:null,nameFrom:["author"],context:null,implicit:[\'input[type="number"]\'],unsupported:!1,allowedElements:{nodeName:"input",properties:{type:["text","tel"]}}},status:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["output"],unsupported:!1,allowedElements:["section"]},structure:{type:"abstract",unsupported:!1},switch:{type:"widget",attributes:{allowed:["aria-errormessage"],required:["aria-checked"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:["button",{nodeName:"input",properties:{type:["checkbox","image","button"]}},{nodeName:"a",attributes:{href:Up}}]},tab:{type:"widget",attributes:{allowed:["aria-selected","aria-expanded","aria-setsize","aria-posinset","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["tablist"],unsupported:!1,allowedElements:[{nodeName:["button","h1","h2","h3","h4","h5","h6","li"]},{nodeName:"input",properties:{type:"button"}},{nodeName:"a",attributes:{href:Up}}]},table:{type:"structure",attributes:{allowed:["aria-colcount","aria-rowcount","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author","contents"],context:null,implicit:["table"],unsupported:!1},tablist:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-level","aria-multiselectable","aria-orientation","aria-errormessage"]},owned:{all:["tab"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},tabpanel:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},term:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["dt"],unsupported:!1},textbox:{type:"widget",attributes:{allowed:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-readonly","aria-required","aria-placeholder","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:[\'input[type="text"]\',\'input[type="email"]\',\'input[type="password"]\',\'input[type="tel"]\',\'input[type="url"]\',"input:not([type])","textarea"],unsupported:!1},timer:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1},toolbar:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:[\'menu[type="toolbar"]\'],unsupported:!1,allowedElements:["ol","ul"]},tooltip:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1},tree:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-multiselectable","aria-required","aria-expanded","aria-orientation","aria-errormessage"]},owned:{all:["treeitem"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},treegrid:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-colcount","aria-expanded","aria-level","aria-multiselectable","aria-readonly","aria-required","aria-rowcount","aria-orientation","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,unsupported:!1},treeitem:{type:"widget",attributes:{allowed:["aria-checked","aria-selected","aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["group","tree"],unsupported:!1,allowedElements:["li",{nodeName:"a",attributes:{href:Up}}]},widget:{type:"abstract",unsupported:!1},window:{nameFrom:["author"],type:"abstract",unsupported:!1}},Pl.implicitHtmlRole=tu,Pl.elementsAllowedNoRole=[{nodeName:["base","body","caption","col","colgroup","datalist","dd","details","dt","head","html","keygen","label","legend","main","map","math","meta","meter","noscript","optgroup","param","picture","progress","script","source","style","template","textarea","title","track"]},{nodeName:"area",attributes:{href:Up}},{nodeName:"input",properties:{type:["color","data","datatime","file","hidden","month","number","password","range","reset","submit","time","week"]}},{nodeName:"link",attributes:{href:Up}},{nodeName:"menu",attributes:{type:"context"}},{nodeName:"menuitem",attributes:{type:["command","checkbox","radio"]}},{nodeName:"select",condition:function(e){return e instanceof o.AbstractVirtualNode||(e=o.utils.getNodeFromTree(e)),1<Number(e.attr("size"))},properties:{multiple:!0}},{nodeName:["clippath","cursor","defs","desc","feblend","fecolormatrix","fecomponenttransfer","fecomposite","feconvolvematrix","fediffuselighting","fedisplacementmap","fedistantlight","fedropshadow","feflood","fefunca","fefuncb","fefuncg","fefuncr","fegaussianblur","feimage","femerge","femergenode","femorphology","feoffset","fepointlight","fespecularlighting","fespotlight","fetile","feturbulence","filter","hatch","hatchpath","lineargradient","marker","mask","meshgradient","meshpatch","meshrow","metadata","mpath","pattern","radialgradient","solidcolor","stop","switch","view"]}],Pl.elementsAllowedAnyRole=[{nodeName:"a",attributes:{href:Hp}},{nodeName:"img",attributes:{alt:Hp}},{nodeName:["abbr","address","canvas","div","p","pre","blockquote","ins","del","output","span","table","tbody","thead","tfoot","td","em","strong","small","s","cite","q","dfn","abbr","time","code","var","samp","kbd","sub","sup","i","b","u","mark","ruby","rt","rp","bdi","bdo","br","wbr","th","tr"]}],Pl.evaluateRoleForElement={A:function(e){var t=e.node;e=e.out;return"http://www.w3.org/2000/svg"===t.namespaceURI||!t.href.length||e},AREA:function(e){return!e.node.href},BUTTON:function(e){var t=e.node,n=e.role;e=e.out;return"menu"===t.getAttribute("type")?"menuitem"===n:e},IMG:function(e){var t=e.node,n=e.role,a=e.out;switch(t.alt){case null:return a;case"":return"presentation"===n||"none"===n;default:return"presentation"!==n&&"none"!==n}},INPUT:function(e){var t=e.node,n=e.role,a=e.out;switch(t.type){case"button":case"image":return a;case"checkbox":return!("button"!==n||!t.hasAttribute("aria-pressed"))||a;case"radio":return"menuitemradio"===n;case"text":return"combobox"===n||"searchbox"===n||"spinbutton"===n;case"tel":return"combobox"===n||"spinbutton"===n;case"url":case"search":case"email":return"combobox"===n;default:return!1}},LI:function(e){var t=e.node;e=e.out;return!o.utils.matchesSelector(t,"ol li, ul li")||e},MENU:function(e){return"context"!==e.node.getAttribute("type")},OPTION:function(e){return e=e.node,!o.utils.matchesSelector(e,"select > option, datalist > option, optgroup > option")},SELECT:function(e){var t=e.node;e=e.role;return!t.multiple&&t.size<=1&&"menu"===e},SVG:function(e){var t=e.node;e=e.out;return!(!t.parentNode||"http://www.w3.org/2000/svg"!==t.parentNode.namespaceURI)||e}},Pl.rolesOfType={widget:["button","checkbox","dialog","gridcell","link","log","marquee","menuitem","menuitemcheckbox","menuitemradio","option","progressbar","radio","scrollbar","searchbox","slider","spinbutton","status","switch","tab","tabpanel","textbox","timer","tooltip","tree","treeitem"]},Pl),Yp=function(e){var t=null;return(e=Wp.role[e])&&e.implicit?ea(e.implicit):t},Kp=function(e){return!!Pp(e).length};function Xp(e){var t=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).popupRoles,n=Fu(e);if(!(t=null!=t?t:Oo["aria-haspopup"].values).includes(n))return!1;if(t=function(e){for(;e=e.parent;)if(null!==Fu(e,{noPresentational:!0}))return e;return null}(e),Zp(t))return!0;if(!(n=e.props.id))return!1;if(e.actualNode)return t=lr(e.actualNode).querySelectorAll(\'[aria-owns~="\'.concat(n,\'"][role~="combobox"]:not(select),\\n     [aria-controls~="\').concat(n,\'"][role~="combobox"]:not(select)\')),Array.from(t).some(Zp);throw new Error("Unable to determine combobox popup without an actualNode")}var Zp=function(e){return e&&"combobox"===Fu(e)},Jp=function(e){return e=Xn(e),ui(e)},Qp=function(e){return(e=Lo.ariaRoles[e])&&Array.isArray(e.requiredAttrs)?H(e.requiredAttrs):[]},ef=function(e){return(e=Lo.ariaRoles[e])&&Array.isArray(e.requiredContext)?H(e.requiredContext):null},tf=function(e){return(e=Lo.ariaRoles[e])&&Array.isArray(e.requiredOwned)?H(e.requiredOwned):null},nf=function(e,t){var n,a=(e=e instanceof un?e:Xn(e)).attr(t),r=Lo.ariaAttrs[t];if(!r)return!0;if(r.allowEmpty&&(!a||""===a.trim()))return!0;switch(r.type){case"boolean":return["true","false"].includes(a.toLowerCase());case"nmtoken":return"string"==typeof a&&r.values.includes(a.toLowerCase());case"nmtokens":return(n=Uc(a)).reduce((function(e,t){return e&&r.values.includes(t)}),0!==n.length);case"idref":try{var o=sr(e.actualNode);return!(!a||!o.getElementById(a))}catch(e){throw new TypeError("Cannot resolve id references for partial DOM")}case"idrefs":return To(e,t).some((function(e){return!!e}));case"string":return""!==a.trim();case"decimal":return!(!(n=a.match(/^[-+]?([0-9]*)\\.?([0-9]*)$/))||!n[1]&&!n[2]);case"int":return o=void 0!==r.minValue?r.minValue:-1/0,/^[-+]?[0-9]+$/.test(a)&&parseInt(a)>=o}},af=function(e){return!!Lo.ariaAttrs[e]};function rf(e,t,n){var a=(r=n.props).nodeName,r=r.type,o=function(e){return e?(e=e.toLowerCase(),["mixed","true"].includes(e)?e:"false"):""}(n.attr("aria-checked"));return"input"!==a||"checkbox"!==r||!o||o===(a=function(e){return e.props.indeterminate?"mixed":e.props.checked?"true":"false"}(n))||(this.data({messageKey:"checkbox",checkState:a}),!1)}function of(e){var t,n,a=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).invalidTableRowAttrs,r=2<arguments.length?arguments[2]:void 0;return 0===(a=null!=(t=null==a||null==(t=a.filter)?void 0:t.call(a,(function(e){return r.hasAttr(e)})))?t:[]).length||!(t=(t=function(e){if(e.parent)return ca(e,\'table:not([role]), [role~="treegrid"], [role~="table"], [role~="grid"]\')}(r))&&Fu(t))||"treegrid"===t||(n="row".concat(1<a.length?"Plural":"Singular"),this.data({messageKey:n,invalidAttrs:a,ownerRole:t}),!1)}var uf={row:of,checkbox:rf};var lf={};function sf(e){return 3===e.props.nodeType?0<e.props.nodeValue.trim().length:bi(e,!1,!0)}function cf(e,t,n,a){var r=Vo(e);if(!(n=n||ef(r)))return null;for(var o=n.includes("group"),u=a?e:e.parent;u;){var i=Fu(u,{noPresentational:!0});if(i){if("group"!==i||!o)return n.includes(i)?null:n;t.includes(r)&&n.push(r),n=n.filter((function(e){return"group"!==e}))}u=u.parent}return n}re(lf,{getAriaRolesByType:function(){return zp},getAriaRolesSupportingNameFromContent:function(){return $p},getElementSpec:function(){return hu},getElementsByContentType:function(){return $o},getGlobalAriaAttrs:function(){return Ho},implicitHtmlRoles:function(){return tu}});var df={ARTICLE:!0,ASIDE:!0,NAV:!0,SECTION:!0},pf={application:!0,article:!0,banner:!1,complementary:!0,contentinfo:!0,form:!0,main:!0,navigation:!0,region:!0,search:!1};var ff={},Df=(re(ff,{Color:function(){return Cc},centerPointOfRect:function(){return Df},elementHasImage:function(){return Pi},elementIsDistinct:function(){return hf},filteredRectStack:function(){return bf},flattenColors:function(){return Ff},flattenShadowColors:function(){return wf},getBackgroundColor:function(){return Nf},getBackgroundStack:function(){return Ef},getContrast:function(){return Of},getForegroundColor:function(){return Sf},getOwnBackgroundColor:function(){return Ac},getRectStack:function(){return gf},getStackingContext:function(){return xf},getTextShadowColors:function(){return Cf},hasValidContrastRatio:function(){return Mf},incompleteData:function(){return Mi},stackingContextToColor:function(){return Af}}),function(e){if(!(e.left>t.innerWidth||e.top>t.innerHeight))return{x:Math.min(Math.ceil(e.left+e.width/2),t.innerWidth-1),y:Math.min(Math.ceil(e.top+e.height/2),t.innerHeight-1)}});function mf(e){return e.getPropertyValue("font-family").split(/[,;]/g).map((function(e){return e.trim().toLowerCase()}))}var hf=function(e,n){var a,r=t.getComputedStyle(e);return"none"!==r.getPropertyValue("background-image")||!!["border-bottom","border-top","outline"].reduce((function(e,t){var n=new Cc;return n.parseString(r.getPropertyValue(t+"-color")),e||"none"!==r.getPropertyValue(t+"-style")&&0<parseFloat(r.getPropertyValue(t+"-width"))&&0!==n.alpha}),!1)||(a=t.getComputedStyle(n),mf(r)[0]!==mf(a)[0])||(e=["text-decoration-line","text-decoration-style","font-weight","font-style","font-size"].reduce((function(e,t){return e||r.getPropertyValue(t)!==a.getPropertyValue(t)}),!1),(n=r.getPropertyValue("text-decoration")).split(" ").length<3?e||n!==a.getPropertyValue("text-decoration"):e)},gf=function(e){var t=Ao(e);return!(e=fi(e))||e.length<=1?[t]:e.some((function(e){return void 0===e}))?null:(e.splice(0,0,t),e)},bf=function(e){var t,n,a=gf(e);return a&&1===a.length?a[0]:a&&1<a.length?(t=a.shift(),a.forEach((function(r,o){var u,i;0!==o&&(u=a[o-1],i=a[o],n=u.every((function(e,t){return e===i[t]}))||t.includes(e))})),n?a[0]:(Mi.set("bgColor","elmPartiallyObscuring"),null)):(Mi.set("bgColor","outsideViewport"),null)},vf={normal:function(e,t){return t},multiply:function(e,t){return t*e},screen:function(e,t){return e+t-e*t},overlay:function(e,t){return this["hard-light"](t,e)},darken:function(e,t){return Math.min(e,t)},lighten:function(e,t){return Math.max(e,t)},"color-dodge":function(e,t){return 0===e?0:1===t?1:Math.min(1,e/(1-t))},"color-burn":function(e,t){return 1===e?1:0===t?0:1-Math.min(1,(1-e)/t)},"hard-light":function(e,t){return t<=.5?this.multiply(e,2*t):this.screen(e,2*t-1)},"soft-light":function(e,t){return t<=.5?e-(1-2*t)*e*(1-e):e+(2*t-1)*((e<=.25?((16*e-12)*e+4)*e:Math.sqrt(e))-e)},difference:function(e,t){return Math.abs(e-t)},exclusion:function(e,t){return e+t-2*e*t}};function yf(e,t,n,a,r){return t*(1-a)*e+t*a*vf[r](n/255,e/255)*255+(1-t)*a*n}var Ff=function(e,t){var n,a,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"normal",o=yf(e.red,e.alpha,t.red,t.alpha,r),u=yf(e.green,e.alpha,t.green,t.alpha,r),i=(r=yf(e.blue,e.alpha,t.blue,t.alpha,r),n=e.alpha+t.alpha*(1-e.alpha),i=0,a=1,Math.min(Math.max(i,n),a));return 0===i?new Cc(o,u,r,i):(n=Math.round(o/i),a=Math.round(u/i),o=Math.round(r/i),new Cc(n,a,o,i))};function wf(e,t){var n=(1-(r=e.alpha))*t.red+r*e.red,a=(1-r)*t.green+r*e.green,r=(1-r)*t.blue+r*e.blue;t=e.alpha+t.alpha*(1-e.alpha);return new Cc(n,a,r,t)}function Ef(e){for(var n=fi(e).map((function(n){return function(e){var n=e.indexOf(a.body),r=Ac(t.getComputedStyle(a.documentElement));return 1<n&&0===r.alpha&&!Pi(a.documentElement)&&(1<n&&(e.splice(n,1),e.push(a.body)),0<(r=e.indexOf(a.documentElement)))&&(e.splice(r,1),e.push(a.documentElement)),e}(n=Oc(n,e))})),r=0;r<n.length;r++){var o=n[r];if(o[0]!==e)return Mi.set("bgColor","bgOverlap"),null;if(0!==r&&!function(e,t){if(e!==t){if(null===e||null===t)return;if(e.length!==t.length)return;for(var n=0;n<e.length;++n)if(e[n]!==t[n])return}return 1}(o,n[0]))return Mi.set("bgColor","elmPartiallyObscuring"),null}return n[0]||null}var Cf=function(e){var n,a,r,o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},u=o.minRatio,i=o.maxRatio,l=t.getComputedStyle(e);return"none"===(o=l.getPropertyValue("text-shadow"))?[]:(n=l.getPropertyValue("font-size"),a=parseInt(n),Fn(!1===isNaN(a),"Unable to determine font-size value ".concat(n)),r=[],function(e){var t={pixels:[]},n=e.trim(),a=[t];if(!n)return[];for(;n;){var r=n.match(/^rgba?\\([0-9,.\\s]+\\)/i)||n.match(/^[a-z]+/i)||n.match(/^#[0-9a-f]+/i),o=n.match(/^([0-9.-]+)px/i)||n.match(/^(0)/);if(r)Fn(!t.colorStr,"Multiple colors identified in text-shadow: ".concat(e)),n=n.replace(r[0],"").trim(),t.colorStr=r[0];else if(o)Fn(t.pixels.length<3,"Too many pixel units in text-shadow: ".concat(e)),n=n.replace(o[0],"").trim(),r=parseFloat(("."===o[1][0]?"0":"")+o[1]),t.pixels.push(r);else{if(","!==n[0])throw new Error("Unable to process text-shadows: ".concat(e));Fn(2<=t.pixels.length,"Missing pixel value in text-shadow: ".concat(e)),a.push(t={pixels:[]}),n=n.substr(1).trim()}}return a}(o).forEach((function(e){var t=e.colorStr,n=(e=e.pixels,t=t||l.getPropertyValue("color"),(e=W(e,3))[0]),o=e[1];e=void 0===(e=e[2])?0:e;(!u||a*u<=e)&&(!i||e<a*i)&&(t=function(e){var t=e.colorStr,n=e.offsetX,a=e.offsetY,r=e.blurRadius;e=e.fontSize;return r<n||r<a?new Cc(0,0,0,0):((n=new Cc).parseString(t),n.alpha*=function(e,t){return 0===e?1:.185/(e/t+.4)}(r,e),n)}({colorStr:t,offsetY:n,offsetX:o,blurRadius:e,fontSize:a}),r.push(t))})),r)};function xf(e,t){var n,a,r,o=Xn(e);return o._stackingContext||(a=[],r=new Map,(t=null!=(n=t)?n:Ef(e)).forEach((function(e){var t=(t=e=Xn(e),(o=new Cc).parseString(t.getComputedStylePropertyValue("background-color")),o),n=e._stackingOrder.filter((function(e){return!!e.vNode})),o=(n.forEach((function(e,t){e=e.vNode;var o=null==(o=n[t-1])?void 0:o.vNode;o=Tf(r,e,o);0!==t||r.get(e)||a.unshift(o),r.set(e,o)})),null==(o=n[n.length-1])?void 0:o.vNode);e=Tf(r,e,o);n.length||a.unshift(e),e.bgColor=t})),o._stackingContext=a)}function Af(e){var t;return null!=(t=e.descendants)&&t.length?(t=e.descendants.reduce(kf,Bf()),(t=Ff(t,e.bgColor,e.descendants[0].blendMode)).alpha*=e.opacity):(t=e.bgColor).alpha*=e.opacity,{color:t,blendMode:e.blendMode}}function kf(e,t){e=e instanceof Cc?e:Af(e).color;var n=Af(t).color;return Ff(n,e,t.blendMode)}function Bf(e,t){return{vNode:e,ancestor:t,opacity:parseFloat(null!=(t=null==e?void 0:e.getComputedStylePropertyValue("opacity"))?t:1),bgColor:new Cc(0,0,0,0),blendMode:(null==e?void 0:e.getComputedStylePropertyValue("mix-blend-mode"))||void 0,descendants:[]}}function Tf(e,t,n){var a=e.get(n);e=null!=(e=e.get(t))?e:Bf(t,a);return a&&n!==t&&!a.descendants.includes(e)&&a.descendants.unshift(e),e}function Nf(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:.1,o=Xn(e),u=o._cache.getBackgroundColor;return u?(n.push.apply(n,H(u.bgElms)),Mi.set("bgColor",u.incompleteData),u.bgColor):(u=function(e,n,r){var o=Ef(e);if(!o)return null;var u=pi(e);(r=Cf(e,{minRatio:r})).length&&(r=[{color:r.reduce(wf)}]);for(var i=0;i<o.length;i++){var l=o[i],s=t.getComputedStyle(l);if(Pi(l,s))return n.push(l),null;var c=Ac(s);if(0!==c.alpha){if("inline"!==s.getPropertyValue("display")&&!Rf(l,u))return n.push(l),Mi.set("bgColor","elmPartiallyObscured"),null;if(n.push(l),1===c.alpha)break}}var d=(r=(d=xf(e,o)).map(Af).concat(r),function(e,n){var r,o,u,i,l=[];return n||(n=a.documentElement,i=a.body,n=t.getComputedStyle(n),r=t.getComputedStyle(i),o=Ac(n),i=0!==(u=Ac(r)).alpha&&Rf(i,e.getBoundingClientRect()),(0!==u.alpha&&0===o.alpha||i&&1!==u.alpha)&&l.unshift({color:u,blendMode:_f(r.getPropertyValue("mix-blend-mode"))}),0===o.alpha)||i&&1===u.alpha||l.unshift({color:o,blendMode:_f(n.getPropertyValue("mix-blend-mode"))}),l}(e,o.includes(a.body)));return r.unshift.apply(r,H(d)),0===r.length?new Cc(255,255,255,1):(e=r.reduce((function(e,t){return Ff(t.color,e.color instanceof Cc?e.color:e,t.blendMode)})),Ff(e.color instanceof Cc?e.color:e,new Cc(255,255,255,1)))}(e,n,r),o._cache.getBackgroundColor={bgColor:u,bgElms:n,incompleteData:Mi.get("bgColor")},u)}function Rf(e,n){n=Array.isArray(n)?n:[n];var a=e.getBoundingClientRect(),r=a.right,o=a.bottom,u=t.getComputedStyle(e).getPropertyValue("overflow");return(["scroll","auto"].includes(u)||e instanceof t.HTMLHtmlElement)&&(r=a.left+e.scrollWidth,o=a.top+e.scrollHeight),n.every((function(e){return e.top>=a.top&&e.bottom<=o&&e.left>=a.left&&e.right<=r}))}function _f(e){return e||void 0}var Of=function(e,t){return t&&e?(t.alpha<1&&(t=Ff(t,e)),e=e.getRelativeLuminance(),t=t.getRelativeLuminance(),(Math.max(t,e)+.05)/(Math.min(t,e)+.05)):null};function Sf(e,n,a){for(var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},o=t.getComputedStyle(e),u=[],i=0,l=[function(){var e,t,n=o,a=void 0===(a=(a=r).textStrokeEmMin)?0:a;return 0===(t=parseFloat(n.getPropertyValue("-webkit-text-stroke-width")))||(e=n.getPropertyValue("font-size"),t/=parseFloat(e),isNaN(t))||t<a?null:(e=n.getPropertyValue("-webkit-text-stroke-color"),(new Cc).parseString(e))},function(){return e=o,(new Cc).parseString(e.getPropertyValue("-webkit-text-fill-color")||e.getPropertyValue("color"));var e},function(){return Cf(e,{minRatio:0})}];i<l.length;i++){var s=(0,l[i])();if(s&&(u=u.concat(s),1===s.alpha))break}var c,d,p=u.reduce((function(e,t){return Ff(e,t)}));return null===(a=null==a?Nf(e,[]):a)?(c=Mi.get("bgColor"),Mi.set("fgColor",c),null):(d=function e(t,n){var a,r=ee(t);try{for(r.s();!(a=r.n()).done;){var o,u=a.value;if((null==(o=u.vNode)?void 0:o.actualNode)===n)return u;var i=e(u.descendants,n);if(i)return i}}catch(e){r.e(e)}finally{r.f()}}(c=xf(e),e),Ff(function(e,t,n){for(;t;){var a;1===t.opacity&&t.ancestor||(e.alpha*=t.opacity,a=(null==(a=t.ancestor)?void 0:a.descendants)||n,(a=(a=1!==t.opacity?a.slice(0,a.indexOf(t)):a).map(Af)).length&&(a=a.reduce((function(e,t){return Ff(t.color,e.color instanceof Cc?e.color:e)}),{color:new Cc(0,0,0,0),blendMode:"normal"}),e=Ff(e,a))),t=t.ancestor}return e}(p,d,c),new Cc(255,255,255,1)))}var Mf=function(e,t,n,a){return e=Of(e,t),{isValid:(t=a&&Math.ceil(72*n)/96<14||!a&&Math.ceil(72*n)/96<18?4.5:3)<e,contrastRatio:e,expectedContrastRatio:t}},Pf=Dr((function(e,n){function a(e,t){return r.getPropertyValue(e)===t}var r=t.getComputedStyle(e,n);return a("content","none")||a("display","none")||a("visibility","hidden")||!1===a("position","absolute")||0===Ac(r).alpha&&a("background-image","none")?0:(e=If(r.getPropertyValue("width")),n=If(r.getPropertyValue("height")),"px"!==e.unit||"px"!==n.unit?0===e.value||0===n.value?0:1/0:e.value*n.value)}));function If(e){var t=(e=W(e.match(/^([0-9.]+)([a-z]+)$/i)||[],3))[1];e=void 0===(e=e[2])?"":e;return{value:parseFloat(void 0===t?"":t),unit:e.toLowerCase()}}function jf(e,t){return e=e.getRelativeLuminance(),t=t.getRelativeLuminance(),(Math.max(e,t)+.05)/(Math.min(e,t)+.05)}var Lf=["block","list-item","table","flex","grid","inline-block"];function qf(e){return e=t.getComputedStyle(e).getPropertyValue("display"),-1!==Lf.indexOf(e)||"table-"===e.substr(0,6)}var zf=["block","list-item","table","flex","grid","inline-block"];function Vf(e){return e=t.getComputedStyle(e).getPropertyValue("display"),-1!==zf.indexOf(e)||"table-"===e.substr(0,6)}function $f(e){return e=parseInt(e.attr("tabindex"),10),!isNaN(e)&&e<0}function Hf(e,t){return t=Uf(t),e=Uf(e),!(!t||!e)&&t.includes(e)}function Uf(e){return e=ni(e,{emoji:!0,nonBmp:!0,punctuations:!0}),Xo(e)}function Gf(e){return""!==(e||"").trim()}function Wf(e,t){var n=1<arguments.length&&void 0!==t&&t;return e.map((function(e){return{vChild:e,nested:n}}))}function Yf(e,t){return e=e.boundingClientRect,t=t.boundingClientRect,e.top>=t.top&&e.left>=t.left&&e.bottom<=t.bottom&&e.right<=t.right}function Kf(e){return{width:Math.round(10*e.width)/10,height:Math.round(10*e.height)/10}}function Xf(e,t){return e.actualNode.contains(t.actualNode)&&!Ai(t)}function Zf(e,t){var n=t.width;t=t.height;return e<=n+.05&&e<=t+.05}function Jf(e){return e.map((function(e){return e.actualNode}))}function Qf(e,t){var n=null==(n=t.data)?void 0:n.headingOrder,a=tD(t.node.ancestry,1);return n&&(t=n.map((function(e){return G({},e,{ancestry:a.concat(e.ancestry)})})),-1===(n=function(e,t){for(;t.length;){var n=eD(e,t);if(-1!==n)return n;t=tD(t,1)}return-1}(e,a))?e.push.apply(e,H(t)):e.splice.apply(e,[n,0].concat(H(t)))),e}function eD(e,t){return e.findIndex((function(e){return Pd(e.ancestry,t)}))}function tD(e,t){return e.slice(0,e.length-t)}re(jl={},{aria:function(){return Op},color:function(){return ff},dom:function(){return ir},forms:function(){return nD},matches:function(){return mu},math:function(){return bo},standards:function(){return lf},table:function(){return oD},text:function(){return Bo},utils:function(){return ln}});var nD={},aD=(re(nD,{isAriaCombobox:function(){return $u},isAriaListbox:function(){return Vu},isAriaRange:function(){return Uu},isAriaTextbox:function(){return zu},isDisabled:function(){return rD},isNativeSelect:function(){return qu},isNativeTextbox:function(){return Lu}}),["fieldset","button","select","input","textarea"]),rD=function e(t){var n,a,r=t._isDisabled;return"boolean"!=typeof r&&(n=t.props.nodeName,a=t.attr("aria-disabled"),r=!(!aD.includes(n)||!t.hasAttr("disabled"))||(a?"true"===a.toLowerCase():!!t.parent&&e(t.parent)),t._isDisabled=r),r},oD={},uD=(re(oD,{getAllCells:function(){return uD},getCellPosition:function(){return Go},getHeaders:function(){return lD},getScope:function(){return Wo},isColumnHeader:function(){return Yo},isDataCell:function(){return sD},isDataTable:function(){return cD},isHeader:function(){return dD},isRowHeader:function(){return Ko},toArray:function(){return Uo},toGrid:function(){return Uo},traverse:function(){return pD}}),function(e){for(var t,n,a=[],r=0,o=e.rows.length;r<o;r++)for(t=0,n=e.rows[r].cells.length;t<n;t++)a.push(e.rows[r].cells[t]);return a});function iD(e,t,n){for(var a,r="row"===e?"_rowHeaders":"_colHeaders",u="row"===e?Ko:Yo,i=(s=n[t.y][t.x]).colSpan-1,l=s.getAttribute("rowspan"),s=(l=0===parseInt(l)||0===s.rowspan?n.length:s.rowSpan,t.y+(l-1)),c=t.x+i,d="row"===e?t.y:0,p="row"===e?0:t.x,f=[],D=s;d<=D&&!a;D--)for(var m=c;p<=m;m--){var h=n[D]?n[D][m]:void 0;if(h){var g=o.utils.getNodeFromTree(h);if(g[r]){a=g[r];break}f.push(h)}}return a=(a||[]).concat(f.filter(u)),f.forEach((function(e){o.utils.getNodeFromTree(e)[r]=a})),a}var lD=function(e,t){if(e.getAttribute("headers")){var n=To(e,"headers");if(n.filter((function(e){return e})).length)return n}return t=t||Uo(pr(e,"table")),e=iD("row",n=Go(e,t),t),n=iD("col",n,t),[].concat(e,n).reverse()},sD=function(e){var t;return!(!e.children.length&&!e.textContent.trim())&&(t=e.getAttribute("role"),zo(t)?["cell","gridcell"].includes(t):"TD"===e.nodeName.toUpperCase())},cD=function(e){var n=(e.getAttribute("role")||"").toLowerCase();if(("presentation"===n||"none"===n)&&!Jo(e))return!1;if("true"===e.getAttribute("contenteditable")||pr(e,\'[contenteditable="true"]\'))return!0;if("grid"===n||"treegrid"===n||"table"===n)return!0;if("landmark"===ki(n))return!0;if("0"===e.getAttribute("datatable"))return!1;if(e.getAttribute("summary"))return!0;if(e.tHead||e.tFoot||e.caption)return!0;for(var a=0,r=e.children.length;a<r;a++)if("COLGROUP"===e.children[a].nodeName.toUpperCase())return!0;for(var o,u,i,l=0,s=e.rows.length,c=!1,d=0;d<s;d++)for(var p,f=0,D=(p=e.rows[d]).cells.length;f<D;f++){if("TH"===(o=p.cells[f]).nodeName.toUpperCase())return!0;if(c||o.offsetWidth===o.clientWidth&&o.offsetHeight===o.clientHeight||(c=!0),o.getAttribute("scope")||o.getAttribute("headers")||o.getAttribute("abbr"))return!0;if(["columnheader","rowheader"].includes((o.getAttribute("role")||"").toLowerCase()))return!0;if(1===o.children.length&&"ABBR"===o.children[0].nodeName.toUpperCase())return!0;l++}if(e.getElementsByTagName("table").length)return!1;if(s<2)return!1;if(1===(n=e.rows[Math.ceil(s/2)]).cells.length&&1===n.cells[0].colSpan)return!1;if(5<=n.cells.length)return!0;if(c)return!0;for(d=0;d<s;d++){if(p=e.rows[d],u&&u!==t.getComputedStyle(p).getPropertyValue("background-color"))return!0;if(u=t.getComputedStyle(p).getPropertyValue("background-color"),i&&i!==t.getComputedStyle(p).getPropertyValue("background-image"))return!0;i=t.getComputedStyle(p).getPropertyValue("background-image")}return 20<=s||!(Ir(e).width>.95*jr(t).width||l<10||e.querySelector("object, embed, iframe, applet"))},dD=function(e){return!(!Yo(e)&&!Ko(e))||!!e.getAttribute("id")&&(e=En(e.getAttribute("id")),!!a.querySelector(\'[headers~="\'.concat(e,\'"]\')))},pD=function(e,t,n,a){if(Array.isArray(t)&&(a=n,n=t,t={x:0,y:0}),"string"==typeof e)switch(e){case"left":e={x:-1,y:0};break;case"up":e={x:0,y:-1};break;case"right":e={x:1,y:0};break;case"down":e={x:0,y:1}}return function e(t,n,a,r){var o,u=a[n.y]?a[n.y][n.x]:void 0;return u?"function"==typeof r&&!0===(o=r(u,n,a))?[u]:((o=e(t,{x:n.x+t.x,y:n.y+t.y},a,r)).unshift(u),o):[]}(e,{x:t.x+e.x,y:t.y+e.y},n,a)};var fD=/[;,\\s]/,DD=/^[0-9.]+$/;function mD(e){return{fontWeight:function(e){switch(e){case"lighter":return 100;case"normal":return 400;case"bold":return 700;case"bolder":return 900}return e=parseInt(e),isNaN(e)?400:e}((e=t.getComputedStyle(function(e){for(var t=e,n=e.textContent.trim(),a=n;a===n&&void 0!==t;){var r=-1;if(0===(e=t).children.length)return e;for(;r++,""===(a=e.children[r].textContent.trim())&&r+1<e.children.length;);t=e.children[r]}return e}(e))).getPropertyValue("font-weight")),fontSize:parseInt(e.getPropertyValue("font-size")),isItalic:"italic"===e.getPropertyValue("font-style")}}function hD(e,t,n){return n.reduce((function(n,a){return n||(!a.size||e.fontSize/a.size>t.fontSize)&&(!a.weight||e.fontWeight-a.weight>t.fontWeight)&&(!a.italic||e.isItalic&&!t.isItalic)}),!1)}var gD=zp("landmark"),bD=["alert","log","status"];function vD(e){return"caption"===e.props.nodeName}Ls=zr;var yD=function(e,t,n){return n.initiator};var FD={emoji:!0,nonBmp:!1,punctuations:!0};var wD=function(e,t){try{return"svg"===t.props.nodeName||!!ca(t,"svg")}catch(e){return!1}};var ED=function(e,t){var n=Vo(t);return!(n&&!["none","presentation"].includes(n)&&!(So[n]||{}).accessibleNameRequired&&!Jo(t))};var CD=[function(e,t){return xD(t)},function(e,t){return"area"!==t.props.nodeName},function(e,t){return!wD(0,t)},function(e,t){return Jo(t)},function(e,t){return Ai(t)||!AD(t)},function(e){return!Ni(e,{noLengthCompare:!0})}];function xD(e){return"widget"===ki(e)}var AD=Dr((function e(t){return!(null==t||!t.parent)&&(!(!xD(t.parent)||!Ai(t.parent))||e(t.parent))})),kD={"abstractrole-evaluate":function(e,t,n){return 0<(n=Uc(n.attr("role")).filter((function(e){return"abstract"===ki(e)}))).length&&(this.data(n),!0)},"accesskeys-after":function(e){var t={};return e.filter((function(e){if(e.data){var n=e.data.toUpperCase();if(!t[n])return(t[n]=e).relatedNodes=[],!0;t[n].relatedNodes.push(e.relatedNodes[0])}return!1})).map((function(e){return e.result=!!e.relatedNodes.length,e}))},"accesskeys-evaluate":function(e,t,n){return _r(n)||(this.data(n.attr("accesskey")),this.relatedNodes([e])),!0},"alt-space-value-evaluate":function(e,t,n){return"string"==typeof(n=n.attr("alt"))&&/^\\s+$/.test(n)},"aria-allowed-attr-evaluate":function(e,t,n){var a,r=[],o=Fu(n),u=Sp(o),i=(Array.isArray(t[o])&&(u=Zd(t[o].concat(u))),ee(n.attrNames));try{for(i.s();!(a=i.n()).done;){var l=a.value;af(l)&&!u.includes(l)&&r.push(l)}}catch(e){i.e(e)}finally{i.f()}return!r.length||(this.data(r.map((function(e){return e+\'="\'+n.attr(e)+\'"\'}))),!(o||Od(n)||Jo(n))&&void 0)},"aria-allowed-attr-matches":function(e,t){var n=/^aria-/,a=t.attrNames;if(a.length)for(var r=0,o=a.length;r<o;r++)if(n.test(a[r]))return!0;return!1},"aria-allowed-role-evaluate":function(e){var t=2<arguments.length?arguments[2]:void 0,n=void 0===(n=(a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).allowImplicit)||n,a=void 0===(a=a.ignoredTags)?[]:a,r=t.props.nodeName;return!!a.map((function(e){return e.toLowerCase()})).includes(r)||!(a=qp(t,n)).length||(this.data(a),!Mu(t)&&void 0)},"aria-allowed-role-matches":function(e,t){return null!==Vo(t,{dpub:!0,fallback:!0})},"aria-busy-evaluate":function(e,t,n){return"true"===n.attr("aria-busy")},"aria-conditional-attr-evaluate":function(e,t,n){var a=Fu(n);return!uf[a]||uf[a].call(this,e,t,n)},"aria-conditional-checkbox-attr-evaluate":rf,"aria-conditional-row-attr-evaluate":of,"aria-errormessage-evaluate":function(e,t,n){t=Array.isArray(t)?t:[];var a=n.attr("aria-errormessage"),r=n.hasAttr("aria-errormessage"),o=n.attr("aria-invalid");return!n.hasAttr("aria-invalid")||"false"===o||-1!==t.indexOf(a)||!r||(this.data(Uc(a)),function(e){if(""===e.trim())return Lo.ariaAttrs["aria-errormessage"].allowEmpty;var t;try{t=e&&To(n,"aria-errormessage")[0]}catch(t){return void this.data({messageKey:"idrefs",values:Uc(e)})}return t?Mu(t)?"alert"===t.getAttribute("role")||"assertive"===t.getAttribute("aria-live")||"polite"===t.getAttribute("aria-live")||-1<Uc(n.attr("aria-describedby")).indexOf(e):(this.data({messageKey:"hidden",values:Uc(e)}),!1):void 0}.call(this,a))},"aria-has-attr-matches":function(e,t){var n=/^aria-/;return t.attrNames.some((function(e){return n.test(e)}))},"aria-hidden-body-evaluate":function(e,t,n){return"true"!==n.attr("aria-hidden")},"aria-hidden-focus-matches":function(e){return function e(t){return!t||"true"!==t.getAttribute("aria-hidden")&&e(Mr(t))}(Mr(e))},"aria-label-evaluate":function(e,t,n){return!!Xo(_o(n))},"aria-labelledby-evaluate":function(e,t,n){try{return!!Xo(Ro(n))}catch(e){}},"aria-level-evaluate":function(e,t,n){if(n=n.attr("aria-level"),!(6<(n=parseInt(n,10))))return!0},"aria-prohibited-attr-evaluate":function(e){var t,n=2<arguments.length?arguments[2]:void 0,a=(null==(a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{})?void 0:a.elementsAllowedAriaLabel)||[],r=n.props.nodeName,o=Fu(n,{chromium:!0});return 0!==(a=function(e,t,n){var a=Lo.ariaRoles[e];return a?a.prohibitedAttrs||[]:e||n.includes(t)?[]:["aria-label","aria-labelledby"]}(o,r,a).filter((function(e){return!!n.attrNames.includes(e)&&""!==Xo(n.attr(e))}))).length&&(t=n.hasAttr("role")?"hasRole":"noRole",t+=1<a.length?"Plural":"Singular",this.data({role:o,nodeName:r,messageKey:t,prohibited:a}),o=ku(n,{subtreeDescendant:!0}),""===Xo(o)||void 0)},"aria-required-attr-evaluate":function(e){var t,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},a=2<arguments.length?arguments[2]:void 0,r=Vo(a),o=a.attrNames,u=Qp(r);return Array.isArray(n[r])&&(u=Zd(n[r],u)),!(r&&o.length&&u.length&&(n=a,"separator"!==r||Jo(n))&&(o=a,"combobox"!==r||"false"!==o.attr("aria-expanded"))&&(t=hu(a),(n=u.filter((function(e){return!(a.attr(e)||(e=e,void 0!==(null==(n=(n=t).implicitAttrs)?void 0:n[e])));var n}))).length&&(this.data(n),1)))},"aria-required-children-evaluate":function(e,t,n){t=t&&Array.isArray(t.reviewEmpty)?t.reviewEmpty:[];var a,o,u=Vo(n,{dpub:!0}),i=tf(u);return null===i||(a=(n=function(e,t){function n(e){if(1!==(e=r[e]).props.nodeType)return"continue";var n,o=Fu(e,{noPresentational:!0}),u=(n=e,Ho().find((function(e){return n.hasAttr(e)}))),i=!!u||Jo(e);!o&&!i||["group","rowgroup"].includes(o)&&t.some((function(e){return e===o}))?r.push.apply(r,H(e.children)):(o||i)&&a.push({role:o,attr:u||"tabindex",ownedElement:e})}for(var a=[],r=xu(e).filter((function(e){return 1!==e.props.nodeType||Mu(e)})),o=0;o<r.length;o++)n(o);return{ownedRoles:a,ownedElements:r}}(n,i)).ownedRoles,n=n.ownedElements,(o=a.filter((function(e){return e=e.role,!i.includes(e)}))).length?(this.relatedNodes(o.map((function(e){return e.ownedElement}))),this.data({messageKey:"unallowed",values:o.map((function(e){var t=e.ownedElement,n=(e=e.attr,t.props),a=n.nodeName;return 3===n.nodeType?"#text":(n=Vo(t,{dpub:!0}))?"[role=".concat(n,"]"):e?a+"[".concat(e,"]"):a})).filter((function(e,t,n){return n.indexOf(e)===t})).join(", ")}),!1):!(o=function(e,t){for(var n=0;n<t.length;n++){var a=function(n){var a=t[n].role;if(e.includes(a))return e=e.filter((function(e){return e!==a})),{v:null}}(n);if("object"===r(a))return a.v}return e.length?e:null}(i,a))||(this.data(o),!(!t.includes(u)||n.some(sf))&&void 0))},"aria-required-children-matches":function(e,t){return t=Vo(t,{dpub:!0}),!!tf(t)},"aria-required-parent-evaluate":function(e,t,n){var a=t&&Array.isArray(t.ownGroupRoles)?t.ownGroupRoles:[],r=cf(n,a);if(!r)return!0;var o=function(e){for(var t,n=[];e;)e.getAttribute("id")&&(t=En(e.getAttribute("id")),t=sr(e).querySelector("[aria-owns~=".concat(t,"]")))&&n.push(t),e=e.parentElement;return n.length?n:null}(e);if(o)for(var u=0,i=o.length;u<i;u++)if(!(r=cf(Xn(o[u]),a,r,!0)))return!0;return this.data(r),!1},"aria-required-parent-matches":function(e,t){return t=Vo(t),!!ef(t)},"aria-roledescription-evaluate":function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=Fu(2<arguments.length?arguments[2]:void 0);return!!(t.supportedRoles||[]).includes(n)||!(!n||"presentation"===n||"none"===n)&&void 0},"aria-unsupported-attr-evaluate":function(e,t,n){return!!(n=n.attrNames.filter((function(t){var n=Lo.ariaAttrs[t];return!!af(t)&&(t=n.unsupported,"object"!==r(t)?!!t:!mu(e,t.exceptions))}))).length&&(this.data(n),!0)},"aria-valid-attr-evaluate":function(e,t,n){t=Array.isArray(t.value)?t.value:[];var a=[],r=/^aria-/;return n.attrNames.forEach((function(e){-1===t.indexOf(e)&&r.test(e)&&!af(e)&&a.push(e)})),!a.length||(this.data(a),!1)},"aria-valid-attr-value-evaluate":function(e,t,n){t=Array.isArray(t.value)?t.value:[];var a="",r="",u=[],i=/^aria-/,l=["aria-errormessage"],s={"aria-controls":function(){return"false"!==n.attr("aria-expanded")&&"false"!==n.attr("aria-selected")},"aria-current":function(e){e||(a=\'aria-current="\'.concat(n.attr("aria-current"),\'"\'),r="ariaCurrent")},"aria-owns":function(){return"false"!==n.attr("aria-expanded")},"aria-describedby":function(e){e||(a=\'aria-describedby="\'.concat(n.attr("aria-describedby"),\'"\'),r=o._tree&&o._tree[0]._hasShadowRoot?"noIdShadow":"noId")},"aria-labelledby":function(e){e||(a=\'aria-labelledby="\'.concat(n.attr("aria-labelledby"),\'"\'),r=o._tree&&o._tree[0]._hasShadowRoot?"noIdShadow":"noId")}};return n.attrNames.forEach((function(e){if(!l.includes(e)&&!t.includes(e)&&i.test(e)){var o,c=n.attr(e);try{o=nf(n,e)}catch(o){return a="".concat(e,\'="\').concat(c,\'"\'),void(r="idrefs")}s[e]&&!s[e](o)||o||(""===c&&(o=e,"string"!==(null==(o=Lo.ariaAttrs[e])?void 0:o.type))?(a=e,r="empty"):u.push("".concat(e,\'="\').concat(c,\'"\')))}})),u.length?(this.data(u),!1):!a||void this.data({messageKey:r,needsReview:a})},"attr-non-space-content-evaluate":function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=2<arguments.length?arguments[2]:void 0;if(t.attribute&&"string"==typeof t.attribute)return n.hasAttr(t.attribute)?(n=n.attr(t.attribute),!!Xo(n)||(this.data({messageKey:"emptyAttr"}),!1)):(this.data({messageKey:"noAttr"}),!1);throw new TypeError("attr-non-space-content requires options.attribute to be a string")},"autocomplete-appropriate-evaluate":function(e,t,n){var a,o,u;return"input"!==n.props.nodeName||(o={bday:["text","search","date"],email:["text","search","email"],username:["text","search","email"],"street-address":["text"],tel:["text","search","tel"],"tel-country-code":["text","search","tel"],"tel-national":["text","search","tel"],"tel-area-code":["text","search","tel"],"tel-local":["text","search","tel"],"tel-local-prefix":["text","search","tel"],"tel-local-suffix":["text","search","tel"],"tel-extension":["text","search","tel"],"cc-number":a=["text","search","number","tel"],"cc-exp":["text","search","month","tel"],"cc-exp-month":a,"cc-exp-year":a,"cc-csc":a,"transaction-amount":a,"bday-day":a,"bday-month":a,"bday-year":a,"new-password":["text","search","password"],"current-password":["text","search","password"],url:u=["text","search","url"],photo:u,impp:u},"object"===r(t)&&Object.keys(t).forEach((function(e){o[e]||(o[e]=[]),o[e]=o[e].concat(t[e])})),u=(a=n.attr("autocomplete").split(/\\s+/g).map((function(e){return e.toLowerCase()})))[a.length-1],!!ri.stateTerms.includes(u))||(a=o[u],u=n.hasAttr("type")?Xo(n.attr("type")).toLowerCase():"text",u=vp().includes(u)?u:"text",void 0===a?"text"===u:a.includes(u))},"autocomplete-matches":function(e,t){if(!(n=t.attr("autocomplete"))||""===Xo(n))return!1;if(n=t.props.nodeName,!1===["textarea","input","select"].includes(n))return!1;if("input"===n&&["submit","reset","button","hidden"].includes(t.props.type))return!1;if(n=t.attr("aria-disabled")||"false",t.hasAttr("disabled")||"true"===n.toLowerCase())return!1;var n=t.attr("role"),a=t.attr("tabindex");return("-1"!==a||!n||void 0!==(n=Lo.ariaRoles[n])&&"widget"===n.type)&&!("-1"===a&&t.actualNode&&!zr(t)&&!Mu(t))},"autocomplete-valid-evaluate":function(e,t,n){return n=n.attr("autocomplete")||"",oi(n,t)},"avoid-inline-spacing-evaluate":function(e,t){return!(0<(t=t.cssProperties.filter((function(t){if("important"===e.style.getPropertyPriority(t))return t}))).length&&(this.data(t),1))},"bypass-matches":function(e,t,n){return!yD(0,0,n)||!!e.querySelector("a[href]")},"caption-evaluate":function(e,t,n){return!cp(n,"track").some((function(e){return"captions"===(e.attr("kind")||"").toLowerCase()}))&&void 0},"caption-faked-evaluate":function(e){var t=Uo(e),n=t[0];return t.length<=1||n.length<=1||e.rows.length<=1||n.reduce((function(e,t,a){return e||t!==n[a+1]&&void 0!==n[a+1]}),!1)},"color-contrast-evaluate":function(e,n,a){var r=n.ignoreUnicode,o=n.ignoreLength,u=n.ignorePseudo,i=n.boldValue,l=n.boldTextPt,s=n.largeTextPt,c=n.contrastRatio,d=n.shadowOutlineEmMax,p=n.pseudoSizeThreshold;if(!zr(e))return this.data({messageKey:"hidden"}),!0;var f=Iu(a,!1,!0);if(r&&(v=Zu(r=f,b={nonBmp:!0}),r=""===Xo(ni(r,b)),v)&&r)this.data({messageKey:"nonBmp"});else{var D,m,h,g,b=t.getComputedStyle(e),v=parseFloat(b.getPropertyValue("font-size"));r=b.getPropertyValue("font-weight"),i=parseFloat(r)>=i||"bold"===r,r=Math.ceil(72*v)/96,r=(l=i&&r<l||!i&&r<s?c.normal:c.large).expected,s=l.minThreshold,c=l.maxThreshold;if(!(l=function(e,t){var n=void 0===(n=t.pseudoSizeThreshold)?.25:n;if(!(t=void 0!==(t=t.ignorePseudo)&&t)){var a=(t=e.boundingClientRect).width*t.height*n;do{if(a<Pf(e.actualNode,":before")+Pf(e.actualNode,":after"))return e}while(e=e.parent)}}(a,{ignorePseudo:u,pseudoSizeThreshold:p})))return p=Sf(e,!(a=[]),u=Nf(e,a,d),n),m=D=n=null,0===(e=Cf(e,{minRatio:.001,maxRatio:d})).length?n=Of(u,p):p&&u&&(m=[].concat(H(e),[u]).reduce(wf),d=Of(u,p),e=Of(u,m),h=Of(m,p),(n=Math.max(d,e,h))!==d)&&(D=h<e?"shadowOnBgColor":"fgOnShadowColor"),d=r<n,"number"==typeof s&&("number"!=typeof n||n<s)||"number"==typeof c&&("number"!=typeof n||c<n)?(this.data({contrastRatio:n}),!0):(h=Math.floor(100*n)/100,null===u?g=Mi.get("bgColor"):d||(g=D),e=1===f.length,(s=1==h)?g=Mi.set("bgColor","equalRatio"):d||!e||o||(g="shortTextContent"),this.data({fgColor:p?p.toHexString():void 0,bgColor:u?u.toHexString():void 0,contrastRatio:h,fontSize:"".concat((72*v/96).toFixed(1),"pt (").concat(v,"px)"),fontWeight:i?"bold":"normal",messageKey:g,expectedContrastRatio:r+":1",shadowColor:m?m.toHexString():void 0}),null===p||null===u||s||e&&!o&&!d?(g=null,Mi.clear(),void this.relatedNodes(a)):(d||this.relatedNodes(a),d));this.data({fontSize:"".concat((72*v/96).toFixed(1),"pt (").concat(v,"px)"),fontWeight:i?"bold":"normal",messageKey:"pseudoContent",expectedContrastRatio:r+":1"}),this.relatedNodes(l.actualNode)}},"color-contrast-matches":function(e,n){var r=(o=n.props).nodeName,o=o.type;if("option"!==r&&("select"!==r||e.options.length)&&!("input"===r&&["hidden","range","color","checkbox","radio","image"].includes(o)||rD(n)||uo(n))){if(["input","select","textarea"].includes(r)){if(o=t.getComputedStyle(e),o=parseInt(o.getPropertyValue("text-indent"),10)){var u={top:(u=e.getBoundingClientRect()).top,bottom:u.bottom,left:u.left+o,right:u.right+o};if(!qc(u,e))return!1}return!0}if(o=dr(n,"label"),"label"===r||o){if(u=o||e,r=o?Xn(o):n,u.htmlFor&&(u=(o=sr(u).getElementById(u.htmlFor))&&Xn(o))&&rD(u))return!1;if((o=cp(r,\'input:not([type="hidden"],[type="image"],[type="button"],[type="submit"],[type="reset"]), select, textarea\')[0])&&rD(o))return!1}for(var i,l=[],s=n;s;)s.props.id&&(i=Pp(s).filter((function(e){return Uc(e.getAttribute("aria-labelledby")||"").includes(s.props.id)})).map((function(e){return Xn(e)})),l.push.apply(l,H(i))),s=s.parent;if(!(0<l.length&&l.every(rD))&&""!==(r=Iu(u=n,!1,!0))&&""!==ni(r,FD)&&u.children.some((function(e){return"#text"===e.props.nodeName&&!Ju(e)}))){for(var c=a.createRange(),d=n.children,p=0;p<d.length;p++){var f=d[p];3===f.actualNode.nodeType&&""!==Xo(f.actualNode.nodeValue)&&c.selectNodeContents(f.actualNode)}for(var D=c.getClientRects(),m=0;m<D.length;m++)if(qc(D[m],e))return!0}}return!1},"css-orientation-lock-evaluate":function(e,t,n,a){a=void 0===(a=(a||{}).cssom)?void 0:a;var r=void 0===(t=(t||{}).degreeThreshold)?0:t;if(a&&a.length){function o(){var e=c[s],t=(e=l[e]).root;if(!(e=e.rules.filter(d)).length)return"continue";e.forEach((function(e){e=e.cssRules,Array.from(e).forEach((function(e){var n=function(e){var t=e.selectorText;e=e.style;return!(!t||e.length<=0)&&(!(!(t=e.transform||e.webkitTransform||e.msTransform||!1)&&!e.rotate)&&(t=function(e){return e&&(e=e.match(/(rotate|rotateZ|rotate3d|matrix|matrix3d)\\(([^)]+)\\)(?!.*(rotate|rotateZ|rotate3d|matrix|matrix3d))/))?p((e=W(e,3))[1],e=e[2]):0}(t),!!(t+=e=p("rotate",e.rotate))&&(t=Math.abs(t),!(Math.abs(t-180)%180<=r)&&Math.abs(t-90)%90<=r)))}(e);n&&"HTML"!==e.selectorText.toUpperCase()&&(e=Array.from(t.querySelectorAll(e.selectorText))||[],i=i.concat(e)),u=u||n}))}))}for(var u=!1,i=[],l=a.reduce((function(e,t){var n=t.sheet,a=t.root;return e[t=(t=t.shadowId)||"topDocument"]||(e[t]={root:a,rules:[]}),n&&n.cssRules&&(a=Array.from(n.cssRules),e[t].rules=e[t].rules.concat(a)),e}),{}),s=0,c=Object.keys(l);s<c.length;s++)o();return!u||(i.length&&this.relatedNodes(i),!1)}function d(e){var t=e.type;e=e.cssText;return 4===t&&(/orientation:\\s*landscape/i.test(e)||/orientation:\\s*portrait/i.test(e))}function p(e,t){switch(e){case"rotate":case"rotateZ":return f(t);case"rotate3d":var n=(a=W(t.split(",").map((function(e){return e.trim()})),4))[2],a=a[3];return 0===parseInt(n)?void 0:f(a);case"matrix":case"matrix3d":var r,o;return(n=(n=t).split(",")).length<=6?(r=(o=W(n,2))[0],o=o[1],D(Math.atan2(parseFloat(o),parseFloat(r)))):(o=parseFloat(n[8]),r=Math.asin(o),o=Math.cos(r),D(Math.acos(parseFloat(n[0])/o)));default:return 0}}function f(e){var t=W(e.match(/(deg|grad|rad|turn)/)||[],1)[0];if(!t)return 0;var n=parseFloat(e.replace(t,""));switch(t){case"rad":return D(n);case"grad":var a=n;return(a%=400)<0&&(a+=400),Math.round(a/400*360);case"turn":return Math.round(360/(1/n));default:return parseInt(n)}}function D(e){return Math.round(e*(180/Math.PI))}},"data-table-large-matches":function(e){return!!cD(e)&&3<=(e=Uo(e)).length&&3<=e[0].length&&3<=e[1].length&&3<=e[2].length},"data-table-matches":function(e){return cD(e)},"deprecatedrole-evaluate":function(e,t,n){n=Fu(n,{dpub:!0,fallback:!0});var a=Lo.ariaRoles[n];return!(null==a||!a.deprecated||(this.data(n),0))},"dlitem-evaluate":function(e){var t=(e=Mr(e)).nodeName.toUpperCase(),n=Vo(e);return"DIV"===t&&["presentation","none",null].includes(n)&&(t=(e=Mr(e)).nodeName.toUpperCase(),n=Vo(e)),"DL"===t&&!(n&&!["presentation","none","list"].includes(n))},"doc-has-title-evaluate":function(){var e=a.title;return!!Xo(e)},"duplicate-id-active-matches":function(e){var t=e.getAttribute("id").trim();return t=\'*[id="\'.concat(En(t),\'"]\'),t=Array.from(sr(e).querySelectorAll(t)),!Kp(e)&&t.some(Jo)},"duplicate-id-after":function(e){var t=[];return e.filter((function(e){return-1===t.indexOf(e.data)&&(t.push(e.data),!0)}))},"duplicate-id-aria-matches":function(e){return Kp(e)},"duplicate-id-evaluate":function(e){var t,n=e.getAttribute("id").trim();return!n||(t=sr(e),(t=Array.from(t.querySelectorAll(\'[id="\'.concat(En(n),\'"]\'))).filter((function(t){return t!==e}))).length&&this.relatedNodes(t),this.data(n),0===t.length)},"duplicate-id-misc-matches":function(e){var t=e.getAttribute("id").trim();return t=\'*[id="\'.concat(En(t),\'"]\'),t=Array.from(sr(e).querySelectorAll(t)),!Kp(e)&&t.every((function(e){return!Jo(e)}))},"duplicate-img-label-evaluate":function(e,t,n){return!["none","presentation"].includes(Fu(n))&&!!(t=ca(n,t.parentSelector))&&""!==(t=Iu(t,!0).toLowerCase())&&t===ti(n).toLowerCase()},"exists-evaluate":function(){},"explicit-evaluate":function(e,t,n){var a=this;if(!n.attr("id"))return!1;if(n.actualNode){var r=sr(n.actualNode),o=En(n.attr("id"));r=Array.from(r.querySelectorAll(\'label[for="\'.concat(o,\'"]\')));if(this.relatedNodes(r),!r.length)return!1;try{return r.some((function(e){return!zr(e)||(e=Xo(No(e,{inControlContext:!0,startNode:n})),a.data({explicitLabel:e}),!!e)}))}catch(e){}}},"fallbackrole-evaluate":function(e,t,n){var a=Uc(n.attr("role"));return!(a.length<=1)&&(a=a,!(!gu(n)&&2===a.length&&a.includes("none")&&a.includes("presentation"))||void 0)},"focusable-content-evaluate":function(e,t,n){var a=n.tabbableElements;return!!a&&0<a.filter((function(e){return e!==n})).length},"focusable-disabled-evaluate":function(e,t,n){var a=["button","fieldset","input","select","textarea"];return!((n=n.tabbableElements)&&n.length&&(n=n.filter((function(e){return a.includes(e.props.nodeName)})),this.relatedNodes(n.map((function(e){return e.actualNode}))),0!==n.length)&&!Ri())||!!n.every((function(e){var t=e.getComputedStylePropertyValue("pointer-events"),n=parseInt(e.getComputedStylePropertyValue("width")),a=parseInt(e.getComputedStylePropertyValue("height"));return e.actualNode.onfocus||(0===n||0===a)&&"none"===t}))&&void 0},"focusable-element-evaluate":function(e,t,n){return!(!n.hasAttr("contenteditable")||!function e(t){return"true"===(t=t.attr("contenteditable"))||""===t||"false"!==t&&(!!(t=ca(n.parent,"[contenteditable]"))&&e(t))}(n))||Ai(n)},"focusable-modal-open-evaluate":function(e,t,n){return!(n=n.tabbableElements.map((function(e){return e.actualNode})))||!n.length||!Ri()||void this.relatedNodes(n)},"focusable-no-name-evaluate":function(e,t,n){var a=n.attr("tabindex");if(!(Jo(n)&&-1<a))return!1;try{return!ti(n)}catch(e){}},"focusable-not-tabbable-evaluate":function(e,t,n){var a=["button","fieldset","input","select","textarea"];return!((n=n.tabbableElements)&&n.length&&(n=n.filter((function(e){return!a.includes(e.props.nodeName)})),this.relatedNodes(n.map((function(e){return e.actualNode}))),0!==n.length)&&!Ri())||!!n.every((function(e){var t=e.getComputedStylePropertyValue("pointer-events"),n=parseInt(e.getComputedStylePropertyValue("width")),a=parseInt(e.getComputedStylePropertyValue("height"));return e.actualNode.onfocus||(0===n||0===a)&&"none"===t}))&&void 0},"frame-focusable-content-evaluate":function(e,t,n){if(n.children)try{return!n.children.some((function e(t){if(Ai(t))return!0;if(!t.children){if(1===t.props.nodeType)throw new Error("Cannot determine children");return!1}return t.children.some((function(t){return e(t)}))}))}catch(e){}},"frame-focusable-content-matches":function(e,t,n){var a;return!n.initiator&&!n.focusable&&1<(null==(a=n.size)?void 0:a.width)*(null==(a=n.size)?void 0:a.height)},"frame-tested-after":function(e){var t={};return e.filter((function(e){var n;return"html"!==e.node.ancestry[e.node.ancestry.length-1]?(n=e.node.ancestry.flat(1/0).join(" > "),t[n]=e,!0):(n=e.node.ancestry.slice(0,e.node.ancestry.length-1).flat(1/0).join(" > "),t[n]&&(t[n].result=!0),!1)}))},"frame-tested-evaluate":function(e,t){return!t.isViolation&&void 0},"frame-title-has-text-matches":function(e){return e=e.getAttribute("title"),!!Xo(e)},"has-alt-evaluate":function(e,t,n){var a=n.props.nodeName;return!!["img","input","area"].includes(a)&&n.hasAttr("alt")},"has-descendant-after":function(e){return e.some((function(e){return!0===e.result}))&&e.forEach((function(e){e.result=!0})),e},"has-descendant-evaluate":function(e,t,n){if(t&&t.selector&&"string"==typeof t.selector)return!(!t.passForModal||!Ri())||(n=ep(n,t.selector,Mu),this.relatedNodes(n.map((function(e){return e.actualNode}))),0<n.length);throw new TypeError("has-descendant requires options.selector to be a string")},"has-global-aria-attribute-evaluate":function(e,t,n){var a=Ho().filter((function(e){return n.hasAttr(e)}));return this.data(a),0<a.length},"has-implicit-chromium-role-matches":function(e,t){return null!==gu(t,{chromium:!0})},"has-lang-evaluate":function(e,t,n){var r=void 0!==a&&Rn(a);return t.attributes.includes("xml:lang")&&t.attributes.includes("lang")&&Gf(n.attr("xml:lang"))&&!Gf(n.attr("lang"))&&!r?(this.data({messageKey:"noXHTML"}),!1):!!t.attributes.some((function(e){return Gf(n.attr(e))}))||(this.data({messageKey:"noLang"}),!1)},"has-text-content-evaluate":function(e,t,n){try{return""!==Xo(ku(n))}catch(e){}},"has-widget-role-evaluate":function(e){return null!==(e=e.getAttribute("role"))&&("widget"===(e=ki(e))||"composite"===e)},"heading-matches":function(e,t){return"heading"===Fu(t)},"heading-order-after":function(e){(t=H(t=e)).sort((function(e,t){return e=e.node,t=t.node,e.ancestry.length-t.ancestry.length}));var t,n=t.reduce(Qf,[]).filter((function(e){return-1!==e.level}));return e.forEach((function(e){e.result=function(e,t){var n=null!=(n=null==(n=t[e=eD(t,e.node.ancestry)])?void 0:n.level)?n:-1;t=null!=(t=null==(t=t[e-1])?void 0:t.level)?t:-1;return 0===e||(-1!==n?n-t<=1:void 0)}(e,n)})),e},"heading-order-evaluate":function(){var e,t=Kn.get("headingOrder");return t||(t=(e=ep(o._tree[0],"h1, h2, h3, h4, h5, h6, [role=heading], iframe, frame",Mu)).map((function(e){return{ancestry:[Gn(e.actualNode)],level:(t=(t=Fu(e=e))&&t.includes("heading"),n=e.attr("aria-level"),a=parseInt(n,10),e=W(e.props.nodeName.match(/h(\\d)/)||[],2)[1],t?e&&!n?parseInt(e,10):isNaN(a)||a<1?e?parseInt(e,10):2:a||-1:-1)};var t,n,a})),this.data({headingOrder:t}),Kn.set("headingOrder",e)),!0},"help-same-as-label-evaluate":function(e,t,n){n=li(n);var a=e.getAttribute("title");return!!n&&(a||(a="",e.getAttribute("aria-describedby")&&(a=To(e,"aria-describedby").map((function(e){return e?No(e):""})).join(""))),Xo(a)===Xo(n))},"hidden-content-evaluate":function(e,n,a){if(!["SCRIPT","HEAD","TITLE","NOSCRIPT","STYLE","TEMPLATE"].includes(e.nodeName.toUpperCase())&&bi(a)){if("none"===(a=t.getComputedStyle(e)).getPropertyValue("display"))return;if("hidden"===a.getPropertyValue("visibility")&&(!(e=(a=Mr(e))&&t.getComputedStyle(a))||"hidden"!==e.getPropertyValue("visibility")))return}return!0},"hidden-explicit-label-evaluate":function(e,t,n){if(n.hasAttr("id")){if(!n.actualNode)return;var a,r=sr(e);e=En(e.getAttribute("id"));if((r=r.querySelector(\'label[for="\'.concat(e,\'"]\')))&&!Mu(r)){try{a=ti(n).trim()}catch(e){return}return""===a}}return!1},"html-namespace-matches":function(e,t){return!wD(0,t)},"html5-scope-evaluate":function(e){return!xi(a)||"TH"===e.nodeName.toUpperCase()},"identical-links-same-purpose-after":function(e){if(e.length<2)return e;function t(e){var t=n[e],u=t.data,i=u.name,l=u.urlProps;if(o[i])return"continue";var s=(u=n.filter((function(t,n){return t.data.name===i&&n!==e}))).every((function(e){return function e(t,n){var a,o;return!(!t||!n)&&(a=Object.getOwnPropertyNames(t),o=Object.getOwnPropertyNames(n),a.length===o.length)&&a.every((function(a){var o=t[a];a=n[a];return r(o)===r(a)&&("object"===r(o)||"object"===r(a)?e(o,a):o===a)}))}(e.data.urlProps,l)}));u.length&&!s&&(t.result=void 0),t.relatedNodes=[],(s=t.relatedNodes).push.apply(s,H(u.map((function(e){return e.relatedNodes[0]})))),o[i]=u,a.push(t)}for(var n=e.filter((function(e){return void 0!==e.result})),a=[],o={},u=0;u<n.length;u++)t(u);return a},"identical-links-same-purpose-evaluate":function(e,t,n){if(n=Bo.accessibleTextVirtual(n),n=Bo.sanitize(Bo.removeUnicode(n,{emoji:!0,nonBmp:!0,punctuations:!0})).toLowerCase())return n={name:n,urlProps:ir.urlPropsFromAttribute(e,"href")},this.data(n),this.relatedNodes([e]),!0},"identical-links-same-purpose-matches":function(e,t){return!(!ti(t)||(t=Fu(e))&&"link"!==t)},"implicit-evaluate":function(e,t,n){try{var a,r=ca(n,"label");return!!r&&(a=Xo(ti(r,{inControlContext:!0,startNode:n})),r.actualNode&&this.relatedNodes([r.actualNode]),this.data({implicitLabel:a}),!!a)}catch(e){}},"inline-style-property-evaluate":function(e,n){var a=n.cssProperty,r=n.absoluteValues,o=n.minValue,u=n.maxValue,i=void 0===(i=n.normalValue)?0:i,l=n.noImportant;n=n.multiLineOnly;return!!(!l&&"important"!==e.style.getPropertyPriority(a)||n&&!_i(e))||(l={},"number"==typeof o&&(l.minValue=o),"number"==typeof u&&(l.maxValue=u),n=e.style.getPropertyValue(a),["inherit","unset","revert","revert-layer"].includes(n)?(this.data(G({value:n},l)),!0):(n=function(e,n){var a=n.cssProperty,r=n.absoluteValues;n=n.normalValue;return"normal"===(a=(e=t.getComputedStyle(e)).getPropertyValue(a))?n:(n=parseFloat(a),r?n:(r=parseFloat(e.getPropertyValue("font-size")),e=Math.round(n/r*100)/100,isNaN(e)?a:e))}(e,{absoluteValues:r,cssProperty:a,normalValue:i}),this.data(G({value:n},l)),"number"==typeof n?("number"!=typeof o||o<=n)&&("number"!=typeof u||n<=u):void 0))},"inserted-into-focus-order-matches":function(e){return Fi(e)},"internal-link-present-evaluate":function(e,t,n){return cp(n,"a[href]").some((function(e){return/^#[^/!]/.test(e.attr("href"))}))},"invalid-children-evaluate":function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=2<arguments.length?arguments[2]:void 0,a=[],r=[];if(n.children){for(var o=Wf(n.children);o.length;){var u=(i=o.shift()).vChild,i=i.nested;if(t.divGroups&&!i&&"div"===(l=u).props.nodeName&&null===Vo(l)){if(!u.children)return;var l=Wf(u.children,!0);o.push.apply(o,H(l))}else(l=function(e,t,n){var a=void 0===(a=n.validRoles)?[]:a,r=(n=void 0===(n=n.validNodeNames)?[]:n,(u=e.props).nodeName),o=u.nodeType,u=u.nodeValue;t=t?"div > ":"";return 3===o&&""!==u.trim()?t+"#text":!(1!==o||!Mu(e))&&((u=Vo(e))?!a.includes(u)&&t+"[role=".concat(u,"]"):!n.includes(r)&&t+r)}(u,i,t))&&(r.includes(l)||r.push(l),1===(null==u||null==(i=u.actualNode)?void 0:i.nodeType))&&a.push(u.actualNode)}return 0!==r.length&&(this.data({values:r.join(", ")}),this.relatedNodes(a),!0)}},"invalidrole-evaluate":function(e,t,n){return!!(n=Uc(n.attr("role"))).every((function(e){return!zo(e,{allowAbstract:!0})}))&&(this.data(n),!0)},"is-element-focusable-evaluate":function(e,t,n){return Jo(n)},"is-initiator-matches":yD,"is-on-screen-evaluate":Ls,"is-visible-matches":zr,"is-visible-on-screen-matches":function(e,t){return zr(t)},"label-content-name-mismatch-evaluate":function(e,t,n){var a=null==t?void 0:t.pixelThreshold,r=null!=(r=null==t?void 0:t.occurrenceThreshold)?r:null==t?void 0:t.occuranceThreshold;if(t=No(e).toLowerCase(),!(ai(t)<1))return!(e=Xo(ku(n,{subtreeDescendant:!0,ignoreIconLigature:!0,pixelThreshold:a,occurrenceThreshold:r})).toLowerCase())||(ai(e)<1?!!Hf(e,t)||void 0:Hf(e,t))},"label-content-name-mismatch-matches":function(e,t){var n=Fu(e);return!!(n&&zp("widget").includes(n)&&$p().includes(n)&&(Xo(_o(t))||Xo(Ro(e)))&&Xo(Iu(t)))},"label-matches":function(e,t){return"input"!==t.props.nodeName||!1===t.hasAttr("type")||(t=t.attr("type").toLowerCase(),!1===["hidden","image","button","submit","reset"].includes(t))},"landmark-has-body-context-matches":function(e,t){return e.hasAttribute("role")||!dr(t,"article, aside, main, nav, section")},"landmark-is-top-level-evaluate":function(e){var t=zp("landmark"),n=Mr(e),a=Fu(e);for(this.data({role:a});n;){var r=n.getAttribute("role");if((r=r||"FORM"===n.nodeName.toUpperCase()?r:gu(n))&&t.includes(r)&&("main"!==r||"complementary"!==a))return!1;n=Mr(n)}return!0},"landmark-is-unique-after":function(e){var t=[];return e.filter((function(e){var n=t.find((function(t){return e.data.role===t.data.role&&e.data.accessibleText===t.data.accessibleText}));return n?(n.result=!1,n.relatedNodes.push(e.relatedNodes[0]),!1):(t.push(e),e.relatedNodes=[],!0)}))},"landmark-is-unique-evaluate":function(e,t,n){var a=Fu(e);return n=(n=ti(n))?n.toLowerCase():null,this.data({role:a,accessibleText:n}),this.relatedNodes([e]),!0},"landmark-unique-matches":function(e,t){var n,a,r,o=["article","aside","main","nav","section"].join(",");return n=(t=t).actualNode,a=zp("landmark"),!!(r=Fu(n))&&("HEADER"===(n=n.nodeName.toUpperCase())||"FOOTER"===n?!ca(t,o):"SECTION"===n||"FORM"===n?!!ti(t):0<=a.indexOf(r)||"region"===r)&&Mu(e)},"layout-table-matches":function(e){return!cD(e)&&!Jo(e)},"link-in-text-block-evaluate":function(e,t){var n=t.requiredContrastRatio;if(t=t.allowSameColor,qf(e))return!1;for(var a=Mr(e);a&&1===a.nodeType&&!qf(a);)a=Mr(a);if(a){this.relatedNodes([a]);var r=Sf(e),o=Sf(a),u=(e=Nf(e),Nf(a)),i=r&&o?jf(r,o):void 0;if((i=i&&Math.floor(100*i)/100)&&n<=i)return!0;var l=e&&u?jf(e,u):void 0;if((l=l&&Math.floor(100*l)/100)&&n<=l)return!0;if(l){if(i)return!(!t||1!==i||1!==l)||(1===i&&1<l?this.data({messageKey:"bgContrast",contrastRatio:l,requiredContrastRatio:n,nodeBackgroundColor:e?e.toHexString():void 0,parentBackgroundColor:u?u.toHexString():void 0}):this.data({messageKey:"fgContrast",contrastRatio:i,requiredContrastRatio:n,nodeColor:r?r.toHexString():void 0,parentColor:o?o.toHexString():void 0}),!1)}else l=null!=(t=Mi.get("bgColor"))?t:"bgContrast",this.data({messageKey:l}),Mi.clear()}},"link-in-text-block-matches":function(e){var t=Xo(e.innerText),n=e.getAttribute("role");return!(n&&"link"!==n||!t||!zr(e))&&Ni(e)},"link-in-text-block-style-evaluate":function(e){if(Vf(e))return!1;for(var n=Mr(e);n&&1===n.nodeType&&!Vf(n);)n=Mr(n);return n?(this.relatedNodes([n]),!!hf(e,n)||!!function(e){for(var n=0,a=["before","after"];n<a.length;n++){var r=a[n];if("none"!==t.getComputedStyle(e,":".concat(r)).getPropertyValue("content"))return 1}}(e)&&void this.data({messageKey:"pseudoContent"})):void 0},"listitem-evaluate":function(e,t,n){var a;if(n=n.parent)return a=n.props.nodeName,n=Vo(n),!!["presentation","none","list"].includes(n)||(n&&zo(n)?(this.data({messageKey:"roleNotValid"}),!1):["ul","ol","menu"].includes(a))},"matches-definition-evaluate":function(e,t,n){return mu(n,t.matcher)},"meta-refresh-evaluate":function(e,t,n){var a=(r=t||{}).minDelay,r=r.maxDelay;return!(n=W((n.attr("content")||"").trim().split(fD),1)[0]).match(DD)||(n=parseFloat(n),this.data({redirectDelay:n}),"number"==typeof a&&n<=t.minDelay)||"number"==typeof r&&n>t.maxDelay},"meta-viewport-scale-evaluate":function(e,t,n){var a,r=void 0===(r=(t=t||{}).scaleMinimum)?2:r;return t=void 0!==(t=t.lowerBound)&&t,!((n=n.attr("content")||"")&&(n=n.split(/[;,]/).reduce((function(e,t){var n;return(t=t.trim())&&(n=(t=W(t.split("="),2))[0],t=t[1],n)&&t&&(n=n.toLowerCase().trim(),t=t.toLowerCase().trim(),"maximum-scale"===n&&"yes"===t&&(t=1),"maximum-scale"===n&&parseFloat(t)<0||(e[n]=t)),e}),{}),!(t&&n["maximum-scale"]&&parseFloat(n["maximum-scale"])<t))&&(t||"no"!==n["user-scalable"]?(a=parseFloat(n["user-scalable"]),!t&&n["user-scalable"]&&(a||0===a)&&-1<a&&a<1?(this.data("user-scalable"),1):n["maximum-scale"]&&parseFloat(n["maximum-scale"])<r&&(this.data("maximum-scale"),1)):(this.data("user-scalable=no"),1)))},"multiple-label-evaluate":function(e){var t=En(e.getAttribute("id")),n=e.parentNode,a=(a=sr(e)).documentElement||a,r=Array.from(a.querySelectorAll(\'label[for="\'.concat(t,\'"]\')));for(r.length&&(r=r.filter((function(e){return!_r(e)})));n;)"LABEL"===n.nodeName.toUpperCase()&&-1===r.indexOf(n)&&r.push(n),n=n.parentNode;return this.relatedNodes(r),1<r.length&&(1<(a=r.filter(Mu)).length||!To(e,"aria-labelledby").includes(a[0]))&&void 0},"nested-interactive-matches":function(e,t){return!!(t=Fu(t))&&!!Lo.ariaRoles[t].childrenPresentational},"no-autoplay-audio-evaluate":function(e,t){var n,a;if(e.duration)return t=void 0===(t=t.allowedDuration)?3:t,((n=e).currentSrc?(a=function(e){if(e=e.match(/#t=(.*)/))return W(e,2)[1].split(",").map((function(e){if(/:/.test(e)){for(var t=e.split(":"),n=0,a=1;0<t.length;)n+=a*parseInt(t.pop(),10),a*=60;return parseFloat(n)}return parseFloat(e)}))}(n.currentSrc))?1!==a.length?Math.abs(a[1]-a[0]):Math.abs(n.duration-a[0]):Math.abs(n.duration-(n.currentTime||0)):0)<=t&&!e.hasAttribute("loop")||!!e.hasAttribute("controls");console.warn("axe.utils.preloadMedia did not load metadata")},"no-autoplay-audio-matches":function(e){return!!e.currentSrc&&!e.hasAttribute("paused")&&!e.hasAttribute("muted")},"no-empty-role-matches":function(e,t){return!!t.hasAttr("role")&&!!t.attr("role").trim()},"no-explicit-name-required-matches":ED,"no-focusable-content-evaluate":function(e,t,n){if(n.children)try{var a,r=function e(t){if(!t.children){if(1===t.props.nodeType)throw new Error("Cannot determine children");return[]}var n=[];return t.children.forEach((function(t){"widget"===ki(t)&&Jo(t)?n.push(t):n.push.apply(n,H(e(t)))})),n}(n);return!r.length||(0<(a=r.filter($f)).length?(this.data({messageKey:"notHidden"}),this.relatedNodes(a)):this.relatedNodes(r),!1)}catch(e){}},"no-implicit-explicit-label-evaluate":function(e,t,n){var a,r,o=Fu(n,{noImplicit:!0});this.data(o);try{a=Xo(Bu(n)).toLowerCase(),r=Xo(ti(n)).toLowerCase()}catch(e){return}return!(!r&&!a||(r||!a)&&r.includes(a))&&void 0},"no-naming-method-matches":function(e,t){var n=hu(t).namingMethods;return!(n&&0!==n.length||"combobox"===Vo(t)&&cp(t,\'input:not([type="hidden"])\').length||Xp(t,{popupRoles:["listbox"]}))},"no-negative-tabindex-matches":function(e,t){return t=parseInt(t.attr("tabindex"),10),isNaN(t)||0<=t},"no-role-matches":function(e,t){return!t.attr("role")},"non-empty-if-present-evaluate":function(e,t,n){var a=n.props.nodeName,r=(n.attr("type")||"").toLowerCase();return(n=n.attr("value"))&&this.data({messageKey:"has-label"}),!("input"!==a||!["submit","reset"].includes(r))&&null===n},"not-html-matches":function(e,t){return"html"!==t.props.nodeName},"object-is-loaded-matches":function(e,t){return[ED,function(e){var t;return null==e||null==(t=e.ownerDocument)||!t.createRange||((t=e.ownerDocument.createRange()).setStart(e,0),t.setEnd(e,e.childNodes.length),0===t.getClientRects().length)}].every((function(n){return n(e,t)}))},"only-dlitems-evaluate":function(e,t,n){var a=["definition","term","list"];return(n=n.children.reduce((function(e,t){var n=t.actualNode;return"DIV"===n.nodeName.toUpperCase()&&null===Fu(n)?e.concat(t.children):e.concat(t)}),[]).reduce((function(e,t){var n,r=(t=t.actualNode).nodeName.toUpperCase();return 1===t.nodeType&&Mu(t)?(n=Vo(t),("DT"!==r&&"DD"!==r||n)&&!a.includes(n)&&e.badNodes.push(t)):3===t.nodeType&&""!==t.nodeValue.trim()&&(e.hasNonEmptyTextNode=!0),e}),{badNodes:[],hasNonEmptyTextNode:!1})).badNodes.length&&this.relatedNodes(n.badNodes),!!n.badNodes.length||n.hasNonEmptyTextNode},"only-listitems-evaluate":function(e,t,n){var a=!1,r=!1,o=!0,u=[],i=[],l=[];if(n.children.forEach((function(e){var t,n,s=e.actualNode;3===s.nodeType&&""!==s.nodeValue.trim()?a=!0:1===s.nodeType&&Mu(s)&&(o=!1,t="LI"===s.nodeName.toUpperCase(),n="listitem"===(e=Fu(e)),t||n||u.push(s),t&&!n&&(i.push(s),l.includes(e)||l.push(e)),n)&&(r=!0)})),a||u.length)this.relatedNodes(u);else{if(o||r)return!1;this.relatedNodes(i),this.data({messageKey:"roleNotValid",roles:l.join(", ")})}return!0},"p-as-heading-evaluate":function(e,t,n){var a=(u=Array.from(e.parentNode.children)).indexOf(e),r=(t=t||{}).margins||[],o=u.slice(a+1).find((function(e){return"P"===e.nodeName.toUpperCase()})),u=u.slice(0,a).reverse().find((function(e){return"P"===e.nodeName.toUpperCase()})),i=(a=mD(e),o?mD(o):null),l=(u=u?mD(u):null,t.passLength);return t=t.failLength,e=e.textContent.trim().length,(o=null==o?void 0:o.textContent.trim().length)*l<e||!i||!hD(a,i,r)||!!((l=dr(n,"blockquote"))&&"BLOCKQUOTE"===l.nodeName.toUpperCase()||u&&!hD(a,u,r)||o*t<e)&&void 0},"p-as-heading-matches":function(e){var t=Array.from(e.parentNode.childNodes),n=e.textContent.trim();return!(0===n.length||2<=(n.match(/[.!?:;](?![.!?:;])/g)||[]).length)&&0!==t.slice(t.indexOf(e)+1).filter((function(e){return"P"===e.nodeName.toUpperCase()&&""!==e.textContent.trim()})).length},"page-no-duplicate-after":function(e){return e.filter((function(e){return"ignored"!==e.data}))},"page-no-duplicate-evaluate":function(e,t,n){if(!t||!t.selector||"string"!=typeof t.selector)throw new TypeError("page-no-duplicate requires options.selector to be a string");var a="page-no-duplicate;"+t.selector;if(!Kn.get(a))return Kn.set(a,!0),a=ep(o._tree[0],t.selector,Mu),"string"==typeof t.nativeScopeFilter&&(a=a.filter((function(e){return e.actualNode.hasAttribute("role")||!dr(e,t.nativeScopeFilter)}))),this.relatedNodes(a.filter((function(e){return e!==n})).map((function(e){return e.actualNode}))),a.length<=1;this.data("ignored")},"presentation-role-conflict-matches":function(e,t){return null!==gu(t,{chromiumRoles:!0})},"presentational-role-evaluate":function(e,t,n){var a=Vo(n);if(["presentation","none"].includes(a)&&["iframe","frame"].includes(n.props.nodeName)&&n.hasAttr("title"))this.data({messageKey:"iframe",nodeName:n.props.nodeName});else{var r,o=Fu(n);if(["presentation","none"].includes(o))return this.data({role:o}),!0;["presentation","none"].includes(a)&&(a=Ho().some((function(e){return n.hasAttr(e)})),r=Jo(n),this.data({messageKey:a&&!r?"globalAria":!a&&r?"focusable":"both",role:o}))}return!1},"region-after":function(e){var t=e.filter((function(e){return e.data.isIframe}));return e.forEach((function(e){if(!e.result&&1!==e.node.ancestry.length){var n,a=e.node.ancestry.slice(0,-1),r=ee(t);try{for(r.s();!(n=r.n()).done;){var o=n.value;if(Pd(a,o.node.ancestry)){e.result=o.result;break}}}catch(e){r.e(e)}finally{r.f()}}})),t.forEach((function(e){e.result||(e.result=!0)})),e},"region-evaluate":function(e,t,n){return this.data({isIframe:["iframe","frame"].includes(n.props.nodeName)}),!Kn.get("regionlessNodes",(function(){return function e(t,n){var r=t.actualNode;if("button"===Fu(t)||function(e,t){var n=e.actualNode,a=Fu(e);return n=(n.getAttribute("aria-live")||"").toLowerCase().trim(),!!(["assertive","polite"].includes(n)||bD.includes(a)||gD.includes(a)||t.regionMatcher&&mu(e,t.regionMatcher))}(t,n)||["iframe","frame"].includes(t.props.nodeName)||Bc(t.actualNode)&&mo(t.actualNode,"href")||!Mu(r)){for(var o=t;o;)o._hasRegionDescendant=!0,o=o.parent;return["iframe","frame"].includes(t.props.nodeName)?[t]:[]}return r!==a.body&&vi(r,!0)?[t]:t.children.filter((function(e){return 1===(e=e.actualNode).nodeType})).map((function(t){return e(t,n)})).reduce((function(e,t){return e.concat(t)}),[])}(o._tree[0],t).map((function(e){for(;e.parent&&!e.parent._hasRegionDescendant&&e.parent.actualNode!==a.body;)e=e.parent;return e})).filter((function(e,t,n){return n.indexOf(e)===t}))})).includes(n)},"same-caption-summary-evaluate":function(e,t,n){var a;if(void 0!==n.children)return a=n.attr("summary"),!(!(n=!!(n=n.children.find(vD))&&Xo(ku(n)))||!a)&&Xo(a).toLowerCase()===Xo(n).toLowerCase()},"scope-value-evaluate":function(e,t){return e=e.getAttribute("scope").toLowerCase(),-1!==t.values.indexOf(e)},"scrollable-region-focusable-matches":function(e,t){return void 0!==xd(e,13)&&!1===Xp(t)&&cp(t,"*").some((function(e){return bi(e,!0,!0)}))},"skip-link-evaluate":function(e){return!!(e=mo(e,"href"))&&(Mu(e)||void 0)},"skip-link-matches":function(e){return Bc(e)&&Lr(e)},"structured-dlitems-evaluate":function(e,t,n){var a=n.children;if(!a||!a.length)return!1;for(var r,o=!1,u=!1,i=0;i<a.length;i++){if((o="DT"===(r=a[i].props.nodeName.toUpperCase())||o)&&"DD"===r)return!1;"DD"===r&&(u=!0)}return o||u},"svg-namespace-matches":wD,"svg-non-empty-title-evaluate":function(e,t,n){if(n.children){if(!(n=n.children.find((function(e){return"title"===e.props.nodeName}))))return this.data({messageKey:"noTitle"}),!1;try{if(""===ku(n,{includeHidden:!0}).trim())return this.data({messageKey:"emptyTitle"}),!1}catch(e){return}return!0}},"tabindex-evaluate":function(e,t,n){return n=parseInt(n.attr("tabindex"),10),!!isNaN(n)||n<=0},"table-or-grid-role-matches":function(e,t){return t=Fu(t),["treegrid","grid","table"].includes(t)},"target-offset-evaluate":function(e,t,n){var a,r,o=(null==t?void 0:t.minOffset)||24,u=[],i=o,l=ee(no(n,o));try{for(l.s();!(a=l.n()).done;){var s,c=a.value;"widget"===ki(c)&&Jo(c)&&(r=vo(n,c),o<=.05+(s=Math.round(10*r)/10)||(i=Math.min(i,s),u.push(c)))}}catch(e){l.e(e)}finally{l.f()}return 0===u.length?(this.data({closestOffset:i,minOffset:o}),!0):(this.relatedNodes(u.map((function(e){return e.actualNode}))),u.some(Ai)?(this.data({closestOffset:i,minOffset:o}),!Ai(n)&&void 0):void this.data({messageKey:"nonTabbableNeighbor",closestOffset:i,minOffset:o}))},"target-size-evaluate":function(e,t,n){t=(null==t?void 0:t.minSize)||24;var a,r,o=n.boundingClientRect,u=Zf.bind(null,t),i=no(n),l=(a=n,i.filter((function(e){return!Yf(e,a)&&Xf(a,e)}))),s=(i=function(e,t){var n,a=[],r=[],o=ee(t);try{for(o.s();!(n=o.n()).done;){var u=n.value;!Xf(e,u)&&Fo(e,u)&&"none"!==u.getComputedStylePropertyValue("pointer-events")&&(Yf(e,u)?a:r).push(u)}}catch(e){o.e(e)}finally{o.f()}return{fullyObscuringElms:a,partialObscuringElms:r}}(n,i)).fullyObscuringElms;i=i.partialObscuringElms;return s.length&&!l.length?(this.relatedNodes(Jf(s)),this.data({messageKey:"obscured"}),!0):(r=!Ai(n)&&void 0,u(o)||l.length?(i=function(e,t){return e=e.boundingClientRect,0===t.length?null:function(e,t){return e.reduce((function(e,n){var a=Zf(t,e);return a!==Zf(t,n)?a?e:n:(a=e.width*e.height,n.width*n.height<a?e:n)}))}(wo(e,t=t.map((function(e){return e.boundingClientRect}))))}(n,n=i.filter((function(e){return"widget"===ki(e)&&Jo(e)}))),!l.length||!s.length&&u(i||o)?0===n.length||u(i)?(this.data(G({minSize:t},Kf(i||o))),this.relatedNodes(Jf(n)),!0):(s=n.every(Ai),u="partiallyObscured".concat(s?"":"NonTabbable"),this.data(G({messageKey:u,minSize:t},Kf(i))),this.relatedNodes(Jf(n)),s?r:void 0):(this.data({minSize:t,messageKey:"contentOverflow"}),void this.relatedNodes(Jf(l)))):(this.data(G({minSize:t},Kf(o))),r))},"td-has-header-evaluate":function(e){var t=[],n=uD(e),a=Uo(e);return n.forEach((function(e){vi(e)&&sD(e)&&!Jp(e)&&!lD(e,a).some((function(e){return null!==e&&!!vi(e)}))&&t.push(e)})),!t.length||(this.relatedNodes(t),!1)},"td-headers-attr-evaluate":function(e){for(var t=[],n=[],a=[],r=0;r<e.rows.length;r++)for(var o=e.rows[r],u=0;u<o.cells.length;u++)t.push(o.cells[u]);var i=t.reduce((function(e,t){return t.getAttribute("id")&&e.push(t.getAttribute("id")),e}),[]);return t.forEach((function(e){var t,r=!1;if(e.hasAttribute("headers")&&Mu(e))return(t=e.getAttribute("headers").trim())?void(0!==(t=Uc(t)).length&&(e.getAttribute("id")&&(r=-1!==t.indexOf(e.getAttribute("id").trim())),t=t.some((function(e){return!i.includes(e)})),r||t)&&a.push(e)):n.push(e)})),0<a.length?(this.relatedNodes(a),!1):!n.length||void this.relatedNodes(n)},"th-has-data-cells-evaluate":function(e){var t=uD(e),n=this,a=[],r=(t=(t.forEach((function(e){var t;(t=((t=e.getAttribute("headers"))&&(a=a.concat(t.split(/\\s+/))),e.getAttribute("aria-labelledby")))&&(a=a.concat(t.split(/\\s+/)))})),t.filter((function(e){return""!==Xo(e.textContent)&&("TH"===e.nodeName.toUpperCase()||-1!==["rowheader","columnheader"].indexOf(e.getAttribute("role")))}))),Uo(e)),o=!0;return t.forEach((function(e){var t,u;e.getAttribute("id")&&a.includes(e.getAttribute("id"))||(t=Go(e,r),u=!1,(u=!(u=Yo(e)?pD("down",t,r).find((function(t){return!Yo(t)&&lD(t,r).includes(e)})):u)&&Ko(e)?pD("right",t,r).find((function(t){return!Ko(t)&&lD(t,r).includes(e)})):u)||n.relatedNodes(e),o=o&&u)})),!!o||void 0},"title-only-evaluate":function(e,t,n){var a=li(n),r=Eu(n);return n=n.attr("aria-describedby"),!(a||!r&&!n)},"unique-frame-title-after":function(e){var t={};return e.forEach((function(e){t[e.data]=void 0!==t[e.data]?++t[e.data]:0})),e.forEach((function(e){e.result=!!t[e.data]})),e},"unique-frame-title-evaluate":function(e,t,n){return n=Xo(n.attr("title")).toLowerCase(),this.data(n),!0},"unsupportedrole-evaluate":function(e,t,n){n=Fu(n,{dpub:!0,fallback:!0});var a=qo(n);return a&&this.data(n),a},"valid-lang-evaluate":function(e,t,n){var a=[];return t.attributes.forEach((function(e){var r,o,u=n.attr(e);"string"==typeof u&&(r=td(u),o=t.value?!t.value.map(td).includes(r):!Ep(r),""!==r&&o||""!==u&&!Xo(u))&&a.push(e+\'="\'+n.attr(e)+\'"\')})),!!a.length&&!("html"!==n.props.nodeName&&!yi(n)||(this.data(a),0))},"valid-scrollable-semantics-evaluate":function(e,t){return t=t,(n=Vo(n=e))&&(pf[n]||t.roles.includes(n))||(t=(t=e).nodeName.toUpperCase(),df[t])||!1;var n},"widget-not-inline-matches":function(e,t){return CD.every((function(n){return n(e,t)}))},"window-is-top-matches":function(e){return e.ownerDocument.defaultView.self===e.ownerDocument.defaultView.top},"xml-lang-mismatch-evaluate":function(e,t,n){return td(n.attr("lang"))===td(n.attr("xml:lang"))},"xml-lang-mismatch-matches":function(e){var t=td(e.getAttribute("lang"));e=td(e.getAttribute("xml:lang"));return Ep(t)&&Ep(e)}},BD=function(e){this.id=e.id,this.data=null,this.relatedNodes=[],this.result=null};function TD(e){if("string"!=typeof e)return e;if(kD[e])return kD[e];if(/^\\s*function[\\s\\w]*\\(/.test(e))return new Function("return "+e+";")();throw new ReferenceError("Function ID does not exist in the metadata-function-map: ".concat(e))}function ND(e){var t=0<arguments.length&&void 0!==e?e:{};return Array.isArray(t)||"object"!==r(t)?{value:t}:t}function RD(e){e&&(this.id=e.id,this.configure(e))}RD.prototype.enabled=!0,RD.prototype.run=function(e,t,n,a,r){var o=((t=t||{}).hasOwnProperty("enabled")?t:this).enabled,u=this.getOptions(t.options);if(o){var i;o=new BD(this),t=Qn(o,t,a,r);try{i=this.evaluate.call(t,e.actualNode,u,e,n)}catch(t){return e&&e.actualNode&&(t.errorNode=new Jn(e).toJSON()),void r(t)}t.isAsync||(o.result=i,a(o))}else a(null)},RD.prototype.runSync=function(e,t,n){if(!(void 0===(r=(t=t||{}).enabled)?this.enabled:r))return null;var a,r=this.getOptions(t.options),o=new BD(this);(t=Qn(o,t)).async=function(){throw new Error("Cannot run async check while in a synchronous run")};try{a=this.evaluate.call(t,e.actualNode,r,e,n)}catch(t){throw e&&e.actualNode&&(t.errorNode=new Jn(e).toJSON()),t}return o.result=a,o},RD.prototype.configure=function(e){var t=this;e.evaluate&&!kD[e.evaluate]||(this._internalCheck=!0),e.hasOwnProperty("enabled")&&(this.enabled=e.enabled),e.hasOwnProperty("options")&&(this._internalCheck?this.options=ND(e.options):this.options=e.options),["evaluate","after"].filter((function(t){return e.hasOwnProperty(t)})).forEach((function(n){return t[n]=TD(e[n])}))},RD.prototype.getOptions=function(e){return this._internalCheck?ar(this.options,ND(e||{})):e||this.options};var _D=RD,OD=function(e){this.id=e.id,this.result=nn.NA,this.pageLevel=e.pageLevel,this.impact=null,this.nodes=[]};function SD(e,t){this._audit=t,this.id=e.id,this.selector=e.selector||"*",e.impact&&(Fn(nn.impact.includes(e.impact),"Impact ".concat(e.impact," is not a valid impact")),this.impact=e.impact),this.excludeHidden="boolean"!=typeof e.excludeHidden||e.excludeHidden,this.enabled="boolean"!=typeof e.enabled||e.enabled,this.pageLevel="boolean"==typeof e.pageLevel&&e.pageLevel,this.reviewOnFail="boolean"==typeof e.reviewOnFail&&e.reviewOnFail,this.any=e.any||[],this.all=e.all||[],this.none=e.none||[],this.tags=e.tags||[],this.preload=!!e.preload,this.actIds=e.actIds,e.matches&&(this.matches=TD(e.matches))}function MD(e){var t,n;if(e.length)return t=!1,n={},e.forEach((function(e){var a=e.results.filter((function(e){return e}));(n[e.type]=a).length&&(t=!0)})),t?n:null}SD.prototype.matches=function(){return!0},SD.prototype.gather=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n="mark_gather_start_"+this.id,a="mark_gather_end_"+this.id,r="mark_isVisibleToScreenReaders_start_"+this.id,o="mark_isVisibleToScreenReaders_end_"+this.id,u=(t.performanceTimer&&Wd.mark(n),mp(this.selector,e));return this.excludeHidden&&(t.performanceTimer&&Wd.mark(r),u=u.filter(Mu),t.performanceTimer)&&(Wd.mark(o),Wd.measure("rule_"+this.id+"#gather_axe.utils.isVisibleToScreenReaders",r,o)),t.performanceTimer&&(Wd.mark(a),Wd.measure("rule_"+this.id+"#gather",n,a)),u},SD.prototype.runChecks=function(e,t,n,a,r,o){var u=this,i=ha();this[e].forEach((function(e){var r=u._audit.checks[e.id||e],o=cd(r,u.id,n);i.defer((function(e,n){r.run(t,o,a,e,n)}))})),i.then((function(t){t=t.filter((function(e){return e})),r({type:e,results:t})})).catch(o)},SD.prototype.runChecksSync=function(e,t,n,a){var r=this,o=[];return this[e].forEach((function(e){e=r._audit.checks[e.id||e];var u=cd(e,r.id,n);o.push(e.runSync(t,u,a))})),{type:e,results:o=o.filter((function(e){return e}))}},SD.prototype.run=function(e){var t,n=this,a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=2<arguments.length?arguments[2]:void 0,o=3<arguments.length?arguments[3]:void 0,i=(a.performanceTimer&&this._trackPerformance(),ha()),l=new OD(this);try{t=this.gatherAndMatchNodes(e,a)}catch(t){return void o(new u({cause:t,ruleId:this.id}))}a.performanceTimer&&this._logGatherPerformance(t),t.forEach((function(t){i.defer((function(r,o){var u=ha();["any","all","none"].forEach((function(r){u.defer((function(o,u){n.runChecks(r,t,a,e,o,u)}))})),u.then((function(e){var o=MD(e);o&&(o.node=new Jn(t,a),l.nodes.push(o),n.reviewOnFail)&&(["any","all"].forEach((function(e){o[e].forEach((function(e){!1===e.result&&(e.result=void 0)}))})),o.none.forEach((function(e){!0===e.result&&(e.result=void 0)}))),r()})).catch((function(e){return o(e)}))}))})),i.defer((function(e){return setTimeout(e,0)})),a.performanceTimer&&this._logRulePerformance(),i.then((function(){return r(l)})).catch((function(e){return o(e)}))},SD.prototype.runSync=function(e){var t,n=this,a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=(a.performanceTimer&&this._trackPerformance(),new OD(this));try{t=this.gatherAndMatchNodes(e,a)}catch(t){throw new u({cause:t,ruleId:this.id})}return a.performanceTimer&&this._logGatherPerformance(t),t.forEach((function(t){var o=[],u=(["any","all","none"].forEach((function(r){o.push(n.runChecksSync(r,t,a,e))})),MD(o));u&&(u.node=t.actualNode?new Jn(t,a):null,r.nodes.push(u),n.reviewOnFail)&&(["any","all"].forEach((function(e){u[e].forEach((function(e){!1===e.result&&(e.result=void 0)}))})),u.none.forEach((function(e){!0===e.result&&(e.result=void 0)})))})),a.performanceTimer&&this._logRulePerformance(),r},SD.prototype._trackPerformance=function(){this._markStart="mark_rule_start_"+this.id,this._markEnd="mark_rule_end_"+this.id,this._markChecksStart="mark_runchecks_start_"+this.id,this._markChecksEnd="mark_runchecks_end_"+this.id},SD.prototype._logGatherPerformance=function(e){an("gather (",e.length,"):",Wd.timeElapsed()+"ms"),Wd.mark(this._markChecksStart)},SD.prototype._logRulePerformance=function(){Wd.mark(this._markChecksEnd),Wd.mark(this._markEnd),Wd.measure("runchecks_"+this.id,this._markChecksStart,this._markChecksEnd),Wd.measure("rule_"+this.id,this._markStart,this._markEnd)},SD.prototype.gatherAndMatchNodes=function(e,t){var n=this,a="mark_matches_start_"+this.id,r="mark_matches_end_"+this.id,o=this.gather(e,t);return t.performanceTimer&&Wd.mark(a),o=o.filter((function(t){return n.matches(t.actualNode,t,e)})),t.performanceTimer&&(Wd.mark(r),Wd.measure("rule_"+this.id+"#matches",a,r)),o},SD.prototype.after=function(e,t){var n,a,r,o=this,u=Za(n=this).map((function(e){return(e=n._audit.checks[e.id||e])&&"function"==typeof e.after?e:null})).filter(Boolean),i=this.id;return u.forEach((function(n){u=e.nodes,a=n.id,r=[],u.forEach((function(e){Za(e).forEach((function(t){t.id===a&&(t.node=e.node,r.push(t))}))}));var a,r,u=r,l=cd(n,i,t),s=n.after(u,l);o.reviewOnFail&&s.forEach((function(e){var t=(o.any.includes(e.id)||o.all.includes(e.id))&&!1===e.result,n=o.none.includes(e.id)&&!0===e.result;(t||n)&&(e.result=void 0)})),u.forEach((function(e){delete e.node,-1===s.indexOf(e)&&(e.filtered=!0)}))})),e.nodes=(a=["any","all","none"],r=(u=e).nodes.filter((function(e){var t=0;return a.forEach((function(n){e[n]=e[n].filter((function(e){return!0!==e.filtered})),t+=e[n].length})),0<t})),r=u.pageLevel&&r.length?[r.reduce((function(e,t){if(e)return a.forEach((function(n){e[n].push.apply(e[n],t[n])})),e}))]:r),e},SD.prototype.configure=function(e){e.hasOwnProperty("selector")&&(this.selector=e.selector),e.hasOwnProperty("excludeHidden")&&(this.excludeHidden="boolean"!=typeof e.excludeHidden||e.excludeHidden),e.hasOwnProperty("enabled")&&(this.enabled="boolean"!=typeof e.enabled||e.enabled),e.hasOwnProperty("pageLevel")&&(this.pageLevel="boolean"==typeof e.pageLevel&&e.pageLevel),e.hasOwnProperty("reviewOnFail")&&(this.reviewOnFail="boolean"==typeof e.reviewOnFail&&e.reviewOnFail),e.hasOwnProperty("any")&&(this.any=e.any),e.hasOwnProperty("all")&&(this.all=e.all),e.hasOwnProperty("none")&&(this.none=e.none),e.hasOwnProperty("tags")&&(this.tags=e.tags),e.hasOwnProperty("actIds")&&(this.actIds=e.actIds),e.hasOwnProperty("matches")&&(this.matches=TD(e.matches)),e.impact&&(Fn(nn.impact.includes(e.impact),"Impact ".concat(e.impact," is not a valid impact")),this.impact=e.impact)};var PD=SD,ID=oe(Zt()),jD=/\\{\\{.+?\\}\\}/g;function LD(){return t.origin&&"null"!==t.origin?t.origin:t.location&&t.location.origin&&"null"!==t.location.origin?t.location.origin:void 0}function qD(e,t,n){for(var a=0,r=e.length;a<r;a++)t[n](e[a])}function zD(e){X(this,zD),this.lang="en",this.defaultConfig=e,this.standards=Lo,this._init(),this._defaultLocale=null}function VD(e,t,n){return n.performanceTimer&&Wd.mark("mark_rule_start_"+e.id),function(a,r){e.run(t,n,(function(e){a(e)}),(function(t){n.debug?r(t):(t=Object.assign(new OD(e),{result:nn.CANTTELL,description:"An error occured while running this rule",message:t.message,stack:t.stack,error:t,errorNode:t.errorNode}),a(t))}))}}function $D(e,t,n){var a=e.brand,r=e.application;e=e.lang;return nn.helpUrlBase+a+"/"+(n||o.version.substring(0,o.version.lastIndexOf(".")))+"/"+t+"?application="+encodeURIComponent(r)+(e&&"en"!==e?"&lang="+encodeURIComponent(e):"")}J(zD,[{key:"_setDefaultLocale",value:function(){if(!this._defaultLocale){for(var e={checks:{},rules:{},failureSummaries:{},incompleteFallbackMessage:"",lang:this.lang},t=Object.keys(this.data.checks),n=0;n<t.length;n++){var a=t[n],r=(u=this.data.checks[a].messages).pass,o=u.fail,u=u.incomplete;e.checks[a]={pass:r,fail:o,incomplete:u}}for(var i=Object.keys(this.data.rules),l=0;l<i.length;l++){var s=i[l],c=(d=this.data.rules[s]).description,d=d.help;e.rules[s]={description:c,help:d}}for(var p=Object.keys(this.data.failureSummaries),f=0;f<p.length;f++){var D=p[f],m=this.data.failureSummaries[D].failureMessage;e.failureSummaries[D]={failureMessage:m}}e.incompleteFallbackMessage=this.data.incompleteFallbackMessage,this._defaultLocale=e}}},{key:"_resetLocale",value:function(){var e=this._defaultLocale;e&&this.applyLocale(e)}},{key:"_applyCheckLocale",value:function(e){for(var t,n,a,o=Object.keys(e),u=0;u<o.length;u++){var i=o[u];if(!this.data.checks[i])throw new Error(\'Locale provided for unknown check: "\'.concat(i,\'"\'));this.data.checks[i]=(t=this.data.checks[i],a=n=void 0,n=(i=e[i]).pass,a=i.fail,"string"==typeof n&&jD.test(n)&&(n=ID.default.compile(n)),"string"==typeof a&&jD.test(a)&&(a=ID.default.compile(a)),G({},t,{messages:{pass:n||t.messages.pass,fail:a||t.messages.fail,incomplete:"object"===r(t.messages.incomplete)?G({},t.messages.incomplete,i.incomplete):i.incomplete}}))}}},{key:"_applyRuleLocale",value:function(e){for(var t,n,a=Object.keys(e),r=0;r<a.length;r++){var o=a[r];if(!this.data.rules[o])throw new Error(\'Locale provided for unknown rule: "\'.concat(o,\'"\'));this.data.rules[o]=(t=this.data.rules[o],n=void 0,n=(o=e[o]).help,o=o.description,"string"==typeof n&&jD.test(n)&&(n=ID.default.compile(n)),"string"==typeof o&&jD.test(o)&&(o=ID.default.compile(o)),G({},t,{help:n||t.help,description:o||t.description}))}}},{key:"_applyFailureSummaries",value:function(e){for(var t=Object.keys(e),n=0;n<t.length;n++){var a=t[n];if(!this.data.failureSummaries[a])throw new Error(\'Locale provided for unknown failureMessage: "\'.concat(a,\'"\'));this.data.failureSummaries[a]=function(e,t){return G({},e,{failureMessage:(t="string"==typeof(t=t.failureMessage)&&jD.test(t)?ID.default.compile(t):t)||e.failureMessage})}(this.data.failureSummaries[a],e[a])}}},{key:"applyLocale",value:function(e){var t,n;this._setDefaultLocale(),e.checks&&this._applyCheckLocale(e.checks),e.rules&&this._applyRuleLocale(e.rules),e.failureSummaries&&this._applyFailureSummaries(e.failureSummaries,"failureSummaries"),e.incompleteFallbackMessage&&(this.data.incompleteFallbackMessage=(t=this.data.incompleteFallbackMessage,(n="string"==typeof(n=e.incompleteFallbackMessage)&&jD.test(n)?ID.default.compile(n):n)||t)),e.lang&&(this.lang=e.lang)}},{key:"setAllowedOrigins",value:function(e){var t,n=LD(),a=(this.allowedOrigins=[],ee(e));try{for(a.s();!(t=a.n()).done;){var r=t.value;if(r===nn.allOrigins)return void(this.allowedOrigins=["*"]);r!==nn.sameOrigin?this.allowedOrigins.push(r):n&&this.allowedOrigins.push(n)}}catch(e){a.e(e)}finally{a.f()}}},{key:"_init",value:function(){(t=this.defaultConfig)?(e=ea(t)).commons=t.commons:e={},e.reporter=e.reporter||null,e.noHtml=e.noHtml||!1,e.allowedOrigins||(t=LD(),e.allowedOrigins=t?[t]:[]),e.rules=e.rules||[],e.checks=e.checks||[],e.data=G({checks:{},rules:{}},e.data);var e,t=e;this.lang=t.lang||"en",this.reporter=t.reporter,this.commands={},this.rules=[],this.checks={},this.brand="axe",this.application="axeAPI",this.tagExclude=["experimental"],this.noHtml=t.noHtml,this.allowedOrigins=t.allowedOrigins,qD(t.rules,this,"addRule"),qD(t.checks,this,"addCheck"),this.data={},this.data.checks=t.data&&t.data.checks||{},this.data.rules=t.data&&t.data.rules||{},this.data.failureSummaries=t.data&&t.data.failureSummaries||{},this.data.incompleteFallbackMessage=t.data&&t.data.incompleteFallbackMessage||"",this._constructHelpUrls()}},{key:"registerCommand",value:function(e){this.commands[e.id]=e.callback}},{key:"addRule",value:function(e){e.metadata&&(this.data.rules[e.id]=e.metadata);var t=this.getRule(e.id);t?t.configure(e):this.rules.push(new PD(e,this))}},{key:"addCheck",value:function(e){var t=e.metadata;"object"===r(t)&&(this.data.checks[e.id]=t,"object"===r(t.messages))&&Object.keys(t.messages).filter((function(e){return t.messages.hasOwnProperty(e)&&"string"==typeof t.messages[e]})).forEach((function(e){0===t.messages[e].indexOf("function")&&(t.messages[e]=new Function("return "+t.messages[e]+";")())})),this.checks[e.id]?this.checks[e.id].configure(e):this.checks[e.id]=new _D(e)}},{key:"run",value:function(e,t,n,a){this.normalizeOptions(t),o._selectCache=[],c=this.rules,r=e,u=t;var r,u,i=(c=c.reduce((function(e,t){return pp(t,r,u)&&(t.preload?e.later:e.now).push(t),e}),{now:[],later:[]})).now,l=c.later,s=ha(),c=(i.forEach((function(n){s.defer(VD(n,e,t))})),ha());(i=(l.length&&c.defer((function(e){ip(t).then((function(t){return e(t)})).catch((function(t){console.warn("Couldn\'t load preload assets: ",t),e(void 0)}))})),ha())).defer(s),i.defer(c),i.then((function(r){var u,i=r.pop(),s=(i&&i.length&&(i=i[0])&&(e=G({},e,i)),r[0]);l.length?(u=ha(),l.forEach((function(n){n=VD(n,e,t),u.defer(n)})),u.then((function(e){o._selectCache=void 0,n(s.concat(e).filter((function(e){return!!e})))})).catch(a)):(o._selectCache=void 0,n(s.filter((function(e){return!!e}))))})).catch(a)}},{key:"after",value:function(e,t){var n=this.rules;return e.map((function(e){var a=Ja(n,"id",e.id);if(a)return a.after(e,t);throw new Error("Result for unknown rule. You may be running mismatch axe-core versions")}))}},{key:"getRule",value:function(e){return this.rules.find((function(t){return t.id===e}))}},{key:"normalizeOptions",value:function(e){var t=[],n=[];if(this.rules.forEach((function(e){n.push(e.id),e.tags.forEach((function(e){t.includes(e)||t.push(e)}))})),["object","string"].includes(r(e.runOnly))){if("string"==typeof e.runOnly&&(e.runOnly=[e.runOnly]),Array.isArray(e.runOnly)){var a=e.runOnly.find((function(e){return t.includes(e)})),u=e.runOnly.find((function(e){return n.includes(e)}));if(a&&u)throw new Error("runOnly cannot be both rules and tags");e.runOnly=u?{type:"rule",values:e.runOnly}:{type:"tag",values:e.runOnly}}if((a=e.runOnly).value&&!a.values&&(a.values=a.value,delete a.value),!Array.isArray(a.values)||0===a.values.length)throw new Error("runOnly.values must be a non-empty array");if(["rule","rules"].includes(a.type))a.type="rule",a.values.forEach((function(e){if(!n.includes(e))throw new Error("unknown rule `"+e+"` in options.runOnly")}));else{if(!["tag","tags",void 0].includes(a.type))throw new Error("Unknown runOnly type \'".concat(a.type,"\'"));a.type="tag",0!==(u=a.values.filter((function(e){return!t.includes(e)&&!/wcag2[1-3]a{1,3}/.test(e)}))).length&&o.log("Could not find tags `"+u.join("`, `")+"`")}}return"object"===r(e.rules)&&Object.keys(e.rules).forEach((function(e){if(!n.includes(e))throw new Error("unknown rule `"+e+"` in options.rules")})),e}},{key:"setBranding",value:function(e){var t={brand:this.brand,application:this.application};"string"==typeof e&&(this.application=e),e&&e.hasOwnProperty("brand")&&e.brand&&"string"==typeof e.brand&&(this.brand=e.brand),e&&e.hasOwnProperty("application")&&e.application&&"string"==typeof e.application&&(this.application=e.application),this._constructHelpUrls(t)}},{key:"_constructHelpUrls",value:function(){var e=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null,n=(o.version.match(/^[1-9][0-9]*\\.[0-9]+/)||["x.y"])[0];this.rules.forEach((function(a){e.data.rules[a.id]||(e.data.rules[a.id]={});var r=e.data.rules[a.id];("string"!=typeof r.helpUrl||t&&r.helpUrl===$D(t,a.id,n))&&(r.helpUrl=$D(e,a.id,n))}))}},{key:"resetRulesAndChecks",value:function(){this._init(),this._resetLocale()}}]);var HD=zD;function UD(){Kn.get("globalDocumentSet")&&(Kn.set("globalDocumentSet",!1),a=null),Kn.get("globalWindowSet")&&(Kn.set("globalWindowSet",!1),t=null)}var GD=function(){UD(),o._memoizedFns.forEach((function(e){return e.clear()})),Kn.clear(),o._tree=void 0,o._selectorData=void 0,o._selectCache=void 0},WD=function(e,t,n,a){try{e=new wd(e),o._tree=e.flatTree,o._selectorData=qn(e.flatTree)}catch(r){return GD(),a(r)}var r=ha(),u=o._audit;t.performanceTimer&&Wd.auditStart(),e.frames.length&&!1!==t.iframes&&r.defer((function(n,a){tr(e,t,"rules",null,n,a)})),r.defer((function(n,a){u.run(e,t,n,a)})),r.then((function(r){try{t.performanceTimer&&Wd.auditEnd();var o=er(r.map((function(e){return{results:e}})));e.initiator&&((o=u.after(o,t)).forEach(sp),o=o.map(hn));try{n(o,GD)}catch(r){GD(),an(r)}}catch(r){GD(),a(r)}})).catch((function(e){GD(),a(e)}))};function YD(e){this._run=e.run,this._collect=e.collect,this._registry={},e.commands.forEach((function(e){o._audit.registerCommand(e)}))}function KD(e){var t,n=(e=W(e,3))[0],u=e[1],i=(e=e[2],new TypeError("axe.run arguments are invalid"));if(!Dd(t=n)&&!md(t)){if(void 0!==e)throw i;e=u,u=n,n=a}if("object"!==r(u)){if(void 0!==e)throw i;e=u,u={}}if("function"!=typeof e&&void 0!==e)throw i;return(u=ea(u)).reporter=null!=(t=null!=(t=u.reporter)?t:null==(i=o._audit)?void 0:i.reporter)?t:"v1",{context:n,options:u,callback:e}}t.top!==t&&(Ga.subscribe("axe.start",(function(e,t,n){function r(e){e instanceof Error==0&&(e=new Error(e)),n(e)}var u=n,i=e&&e.context||{},l=(i.hasOwnProperty("include")&&!i.include.length&&(i.include=[a]),e&&e.options||{});switch(e.command){case"rules":return WD(i,l,(function(e,t){u(e),t()}),r);case"cleanup-plugin":return Tp(u,r);default:if(o._audit&&o._audit.commands&&o._audit.commands[e.command])return o._audit.commands[e.command](e,n)}})),Ga.subscribe("axe.ping",(function(e,t,n){n({axe:!0})}))),YD.prototype.run=function(){return this._run.apply(this,arguments)},YD.prototype.collect=function(){return this._collect.apply(this,arguments)},YD.prototype.cleanup=function(e){var t=o.utils.queue(),n=this;Object.keys(this._registry).forEach((function(e){t.defer((function(t){n._registry[e].cleanup(t)}))})),t.then(e)},YD.prototype.add=function(e){this._registry[e.id]=e};var XD=function(){};function ZD(e){var t=e.node,n=$(e,y);n.node=t.toJSON();for(var a=0,r=["any","all","none"];a<r.length;a++){var o=r[a];n[o]=n[o].map((function(e){var t=e.relatedNodes;return G({},$(e,F),{relatedNodes:t.map((function(e){return e.toJSON()}))})}))}return n}var JD=function(e,t,n){if("function"==typeof t&&(n=t,t={}),!e||!Array.isArray(e))return n(e);n(e.map((function(e){for(var t=G({},e),n=0,a=["passes","violations","incomplete","inapplicable"];n<a.length;n++){var r=a[n];t[r]&&Array.isArray(t[r])&&(t[r]=t[r].map((function(e){var t,n=e.node;e=$(e,C);return G({node:n="function"==typeof(null==(t=n)?void 0:t.toJSON)?n.toJSON():n},e)})))}return t})))};zs={base:{Audit:HD,CheckResult:BD,Check:_D,Context:wd,RuleResult:OD,Rule:PD,metadataFunctionMap:kD},public:{reporters:Np},helpers:{failureSummary:nd,incompleteFallbackMessage:ad,processAggregate:od},utils:{setDefaultFrameMessenger:Ha,cacheNodeSelectors:Zc,getNodesMatchingExpression:Wc,convertSelector:ia},commons:{dom:{nativelyHidden:yr,displayHidden:Fr,visibilityHidden:wr,contentVisibiltyHidden:Er,ariaHidden:Cr,opacityHidden:xr,scrollHidden:Ar,overflowHidden:kr,clipHidden:Br,areaHidden:Tr,detailsHidden:Nr}}};o._thisWillBeDeletedDoNotUse=zs,o.constants=nn,o.log=an,o.AbstractVirtualNode=un,o.SerialVirtualNode=Bp,o.VirtualNode=Hc,o._cache=Kn,o.imports=Mo,o.cleanup=Tp,o.configure=function(e){var t=o._audit;if(!t)throw new Error("No audit configured");if(e.axeVersion||e.ver){var n=e.axeVersion||e.ver;if(!/^\\d+\\.\\d+\\.\\d+(-canary)?/.test(n))throw new Error("Invalid configured version ".concat(n));var a=(r=W(n.split("-"),2))[0],r=r[1],u=(a=W(a.split(".").map(Number),3))[0],i=a[1],l=(a=a[2],(s=W(o.version.split("-"),2))[0]),s=s[1],c=(l=W(l.split(".").map(Number),3))[0],d=l[1];l=l[2];if(u!==c||d<i||d===i&&l<a||u===c&&i===d&&a===l&&r&&r!==s)throw new Error("Configured version ".concat(n," is not compatible with current axe version ").concat(o.version))}if(e.reporter&&("function"==typeof e.reporter||Rp(e.reporter))&&(t.reporter=e.reporter),e.checks){if(!Array.isArray(e.checks))throw new TypeError("Checks property must be an array");e.checks.forEach((function(e){if(!e.id)throw new TypeError("Configured check ".concat(JSON.stringify(e)," is invalid. Checks must be an object with at least an id property"));t.addCheck(e)}))}var p,f=[];if(e.rules){if(!Array.isArray(e.rules))throw new TypeError("Rules property must be an array");e.rules.forEach((function(e){if(!e.id)throw new TypeError("Configured rule ".concat(JSON.stringify(e)," is invalid. Rules must be an object with at least an id property"));f.push(e.id),t.addRule(e)}))}if(e.disableOtherRules&&t.rules.forEach((function(e){!1===f.includes(e.id)&&(e.enabled=!1)})),void 0!==e.branding?t.setBranding(e.branding):t._constructHelpUrls(),e.tagExclude&&(t.tagExclude=e.tagExclude),e.locale&&t.applyLocale(e.locale),e.standards&&(p=e.standards,Object.keys(jo).forEach((function(e){p[e]&&(jo[e]=ar(jo[e],p[e]))}))),e.noHtml&&(t.noHtml=!0),e.allowedOrigins){if(!Array.isArray(e.allowedOrigins))throw new TypeError("Allowed origins property must be an array");if(e.allowedOrigins.includes("*"))throw new Error(\'"*" is not allowed. Use "\'.concat(nn.allOrigins,\'" instead\'));t.setAllowedOrigins(e.allowedOrigins)}},o.frameMessenger=function(e){Ga.updateMessenger(e)},o.getRules=function(e){var t=(e=e||[]).length?o._audit.rules.filter((function(t){return!!e.filter((function(e){return-1!==t.tags.indexOf(e)})).length})):o._audit.rules,n=o._audit.data.rules||{};return t.map((function(e){var t=n[e.id]||{};return{ruleId:e.id,description:t.description,help:t.help,helpUrl:t.helpUrl,tags:e.tags,actIds:e.actIds}}))},o._load=function(e){o._audit=new HD(e)},o.plugins={},o.registerPlugin=function(e){o.plugins[e.id]=new YD(e)},o.hasReporter=Rp,o.getReporter=_p,o.addReporter=function(e,t,n){Np[e]=t,n&&(xp=t)},o.reset=function(){var e=o._audit;if(!e)throw new Error("No audit configured");e.resetRulesAndChecks(),Object.keys(jo).forEach((function(e){jo[e]=Io[e]}))},o._runRules=WD,o.runVirtualRule=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},a=(n.reporter=n.reporter||o._audit.reporter||"v1",o._selectorData={},t instanceof un||(t=new Bp(t)),Cd(e));if(a)return a=(a=Object.create(a,{excludeHidden:{value:!1}})).runSync({initiator:!0,include:[t],exclude:[],frames:[],page:!1,focusable:!0,size:{},flatTree:[]},n),sp(a),hn(a),(a=vn([a])).violations.forEach((function(e){return e.nodes.forEach((function(e){e.failureSummary=nd(e)}))})),G({},dd(),a,{toolOptions:n});throw new Error("unknown rule `"+e+"`")},o.run=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var u=n[0],i=!!a;if(!(c=t&&"Node"in t&&"NodeList"in t)||!i){if(!u||!u.ownerDocument)throw new Error(\'Required "window" or "document" globals not defined and cannot be deduced from the context. Either set the globals before running or pass in a valid Element.\');i||(Kn.set("globalDocumentSet",!0),a=u.ownerDocument),c||(Kn.set("globalWindowSet",!0),t=a.defaultView)}u=(i=KD(n)).context;var l=i.options,s=void 0===(c=i.callback)?XD:c,c=(i=function(e){var t,n,a;return"function"==typeof Promise&&e===XD?t=new Promise((function(e,t){n=t,a=e})):a=n=XD,{thenable:t,reject:n,resolve:a}}(s)).thenable,d=i.resolve,p=i.reject;try{Fn(o._audit,"No audit configured"),Fn(!o._running,"Axe is already running. Use `await axe.run()` to wait for the previous run to finish before starting a new run.")}catch(e){i=e;var f=s;if(UD(),"function"!=typeof f||f===XD)throw i;return void f(i.message)}return o._running=!0,l.performanceTimer&&o.utils.performanceTimer.start(),o._runRules(u,l,(function(e,t){l.performanceTimer&&o.utils.performanceTimer.end();try{var n=e,a=l,r=function(e){o._running=!1,t();try{s(null,e)}catch(e){o.log(e)}d(e)};void 0!==(n=_p(a.reporter)(n,a,r))&&r(n)}catch(e){o._running=!1,t(),s(e),p(e)}}),(function(e){l.performanceTimer&&o.utils.performanceTimer.end(),o._running=!1,UD(),s(e),p(e)})),c},o.setup=function(e){if(o._tree)throw new Error("Axe is already setup. Call `axe.teardown()` before calling `axe.setup` again.");return o._tree=ed(e),o._selectorData=qn(o._tree),o._tree[0]},o.teardown=GD,o.runPartial=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a=(r=KD(t)).options,r=r.context,u=(Fn(o._audit,"Axe is not configured. Audit is missing."),Fn(!o._running,"Axe is already running. Use `await axe.run()` to wait for the previous run to finish before starting a new run."),new wd(r,o._tree));return o._tree=u.flatTree,o._selectorData=qn(u.flatTree),o._running=!0,new Promise((function(e,t){o._audit.run(u,a,e,t)})).then((function(e){e=e.map((function(e){var t=e.nodes;e=$(e,v);return G({nodes:t.map(ZD)},e)}));var t,n=u.frames.map((function(e){return e=e.node,new Jn(e,a).toJSON()}));return u.initiator&&(t=dd()),o._running=!1,GD(),{results:e,frames:n,environmentData:t}})).catch((function(e){return o._running=!1,GD(),Promise.reject(e)}))},o.finishRun=function(e){var t,n=ea(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}),a=(e.find((function(e){return e.environmentData}))||{}).environmentData;o._audit.normalizeOptions(n),n.reporter=null!=(p=null!=(p=n.reporter)?p:null==(p=o._audit)?void 0:p.reporter)?p:"v1";var r=[],u=ee(p=e);try{for(u.s();!(t=u.n()).done;){var i,l=t.value,s=r.shift();l&&(l.frameSpec=null!=s?s:null,i=function(e){var t=e.frames,n=e.frameSpec;return n?t.map((function(e){return Jn.mergeSpecs(e,n)})):t}(l),r.unshift.apply(r,H(i)))}}catch(e){u.e(e)}finally{u.f()}var c,d,p=er(e);return(p=o._audit.after(p,n)).forEach(sp),p=p.map(hn),c=p,d=G({environmentData:a},n),new Promise((function(e){_p(d.reporter)(c,d,e)}))},o.commons=jl,o.utils=ln,o.addReporter("na",(function(e,t,n){console.warn(\'"na" reporter will be deprecated in axe v4.0. Use the "v2" reporter instead.\'),"function"==typeof t&&(n=t,t={});var a=t.environmentData,r=$(r=t,w);n(G({},dd(a),{toolOptions:r},od(e,t)))})),o.addReporter("no-passes",(function(e,t,n){"function"==typeof t&&(n=t,t={});var a=t.environmentData,r=$(r=t,E);t.resultTypes=["violations"],e=od(e,t).violations,n(G({},dd(a),{toolOptions:r,violations:e}))})),o.addReporter("rawEnv",(function(e,t,n){"function"==typeof t&&(n=t,t={});var a=t.environmentData;t=$(t,x),JD(e,t,(function(e){var t=dd(a);n({raw:e,env:t})}))})),o.addReporter("raw",JD),o.addReporter("v1",(function(e,t,n){function a(e){e.nodes.forEach((function(e){e.failureSummary=nd(e)}))}"function"==typeof t&&(n=t,t={});var r=t.environmentData,o=$(o=t,A);(e=od(e,t)).incomplete.forEach(a),e.violations.forEach(a),n(G({},dd(r),{toolOptions:o},e))})),o.addReporter("v2",(function(e,t,n){"function"==typeof t&&(n=t,t={});var a=t.environmentData,r=$(r=t,k);e=od(e,t),n(G({},dd(a),{toolOptions:r},e))}),!0),o._load({lang:"en",data:{rules:{accesskeys:{description:"Ensures every accesskey attribute value is unique",help:"accesskey attribute value should be unique"},"area-alt":{description:"Ensures <area> elements of image maps have alternate text",help:"Active <area> elements must have alternate text"},"aria-allowed-attr":{description:"Ensures ARIA attributes are allowed for an element\'s role",help:"Elements must only use allowed ARIA attributes"},"aria-allowed-role":{description:"Ensures role attribute has an appropriate value for the element",help:"ARIA role should be appropriate for the element"},"aria-command-name":{description:"Ensures every ARIA button, link and menuitem has an accessible name",help:"ARIA commands must have an accessible name"},"aria-dialog-name":{description:"Ensures every ARIA dialog and alertdialog node has an accessible name",help:"ARIA dialog and alertdialog nodes should have an accessible name"},"aria-hidden-body":{description:"Ensures aria-hidden=\'true\' is not present on the document body.",help:"aria-hidden=\'true\' must not be present on the document body"},"aria-hidden-focus":{description:"Ensures aria-hidden elements are not focusable nor contain focusable elements",help:"ARIA hidden element must not be focusable or contain focusable elements"},"aria-input-field-name":{description:"Ensures every ARIA input field has an accessible name",help:"ARIA input fields must have an accessible name"},"aria-meter-name":{description:"Ensures every ARIA meter node has an accessible name",help:"ARIA meter nodes must have an accessible name"},"aria-progressbar-name":{description:"Ensures every ARIA progressbar node has an accessible name",help:"ARIA progressbar nodes must have an accessible name"},"aria-required-attr":{description:"Ensures elements with ARIA roles have all required ARIA attributes",help:"Required ARIA attributes must be provided"},"aria-required-children":{description:"Ensures elements with an ARIA role that require child roles contain them",help:"Certain ARIA roles must contain particular children"},"aria-required-parent":{description:"Ensures elements with an ARIA role that require parent roles are contained by them",help:"Certain ARIA roles must be contained by particular parents"},"aria-roledescription":{description:"Ensure aria-roledescription is only used on elements with an implicit or explicit role",help:"aria-roledescription must be on elements with a semantic role"},"aria-roles":{description:"Ensures all elements with a role attribute use a valid value",help:"ARIA roles used must conform to valid values"},"aria-text":{description:\'Ensures "role=text" is used on elements with no focusable descendants\',help:\'"role=text" should have no focusable descendants\'},"aria-toggle-field-name":{description:"Ensures every ARIA toggle field has an accessible name",help:"ARIA toggle fields must have an accessible name"},"aria-tooltip-name":{description:"Ensures every ARIA tooltip node has an accessible name",help:"ARIA tooltip nodes must have an accessible name"},"aria-treeitem-name":{description:"Ensures every ARIA treeitem node has an accessible name",help:"ARIA treeitem nodes should have an accessible name"},"aria-valid-attr-value":{description:"Ensures all ARIA attributes have valid values",help:"ARIA attributes must conform to valid values"},"aria-valid-attr":{description:"Ensures attributes that begin with aria- are valid ARIA attributes",help:"ARIA attributes must conform to valid names"},"audio-caption":{description:"Ensures <audio> elements have captions",help:"<audio> elements must have a captions track"},"autocomplete-valid":{description:"Ensure the autocomplete attribute is correct and suitable for the form field",help:"autocomplete attribute must be used correctly"},"avoid-inline-spacing":{description:"Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",help:"Inline text spacing must be adjustable with custom stylesheets"},blink:{description:"Ensures <blink> elements are not used",help:"<blink> elements are deprecated and must not be used"},"button-name":{description:"Ensures buttons have discernible text",help:"Buttons must have discernible text"},bypass:{description:"Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content",help:"Page must have means to bypass repeated blocks"},"color-contrast-enhanced":{description:"Ensures the contrast between foreground and background colors meets WCAG 2 AAA enhanced contrast ratio thresholds",help:"Elements must meet enhanced color contrast ratio thresholds"},"color-contrast":{description:"Ensures the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",help:"Elements must meet minimum color contrast ratio thresholds"},"css-orientation-lock":{description:"Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations",help:"CSS Media queries must not lock display orientation"},"definition-list":{description:"Ensures <dl> elements are structured correctly",help:"<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements"},dlitem:{description:"Ensures <dt> and <dd> elements are contained by a <dl>",help:"<dt> and <dd> elements must be contained by a <dl>"},"document-title":{description:"Ensures each HTML document contains a non-empty <title> element",help:"Documents must have <title> element to aid in navigation"},"duplicate-id-active":{description:"Ensures every id attribute value of active elements is unique",help:"IDs of active elements must be unique"},"duplicate-id-aria":{description:"Ensures every id attribute value used in ARIA and in labels is unique",help:"IDs used in ARIA and labels must be unique"},"duplicate-id":{description:"Ensures every id attribute value is unique",help:"id attribute value must be unique"},"empty-heading":{description:"Ensures headings have discernible text",help:"Headings should not be empty"},"empty-table-header":{description:"Ensures table headers have discernible text",help:"Table header text should not be empty"},"focus-order-semantics":{description:"Ensures elements in the focus order have a role appropriate for interactive content",help:"Elements in the focus order should have an appropriate role"},"form-field-multiple-labels":{description:"Ensures form field does not have multiple label elements",help:"Form field must not have multiple label elements"},"frame-focusable-content":{description:"Ensures <frame> and <iframe> elements with focusable content do not have tabindex=-1",help:"Frames with focusable content must not have tabindex=-1"},"frame-tested":{description:"Ensures <iframe> and <frame> elements contain the axe-core script",help:"Frames should be tested with axe-core"},"frame-title-unique":{description:"Ensures <iframe> and <frame> elements contain a unique title attribute",help:"Frames must have a unique title attribute"},"frame-title":{description:"Ensures <iframe> and <frame> elements have an accessible name",help:"Frames must have an accessible name"},"heading-order":{description:"Ensures the order of headings is semantically correct",help:"Heading levels should only increase by one"},"hidden-content":{description:"Informs users about hidden content.",help:"Hidden content on the page should be analyzed"},"html-has-lang":{description:"Ensures every HTML document has a lang attribute",help:"<html> element must have a lang attribute"},"html-lang-valid":{description:"Ensures the lang attribute of the <html> element has a valid value",help:"<html> element must have a valid value for the lang attribute"},"html-xml-lang-mismatch":{description:"Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",help:"HTML elements with lang and xml:lang must have the same base language"},"identical-links-same-purpose":{description:"Ensure that links with the same accessible name serve a similar purpose",help:"Links with the same name must have a similar purpose"},"image-alt":{description:"Ensures <img> elements have alternate text or a role of none or presentation",help:"Images must have alternate text"},"image-redundant-alt":{description:"Ensure image alternative is not repeated as text",help:"Alternative text of images should not be repeated as text"},"input-button-name":{description:"Ensures input buttons have discernible text",help:"Input buttons must have discernible text"},"input-image-alt":{description:\'Ensures <input type="image"> elements have alternate text\',help:"Image buttons must have alternate text"},"label-content-name-mismatch":{description:"Ensures that elements labelled through their content must have their visible text as part of their accessible name",help:"Elements must have their visible text as part of their accessible name"},"label-title-only":{description:"Ensures that every form element has a visible label and is not solely labeled using hidden labels, or the title or aria-describedby attributes",help:"Form elements should have a visible label"},label:{description:"Ensures every form element has a label",help:"Form elements must have labels"},"landmark-banner-is-top-level":{description:"Ensures the banner landmark is at top level",help:"Banner landmark should not be contained in another landmark"},"landmark-complementary-is-top-level":{description:"Ensures the complementary landmark or aside is at top level",help:"Aside should not be contained in another landmark"},"landmark-contentinfo-is-top-level":{description:"Ensures the contentinfo landmark is at top level",help:"Contentinfo landmark should not be contained in another landmark"},"landmark-main-is-top-level":{description:"Ensures the main landmark is at top level",help:"Main landmark should not be contained in another landmark"},"landmark-no-duplicate-banner":{description:"Ensures the document has at most one banner landmark",help:"Document should not have more than one banner landmark"},"landmark-no-duplicate-contentinfo":{description:"Ensures the document has at most one contentinfo landmark",help:"Document should not have more than one contentinfo landmark"},"landmark-no-duplicate-main":{description:"Ensures the document has at most one main landmark",help:"Document should not have more than one main landmark"},"landmark-one-main":{description:"Ensures the document has a main landmark",help:"Document should have one main landmark"},"landmark-unique":{help:"Ensures landmarks are unique",description:"Landmarks should have a unique role or role/label/title (i.e. accessible name) combination"},"link-in-text-block":{description:"Ensure links are distinguished from surrounding text in a way that does not rely on color",help:"Links must be distinguishable without relying on color"},"link-name":{description:"Ensures links have discernible text",help:"Links must have discernible text"},list:{description:"Ensures that lists are structured correctly",help:"<ul> and <ol> must only directly contain <li>, <script> or <template> elements"},listitem:{description:"Ensures <li> elements are used semantically",help:"<li> elements must be contained in a <ul> or <ol>"},marquee:{description:"Ensures <marquee> elements are not used",help:"<marquee> elements are deprecated and must not be used"},"meta-refresh-no-exceptions":{description:\'Ensures <meta http-equiv="refresh"> is not used for delayed refresh\',help:"Delayed refresh must not be used"},"meta-refresh":{description:\'Ensures <meta http-equiv="refresh"> is not used for delayed refresh\',help:"Delayed refresh under 20 hours must not be used"},"meta-viewport-large":{description:\'Ensures <meta name="viewport"> can scale a significant amount\',help:"Users should be able to zoom and scale the text up to 500%"},"meta-viewport":{description:\'Ensures <meta name="viewport"> does not disable text scaling and zooming\',help:"Zooming and scaling must not be disabled"},"nested-interactive":{description:"Ensures interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",help:"Interactive controls must not be nested"},"no-autoplay-audio":{description:"Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",help:"<video> or <audio> elements must not play automatically"},"object-alt":{description:"Ensures <object> elements have alternate text",help:"<object> elements must have alternate text"},"p-as-heading":{description:"Ensure bold, italic text and font-size is not used to style <p> elements as a heading",help:"Styled <p> elements must not be used as headings"},"page-has-heading-one":{description:"Ensure that the page, or at least one of its frames contains a level-one heading",help:"Page should contain a level-one heading"},"presentation-role-conflict":{description:"Elements marked as presentational should not have global ARIA or tabindex to ensure all screen readers ignore them",help:"Ensure elements marked as presentational are consistently ignored"},region:{description:"Ensures all page content is contained by landmarks",help:"All page content should be contained by landmarks"},"role-img-alt":{description:"Ensures [role=\'img\'] elements have alternate text",help:"[role=\'img\'] elements must have an alternative text"},"scope-attr-valid":{description:"Ensures the scope attribute is used correctly on tables",help:"scope attribute should be used correctly"},"scrollable-region-focusable":{description:"Ensure elements that have scrollable content are accessible by keyboard",help:"Scrollable region must have keyboard access"},"select-name":{description:"Ensures select element has an accessible name",help:"Select element must have an accessible name"},"server-side-image-map":{description:"Ensures that server-side image maps are not used",help:"Server-side image maps must not be used"},"skip-link":{description:"Ensure all skip links have a focusable target",help:"The skip-link target should exist and be focusable"},"svg-img-alt":{description:"Ensures <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",help:"<svg> elements with an img role must have an alternative text"},tabindex:{description:"Ensures tabindex attribute values are not greater than 0",help:"Elements should not have tabindex greater than zero"},"table-duplicate-name":{description:"Ensure the <caption> element does not contain the same text as the summary attribute",help:"tables should not have the same summary and caption"},"table-fake-caption":{description:"Ensure that tables with a caption use the <caption> element.",help:"Data or header cells must not be used to give caption to a data table."},"target-size":{description:"Ensure touch target have sufficient size and space",help:"All touch targets must be 24px large, or leave sufficient space"},"td-has-header":{description:"Ensure that each non-empty data cell in a <table> larger than 3 by 3  has one or more table headers",help:"Non-empty <td> elements in larger <table> must have an associated table header"},"td-headers-attr":{description:"Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",help:"Table cells that use the headers attribute must only refer to cells in the same table"},"th-has-data-cells":{description:"Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",help:"Table headers in a data table must refer to data cells"},"valid-lang":{description:"Ensures lang attributes have valid values",help:"lang attribute must have a valid value"},"video-caption":{description:"Ensures <video> elements have captions",help:"<video> elements must have captions"}},checks:{abstractrole:{impact:"serious",messages:{pass:"Abstract roles are not used",fail:{singular:"Abstract role cannot be directly used: ${data.values}",plural:"Abstract roles cannot be directly used: ${data.values}"}}},"aria-allowed-attr":{impact:"critical",messages:{pass:"ARIA attributes are used correctly for the defined role",fail:{singular:"ARIA attribute is not allowed: ${data.values}",plural:"ARIA attributes are not allowed: ${data.values}"},incomplete:"Check that there is no problem if the ARIA attribute is ignored on this element: ${data.values}"}},"aria-allowed-role":{impact:"minor",messages:{pass:"ARIA role is allowed for given element",fail:{singular:"ARIA role ${data.values} is not allowed for given element",plural:"ARIA roles ${data.values} are not allowed for given element"},incomplete:{singular:"ARIA role ${data.values} must be removed when the element is made visible, as it is not allowed for the element",plural:"ARIA roles ${data.values} must be removed when the element is made visible, as they are not allowed for the element"}}},"aria-busy":{impact:"serious",messages:{pass:"Element has an aria-busy attribute",fail:\'Element uses aria-busy="true" while showing a loader\'}},"aria-conditional-attr":{impact:"serious",messages:{pass:"ARIA attribute is allowed",fail:{checkbox:\'Remove aria-checked, or set it to "${data.checkState}" to match the real checkbox state\',rowSingular:"This attribute is supported with treegrid rows, but not ${data.ownerRole}: ${data.invalidAttrs}",rowPlural:"These attributes are supported with treegrid rows, but not ${data.ownerRole}: ${data.invalidAttrs}"}}},"aria-errormessage":{impact:"critical",messages:{pass:"aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique",fail:{singular:"aria-errormessage value `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)",plural:"aria-errormessage values `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)",hidden:"aria-errormessage value `${data.values}` cannot reference a hidden element"},incomplete:{singular:"ensure aria-errormessage value `${data.values}` references an existing element",plural:"ensure aria-errormessage values `${data.values}` reference existing elements",idrefs:"unable to determine if aria-errormessage element exists on the page: ${data.values}"}}},"aria-hidden-body":{impact:"critical",messages:{pass:"No aria-hidden attribute is present on document body",fail:"aria-hidden=true should not be present on the document body"}},"aria-level":{impact:"serious",messages:{pass:"aria-level values are valid",incomplete:"aria-level values greater than 6 are not supported in all screenreader and browser combinations"}},"aria-prohibited-attr":{impact:"serious",messages:{pass:"ARIA attribute is allowed",fail:{hasRolePlural:\'${data.prohibited} attributes cannot be used with role "${data.role}".\',hasRoleSingular:\'${data.prohibited} attribute cannot be used with role "${data.role}".\',noRolePlural:"${data.prohibited} attributes cannot be used on a ${data.nodeName} with no valid role attribute.",noRoleSingular:"${data.prohibited} attribute cannot be used on a ${data.nodeName} with no valid role attribute."},incomplete:{hasRoleSingular:\'${data.prohibited} attribute is not well supported with role "${data.role}".\',hasRolePlural:\'${data.prohibited} attributes are not well supported with role "${data.role}".\',noRoleSingular:"${data.prohibited} attribute is not well supported on a ${data.nodeName} with no valid role attribute.",noRolePlural:"${data.prohibited} attributes are not well supported on a ${data.nodeName} with no valid role attribute."}}},"aria-required-attr":{impact:"critical",messages:{pass:"All required ARIA attributes are present",fail:{singular:"Required ARIA attribute not present: ${data.values}",plural:"Required ARIA attributes not present: ${data.values}"}}},"aria-required-children":{impact:"critical",messages:{pass:"Required ARIA children are present",fail:{singular:"Required ARIA child role not present: ${data.values}",plural:"Required ARIA children role not present: ${data.values}",unallowed:"Element has children which are not allowed: ${data.values}"},incomplete:{singular:"Expecting ARIA child role to be added: ${data.values}",plural:"Expecting ARIA children role to be added: ${data.values}"}}},"aria-required-parent":{impact:"critical",messages:{pass:"Required ARIA parent role present",fail:{singular:"Required ARIA parent role not present: ${data.values}",plural:"Required ARIA parents role not present: ${data.values}"}}},"aria-roledescription":{impact:"serious",messages:{pass:"aria-roledescription used on a supported semantic role",incomplete:"Check that the aria-roledescription is announced by supported screen readers",fail:"Give the element a role that supports aria-roledescription"}},"aria-unsupported-attr":{impact:"critical",messages:{pass:"ARIA attribute is supported",fail:"ARIA attribute is not widely supported in screen readers and assistive technologies: ${data.values}"}},"aria-valid-attr-value":{impact:"critical",messages:{pass:"ARIA attribute values are valid",fail:{singular:"Invalid ARIA attribute value: ${data.values}",plural:"Invalid ARIA attribute values: ${data.values}"},incomplete:{noId:"ARIA attribute element ID does not exist on the page: ${data.needsReview}",noIdShadow:"ARIA attribute element ID does not exist on the page or is a descendant of a different shadow DOM tree: ${data.needsReview}",ariaCurrent:\'ARIA attribute value is invalid and will be treated as "aria-current=true": ${data.needsReview}\',idrefs:"Unable to determine if ARIA attribute element ID exists on the page: ${data.needsReview}",empty:"ARIA attribute value is ignored while empty: ${data.needsReview}"}}},"aria-valid-attr":{impact:"critical",messages:{pass:"ARIA attribute name is valid",fail:{singular:"Invalid ARIA attribute name: ${data.values}",plural:"Invalid ARIA attribute names: ${data.values}"}}},deprecatedrole:{impact:"minor",messages:{pass:"ARIA role is not deprecated",fail:"The role used is deprecated: ${data}"}},fallbackrole:{impact:"serious",messages:{pass:"Only one role value used",fail:"Use only one role value, since fallback roles are not supported in older browsers",incomplete:"Use only role \'presentation\' or \'none\' since they are synonymous."}},"has-global-aria-attribute":{impact:"minor",messages:{pass:{singular:"Element has global ARIA attribute: ${data.values}",plural:"Element has global ARIA attributes: ${data.values}"},fail:"Element does not have global ARIA attribute"}},"has-widget-role":{impact:"minor",messages:{pass:"Element has a widget role.",fail:"Element does not have a widget role."}},invalidrole:{impact:"critical",messages:{pass:"ARIA role is valid",fail:{singular:"Role must be one of the valid ARIA roles: ${data.values}",plural:"Roles must be one of the valid ARIA roles: ${data.values}"}}},"is-element-focusable":{impact:"minor",messages:{pass:"Element is focusable.",fail:"Element is not focusable."}},"no-implicit-explicit-label":{impact:"moderate",messages:{pass:"There is no mismatch between a <label> and accessible name",incomplete:"Check that the <label> does not need be part of the ARIA ${data} field\'s name"}},unsupportedrole:{impact:"critical",messages:{pass:"ARIA role is supported",fail:"The role used is not widely supported in screen readers and assistive technologies: ${data}"}},"valid-scrollable-semantics":{impact:"minor",messages:{pass:"Element has valid semantics for an element in the focus order.",fail:"Element has invalid semantics for an element in the focus order."}},"color-contrast-enhanced":{impact:"serious",messages:{pass:"Element has sufficient color contrast of ${data.contrastRatio}",fail:{default:"Element has insufficient color contrast of ${data.contrastRatio} (foreground color: ${data.fgColor}, background color: ${data.bgColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}",fgOnShadowColor:"Element has insufficient color contrast of ${data.contrastRatio} between the foreground and shadow color (foreground color: ${data.fgColor}, text-shadow color: ${data.shadowColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}",shadowOnBgColor:"Element has insufficient color contrast of ${data.contrastRatio} between the shadow color and background color (text-shadow color: ${data.shadowColor}, background color: ${data.bgColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}"},incomplete:{default:"Unable to determine contrast ratio",bgImage:"Element\'s background color could not be determined due to a background image",bgGradient:"Element\'s background color could not be determined due to a background gradient",imgNode:"Element\'s background color could not be determined because element contains an image node",bgOverlap:"Element\'s background color could not be determined because it is overlapped by another element",fgAlpha:"Element\'s foreground color could not be determined because of alpha transparency",elmPartiallyObscured:"Element\'s background color could not be determined because it\'s partially obscured by another element",elmPartiallyObscuring:"Element\'s background color could not be determined because it partially overlaps other elements",outsideViewport:"Element\'s background color could not be determined because it\'s outside the viewport",equalRatio:"Element has a 1:1 contrast ratio with the background",shortTextContent:"Element content is too short to determine if it is actual text content",nonBmp:"Element content contains only non-text characters",pseudoContent:"Element\'s background color could not be determined due to a pseudo element"}}},"color-contrast":{impact:"serious",messages:{pass:{default:"Element has sufficient color contrast of ${data.contrastRatio}",hidden:"Element is hidden"},fail:{default:"Element has insufficient color contrast of ${data.contrastRatio} (foreground color: ${data.fgColor}, background color: ${data.bgColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}",fgOnShadowColor:"Element has insufficient color contrast of ${data.contrastRatio} between the foreground and shadow color (foreground color: ${data.fgColor}, text-shadow color: ${data.shadowColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}",shadowOnBgColor:"Element has insufficient color contrast of ${data.contrastRatio} between the shadow color and background color (text-shadow color: ${data.shadowColor}, background color: ${data.bgColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}"},incomplete:{default:"Unable to determine contrast ratio",bgImage:"Element\'s background color could not be determined due to a background image",bgGradient:"Element\'s background color could not be determined due to a background gradient",imgNode:"Element\'s background color could not be determined because element contains an image node",bgOverlap:"Element\'s background color could not be determined because it is overlapped by another element",fgAlpha:"Element\'s foreground color could not be determined because of alpha transparency",elmPartiallyObscured:"Element\'s background color could not be determined because it\'s partially obscured by another element",elmPartiallyObscuring:"Element\'s background color could not be determined because it partially overlaps other elements",outsideViewport:"Element\'s background color could not be determined because it\'s outside the viewport",equalRatio:"Element has a 1:1 contrast ratio with the background",shortTextContent:"Element content is too short to determine if it is actual text content",nonBmp:"Element content contains only non-text characters",pseudoContent:"Element\'s background color could not be determined due to a pseudo element"}}},"link-in-text-block-style":{impact:"serious",messages:{pass:"Links can be distinguished from surrounding text by visual styling",incomplete:{default:"Check if the link needs styling to distinguish it from nearby text",pseudoContent:"Check if the link\'s pseudo style is sufficient to distinguish it from the surrounding text"},fail:"The link has no styling (such as underline) to distinguish it from the surrounding text"}},"link-in-text-block":{impact:"serious",messages:{pass:"Links can be distinguished from surrounding text in some way other than by color",fail:{fgContrast:"The link has insufficient color contrast of ${data.contrastRatio}:1 with the surrounding text. (Minimum contrast is ${data.requiredContrastRatio}:1, link text: ${data.nodeColor}, surrounding text: ${data.parentColor})",bgContrast:"The link background has insufficient color contrast of ${data.contrastRatio} (Minimum contrast is ${data.requiredContrastRatio}:1, link background color: ${data.nodeBackgroundColor}, surrounding background color: ${data.parentBackgroundColor})"},incomplete:{default:"Element\'s foreground contrast ratio could not be determined",bgContrast:"Element\'s background contrast ratio could not be determined",bgImage:"Element\'s contrast ratio could not be determined due to a background image",bgGradient:"Element\'s contrast ratio could not be determined due to a background gradient",imgNode:"Element\'s contrast ratio could not be determined because element contains an image node",bgOverlap:"Element\'s contrast ratio could not be determined because of element overlap"}}},"autocomplete-appropriate":{impact:"serious",messages:{pass:"the autocomplete value is on an appropriate element",fail:"the autocomplete value is inappropriate for this type of input"}},"autocomplete-valid":{impact:"serious",messages:{pass:"the autocomplete attribute is correctly formatted",fail:"the autocomplete attribute is incorrectly formatted"}},accesskeys:{impact:"serious",messages:{pass:"Accesskey attribute value is unique",fail:"Document has multiple elements with the same accesskey"}},"focusable-content":{impact:"serious",messages:{pass:"Element contains focusable elements",fail:"Element should have focusable content"}},"focusable-disabled":{impact:"serious",messages:{pass:"No focusable elements contained within element",incomplete:"Check if the focusable elements immediately move the focus indicator",fail:"Focusable content should be disabled or be removed from the DOM"}},"focusable-element":{impact:"serious",messages:{pass:"Element is focusable",fail:"Element should be focusable"}},"focusable-modal-open":{impact:"serious",messages:{pass:"No focusable elements while a modal is open",incomplete:"Check that focusable elements are not tabbable in the current state"}},"focusable-no-name":{impact:"serious",messages:{pass:"Element is not in tab order or has accessible text",fail:"Element is in tab order and does not have accessible text",incomplete:"Unable to determine if element has an accessible name"}},"focusable-not-tabbable":{impact:"serious",messages:{pass:"No focusable elements contained within element",incomplete:"Check if the focusable elements immediately move the focus indicator",fail:"Focusable content should have tabindex=\'-1\' or be removed from the DOM"}},"frame-focusable-content":{impact:"serious",messages:{pass:"Element does not have focusable descendants",fail:"Element has focusable descendants",incomplete:"Could not determine if element has descendants"}},"landmark-is-top-level":{impact:"moderate",messages:{pass:"The ${data.role} landmark is at the top level.",fail:"The ${data.role} landmark is contained in another landmark."}},"no-focusable-content":{impact:"serious",messages:{pass:"Element does not have focusable descendants",fail:{default:"Element has focusable descendants",notHidden:"Using a negative tabindex on an element inside an interactive control does not prevent assistive technologies from focusing the element (even with \'aria-hidden=true\')"},incomplete:"Could not determine if element has descendants"}},"page-has-heading-one":{impact:"moderate",messages:{pass:"Page has at least one level-one heading",fail:"Page must have a level-one heading"}},"page-has-main":{impact:"moderate",messages:{pass:"Document has at least one main landmark",fail:"Document does not have a main landmark"}},"page-no-duplicate-banner":{impact:"moderate",messages:{pass:"Document does not have more than one banner landmark",fail:"Document has more than one banner landmark"}},"page-no-duplicate-contentinfo":{impact:"moderate",messages:{pass:"Document does not have more than one contentinfo landmark",fail:"Document has more than one contentinfo landmark"}},"page-no-duplicate-main":{impact:"moderate",messages:{pass:"Document does not have more than one main landmark",fail:"Document has more than one main landmark"}},tabindex:{impact:"serious",messages:{pass:"Element does not have a tabindex greater than 0",fail:"Element has a tabindex greater than 0"}},"alt-space-value":{impact:"critical",messages:{pass:"Element has a valid alt attribute value",fail:"Element has an alt attribute containing only a space character, which is not ignored by all screen readers"}},"duplicate-img-label":{impact:"minor",messages:{pass:"Element does not duplicate existing text in <img> alt text",fail:"Element contains <img> element with alt text that duplicates existing text"}},"explicit-label":{impact:"critical",messages:{pass:"Form element has an explicit <label>",fail:"Form element does not have an explicit <label>",incomplete:"Unable to determine if form element has an explicit <label>"}},"help-same-as-label":{impact:"minor",messages:{pass:"Help text (title or aria-describedby) does not duplicate label text",fail:"Help text (title or aria-describedby) text is the same as the label text"}},"hidden-explicit-label":{impact:"critical",messages:{pass:"Form element has a visible explicit <label>",fail:"Form element has explicit <label> that is hidden",incomplete:"Unable to determine if form element has explicit <label> that is hidden"}},"implicit-label":{impact:"critical",messages:{pass:"Form element has an implicit (wrapped) <label>",fail:"Form element does not have an implicit (wrapped) <label>",incomplete:"Unable to determine if form element has an implicit (wrapped} <label>"}},"label-content-name-mismatch":{impact:"serious",messages:{pass:"Element contains visible text as part of it\'s accessible name",fail:"Text inside the element is not included in the accessible name"}},"multiple-label":{impact:"moderate",messages:{pass:"Form field does not have multiple label elements",incomplete:"Multiple label elements is not widely supported in assistive technologies. Ensure the first label contains all necessary information."}},"title-only":{impact:"serious",messages:{pass:"Form element does not solely use title attribute for its label",fail:"Only title used to generate label for form element"}},"landmark-is-unique":{impact:"moderate",messages:{pass:"Landmarks must have a unique role or role/label/title (i.e. accessible name) combination",fail:"The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable"}},"has-lang":{impact:"serious",messages:{pass:"The <html> element has a lang attribute",fail:{noXHTML:"The xml:lang attribute is not valid on HTML pages, use the lang attribute.",noLang:"The <html> element does not have a lang attribute"}}},"valid-lang":{impact:"serious",messages:{pass:"Value of lang attribute is included in the list of valid languages",fail:"Value of lang attribute not included in the list of valid languages"}},"xml-lang-mismatch":{impact:"moderate",messages:{pass:"Lang and xml:lang attributes have the same base language",fail:"Lang and xml:lang attributes do not have the same base language"}},dlitem:{impact:"serious",messages:{pass:"Description list item has a <dl> parent element",fail:"Description list item does not have a <dl> parent element"}},listitem:{impact:"serious",messages:{pass:\'List item has a <ul>, <ol> or role="list" parent element\',fail:{default:"List item does not have a <ul>, <ol> parent element",roleNotValid:\'List item does not have a <ul>, <ol> parent element without a role, or a role="list"\'}}},"only-dlitems":{impact:"serious",messages:{pass:"dl element only has direct children that are allowed inside; <dt>, <dd>, or <div> elements",fail:"dl element has direct children that are not allowed: ${data.values}"}},"only-listitems":{impact:"serious",messages:{pass:"List element only has direct children that are allowed inside <li> elements",fail:"List element has direct children that are not allowed: ${data.values}"}},"structured-dlitems":{impact:"serious",messages:{pass:"When not empty, element has both <dt> and <dd> elements",fail:"When not empty, element does not have at least one <dt> element followed by at least one <dd> element"}},caption:{impact:"critical",messages:{pass:"The multimedia element has a captions track",incomplete:"Check that captions is available for the element"}},"frame-tested":{impact:"critical",messages:{pass:"The iframe was tested with axe-core",fail:"The iframe could not be tested with axe-core",incomplete:"The iframe still has to be tested with axe-core"}},"no-autoplay-audio":{impact:"moderate",messages:{pass:"<video> or <audio> does not output audio for more than allowed duration or has controls mechanism",fail:"<video> or <audio> outputs audio for more than allowed duration and does not have a controls mechanism",incomplete:"Check that the <video> or <audio> does not output audio for more than allowed duration or provides a controls mechanism"}},"css-orientation-lock":{impact:"serious",messages:{pass:"Display is operable, and orientation lock does not exist",fail:"CSS Orientation lock is applied, and makes display inoperable",incomplete:"CSS Orientation lock cannot be determined"}},"meta-viewport-large":{impact:"minor",messages:{pass:"<meta> tag does not prevent significant zooming on mobile devices",fail:"<meta> tag limits zooming on mobile devices"}},"meta-viewport":{impact:"critical",messages:{pass:"<meta> tag does not disable zooming on mobile devices",fail:"${data} on <meta> tag disables zooming on mobile devices"}},"target-offset":{impact:"serious",messages:{pass:"Target has sufficient offset from its closest neighbor (${data.closestOffset}px should be at least ${data.minOffset}px)",fail:"Target has insufficient offset from its closest neighbor (${data.closestOffset}px should be at least ${data.minOffset}px)",incomplete:{default:"Element with negative tabindex has insufficient offset from its closest neighbor (${data.closestOffset}px should be at least ${data.minOffset}px). Is this a target?",nonTabbableNeighbor:"Target has insufficient offset from a neighbor with negative tabindex (${data.closestOffset}px should be at least ${data.minOffset}px). Is the neighbor a target?"}}},"target-size":{impact:"serious",messages:{pass:{default:"Control has sufficient size (${data.width}px by ${data.height}px, should be at least ${data.minSize}px by ${data.minSize}px)",obscured:"Control is ignored because it is fully obscured and thus not clickable"},fail:{default:"Target has insufficient size (${data.width}px by ${data.height}px, should be at least ${data.minSize}px by ${data.minSize}px)",partiallyObscured:"Target has insufficient size because it is partially obscured (smallest space is ${data.width}px by ${data.height}px, should be at least ${data.minSize}px by ${data.minSize}px)"},incomplete:{default:"Element with negative tabindex has insufficient size (${data.width}px by ${data.height}px, should be at least ${data.minSize}px by ${data.minSize}px). Is this a target?",contentOverflow:"Element size could not be accurately determined due to overflow content",partiallyObscured:"Element with negative tabindex has insufficient size because it is partially obscured (smallest space is ${data.width}px by ${data.height}px, should be at least ${data.minSize}px by ${data.minSize}px). Is this a target?",partiallyObscuredNonTabbable:"Target has insufficient size because it is partially obscured by a neighbor with negative tabindex (smallest space is ${data.width}px by ${data.height}px, should be at least ${data.minSize}px by ${data.minSize}px). Is the neighbor a target?"}}},"header-present":{impact:"serious",messages:{pass:"Page has a heading",fail:"Page does not have a heading"}},"heading-order":{impact:"moderate",messages:{pass:"Heading order valid",fail:"Heading order invalid",incomplete:"Unable to determine previous heading"}},"identical-links-same-purpose":{impact:"minor",messages:{pass:"There are no other links with the same name, that go to a different URL",incomplete:"Check that links have the same purpose, or are intentionally ambiguous."}},"internal-link-present":{impact:"serious",messages:{pass:"Valid skip link found",fail:"No valid skip link found"}},landmark:{impact:"serious",messages:{pass:"Page has a landmark region",fail:"Page does not have a landmark region"}},"meta-refresh-no-exceptions":{impact:"minor",messages:{pass:"<meta> tag does not immediately refresh the page",fail:"<meta> tag forces timed refresh of page"}},"meta-refresh":{impact:"critical",messages:{pass:"<meta> tag does not immediately refresh the page",fail:"<meta> tag forces timed refresh of page (less than 20 hours)"}},"p-as-heading":{impact:"serious",messages:{pass:"<p> elements are not styled as headings",fail:"Heading elements should be used instead of styled <p> elements",incomplete:"Unable to determine if <p> elements are styled as headings"}},region:{impact:"moderate",messages:{pass:"All page content is contained by landmarks",fail:"Some page content is not contained by landmarks"}},"skip-link":{impact:"moderate",messages:{pass:"Skip link target exists",incomplete:"Skip link target should become visible on activation",fail:"No skip link target"}},"unique-frame-title":{impact:"serious",messages:{pass:"Element\'s title attribute is unique",fail:"Element\'s title attribute is not unique"}},"duplicate-id-active":{impact:"serious",messages:{pass:"Document has no active elements that share the same id attribute",fail:"Document has active elements with the same id attribute: ${data}"}},"duplicate-id-aria":{impact:"critical",messages:{pass:"Document has no elements referenced with ARIA or labels that share the same id attribute",fail:"Document has multiple elements referenced with ARIA with the same id attribute: ${data}"}},"duplicate-id":{impact:"minor",messages:{pass:"Document has no static elements that share the same id attribute",fail:"Document has multiple static elements with the same id attribute: ${data}"}},"aria-label":{impact:"serious",messages:{pass:"aria-label attribute exists and is not empty",fail:"aria-label attribute does not exist or is empty"}},"aria-labelledby":{impact:"serious",messages:{pass:"aria-labelledby attribute exists and references elements that are visible to screen readers",fail:"aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty",incomplete:"ensure aria-labelledby references an existing element"}},"avoid-inline-spacing":{impact:"serious",messages:{pass:"No inline styles with \'!important\' that affect text spacing has been specified",fail:{singular:"Remove \'!important\' from inline style ${data.values}, as overriding this is not supported by most browsers",plural:"Remove \'!important\' from inline styles ${data.values}, as overriding this is not supported by most browsers"}}},"button-has-visible-text":{impact:"critical",messages:{pass:"Element has inner text that is visible to screen readers",fail:"Element does not have inner text that is visible to screen readers",incomplete:"Unable to determine if element has children"}},"doc-has-title":{impact:"serious",messages:{pass:"Document has a non-empty <title> element",fail:"Document does not have a non-empty <title> element"}},exists:{impact:"minor",messages:{pass:"Element does not exist",incomplete:"Element exists"}},"has-alt":{impact:"critical",messages:{pass:"Element has an alt attribute",fail:"Element does not have an alt attribute"}},"has-visible-text":{impact:"minor",messages:{pass:"Element has text that is visible to screen readers",fail:"Element does not have text that is visible to screen readers",incomplete:"Unable to determine if element has children"}},"important-letter-spacing":{impact:"serious",messages:{pass:"Letter-spacing in the style attribute is not set to !important, or meets the minimum",fail:"letter-spacing in the style attribute must not use !important, or be at ${data.minValue}em (current ${data.value}em)"}},"important-line-height":{impact:"serious",messages:{pass:"line-height in the style attribute is not set to !important, or meets the minimum",fail:"line-height in the style attribute must not use !important, or be at ${data.minValue}em (current ${data.value}em)"}},"important-word-spacing":{impact:"serious",messages:{pass:"word-spacing in the style attribute is not set to !important, or meets the minimum",fail:"word-spacing in the style attribute must not use !important, or be at ${data.minValue}em (current ${data.value}em)"}},"is-on-screen":{impact:"serious",messages:{pass:"Element is not visible",fail:"Element is visible"}},"non-empty-alt":{impact:"critical",messages:{pass:"Element has a non-empty alt attribute",fail:{noAttr:"Element has no alt attribute",emptyAttr:"Element has an empty alt attribute"}}},"non-empty-if-present":{impact:"critical",messages:{pass:{default:"Element does not have a value attribute","has-label":"Element has a non-empty value attribute"},fail:"Element has a value attribute and the value attribute is empty"}},"non-empty-placeholder":{impact:"serious",messages:{pass:"Element has a placeholder attribute",fail:{noAttr:"Element has no placeholder attribute",emptyAttr:"Element has an empty placeholder attribute"}}},"non-empty-title":{impact:"serious",messages:{pass:"Element has a title attribute",fail:{noAttr:"Element has no title attribute",emptyAttr:"Element has an empty title attribute"}}},"non-empty-value":{impact:"critical",messages:{pass:"Element has a non-empty value attribute",fail:{noAttr:"Element has no value attribute",emptyAttr:"Element has an empty value attribute"}}},"presentational-role":{impact:"minor",messages:{pass:\'Element\\\'s default semantics were overriden with role="${data.role}"\',fail:{default:\'Element\\\'s default semantics were not overridden with role="none" or role="presentation"\',globalAria:"Element\'s role is not presentational because it has a global ARIA attribute",focusable:"Element\'s role is not presentational because it is focusable",both:"Element\'s role is not presentational because it has a global ARIA attribute and is focusable",iframe:\'Using the "title" attribute on an ${data.nodeName} element with a presentational role behaves inconsistently between screen readers\'}}},"role-none":{impact:"minor",messages:{pass:\'Element\\\'s default semantics were overriden with role="none"\',fail:\'Element\\\'s default semantics were not overridden with role="none"\'}},"role-presentation":{impact:"minor",messages:{pass:\'Element\\\'s default semantics were overriden with role="presentation"\',fail:\'Element\\\'s default semantics were not overridden with role="presentation"\'}},"svg-non-empty-title":{impact:"serious",messages:{pass:"Element has a child that is a title",fail:{noTitle:"Element has no child that is a title",emptyTitle:"Element child title is empty"},incomplete:"Unable to determine element has a child that is a title"}},"caption-faked":{impact:"serious",messages:{pass:"The first row of a table is not used as a caption",fail:"The first child of the table should be a caption instead of a table cell"}},"html5-scope":{impact:"moderate",messages:{pass:"Scope attribute is only used on table header elements (<th>)",fail:"In HTML 5, scope attributes may only be used on table header elements (<th>)"}},"same-caption-summary":{impact:"minor",messages:{pass:"Content of summary attribute and <caption> are not duplicated",fail:"Content of summary attribute and <caption> element are identical",incomplete:"Unable to determine if <table> element has a caption"}},"scope-value":{impact:"critical",messages:{pass:"Scope attribute is used correctly",fail:"The value of the scope attribute may only be \'row\' or \'col\'"}},"td-has-header":{impact:"critical",messages:{pass:"All non-empty data cells have table headers",fail:"Some non-empty data cells do not have table headers"}},"td-headers-attr":{impact:"serious",messages:{pass:"The headers attribute is exclusively used to refer to other cells in the table",incomplete:"The headers attribute is empty",fail:"The headers attribute is not exclusively used to refer to other cells in the table"}},"th-has-data-cells":{impact:"serious",messages:{pass:"All table header cells refer to data cells",fail:"Not all table header cells refer to data cells",incomplete:"Table data cells are missing or empty"}},"hidden-content":{impact:"minor",messages:{pass:"All content on the page has been analyzed.",fail:"There were problems analyzing the content on this page.",incomplete:"There is hidden content on the page that was not analyzed. You will need to trigger the display of this content in order to analyze it."}}},failureSummaries:{any:{failureMessage:function(e){var t="Fix any of the following:",n=e;if(n)for(var a=-1,r=n.length-1;a<r;)t+="\\n  "+n[a+=1].split("\\n").join("\\n  ");return t}},none:{failureMessage:function(e){var t="Fix all of the following:",n=e;if(n)for(var a=-1,r=n.length-1;a<r;)t+="\\n  "+n[a+=1].split("\\n").join("\\n  ");return t}}},incompleteFallbackMessage:"axe couldn\'t tell the reason. Time to break out the element inspector!"},rules:[{id:"accesskeys",selector:"[accesskey]",excludeHidden:!1,tags:["cat.keyboard","best-practice"],all:[],any:[],none:["accesskeys"]},{id:"area-alt",selector:"map area[href]",excludeHidden:!1,tags:["cat.text-alternatives","wcag2a","wcag244","wcag412","section508","section508.22.a","ACT","TTv5","TT6.a"],actIds:["c487ae"],all:[],any:[{options:{attribute:"alt"},id:"non-empty-alt"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-allowed-attr",matches:"aria-allowed-attr-matches",tags:["cat.aria","wcag2a","wcag412"],actIds:["5c01ea"],all:[{options:{validTreeRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]},id:"aria-allowed-attr"},{options:{invalidTableRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]},id:"aria-conditional-attr"}],any:[],none:["aria-unsupported-attr",{options:{elementsAllowedAriaLabel:["applet","input"]},id:"aria-prohibited-attr"}]},{id:"aria-allowed-role",excludeHidden:!1,selector:"[role]",matches:"aria-allowed-role-matches",tags:["cat.aria","best-practice"],all:[],any:[{options:{allowImplicit:!0,ignoredTags:[]},id:"aria-allowed-role"}],none:[]},{id:"aria-command-name",selector:\'[role="link"], [role="button"], [role="menuitem"]\',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","ACT","TTv5","TT6.a"],actIds:["97a4e1"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-dialog-name",selector:\'[role="dialog"], [role="alertdialog"]\',matches:"no-naming-method-matches",tags:["cat.aria","best-practice"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-hidden-body",selector:"body",excludeHidden:!1,matches:"is-initiator-matches",tags:["cat.aria","wcag2a","wcag412"],all:[],any:["aria-hidden-body"],none:[]},{id:"aria-hidden-focus",selector:\'[aria-hidden="true"]\',matches:"aria-hidden-focus-matches",excludeHidden:!1,tags:["cat.name-role-value","wcag2a","wcag412","TTv5","TT6.a"],actIds:["6cfa84"],all:["focusable-modal-open","focusable-disabled","focusable-not-tabbable"],any:[],none:[]},{id:"aria-input-field-name",selector:\'[role="combobox"], [role="listbox"], [role="searchbox"], [role="slider"], [role="spinbutton"], [role="textbox"]\',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","ACT","TTv5","TT5.c"],actIds:["e086e5"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["no-implicit-explicit-label"]},{id:"aria-meter-name",selector:\'[role="meter"]\',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag111"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-progressbar-name",selector:\'[role="progressbar"]\',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag111"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-required-attr",selector:"[role]",tags:["cat.aria","wcag2a","wcag412"],actIds:["4e8ab6"],all:[],any:["aria-required-attr"],none:[]},{id:"aria-required-children",selector:"[role]",matches:"aria-required-children-matches",tags:["cat.aria","wcag2a","wcag131"],actIds:["bc4a75","ff89c9"],all:[],any:[{options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","menu","menubar","table","tablist","tree","treegrid","rowgroup"]},id:"aria-required-children"},"aria-busy"],none:[]},{id:"aria-required-parent",selector:"[role]",matches:"aria-required-parent-matches",tags:["cat.aria","wcag2a","wcag131"],actIds:["ff89c9"],all:[],any:[{options:{ownGroupRoles:["listitem","treeitem"]},id:"aria-required-parent"}],none:[]},{id:"aria-roledescription",selector:"[aria-roledescription]",tags:["cat.aria","wcag2a","wcag412","deprecated"],enabled:!1,all:[],any:[{options:{supportedRoles:["button","img","checkbox","radio","combobox","menuitemcheckbox","menuitemradio"]},id:"aria-roledescription"}],none:[]},{id:"aria-roles",selector:"[role]",matches:"no-empty-role-matches",tags:["cat.aria","wcag2a","wcag412"],actIds:["674b10"],all:[],any:[],none:["invalidrole","abstractrole","unsupportedrole","deprecatedrole"]},{id:"aria-text",selector:"[role=text]",tags:["cat.aria","best-practice"],all:[],any:["no-focusable-content"],none:[]},{id:"aria-toggle-field-name",selector:\'[role="checkbox"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="radio"], [role="switch"], [role="option"]\',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","ACT","TTv5","TT5.c"],actIds:["e086e5"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["no-implicit-explicit-label"]},{id:"aria-tooltip-name",selector:\'[role="tooltip"]\',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-treeitem-name",selector:\'[role="treeitem"]\',matches:"no-naming-method-matches",tags:["cat.aria","best-practice"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-valid-attr-value",matches:"aria-has-attr-matches",tags:["cat.aria","wcag2a","wcag412"],actIds:["6a7281"],all:[{options:[],id:"aria-valid-attr-value"},"aria-errormessage","aria-level"],any:[],none:[]},{id:"aria-valid-attr",matches:"aria-has-attr-matches",tags:["cat.aria","wcag2a","wcag412"],actIds:["5f99a7"],all:[],any:[{options:[],id:"aria-valid-attr"}],none:[]},{id:"audio-caption",selector:"audio",enabled:!1,excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag121","section508","section508.22.a","deprecated"],actIds:["2eb176","afb423"],all:[],any:[],none:["caption"]},{id:"autocomplete-valid",matches:"autocomplete-matches",tags:["cat.forms","wcag21aa","wcag135","ACT"],actIds:["73f2c2"],all:[{options:{stateTerms:["none","false","true","disabled","enabled","undefined","null"]},id:"autocomplete-valid"}],any:[],none:[]},{id:"avoid-inline-spacing",selector:"[style]",matches:"is-visible-on-screen-matches",tags:["cat.structure","wcag21aa","wcag1412","ACT"],actIds:["24afc2","9e45ec","78fd32"],all:[{options:{cssProperty:"letter-spacing",minValue:.12},id:"important-letter-spacing"},{options:{cssProperty:"word-spacing",minValue:.16},id:"important-word-spacing"},{options:{multiLineOnly:!0,cssProperty:"line-height",minValue:1.5,normalValue:1},id:"important-line-height"}],any:[],none:[]},{id:"blink",selector:"blink",excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag222","section508","section508.22.j","TTv5","TT2.b"],all:[],any:[],none:["is-on-screen"]},{id:"button-name",selector:"button",matches:"no-explicit-name-required-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","ACT","TTv5","TT6.a"],actIds:["97a4e1","m6b1q3"],all:[],any:["button-has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:[]},{id:"bypass",selector:"html",pageLevel:!0,matches:"bypass-matches",reviewOnFail:!0,tags:["cat.keyboard","wcag2a","wcag241","section508","section508.22.o","TTv5","TT9.a"],actIds:["cf77f2","047fe0","b40fd1","3e12e1","ye5d6e"],all:[],any:["internal-link-present",{options:{selector:":is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]"},id:"header-present"},{options:{selector:"main, [role=main]"},id:"landmark"}],none:[]},{id:"color-contrast-enhanced",matches:"color-contrast-matches",excludeHidden:!1,enabled:!1,tags:["cat.color","wcag2aaa","wcag146","ACT"],actIds:["09o5cg"],all:[],any:[{options:{ignoreUnicode:!0,ignoreLength:!1,ignorePseudo:!1,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:7,minThreshold:4.5},large:{expected:4.5,minThreshold:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.1,textStrokeEmMin:.03},id:"color-contrast-enhanced"}],none:[]},{id:"color-contrast",matches:"color-contrast-matches",excludeHidden:!1,tags:["cat.color","wcag2aa","wcag143","ACT","TTv5","TT13.c"],actIds:["afw4f7","09o5cg"],all:[],any:[{options:{ignoreUnicode:!0,ignoreLength:!1,ignorePseudo:!1,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:4.5},large:{expected:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.2,textStrokeEmMin:.03},id:"color-contrast"}],none:[]},{id:"css-orientation-lock",selector:"html",tags:["cat.structure","wcag134","wcag21aa","experimental"],actIds:["b33eff"],all:[{options:{degreeThreshold:2},id:"css-orientation-lock"}],any:[],none:[],preload:!0},{id:"definition-list",selector:"dl",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131"],all:[],any:[],none:["structured-dlitems",{options:{validRoles:["definition","term","listitem"],validNodeNames:["dt","dd"],divGroups:!0},id:"only-dlitems"}]},{id:"dlitem",selector:"dd, dt",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131"],all:[],any:["dlitem"],none:[]},{id:"document-title",selector:"html",matches:"is-initiator-matches",tags:["cat.text-alternatives","wcag2a","wcag242","ACT","TTv5","TT12.a"],actIds:["2779a5"],all:[],any:["doc-has-title"],none:[]},{id:"duplicate-id-active",selector:"[id]",matches:"duplicate-id-active-matches",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],actIds:["3ea0c8"],all:[],any:["duplicate-id-active"],none:[]},{id:"duplicate-id-aria",selector:"[id]",matches:"duplicate-id-aria-matches",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],actIds:["3ea0c8"],all:[],any:["duplicate-id-aria"],none:[]},{id:"duplicate-id",selector:"[id]",matches:"duplicate-id-misc-matches",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],actIds:["3ea0c8"],all:[],any:["duplicate-id"],none:[]},{id:"empty-heading",selector:\'h1, h2, h3, h4, h5, h6, [role="heading"]\',matches:"heading-matches",tags:["cat.name-role-value","best-practice"],actIds:["ffd0e9"],impact:"minor",all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"empty-table-header",selector:\'th:not([role]), [role="rowheader"], [role="columnheader"]\',tags:["cat.name-role-value","best-practice"],all:[],any:["has-visible-text"],none:[]},{id:"focus-order-semantics",selector:"div, h1, h2, h3, h4, h5, h6, [role=heading], p, span",matches:"inserted-into-focus-order-matches",tags:["cat.keyboard","best-practice","experimental"],all:[],any:[{options:[],id:"has-widget-role"},{options:{roles:["tooltip"]},id:"valid-scrollable-semantics"}],none:[]},{id:"form-field-multiple-labels",selector:"input, select, textarea",matches:"label-matches",tags:["cat.forms","wcag2a","wcag332","TTv5","TT5.c"],all:[],any:[],none:["multiple-label"]},{id:"frame-focusable-content",selector:"html",matches:"frame-focusable-content-matches",tags:["cat.keyboard","wcag2a","wcag211","TTv5","TT4.a"],actIds:["akn7bn"],all:[],any:["frame-focusable-content"],none:[]},{id:"frame-tested",selector:"html, frame, iframe",tags:["cat.structure","review-item","best-practice"],all:[{options:{isViolation:!1},id:"frame-tested"}],any:[],none:[]},{id:"frame-title-unique",selector:"frame[title], iframe[title]",matches:"frame-title-has-text-matches",tags:["cat.text-alternatives","wcag412","wcag2a","TTv5","TT12.d"],actIds:["4b1c6c"],all:[],any:[],none:["unique-frame-title"],reviewOnFail:!0},{id:"frame-title",selector:"frame, iframe",matches:"no-negative-tabindex-matches",tags:["cat.text-alternatives","wcag2a","wcag412","section508","section508.22.i","TTv5","TT12.d"],actIds:["cae760"],all:[],any:[{options:{attribute:"title"},id:"non-empty-title"},"aria-label","aria-labelledby","presentational-role"],none:[]},{id:"heading-order",selector:"h1, h2, h3, h4, h5, h6, [role=heading]",matches:"heading-matches",tags:["cat.semantics","best-practice"],all:[],any:["heading-order"],none:[]},{id:"hidden-content",selector:"*",excludeHidden:!1,tags:["cat.structure","experimental","review-item","best-practice"],all:[],any:["hidden-content"],none:[]},{id:"html-has-lang",selector:"html",matches:"is-initiator-matches",tags:["cat.language","wcag2a","wcag311","ACT","TTv5","TT11.a"],actIds:["b5c3f8"],all:[],any:[{options:{attributes:["lang","xml:lang"]},id:"has-lang"}],none:[]},{id:"html-lang-valid",selector:\'html[lang]:not([lang=""]), html[xml\\\\:lang]:not([xml\\\\:lang=""])\',tags:["cat.language","wcag2a","wcag311","ACT","TTv5","TT11.a"],actIds:["bf051a"],all:[],any:[],none:[{options:{attributes:["lang","xml:lang"]},id:"valid-lang"}]},{id:"html-xml-lang-mismatch",selector:"html[lang][xml\\\\:lang]",matches:"xml-lang-mismatch-matches",tags:["cat.language","wcag2a","wcag311","ACT"],actIds:["5b7ae0"],all:["xml-lang-mismatch"],any:[],none:[]},{id:"identical-links-same-purpose",selector:\'a[href], area[href], [role="link"]\',excludeHidden:!1,enabled:!1,matches:"identical-links-same-purpose-matches",tags:["cat.semantics","wcag2aaa","wcag249"],actIds:["b20e66"],all:["identical-links-same-purpose"],any:[],none:[]},{id:"image-alt",selector:"img",matches:"no-explicit-name-required-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a","TT7.b"],actIds:["23a2a8"],all:[],any:["has-alt","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:["alt-space-value"]},{id:"image-redundant-alt",selector:"img",tags:["cat.text-alternatives","best-practice"],all:[],any:[],none:[{options:{parentSelector:"button, [role=button], a[href], p, li, td, th"},id:"duplicate-img-label"}]},{id:"input-button-name",selector:\'input[type="button"], input[type="submit"], input[type="reset"]\',matches:"no-explicit-name-required-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","ACT","TTv5","TT5.c"],actIds:["97a4e1"],all:[],any:["non-empty-if-present",{options:{attribute:"value"},id:"non-empty-value"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:[]},{id:"input-image-alt",selector:\'input[type="image"]\',matches:"no-explicit-name-required-matches",tags:["cat.text-alternatives","wcag2a","wcag111","wcag412","section508","section508.22.a","ACT","TTv5","TT7.a"],actIds:["59796f"],all:[],any:[{options:{attribute:"alt"},id:"non-empty-alt"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"label-content-name-mismatch",matches:"label-content-name-mismatch-matches",tags:["cat.semantics","wcag21a","wcag253","experimental"],actIds:["2ee8b8"],all:[],any:[{options:{pixelThreshold:.1,occurrenceThreshold:3},id:"label-content-name-mismatch"}],none:[]},{id:"label-title-only",selector:"input, select, textarea",matches:"label-matches",tags:["cat.forms","best-practice"],all:[],any:[],none:["title-only"]},{id:"label",selector:"input, textarea",matches:"label-matches",tags:["cat.forms","wcag2a","wcag412","section508","section508.22.n","ACT","TTv5","TT5.c"],actIds:["e086e5"],all:[],any:["implicit-label","explicit-label","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},{options:{attribute:"placeholder"},id:"non-empty-placeholder"},"presentational-role"],none:["help-same-as-label","hidden-explicit-label"]},{id:"landmark-banner-is-top-level",selector:"header:not([role]), [role=banner]",matches:"landmark-has-body-context-matches",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-complementary-is-top-level",selector:"aside:not([role]), [role=complementary]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-contentinfo-is-top-level",selector:"footer:not([role]), [role=contentinfo]",matches:"landmark-has-body-context-matches",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-main-is-top-level",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-no-duplicate-banner",selector:"header:not([role]), [role=banner]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"header:not([role]), [role=banner]",nativeScopeFilter:"article, aside, main, nav, section"},id:"page-no-duplicate-banner"}],none:[]},{id:"landmark-no-duplicate-contentinfo",selector:"footer:not([role]), [role=contentinfo]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"footer:not([role]), [role=contentinfo]",nativeScopeFilter:"article, aside, main, nav, section"},id:"page-no-duplicate-contentinfo"}],none:[]},{id:"landmark-no-duplicate-main",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"main:not([role]), [role=\'main\']"},id:"page-no-duplicate-main"}],none:[]},{id:"landmark-one-main",selector:"html",tags:["cat.semantics","best-practice"],all:[{options:{selector:"main:not([role]), [role=\'main\']",passForModal:!0},id:"page-has-main"}],any:[],none:[]},{id:"landmark-unique",selector:"[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section",tags:["cat.semantics","best-practice"],matches:"landmark-unique-matches",all:[],any:["landmark-is-unique"],none:[]},{id:"link-in-text-block",selector:"a[href], [role=link]",matches:"link-in-text-block-matches",excludeHidden:!1,tags:["cat.color","wcag2a","wcag141","TTv5","TT13.a"],all:[],any:[{options:{requiredContrastRatio:3,allowSameColor:!0},id:"link-in-text-block"},"link-in-text-block-style"],none:[]},{id:"link-name",selector:"a[href]",tags:["cat.name-role-value","wcag2a","wcag412","wcag244","section508","section508.22.a","ACT","TTv5","TT6.a"],actIds:["c487ae"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["focusable-no-name"]},{id:"list",selector:"ul, ol",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131"],all:[],any:[],none:[{options:{validRoles:["listitem"],validNodeNames:["li"]},id:"only-listitems"}]},{id:"listitem",selector:"li",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131"],all:[],any:["listitem"],none:[]},{id:"marquee",selector:"marquee",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag222","TTv5","TT2.b"],all:[],any:[],none:["is-on-screen"]},{id:"meta-refresh-no-exceptions",selector:\'meta[http-equiv="refresh"][content]\',excludeHidden:!1,enabled:!1,tags:["cat.time-and-media","wcag2aaa","wcag224","wcag325"],actIds:["bisz58"],all:[],any:[{options:{minDelay:72e3,maxDelay:!1},id:"meta-refresh-no-exceptions"}],none:[]},{id:"meta-refresh",selector:\'meta[http-equiv="refresh"][content]\',excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag221","TTv5","TT8.a"],actIds:["bc659a","bisz58"],all:[],any:[{options:{minDelay:0,maxDelay:72e3},id:"meta-refresh"}],none:[]},{id:"meta-viewport-large",selector:\'meta[name="viewport"]\',matches:"is-initiator-matches",excludeHidden:!1,tags:["cat.sensory-and-visual-cues","best-practice"],all:[],any:[{options:{scaleMinimum:5,lowerBound:2},id:"meta-viewport-large"}],none:[]},{id:"meta-viewport",selector:\'meta[name="viewport"]\',matches:"is-initiator-matches",excludeHidden:!1,tags:["cat.sensory-and-visual-cues","wcag2aa","wcag144","ACT"],actIds:["b4f0c3"],all:[],any:[{options:{scaleMinimum:2},id:"meta-viewport"}],none:[]},{id:"nested-interactive",matches:"nested-interactive-matches",tags:["cat.keyboard","wcag2a","wcag412","TTv5","TT6.a"],actIds:["307n5z"],all:[],any:["no-focusable-content"],none:[]},{id:"no-autoplay-audio",excludeHidden:!1,selector:"audio[autoplay], video[autoplay]",matches:"no-autoplay-audio-matches",reviewOnFail:!0,tags:["cat.time-and-media","wcag2a","wcag142","ACT","TTv5","TT2.a"],actIds:["80f0bf"],preload:!0,all:[{options:{allowedDuration:3},id:"no-autoplay-audio"}],any:[],none:[]},{id:"object-alt",selector:"object[data]",matches:"object-is-loaded-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],actIds:["8fc3b6"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:[]},{id:"p-as-heading",selector:"p",matches:"p-as-heading-matches",tags:["cat.semantics","wcag2a","wcag131","experimental"],all:[{options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}],passLength:1,failLength:.5},id:"p-as-heading"}],any:[],none:[]},{id:"page-has-heading-one",selector:"html",tags:["cat.semantics","best-practice"],all:[{options:{selector:"h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]",passForModal:!0},id:"page-has-heading-one"}],any:[],none:[]},{id:"presentation-role-conflict",selector:\'img[alt=\\\'\\\'], [role="none"], [role="presentation"]\',matches:"has-implicit-chromium-role-matches",tags:["cat.aria","best-practice","ACT"],actIds:["46ca7f"],all:[],any:[],none:["is-element-focusable","has-global-aria-attribute"]},{id:"region",selector:"body *",tags:["cat.keyboard","best-practice"],all:[],any:[{options:{regionMatcher:"dialog, [role=dialog], [role=alertdialog], svg"},id:"region"}],none:[]},{id:"role-img-alt",selector:"[role=\'img\']:not(img, area, input, object)",matches:"html-namespace-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a"],actIds:["23a2a8"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"scope-attr-valid",selector:"td[scope], th[scope]",tags:["cat.tables","best-practice"],all:["html5-scope",{options:{values:["row","col","rowgroup","colgroup"]},id:"scope-value"}],any:[],none:[]},{id:"scrollable-region-focusable",selector:"*:not(select,textarea)",matches:"scrollable-region-focusable-matches",tags:["cat.keyboard","wcag2a","wcag211","TTv5","TT4.a"],actIds:["0ssw9k"],all:[],any:["focusable-content","focusable-element"],none:[]},{id:"select-name",selector:"select",tags:["cat.forms","wcag2a","wcag412","section508","section508.22.n","ACT","TTv5","TT5.c"],actIds:["e086e5"],all:[],any:["implicit-label","explicit-label","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:["help-same-as-label","hidden-explicit-label"]},{id:"server-side-image-map",selector:"img[ismap]",tags:["cat.text-alternatives","wcag2a","wcag211","section508","section508.22.f","TTv5","TT4.a"],all:[],any:[],none:["exists"]},{id:"skip-link",selector:\'a[href^="#"], a[href^="/#"]\',matches:"skip-link-matches",tags:["cat.keyboard","best-practice"],all:[],any:["skip-link"],none:[]},{id:"svg-img-alt",selector:\'[role="img"], [role="graphics-symbol"], svg[role="graphics-document"]\',matches:"svg-namespace-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a"],actIds:["7d6734"],all:[],any:["svg-non-empty-title","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"tabindex",selector:"[tabindex]",tags:["cat.keyboard","best-practice"],all:[],any:["tabindex"],none:[]},{id:"table-duplicate-name",selector:"table",tags:["cat.tables","best-practice"],all:[],any:[],none:["same-caption-summary"]},{id:"table-fake-caption",selector:"table",matches:"data-table-matches",tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g"],all:["caption-faked"],any:[],none:[]},{id:"target-size",selector:"*",enabled:!1,matches:"widget-not-inline-matches",tags:["wcag22aa","wcag258","cat.sensory-and-visual-cues"],all:[],any:[{options:{minSize:24},id:"target-size"},{options:{minOffset:24},id:"target-offset"}],none:[]},{id:"td-has-header",selector:"table",matches:"data-table-large-matches",tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b"],all:["td-has-header"],any:[],none:[]},{id:"td-headers-attr",selector:"table",matches:"table-or-grid-role-matches",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b"],actIds:["a25f45"],all:["td-headers-attr"],any:[],none:[]},{id:"th-has-data-cells",selector:"table",matches:"data-table-matches",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","14.b"],actIds:["d0f69e"],all:["th-has-data-cells"],any:[],none:[]},{id:"valid-lang",selector:"[lang]:not(html), [xml\\\\:lang]:not(html)",tags:["cat.language","wcag2aa","wcag312","ACT","TTv5","TT11.b"],actIds:["de46e4"],all:[],any:[],none:[{options:{attributes:["lang","xml:lang"]},id:"valid-lang"}]},{id:"video-caption",selector:"video",tags:["cat.text-alternatives","wcag2a","wcag122","section508","section508.22.a","TTv5","TT17.a"],actIds:["eac66b"],all:[],any:[],none:["caption"]}],checks:[{id:"abstractrole",evaluate:"abstractrole-evaluate"},{id:"aria-allowed-attr",evaluate:"aria-allowed-attr-evaluate",options:{validTreeRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]}},{id:"aria-allowed-role",evaluate:"aria-allowed-role-evaluate",options:{allowImplicit:!0,ignoredTags:[]}},{id:"aria-busy",evaluate:"aria-busy-evaluate"},{id:"aria-conditional-attr",evaluate:"aria-conditional-attr-evaluate",options:{invalidTableRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]}},{id:"aria-errormessage",evaluate:"aria-errormessage-evaluate"},{id:"aria-hidden-body",evaluate:"aria-hidden-body-evaluate"},{id:"aria-level",evaluate:"aria-level-evaluate"},{id:"aria-prohibited-attr",evaluate:"aria-prohibited-attr-evaluate",options:{elementsAllowedAriaLabel:["applet","input"]}},{id:"aria-required-attr",evaluate:"aria-required-attr-evaluate"},{id:"aria-required-children",evaluate:"aria-required-children-evaluate",options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","menu","menubar","table","tablist","tree","treegrid","rowgroup"]}},{id:"aria-required-parent",evaluate:"aria-required-parent-evaluate",options:{ownGroupRoles:["listitem","treeitem"]}},{id:"aria-roledescription",evaluate:"aria-roledescription-evaluate",options:{supportedRoles:["button","img","checkbox","radio","combobox","menuitemcheckbox","menuitemradio"]}},{id:"aria-unsupported-attr",evaluate:"aria-unsupported-attr-evaluate"},{id:"aria-valid-attr-value",evaluate:"aria-valid-attr-value-evaluate",options:[]},{id:"aria-valid-attr",evaluate:"aria-valid-attr-evaluate",options:[]},{id:"deprecatedrole",evaluate:"deprecatedrole-evaluate"},{id:"fallbackrole",evaluate:"fallbackrole-evaluate"},{id:"has-global-aria-attribute",evaluate:"has-global-aria-attribute-evaluate"},{id:"has-widget-role",evaluate:"has-widget-role-evaluate",options:[]},{id:"invalidrole",evaluate:"invalidrole-evaluate"},{id:"is-element-focusable",evaluate:"is-element-focusable-evaluate"},{id:"no-implicit-explicit-label",evaluate:"no-implicit-explicit-label-evaluate"},{id:"unsupportedrole",evaluate:"unsupportedrole-evaluate"},{id:"valid-scrollable-semantics",evaluate:"valid-scrollable-semantics-evaluate",options:{roles:["tooltip"]}},{id:"color-contrast-enhanced",evaluate:"color-contrast-evaluate",options:{ignoreUnicode:!0,ignoreLength:!1,ignorePseudo:!1,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:7,minThreshold:4.5},large:{expected:4.5,minThreshold:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.1,textStrokeEmMin:.03}},{id:"color-contrast",evaluate:"color-contrast-evaluate",options:{ignoreUnicode:!0,ignoreLength:!1,ignorePseudo:!1,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:4.5},large:{expected:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.2,textStrokeEmMin:.03}},{id:"link-in-text-block-style",evaluate:"link-in-text-block-style-evaluate"},{id:"link-in-text-block",evaluate:"link-in-text-block-evaluate",options:{requiredContrastRatio:3,allowSameColor:!0}},{id:"autocomplete-appropriate",evaluate:"autocomplete-appropriate-evaluate",deprecated:!0},{id:"autocomplete-valid",evaluate:"autocomplete-valid-evaluate",options:{stateTerms:["none","false","true","disabled","enabled","undefined","null"]}},{id:"accesskeys",evaluate:"accesskeys-evaluate",after:"accesskeys-after"},{id:"focusable-content",evaluate:"focusable-content-evaluate"},{id:"focusable-disabled",evaluate:"focusable-disabled-evaluate"},{id:"focusable-element",evaluate:"focusable-element-evaluate"},{id:"focusable-modal-open",evaluate:"focusable-modal-open-evaluate"},{id:"focusable-no-name",evaluate:"focusable-no-name-evaluate"},{id:"focusable-not-tabbable",evaluate:"focusable-not-tabbable-evaluate"},{id:"frame-focusable-content",evaluate:"frame-focusable-content-evaluate"},{id:"landmark-is-top-level",evaluate:"landmark-is-top-level-evaluate"},{id:"no-focusable-content",evaluate:"no-focusable-content-evaluate"},{id:"page-has-heading-one",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:"h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]",passForModal:!0}},{id:"page-has-main",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:"main:not([role]), [role=\'main\']",passForModal:!0}},{id:"page-no-duplicate-banner",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"header:not([role]), [role=banner]",nativeScopeFilter:"article, aside, main, nav, section"}},{id:"page-no-duplicate-contentinfo",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"footer:not([role]), [role=contentinfo]",nativeScopeFilter:"article, aside, main, nav, section"}},{id:"page-no-duplicate-main",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"main:not([role]), [role=\'main\']"}},{id:"tabindex",evaluate:"tabindex-evaluate"},{id:"alt-space-value",evaluate:"alt-space-value-evaluate"},{id:"duplicate-img-label",evaluate:"duplicate-img-label-evaluate",options:{parentSelector:"button, [role=button], a[href], p, li, td, th"}},{id:"explicit-label",evaluate:"explicit-evaluate"},{id:"help-same-as-label",evaluate:"help-same-as-label-evaluate",enabled:!1},{id:"hidden-explicit-label",evaluate:"hidden-explicit-label-evaluate"},{id:"implicit-label",evaluate:"implicit-evaluate"},{id:"label-content-name-mismatch",evaluate:"label-content-name-mismatch-evaluate",options:{pixelThreshold:.1,occurrenceThreshold:3}},{id:"multiple-label",evaluate:"multiple-label-evaluate"},{id:"title-only",evaluate:"title-only-evaluate"},{id:"landmark-is-unique",evaluate:"landmark-is-unique-evaluate",after:"landmark-is-unique-after"},{id:"has-lang",evaluate:"has-lang-evaluate",options:{attributes:["lang","xml:lang"]}},{id:"valid-lang",evaluate:"valid-lang-evaluate",options:{attributes:["lang","xml:lang"]}},{id:"xml-lang-mismatch",evaluate:"xml-lang-mismatch-evaluate"},{id:"dlitem",evaluate:"dlitem-evaluate"},{id:"listitem",evaluate:"listitem-evaluate"},{id:"only-dlitems",evaluate:"invalid-children-evaluate",options:{validRoles:["definition","term","listitem"],validNodeNames:["dt","dd"],divGroups:!0}},{id:"only-listitems",evaluate:"invalid-children-evaluate",options:{validRoles:["listitem"],validNodeNames:["li"]}},{id:"structured-dlitems",evaluate:"structured-dlitems-evaluate"},{id:"caption",evaluate:"caption-evaluate"},{id:"frame-tested",evaluate:"frame-tested-evaluate",after:"frame-tested-after",options:{isViolation:!1}},{id:"no-autoplay-audio",evaluate:"no-autoplay-audio-evaluate",options:{allowedDuration:3}},{id:"css-orientation-lock",evaluate:"css-orientation-lock-evaluate",options:{degreeThreshold:2}},{id:"meta-viewport-large",evaluate:"meta-viewport-scale-evaluate",options:{scaleMinimum:5,lowerBound:2}},{id:"meta-viewport",evaluate:"meta-viewport-scale-evaluate",options:{scaleMinimum:2}},{id:"target-offset",evaluate:"target-offset-evaluate",options:{minOffset:24}},{id:"target-size",evaluate:"target-size-evaluate",options:{minSize:24}},{id:"header-present",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:":is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]"}},{id:"heading-order",evaluate:"heading-order-evaluate",after:"heading-order-after"},{id:"identical-links-same-purpose",evaluate:"identical-links-same-purpose-evaluate",after:"identical-links-same-purpose-after"},{id:"internal-link-present",evaluate:"internal-link-present-evaluate"},{id:"landmark",evaluate:"has-descendant-evaluate",options:{selector:"main, [role=main]"}},{id:"meta-refresh-no-exceptions",evaluate:"meta-refresh-evaluate",options:{minDelay:72e3,maxDelay:!1}},{id:"meta-refresh",evaluate:"meta-refresh-evaluate",options:{minDelay:0,maxDelay:72e3}},{id:"p-as-heading",evaluate:"p-as-heading-evaluate",options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}],passLength:1,failLength:.5}},{id:"region",evaluate:"region-evaluate",after:"region-after",options:{regionMatcher:"dialog, [role=dialog], [role=alertdialog], svg"}},{id:"skip-link",evaluate:"skip-link-evaluate"},{id:"unique-frame-title",evaluate:"unique-frame-title-evaluate",after:"unique-frame-title-after"},{id:"duplicate-id-active",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"duplicate-id-aria",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"duplicate-id",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"aria-label",evaluate:"aria-label-evaluate"},{id:"aria-labelledby",evaluate:"aria-labelledby-evaluate"},{id:"avoid-inline-spacing",evaluate:"avoid-inline-spacing-evaluate",options:{cssProperties:["line-height","letter-spacing","word-spacing"]}},{id:"button-has-visible-text",evaluate:"has-text-content-evaluate"},{id:"doc-has-title",evaluate:"doc-has-title-evaluate"},{id:"exists",evaluate:"exists-evaluate"},{id:"has-alt",evaluate:"has-alt-evaluate"},{id:"has-visible-text",evaluate:"has-text-content-evaluate"},{id:"important-letter-spacing",evaluate:"inline-style-property-evaluate",options:{cssProperty:"letter-spacing",minValue:.12}},{id:"important-line-height",evaluate:"inline-style-property-evaluate",options:{multiLineOnly:!0,cssProperty:"line-height",minValue:1.5,normalValue:1}},{id:"important-word-spacing",evaluate:"inline-style-property-evaluate",options:{cssProperty:"word-spacing",minValue:.16}},{id:"is-on-screen",evaluate:"is-on-screen-evaluate"},{id:"non-empty-alt",evaluate:"attr-non-space-content-evaluate",options:{attribute:"alt"}},{id:"non-empty-if-present",evaluate:"non-empty-if-present-evaluate"},{id:"non-empty-placeholder",evaluate:"attr-non-space-content-evaluate",options:{attribute:"placeholder"}},{id:"non-empty-title",evaluate:"attr-non-space-content-evaluate",options:{attribute:"title"}},{id:"non-empty-value",evaluate:"attr-non-space-content-evaluate",options:{attribute:"value"}},{id:"presentational-role",evaluate:"presentational-role-evaluate"},{id:"role-none",evaluate:"matches-definition-evaluate",deprecated:!0,options:{matcher:{attributes:{role:"none"}}}},{id:"role-presentation",evaluate:"matches-definition-evaluate",deprecated:!0,options:{matcher:{attributes:{role:"presentation"}}}},{id:"svg-non-empty-title",evaluate:"svg-non-empty-title-evaluate"},{id:"caption-faked",evaluate:"caption-faked-evaluate"},{id:"html5-scope",evaluate:"html5-scope-evaluate"},{id:"same-caption-summary",evaluate:"same-caption-summary-evaluate"},{id:"scope-value",evaluate:"scope-value-evaluate",options:{values:["row","col","rowgroup","colgroup"]}},{id:"td-has-header",evaluate:"td-has-header-evaluate"},{id:"td-headers-attr",evaluate:"td-headers-attr-evaluate"},{id:"th-has-data-cells",evaluate:"th-has-data-cells-evaluate"},{id:"hidden-content",evaluate:"hidden-content-evaluate"}]})}("object"==typeof window?window:this);',or.getNodeDetails,createAxeRuleResultArtifact,runA11yChecks]
-})}}});function handlePotentialMissingNodeError(e){if(!/No node.*found/.test(e.message)&&!/Node.*does not belong to the document/.test(e.message))throw e}async function resolveNodeIdToObjectId(e,t){try{return(await e.sendCommand("DOM.resolveNode",{backendNodeId:t})).object.objectId}catch(e){return handlePotentialMissingNodeError(e)}}function collectAnchorElements(){const resolveURLOrEmpty=e=>{try{return new URL(e,window.location.href).href}catch(e){return""}};function getTruncatedOnclick(e){return(e.getAttribute("onclick")||"").slice(0,1024)}return getElementsInDocument("a").map((e=>e instanceof HTMLAnchorElement?{href:e.href,rawHref:e.getAttribute("href")||"",onclick:getTruncatedOnclick(e),role:e.getAttribute("role")||"",name:e.name,text:e.innerText,rel:e.rel,target:e.target,id:e.getAttribute("id")||"",node:getNodeDetails(e)}:{href:resolveURLOrEmpty(e.href.baseVal),rawHref:e.getAttribute("href")||"",onclick:getTruncatedOnclick(e),role:e.getAttribute("role")||"",text:e.textContent||"",
-rel:"",target:e.target.baseVal||"",id:e.getAttribute("id")||"",node:getNodeDetails(e)}))}async function getEventListeners(e,t){const n=await async function resolveDevtoolsNodePathToObjectId(e,t){try{const{nodeId:n}=await e.sendCommand("DOM.pushNodeByPathToFrontend",{path:t}),{object:{objectId:a}}=await e.sendCommand("DOM.resolveNode",{nodeId:n});return a}catch(e){return handlePotentialMissingNodeError(e)}}(e,t);if(!n)return[];return(await e.sendCommand("DOMDebugger.getEventListeners",{objectId:n})).listeners.map((({type:e})=>({type:e})))}var Bi=Object.freeze({__proto__:null,default:class AnchorElements extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){const t=e.driver.defaultSession,n=await e.driver.executionContext.evaluate(collectAnchorElements,{args:[],useIsolation:!0,deps:[or.getElementsInDocument,or.getNodeDetails]});await t.sendCommand("DOM.enable"),await t.sendCommand("DOM.getDocument",{depth:-1,pierce:!0});const a=n.map((async e=>{
-const n=await getEventListeners(t,e.node.devtoolsNodePath);return{...e,listeners:n}})),r=await Promise.all(a);return await t.sendCommand("DOM.disable"),r}}});class BFCacheFailures extends FRGatherer{meta={supportedModes:["navigation","timespan"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}};static processBFCacheEventList(e){const t={Circumstantial:{},PageSupportNeeded:{},SupportPending:{}};for(const n of e){t[n.type][n.reason]=[]}return{notRestoredReasonsTree:t}}static processBFCacheEventTree(e){const t={Circumstantial:{},PageSupportNeeded:{},SupportPending:{}};return function traverse(e){for(const n of e.explanations){const a=t[n.type],r=a[n.reason]||[];r.push(e.url),a[n.reason]=r}for(const t of e.children)traverse(t)}(e),{notRestoredReasonsTree:t}}static processBFCacheEvent(e){return e?.notRestoredExplanationsTree?BFCacheFailures.processBFCacheEventTree(e.notRestoredExplanationsTree):BFCacheFailures.processBFCacheEventList(e?.notRestoredExplanations||[])}
-async activelyCollectBFCacheEvent(e){const t=e.driver.defaultSession;let n;function onBfCacheNotUsed(e){n=e}t.on("Page.backForwardCacheNotUsed",onBfCacheNotUsed);const a=await t.sendCommand("Page.getNavigationHistory"),r=a.entries[a.currentIndex];await Promise.all([t.sendCommand("Page.navigate",{url:"chrome://terms"}),waitForLoadEvent(t,100).promise]);const[,o]=await Promise.all([t.sendCommand("Page.navigateToHistoryEntry",{entryId:r.id}),waitForFrameNavigated(t).promise]);if(await new Promise((e=>setTimeout(e,100))),"BackForwardCacheRestore"!==o.type&&!n)throw new Error("bfcache failed but the failure reasons were not emitted in time");return t.off("Page.backForwardCacheNotUsed",onBfCacheNotUsed),n}passivelyCollectBFCacheEvents(e){const t=[];for(const n of e.dependencies.DevtoolsLog)"Page.backForwardCacheNotUsed"===n.method&&t.push(n.params);return t}async getArtifact(e){const t=this.passivelyCollectBFCacheEvents(e);if("navigation"===e.gatherMode&&!e.settings.usePassiveGathering){
-const n=await this.activelyCollectBFCacheEvent(e);n&&t.push(n)}return t.map(BFCacheFailures.processBFCacheEvent)}async afterPass(e,t){return this.getArtifact({...e,dependencies:{DevtoolsLog:t.devtoolsLog}})}}var Ui=Object.freeze({__proto__:null,default:BFCacheFailures});function getCacheContents(){return caches.keys().then((e=>Promise.all(e.map((e=>caches.open(e)))))).then((e=>{const t=[];return Promise.all(e.map((e=>e.keys().then((e=>{t.push(...e.map((e=>e.url)))}))))).then((e=>t))}))}var ji=Object.freeze({__proto__:null,default:class CacheContents extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){const t=e.driver;return await t.executionContext.evaluate(getCacheContents,{args:[]})}}});function remoteObjectToString(e){if(void 0!==e.value||"undefined"===e.type)return String(e.value);if("string"==typeof e.description&&e.description!==e.className)return e.description;return`[${e.subtype||e.type} ${e.className||"Object"}]`}var zi=Object.freeze({
-__proto__:null,default:class ConsoleMessages extends FRGatherer{meta={supportedModes:["timespan","navigation"]};constructor(){super(),this._logEntries=[],this._onConsoleAPICalled=this.onConsoleAPICalled.bind(this),this._onExceptionThrown=this.onExceptionThrown.bind(this),this._onLogEntryAdded=this.onLogEntry.bind(this)}onConsoleAPICalled(e){const{type:t}=e;if("warning"!==t&&"error"!==t)return;const n=(e.args||[]).map(remoteObjectToString).join(" ");if(!n&&!e.stackTrace)return;const{url:a,lineNumber:r,columnNumber:o}=e.stackTrace?.callFrames[0]||{},i={eventType:"consoleAPI",source:"warning"===t?"console.warn":"console.error",level:t,text:n,stackTrace:e.stackTrace,timestamp:e.timestamp,url:a,lineNumber:r,columnNumber:o};this._logEntries.push(i)}onExceptionThrown(e){const t=e.exceptionDetails.exception?e.exceptionDetails.exception.description:e.exceptionDetails.text;if(!t)return;const n={eventType:"exception",source:"exception",level:"error",text:t,
-stackTrace:e.exceptionDetails.stackTrace,timestamp:e.timestamp,url:e.exceptionDetails.url,scriptId:e.exceptionDetails.scriptId,lineNumber:e.exceptionDetails.lineNumber,columnNumber:e.exceptionDetails.columnNumber};this._logEntries.push(n)}onLogEntry(e){const{source:t,level:n,text:a,stackTrace:r,timestamp:o,url:i,lineNumber:s}=e.entry,c=e.entry.stackTrace?.callFrames[0];this._logEntries.push({eventType:"protocolLog",source:t,level:n,text:a,stackTrace:r,timestamp:o,url:i,scriptId:c?.scriptId,lineNumber:s,columnNumber:c?.columnNumber})}async startInstrumentation(e){const t=e.driver.defaultSession;t.on("Log.entryAdded",this._onLogEntryAdded),await t.sendCommand("Log.enable"),await t.sendCommand("Log.startViolationsReport",{config:[{name:"discouragedAPIUse",threshold:-1}]}),t.on("Runtime.consoleAPICalled",this._onConsoleAPICalled),t.on("Runtime.exceptionThrown",this._onExceptionThrown),await t.sendCommand("Runtime.enable")}async stopInstrumentation({driver:e}){
-await e.defaultSession.sendCommand("Log.stopViolationsReport"),await e.defaultSession.off("Log.entryAdded",this._onLogEntryAdded),await e.defaultSession.sendCommand("Log.disable"),await e.defaultSession.off("Runtime.consoleAPICalled",this._onConsoleAPICalled),await e.defaultSession.off("Runtime.exceptionThrown",this._onExceptionThrown),await e.defaultSession.sendCommand("Runtime.disable")}async getArtifact(){return this._logEntries}}});var qi=Object.freeze({__proto__:null,default:class CSSUsage extends FRGatherer{constructor(){super(),this._session=void 0,this._sheetPromises=new Map,this._ruleUsage=void 0,this._onStylesheetAdded=this._onStylesheetAdded.bind(this)}meta={supportedModes:["snapshot","timespan","navigation"]};async _onStylesheetAdded(e){if(!this._session)throw new Error("Session not initialized");const t=e.header.styleSheetId,n=this._session.sendCommand("CSS.getStyleSheetText",{styleSheetId:t}).then((t=>({header:e.header,content:t.text
-}))).catch((t=>(Log.warn("CSSUsage",`Error fetching content of stylesheet with URL "${e.header.sourceURL}"`),Qo.captureException(t,{tags:{gatherer:this.name},extra:{url:e.header.sourceURL},level:"error"}),t)));this._sheetPromises.set(t,n)}async startCSSUsageTracking(e){const t=e.driver.defaultSession;this._session=t,t.on("CSS.styleSheetAdded",this._onStylesheetAdded),await t.sendCommand("DOM.enable"),await t.sendCommand("CSS.enable"),await t.sendCommand("CSS.startRuleUsageTracking")}async stopCSSUsageTracking(e){const t=e.driver.defaultSession,n=await t.sendCommand("CSS.stopRuleUsageTracking");this._ruleUsage=n.ruleUsage,t.off("CSS.styleSheetAdded",this._onStylesheetAdded)}async startInstrumentation(e){"timespan"===e.gatherMode&&await this.startCSSUsageTracking(e)}async stopInstrumentation(e){"timespan"===e.gatherMode&&await this.stopCSSUsageTracking(e)}async getArtifact(e){const t=e.driver.defaultSession,n=e.driver.executionContext
-;"timespan"!==e.gatherMode&&(await this.startCSSUsageTracking(e),await n.evaluateAsync("getComputedStyle(document.body)"),await this.stopCSSUsageTracking(e));const a=new Map,r=await Promise.all(this._sheetPromises.values());for(const e of r)e instanceof Error||a.set(e.content,e);if(await t.sendCommand("CSS.disable"),await t.sendCommand("DOM.disable"),!this._ruleUsage)throw new Error("Issue collecting rule usages");return{rules:this._ruleUsage,stylesheets:Array.from(a.values())}}}});var Wi=Object.freeze({__proto__:null,default:class DevtoolsLogCompat extends FRGatherer{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.DevtoolsLog}}}});function getDoctype(){if(!document.doctype)return null;const e=document.compatMode,{name:t,publicId:n,systemId:a}=document.doctype;return{name:t,publicId:n,systemId:a,documentCompatMode:e}}var $i=Object.freeze({__proto__:null,
-default:class Doctype$1 extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(getDoctype,{args:[],useIsolation:!0})}}});function getDOMStats(e=document.body,t=!0){let n=null,a=-1,r=-1,o=0,i=null;const _calcDOMWidthAndHeight=function(e,s=1){s>a&&(n=e,a=s),e.children.length>r&&(i=e,r=e.children.length);let c=e.firstElementChild;for(;c;)_calcDOMWidthAndHeight(c,s+1),t&&c.shadowRoot&&_calcDOMWidthAndHeight(c.shadowRoot,s+1),c=c.nextElementSibling,o++;return{maxDepth:a,maxWidth:r,numElements:o}},s=_calcDOMWidthAndHeight(e);return{depth:{max:s.maxDepth,...getNodeDetails(n)},width:{max:s.maxWidth,...getNodeDetails(i)},totalBodyElements:s.numElements}}var Vi=Object.freeze({__proto__:null,default:class DOMStats extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){const t=e.driver;await t.defaultSession.sendCommand("DOM.enable");const n=await t.executionContext.evaluate(getDOMStats,{args:[],
-useIsolation:!0,deps:[or.getNodeDetails]});return await t.defaultSession.sendCommand("DOM.disable"),n}}});const Hi=/^image\/((x|ms|x-ms)-)?(png|bmp|jpeg)$/;class OptimizedImages extends FRGatherer{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}};constructor(){super(),this._encodingStartAt=0}static filterImageRequests(e){const t=new Set;return e.reduce(((e,n)=>{if(t.has(n.url)||!n.finished||n.isOutOfProcessIframe)return e;t.add(n.url);const a=n.resourceType===NetworkRequest.TYPES.Image&&Hi.test(n.mimeType),r=NetworkRequest.getResourceSizeOnNetwork(n);return a&&r>4096&&e.push({requestId:n.requestId,url:n.url,mimeType:n.mimeType,resourceSize:r}),e}),[])}_getEncodedResponse(e,t,n){const a={requestId:t=NetworkRequest.getRequestIdForBackend(t),encoding:n,quality:"jpeg"===n?.92:.85,sizeOnly:!0};return e.sendCommand("Audits.getEncodedResponse",a)}async calculateImageStats(e,t){const n=t.resourceSize
-;if(Date.now()-this._encodingStartAt>5e3||n>2048e3)return{originalSize:n,jpegSize:void 0,webpSize:void 0};const a=await this._getEncodedResponse(e,t.requestId,"jpeg"),r=await this._getEncodedResponse(e,t.requestId,"webp");return{originalSize:n,jpegSize:a.encodedSize,webpSize:r.encodedSize}}async computeOptimizedImages(e,t){this._encodingStartAt=Date.now();const n=[];for(const a of t)try{const t={failed:!1,...await this.calculateImageStats(e,a),...a};n.push(t)}catch(e){Log.warn("optimized-images",e.message),Qo.captureException(e,{tags:{gatherer:"OptimizedImages"},extra:{imageUrl:UrlUtils.elideDataURI(a.url)},level:"warning"});const t={failed:!0,errMsg:e.message,...a};n.push(t)}return n}async _getArtifact(e,t){const n=OptimizedImages.filterImageRequests(t).sort(((e,t)=>t.resourceSize-e.resourceSize)),a=await this.computeOptimizedImages(e.driver.defaultSession,n),r=a.filter((e=>!e.failed));if(a.length&&!r.length)throw new Error("All image optimizations failed");return a}
-async getArtifact(e){const t=e.dependencies.DevtoolsLog,n=await bo.request(t,e);return this._getArtifact(e,n)}async afterPass(e,t){return this._getArtifact({...e,dependencies:{}},t.networkRecords)}}var Gi=Object.freeze({__proto__:null,default:OptimizedImages}),Yi={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};function ZStream(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}function arraySet(e,t,n,a,r){if(t.subarray&&e.subarray)e.set(t.subarray(n,n+a),r);else for(var o=0;o<a;o++)e[r+o]=t[n+o]}var Ki=Uint8Array,Ji=Uint16Array,Xi=Int32Array;function zero$1(e){for(var t=e.length;--t>=0;)e[t]=0}
-var Zi=256,Qi=286,es=30,ts=15,ns=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],as=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],rs=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],os=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],is=new Array(576);zero$1(is);var ss=new Array(60);zero$1(ss);var cs=new Array(512);zero$1(cs);var ls=new Array(256);zero$1(ls);var us=new Array(29);zero$1(us);var ds,ps,gs,hs=new Array(es);function StaticTreeDesc(e,t,n,a,r){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=a,this.max_length=r,this.has_stree=e&&e.length}function TreeDesc(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function d_code(e){return e<256?cs[e]:cs[256+(e>>>7)]}function put_short(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function send_bits(e,t,n){e.bi_valid>16-n?(e.bi_buf|=t<<e.bi_valid&65535,put_short(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<<e.bi_valid&65535,
-e.bi_valid+=n)}function send_code(e,t,n){send_bits(e,n[2*t],n[2*t+1])}function bi_reverse(e,t){var n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1}function gen_codes(e,t,n){var a,r,o=new Array(16),i=0;for(a=1;a<=ts;a++)o[a]=i=i+n[a-1]<<1;for(r=0;r<=t;r++){var s=e[2*r+1];0!==s&&(e[2*r]=bi_reverse(o[s]++,s))}}function init_block(e){var t;for(t=0;t<Qi;t++)e.dyn_ltree[2*t]=0;for(t=0;t<es;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function bi_windup(e){e.bi_valid>8?put_short(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function smaller(e,t,n,a){var r=2*t,o=2*n;return e[r]<e[o]||e[r]===e[o]&&a[t]<=a[n]}function pqdownheap(e,t,n){for(var a=e.heap[n],r=n<<1;r<=e.heap_len&&(r<e.heap_len&&smaller(t,e.heap[r+1],e.heap[r],e.depth)&&r++,!smaller(t,a,e.heap[r],e.depth));)e.heap[n]=e.heap[r],n=r,r<<=1;e.heap[n]=a}function compress_block(e,t,n){var a,r,o,i,s=0
-;if(0!==e.last_lit)do{a=e.pending_buf[e.d_buf+2*s]<<8|e.pending_buf[e.d_buf+2*s+1],r=e.pending_buf[e.l_buf+s],s++,0===a?send_code(e,r,t):(send_code(e,(o=ls[r])+Zi+1,t),0!==(i=ns[o])&&send_bits(e,r-=us[o],i),send_code(e,o=d_code(--a),n),0!==(i=as[o])&&send_bits(e,a-=hs[o],i))}while(s<e.last_lit);send_code(e,256,t)}function build_tree(e,t){var n,a,r,o=t.dyn_tree,i=t.stat_desc.static_tree,s=t.stat_desc.has_stree,c=t.stat_desc.elems,l=-1;for(e.heap_len=0,e.heap_max=573,n=0;n<c;n++)0!==o[2*n]?(e.heap[++e.heap_len]=l=n,e.depth[n]=0):o[2*n+1]=0;for(;e.heap_len<2;)o[2*(r=e.heap[++e.heap_len]=l<2?++l:0)]=1,e.depth[r]=0,e.opt_len--,s&&(e.static_len-=i[2*r+1]);for(t.max_code=l,n=e.heap_len>>1;n>=1;n--)pqdownheap(e,o,n);r=c;do{n=e.heap[1],e.heap[1]=e.heap[e.heap_len--],pqdownheap(e,o,1),a=e.heap[1],e.heap[--e.heap_max]=n,e.heap[--e.heap_max]=a,o[2*r]=o[2*n]+o[2*a],e.depth[r]=(e.depth[n]>=e.depth[a]?e.depth[n]:e.depth[a])+1,o[2*n+1]=o[2*a+1]=r,e.heap[1]=r++,pqdownheap(e,o,1)}while(e.heap_len>=2)
-;e.heap[--e.heap_max]=e.heap[1],function gen_bitlen(e,t){var n,a,r,o,i,s,c=t.dyn_tree,l=t.max_code,u=t.stat_desc.static_tree,d=t.stat_desc.has_stree,m=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,h=t.stat_desc.max_length,f=0;for(o=0;o<=ts;o++)e.bl_count[o]=0;for(c[2*e.heap[e.heap_max]+1]=0,n=e.heap_max+1;n<573;n++)(o=c[2*c[2*(a=e.heap[n])+1]+1]+1)>h&&(o=h,f++),c[2*a+1]=o,a>l||(e.bl_count[o]++,i=0,a>=p&&(i=m[a-p]),s=c[2*a],e.opt_len+=s*(o+i),d&&(e.static_len+=s*(u[2*a+1]+i)));if(0!==f){do{for(o=h-1;0===e.bl_count[o];)o--;e.bl_count[o]--,e.bl_count[o+1]+=2,e.bl_count[h]--,f-=2}while(f>0);for(o=h;0!==o;o--)for(a=e.bl_count[o];0!==a;)(r=e.heap[--n])>l||(c[2*r+1]!==o&&(e.opt_len+=(o-c[2*r+1])*c[2*r],c[2*r+1]=o),a--)}}(e,t),gen_codes(o,l,e.bl_count)}function scan_tree(e,t,n){var a,r,o=-1,i=t[1],s=0,c=7,l=4;for(0===i&&(c=138,l=3),t[2*(n+1)+1]=65535,a=0;a<=n;a++)r=i,i=t[2*(a+1)+1],++s<c&&r===i||(s<l?e.bl_tree[2*r]+=s:0!==r?(r!==o&&e.bl_tree[2*r]++,
-e.bl_tree[32]++):s<=10?e.bl_tree[34]++:e.bl_tree[36]++,s=0,o=r,0===i?(c=138,l=3):r===i?(c=6,l=3):(c=7,l=4))}function send_tree(e,t,n){var a,r,o=-1,i=t[1],s=0,c=7,l=4;for(0===i&&(c=138,l=3),a=0;a<=n;a++)if(r=i,i=t[2*(a+1)+1],!(++s<c&&r===i)){if(s<l)do{send_code(e,r,e.bl_tree)}while(0!=--s);else 0!==r?(r!==o&&(send_code(e,r,e.bl_tree),s--),send_code(e,16,e.bl_tree),send_bits(e,s-3,2)):s<=10?(send_code(e,17,e.bl_tree),send_bits(e,s-3,3)):(send_code(e,18,e.bl_tree),send_bits(e,s-11,7));s=0,o=r,0===i?(c=138,l=3):r===i?(c=6,l=3):(c=7,l=4)}}zero$1(hs);var fs=!1;function _tr_init(e){fs||(!function tr_static_init(){var e,t,n,a,r,o=new Array(16);for(n=0,a=0;a<28;a++)for(us[a]=n,e=0;e<1<<ns[a];e++)ls[n++]=a;for(ls[n-1]=a,r=0,a=0;a<16;a++)for(hs[a]=r,e=0;e<1<<as[a];e++)cs[r++]=a;for(r>>=7;a<es;a++)for(hs[a]=r<<7,e=0;e<1<<as[a]-7;e++)cs[256+r++]=a;for(t=0;t<=ts;t++)o[t]=0;for(e=0;e<=143;)is[2*e+1]=8,e++,o[8]++;for(;e<=255;)is[2*e+1]=9,e++,o[9]++;for(;e<=279;)is[2*e+1]=7,e++,o[7]++
-;for(;e<=287;)is[2*e+1]=8,e++,o[8]++;for(gen_codes(is,287,o),e=0;e<es;e++)ss[2*e+1]=5,ss[2*e]=bi_reverse(e,5);ds=new StaticTreeDesc(is,ns,257,Qi,ts),ps=new StaticTreeDesc(ss,as,0,es,ts),gs=new StaticTreeDesc(new Array(0),rs,0,19,7)}(),fs=!0),e.l_desc=new TreeDesc(e.dyn_ltree,ds),e.d_desc=new TreeDesc(e.dyn_dtree,ps),e.bl_desc=new TreeDesc(e.bl_tree,gs),e.bi_buf=0,e.bi_valid=0,init_block(e)}function _tr_stored_block(e,t,n,a){send_bits(e,0+(a?1:0),3),function copy_block(e,t,n,a){bi_windup(e),a&&(put_short(e,n),put_short(e,~n)),arraySet(e.pending_buf,e.window,t,n,e.pending),e.pending+=n}(e,t,n,!0)}function _tr_align(e){send_bits(e,2,3),send_code(e,256,is),function bi_flush(e){16===e.bi_valid?(put_short(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}function _tr_flush_block(e,t,n,a){var r,o,i=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=function detect_data_type(e){var t,n=4093624447;for(t=0;t<=31;t++,
-n>>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<Zi;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),build_tree(e,e.l_desc),build_tree(e,e.d_desc),i=function build_bl_tree(e){var t;for(scan_tree(e,e.dyn_ltree,e.l_desc.max_code),scan_tree(e,e.dyn_dtree,e.d_desc.max_code),build_tree(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*os[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),r=e.opt_len+3+7>>>3,(o=e.static_len+3+7>>>3)<=r&&(r=o)):r=o=n+5,n+4<=r&&-1!==t?_tr_stored_block(e,t,n,a):4===e.strategy||o===r?(send_bits(e,2+(a?1:0),3),compress_block(e,is,ss)):(send_bits(e,4+(a?1:0),3),function send_all_trees(e,t,n,a){var r;for(send_bits(e,t-257,5),send_bits(e,n-1,5),send_bits(e,a-4,4),r=0;r<a;r++)send_bits(e,e.bl_tree[2*os[r]+1],3);send_tree(e,e.dyn_ltree,t-1),send_tree(e,e.dyn_dtree,n-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,i+1),compress_block(e,e.dyn_ltree,e.dyn_dtree)),init_block(e),a&&bi_windup(e)}
-function _tr_tally(e,t,n){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&n,e.last_lit++,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(ls[n]+Zi+1)]++,e.dyn_dtree[2*d_code(t)]++),e.last_lit===e.lit_bufsize-1}function adler32(e,t,n,a){for(var r=65535&e|0,o=e>>>16&65535|0,i=0;0!==n;){n-=i=n>2e3?2e3:n;do{o=o+(r=r+t[a++]|0)|0}while(--i);r%=65521,o%=65521}return r|o<<16|0}var ys=function makeTable(){for(var e,t=[],n=0;n<256;n++){e=n;for(var a=0;a<8;a++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t}();function crc32(e,t,n,a){var r=ys,o=a+n;e^=-1;for(var i=a;i<o;i++)e=e>>>8^r[255&(e^t[i])];return-1^e}var bs,vs=-2,ws=258,Ds=262,Es=103,Ts=113,Cs=666;function err(e,t){return e.msg=Yi[t],t}function rank(e){return(e<<1)-(e>4?9:0)}function zero(e){for(var t=e.length;--t>=0;)e[t]=0}function flush_pending(e){var t=e.state,n=t.pending;n>e.avail_out&&(n=e.avail_out),
-0!==n&&(arraySet(e.output,t.pending_buf,t.pending_out,n,e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))}function flush_block_only(e,t){_tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,flush_pending(e.strm)}function put_byte(e,t){e.pending_buf[e.pending++]=t}function putShortMSB(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function longest_match(e,t){var n,a,r=e.max_chain_length,o=e.strstart,i=e.prev_length,s=e.nice_match,c=e.strstart>e.w_size-Ds?e.strstart-(e.w_size-Ds):0,l=e.window,u=e.w_mask,d=e.prev,m=e.strstart+ws,p=l[o+i-1],h=l[o+i];e.prev_length>=e.good_match&&(r>>=2),s>e.lookahead&&(s=e.lookahead);do{if(l[(n=t)+i]===h&&l[n+i-1]===p&&l[n]===l[o]&&l[++n]===l[o+1]){o+=2,n++;do{}while(l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&o<m)
-;if(a=ws-(m-o),o=m-ws,a>i){if(e.match_start=t,i=a,a>=s)break;p=l[o+i-1],h=l[o+i]}}}while((t=d[t&u])>c&&0!=--r);return i<=e.lookahead?i:e.lookahead}function fill_window(e){var t,n,a,r,o,i,s,c,l,u,d=e.w_size;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=d+(d-Ds)){arraySet(e.window,e.window,d,d,0),e.match_start-=d,e.strstart-=d,e.block_start-=d,t=n=e.hash_size;do{a=e.head[--t],e.head[t]=a>=d?a-d:0}while(--n);t=n=d;do{a=e.prev[--t],e.prev[t]=a>=d?a-d:0}while(--n);r+=d}if(0===e.strm.avail_in)break;if(i=e.strm,s=e.window,c=e.strstart+e.lookahead,l=r,u=void 0,(u=i.avail_in)>l&&(u=l),n=0===u?0:(i.avail_in-=u,arraySet(s,i.input,i.next_in,u,c),1===i.state.wrap?i.adler=adler32(i.adler,s,u,c):2===i.state.wrap&&(i.adler=crc32(i.adler,s,u,c)),i.next_in+=u,i.total_in+=u,u),e.lookahead+=n,e.lookahead+e.insert>=3)for(o=e.strstart-e.insert,e.ins_h=e.window[o],e.ins_h=(e.ins_h<<e.hash_shift^e.window[o+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[o+3-1])&e.hash_mask,
-e.prev[o&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=o,o++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<Ds&&0!==e.strm.avail_in)}function deflate_fast(e,t){for(var n,a;;){if(e.lookahead<Ds){if(fill_window(e),e.lookahead<Ds&&0===t)return 1;if(0===e.lookahead)break}if(n=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==n&&e.strstart-n<=e.w_size-Ds&&(e.match_length=longest_match(e,n)),e.match_length>=3)if(a=_tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],
-e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else a=_tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(a&&(flush_block_only(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,4===t?(flush_block_only(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(flush_block_only(e,!1),0===e.strm.avail_out)?1:2}function deflate_slow(e,t){for(var n,a,r;;){if(e.lookahead<Ds){if(fill_window(e),e.lookahead<Ds&&0===t)return 1;if(0===e.lookahead)break}if(n=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==n&&e.prev_length<e.max_lazy_match&&e.strstart-n<=e.w_size-Ds&&(e.match_length=longest_match(e,n),e.match_length<=5&&(1===e.strategy||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){
-r=e.strstart+e.lookahead-3,a=_tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=r&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,a&&(flush_block_only(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if((a=_tr_tally(e,0,e.window[e.strstart-1]))&&flush_block_only(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(a=_tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,4===t?(flush_block_only(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(flush_block_only(e,!1),0===e.strm.avail_out)?1:2}function Config(e,t,n,a,r){this.good_length=e,this.max_lazy=t,this.nice_length=n,this.max_chain=a,this.func=r}
-function DeflateState(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=8,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Ji(1146),this.dyn_dtree=new Ji(122),this.bl_tree=new Ji(78),zero(this.dyn_ltree),zero(this.dyn_dtree),zero(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Ji(16),this.heap=new Ji(573),zero(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Ji(573),zero(this.depth),
-this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function deflateReset(e){var t=function deflateResetKeep(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=2,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:Ts,e.adler=2===t.wrap?0:1,t.last_flush=0,_tr_init(t),0):err(e,vs)}(e);return 0===t&&function lm_init(e){e.window_size=2*e.w_size,zero(e.head),e.max_lazy_match=bs[e.level].max_lazy,e.good_match=bs[e.level].good_length,e.nice_match=bs[e.level].nice_length,e.max_chain_length=bs[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0}(e.state),t}function deflate(e,t){var n,a,r,o;if(!e||!e.state||t>5||t<0)return e?err(e,vs):vs;if(a=e.state,!e.output||!e.input&&0!==e.avail_in||a.status===Cs&&4!==t)return err(e,0===e.avail_out?-5:vs);if(a.strm=e,n=a.last_flush,
-a.last_flush=t,42===a.status)if(2===a.wrap)e.adler=0,put_byte(a,31),put_byte(a,139),put_byte(a,8),a.gzhead?(put_byte(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),put_byte(a,255&a.gzhead.time),put_byte(a,a.gzhead.time>>8&255),put_byte(a,a.gzhead.time>>16&255),put_byte(a,a.gzhead.time>>24&255),put_byte(a,9===a.level?2:a.strategy>=2||a.level<2?4:0),put_byte(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(put_byte(a,255&a.gzhead.extra.length),put_byte(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(e.adler=crc32(e.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69):(put_byte(a,0),put_byte(a,0),put_byte(a,0),put_byte(a,0),put_byte(a,0),put_byte(a,9===a.level?2:a.strategy>=2||a.level<2?4:0),put_byte(a,3),a.status=Ts);else{var i=8+(a.w_bits-8<<4)<<8;i|=(a.strategy>=2||a.level<2?0:a.level<6?1:6===a.level?2:3)<<6,0!==a.strstart&&(i|=32),i+=31-i%31,a.status=Ts,putShortMSB(a,i),
-0!==a.strstart&&(putShortMSB(a,e.adler>>>16),putShortMSB(a,65535&e.adler)),e.adler=1}if(69===a.status)if(a.gzhead.extra){for(r=a.pending;a.gzindex<(65535&a.gzhead.extra.length)&&(a.pending!==a.pending_buf_size||(a.gzhead.hcrc&&a.pending>r&&(e.adler=crc32(e.adler,a.pending_buf,a.pending-r,r)),flush_pending(e),r=a.pending,a.pending!==a.pending_buf_size));)put_byte(a,255&a.gzhead.extra[a.gzindex]),a.gzindex++;a.gzhead.hcrc&&a.pending>r&&(e.adler=crc32(e.adler,a.pending_buf,a.pending-r,r)),a.gzindex===a.gzhead.extra.length&&(a.gzindex=0,a.status=73)}else a.status=73;if(73===a.status)if(a.gzhead.name){r=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>r&&(e.adler=crc32(e.adler,a.pending_buf,a.pending-r,r)),flush_pending(e),r=a.pending,a.pending===a.pending_buf_size)){o=1;break}o=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,put_byte(a,o)}while(0!==o);a.gzhead.hcrc&&a.pending>r&&(e.adler=crc32(e.adler,a.pending_buf,a.pending-r,r)),
-0===o&&(a.gzindex=0,a.status=91)}else a.status=91;if(91===a.status)if(a.gzhead.comment){r=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>r&&(e.adler=crc32(e.adler,a.pending_buf,a.pending-r,r)),flush_pending(e),r=a.pending,a.pending===a.pending_buf_size)){o=1;break}o=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,put_byte(a,o)}while(0!==o);a.gzhead.hcrc&&a.pending>r&&(e.adler=crc32(e.adler,a.pending_buf,a.pending-r,r)),0===o&&(a.status=Es)}else a.status=Es;if(a.status===Es&&(a.gzhead.hcrc?(a.pending+2>a.pending_buf_size&&flush_pending(e),a.pending+2<=a.pending_buf_size&&(put_byte(a,255&e.adler),put_byte(a,e.adler>>8&255),e.adler=0,a.status=Ts)):a.status=Ts),0!==a.pending){if(flush_pending(e),0===e.avail_out)return a.last_flush=-1,0}else if(0===e.avail_in&&rank(t)<=rank(n)&&4!==t)return err(e,-5);if(a.status===Cs&&0!==e.avail_in)return err(e,-5);if(0!==e.avail_in||0!==a.lookahead||0!==t&&a.status!==Cs){
-var s=2===a.strategy?function deflate_huff(e,t){for(var n;;){if(0===e.lookahead&&(fill_window(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,n=_tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(flush_block_only(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(flush_block_only(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(flush_block_only(e,!1),0===e.strm.avail_out)?1:2}(a,t):3===a.strategy?function deflate_rle(e,t){for(var n,a,r,o,i=e.window;;){if(e.lookahead<=ws){if(fill_window(e),e.lookahead<=ws&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(a=i[r=e.strstart-1])===i[++r]&&a===i[++r]&&a===i[++r]){o=e.strstart+ws;do{}while(a===i[++r]&&a===i[++r]&&a===i[++r]&&a===i[++r]&&a===i[++r]&&a===i[++r]&&a===i[++r]&&a===i[++r]&&r<o);e.match_length=ws-(o-r),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=_tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,
-e.strstart+=e.match_length,e.match_length=0):(n=_tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(flush_block_only(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(flush_block_only(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(flush_block_only(e,!1),0===e.strm.avail_out)?1:2}(a,t):bs[a.level].func(a,t);if(3!==s&&4!==s||(a.status=Cs),1===s||3===s)return 0===e.avail_out&&(a.last_flush=-1),0;if(2===s&&(1===t?_tr_align(a):5!==t&&(_tr_stored_block(a,0,0,!1),3===t&&(zero(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),flush_pending(e),0===e.avail_out))return a.last_flush=-1,0}return 4!==t?0:a.wrap<=0?1:(2===a.wrap?(put_byte(a,255&e.adler),put_byte(a,e.adler>>8&255),put_byte(a,e.adler>>16&255),put_byte(a,e.adler>>24&255),put_byte(a,255&e.total_in),put_byte(a,e.total_in>>8&255),put_byte(a,e.total_in>>16&255),put_byte(a,e.total_in>>24&255)):(putShortMSB(a,e.adler>>>16),putShortMSB(a,65535&e.adler)),flush_pending(e),a.wrap>0&&(a.wrap=-a.wrap),
-0!==a.pending?0:1)}bs=[new Config(0,0,0,0,(function deflate_stored(e,t){var n=65535;for(n>e.pending_buf_size-5&&(n=e.pending_buf_size-5);;){if(e.lookahead<=1){if(fill_window(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var a=e.block_start+n;if((0===e.strstart||e.strstart>=a)&&(e.lookahead=e.strstart-a,e.strstart=a,flush_block_only(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-Ds&&(flush_block_only(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(flush_block_only(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(flush_block_only(e,!1),e.strm.avail_out),1)})),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)]
-;function inflate_fast(e,t){var n,a,r,o,i,s,c,l,u,d,m,p,h,f,y,b,v,w,D,E,T,C,S,_,A;n=e.state,a=e.next_in,_=e.input,r=a+(e.avail_in-5),o=e.next_out,A=e.output,i=o-(t-e.avail_out),s=o+(e.avail_out-257),c=n.dmax,l=n.wsize,u=n.whave,d=n.wnext,m=n.window,p=n.hold,h=n.bits,f=n.lencode,y=n.distcode,b=(1<<n.lenbits)-1,v=(1<<n.distbits)-1;e:do{h<15&&(p+=_[a++]<<h,h+=8,p+=_[a++]<<h,h+=8),w=f[p&b];t:for(;;){if(p>>>=D=w>>>24,h-=D,0===(D=w>>>16&255))A[o++]=65535&w;else{if(!(16&D)){if(0==(64&D)){w=f[(65535&w)+(p&(1<<D)-1)];continue t}if(32&D){n.mode=12;break e}e.msg="invalid literal/length code",n.mode=30;break e}E=65535&w,(D&=15)&&(h<D&&(p+=_[a++]<<h,h+=8),E+=p&(1<<D)-1,p>>>=D,h-=D),h<15&&(p+=_[a++]<<h,h+=8,p+=_[a++]<<h,h+=8),w=y[p&v];n:for(;;){if(p>>>=D=w>>>24,h-=D,!(16&(D=w>>>16&255))){if(0==(64&D)){w=y[(65535&w)+(p&(1<<D)-1)];continue n}e.msg="invalid distance code",n.mode=30;break e}if(T=65535&w,h<(D&=15)&&(p+=_[a++]<<h,(h+=8)<D&&(p+=_[a++]<<h,h+=8)),(T+=p&(1<<D)-1)>c){
-e.msg="invalid distance too far back",n.mode=30;break e}if(p>>>=D,h-=D,T>(D=o-i)){if((D=T-D)>u&&n.sane){e.msg="invalid distance too far back",n.mode=30;break e}if(C=0,S=m,0===d){if(C+=l-D,D<E){E-=D;do{A[o++]=m[C++]}while(--D);C=o-T,S=A}}else if(d<D){if(C+=l+d-D,(D-=d)<E){E-=D;do{A[o++]=m[C++]}while(--D);if(C=0,d<E){E-=D=d;do{A[o++]=m[C++]}while(--D);C=o-T,S=A}}}else if(C+=d-D,D<E){E-=D;do{A[o++]=m[C++]}while(--D);C=o-T,S=A}for(;E>2;)A[o++]=S[C++],A[o++]=S[C++],A[o++]=S[C++],E-=3;E&&(A[o++]=S[C++],E>1&&(A[o++]=S[C++]))}else{C=o-T;do{A[o++]=A[C++],A[o++]=A[C++],A[o++]=A[C++],E-=3}while(E>2);E&&(A[o++]=A[C++],E>1&&(A[o++]=A[C++]))}break}}break}}while(a<r&&o<s);a-=E=h>>3,p&=(1<<(h-=E<<3))-1,e.next_in=a,e.next_out=o,e.avail_in=a<r?r-a+5:5-(a-r),e.avail_out=o<s?s-o+257:257-(o-s),n.hold=p,n.bits=h}
-var Ss=15,_s=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],As=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],ks=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],xs=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function inflate_table(e,t,n,a,r,o,i,s){var c,l,u,d,m,p,h,f,y,b=s.bits,v=0,w=0,D=0,E=0,T=0,C=0,S=0,_=0,A=0,k=0,x=null,F=0,R=new Ji(16),I=new Ji(16),M=null,L=0;for(v=0;v<=Ss;v++)R[v]=0;for(w=0;w<a;w++)R[t[n+w]]++;for(T=b,E=Ss;E>=1&&0===R[E];E--);if(T>E&&(T=E),0===E)return r[o++]=20971520,r[o++]=20971520,s.bits=1,0;for(D=1;D<E&&0===R[D];D++);for(T<D&&(T=D),_=1,v=1;v<=Ss;v++)if(_<<=1,(_-=R[v])<0)return-1;if(_>0&&(0===e||1!==E))return-1;for(I[1]=0,v=1;v<Ss;v++)I[v+1]=I[v]+R[v];for(w=0;w<a;w++)0!==t[n+w]&&(i[I[t[n+w]]++]=w);if(0===e?(x=M=i,p=19):1===e?(x=_s,F-=257,M=As,
-L-=257,p=256):(x=ks,M=xs,p=-1),k=0,w=0,v=D,m=o,C=T,S=0,u=-1,d=(A=1<<T)-1,1===e&&A>852||2===e&&A>592)return 1;for(;;){h=v-S,i[w]<p?(f=0,y=i[w]):i[w]>p?(f=M[L+i[w]],y=x[F+i[w]]):(f=96,y=0),c=1<<v-S,D=l=1<<C;do{r[m+(k>>S)+(l-=c)]=h<<24|f<<16|y|0}while(0!==l);for(c=1<<v-1;k&c;)c>>=1;if(0!==c?(k&=c-1,k+=c):k=0,w++,0==--R[v]){if(v===E)break;v=t[n+i[w]]}if(v>T&&(k&d)!==u){for(0===S&&(S=T),m+=D,_=1<<(C=v-S);C+S<E&&!((_-=R[C+S])<=0);)C++,_<<=1;if(A+=1<<C,1===e&&A>852||2===e&&A>592)return 1;r[u=k&d]=T<<24|C<<16|m-o|0}}return 0!==k&&(r[m+k]=v-S<<24|64<<16|0),s.bits=T,0}var Fs=-2,Rs=12,Is=30;function zswap32(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function InflateState(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,
-this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Ji(320),this.work=new Ji(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function inflateReset(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,function inflateResetKeep(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Xi(852),t.distcode=t.distdyn=new Xi(592),t.sane=1,t.back=-1,0):Fs}(e)):Fs}function inflateInit2(e,t){var n,a;return e?(a=new InflateState,e.state=a,a.window=null,0!==(n=function inflateReset2(e,t){var n,a;return e&&e.state?(a=e.state,t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Fs:(null!==a.window&&a.wbits!==t&&(a.window=null),a.wrap=n,a.wbits=t,inflateReset(e))):Fs}(e,t))&&(e.state=null),n):Fs}var Ms,Ls,Ns=!0;function fixedtables(e){if(Ns){var t;for(Ms=new Xi(512),
-Ls=new Xi(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(inflate_table(1,e.lens,0,288,Ms,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;inflate_table(2,e.lens,0,32,Ls,0,e.work,{bits:5}),Ns=!1}e.lencode=Ms,e.lenbits=9,e.distcode=Ls,e.distbits=5}function inflate(e,t){var n,a,r,o,i,s,c,l,u,d,m,p,h,f,y,b,v,w,D,E,T,C,S,_,A=0,k=new Ki(4),x=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Fs;(n=e.state).mode===Rs&&(n.mode=13),i=e.next_out,r=e.output,c=e.avail_out,o=e.next_in,a=e.input,s=e.avail_in,l=n.hold,u=n.bits,d=s,m=c,C=0;e:for(;;)switch(n.mode){case 1:if(0===n.wrap){n.mode=13;break}for(;u<16;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if(2&n.wrap&&35615===l){n.check=0,k[0]=255&l,k[1]=l>>>8&255,n.check=crc32(n.check,k,2,0),l=0,u=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",n.mode=Is;break}
-if(8!=(15&l)){e.msg="unknown compression method",n.mode=Is;break}if(u-=4,T=8+(15&(l>>>=4)),0===n.wbits)n.wbits=T;else if(T>n.wbits){e.msg="invalid window size",n.mode=Is;break}n.dmax=1<<T,e.adler=n.check=1,n.mode=512&l?10:Rs,l=0,u=0;break;case 2:for(;u<16;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if(n.flags=l,8!=(255&n.flags)){e.msg="unknown compression method",n.mode=Is;break}if(57344&n.flags){e.msg="unknown header flags set",n.mode=Is;break}n.head&&(n.head.text=l>>8&1),512&n.flags&&(k[0]=255&l,k[1]=l>>>8&255,n.check=crc32(n.check,k,2,0)),l=0,u=0,n.mode=3;case 3:for(;u<32;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}n.head&&(n.head.time=l),512&n.flags&&(k[0]=255&l,k[1]=l>>>8&255,k[2]=l>>>16&255,k[3]=l>>>24&255,n.check=crc32(n.check,k,4,0)),l=0,u=0,n.mode=4;case 4:for(;u<16;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}n.head&&(n.head.xflags=255&l,n.head.os=l>>8),512&n.flags&&(k[0]=255&l,k[1]=l>>>8&255,n.check=crc32(n.check,k,2,0)),l=0,u=0,n.mode=5;case 5:if(1024&n.flags){for(;u<16;){
-if(0===s)break e;s--,l+=a[o++]<<u,u+=8}n.length=l,n.head&&(n.head.extra_len=l),512&n.flags&&(k[0]=255&l,k[1]=l>>>8&255,n.check=crc32(n.check,k,2,0)),l=0,u=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&((p=n.length)>s&&(p=s),p&&(n.head&&(T=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),arraySet(n.head.extra,a,o,p,T)),512&n.flags&&(n.check=crc32(n.check,a,p,o)),s-=p,o+=p,n.length-=p),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===s)break e;p=0;do{T=a[o+p++],n.head&&T&&n.length<65536&&(n.head.name+=String.fromCharCode(T))}while(T&&p<s);if(512&n.flags&&(n.check=crc32(n.check,a,p,o)),s-=p,o+=p,T)break e}else n.head&&(n.head.name=null);n.length=0,n.mode=8;case 8:if(4096&n.flags){if(0===s)break e;p=0;do{T=a[o+p++],n.head&&T&&n.length<65536&&(n.head.comment+=String.fromCharCode(T))}while(T&&p<s);if(512&n.flags&&(n.check=crc32(n.check,a,p,o)),s-=p,o+=p,T)break e}else n.head&&(n.head.comment=null);n.mode=9;case 9:
-if(512&n.flags){for(;u<16;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if(l!==(65535&n.check)){e.msg="header crc mismatch",n.mode=Is;break}l=0,u=0}n.head&&(n.head.hcrc=n.flags>>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=Rs;break;case 10:for(;u<32;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}e.adler=n.check=zswap32(l),l=0,u=0,n.mode=11;case 11:if(0===n.havedict)return e.next_out=i,e.avail_out=c,e.next_in=o,e.avail_in=s,n.hold=l,n.bits=u,2;e.adler=n.check=1,n.mode=Rs;case Rs:if(5===t||6===t)break e;case 13:if(n.last){l>>>=7&u,u-=7&u,n.mode=27;break}for(;u<3;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}switch(n.last=1&l,u-=1,3&(l>>>=1)){case 0:n.mode=14;break;case 1:if(fixedtables(n),n.mode=20,6===t){l>>>=2,u-=2;break e}break;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=Is}l>>>=2,u-=2;break;case 14:for(l>>>=7&u,u-=7&u;u<32;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",n.mode=Is;break}if(n.length=65535&l,l=0,u=0,
-n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(p=n.length){if(p>s&&(p=s),p>c&&(p=c),0===p)break e;arraySet(r,a,o,p,i),s-=p,o+=p,c-=p,i+=p,n.length-=p;break}n.mode=Rs;break;case 17:for(;u<14;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if(n.nlen=257+(31&l),l>>>=5,u-=5,n.ndist=1+(31&l),l>>>=5,u-=5,n.ncode=4+(15&l),l>>>=4,u-=4,n.nlen>286||n.ndist>30){e.msg="too many length or distance symbols",n.mode=Is;break}n.have=0,n.mode=18;case 18:for(;n.have<n.ncode;){for(;u<3;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}n.lens[x[n.have++]]=7&l,l>>>=3,u-=3}for(;n.have<19;)n.lens[x[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,S={bits:n.lenbits},C=inflate_table(0,n.lens,0,19,n.lencode,0,n.work,S),n.lenbits=S.bits,C){e.msg="invalid code lengths set",n.mode=Is;break}n.have=0,n.mode=19;case 19:for(;n.have<n.nlen+n.ndist;){for(;b=(A=n.lencode[l&(1<<n.lenbits)-1])>>>16&255,v=65535&A,!((y=A>>>24)<=u);){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if(v<16)l>>>=y,u-=y,n.lens[n.have++]=v;else{if(16===v){
-for(_=y+2;u<_;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if(l>>>=y,u-=y,0===n.have){e.msg="invalid bit length repeat",n.mode=Is;break}T=n.lens[n.have-1],p=3+(3&l),l>>>=2,u-=2}else if(17===v){for(_=y+3;u<_;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}u-=y,T=0,p=3+(7&(l>>>=y)),l>>>=3,u-=3}else{for(_=y+7;u<_;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}u-=y,T=0,p=11+(127&(l>>>=y)),l>>>=7,u-=7}if(n.have+p>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=Is;break}for(;p--;)n.lens[n.have++]=T}}if(n.mode===Is)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=Is;break}if(n.lenbits=9,S={bits:n.lenbits},C=inflate_table(1,n.lens,0,n.nlen,n.lencode,0,n.work,S),n.lenbits=S.bits,C){e.msg="invalid literal/lengths set",n.mode=Is;break}if(n.distbits=6,n.distcode=n.distdyn,S={bits:n.distbits},C=inflate_table(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,S),n.distbits=S.bits,C){e.msg="invalid distances set",n.mode=Is;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:
-if(s>=6&&c>=258){e.next_out=i,e.avail_out=c,e.next_in=o,e.avail_in=s,n.hold=l,n.bits=u,inflate_fast(e,m),i=e.next_out,r=e.output,c=e.avail_out,o=e.next_in,a=e.input,s=e.avail_in,l=n.hold,u=n.bits,n.mode===Rs&&(n.back=-1);break}for(n.back=0;b=(A=n.lencode[l&(1<<n.lenbits)-1])>>>16&255,v=65535&A,!((y=A>>>24)<=u);){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if(b&&0==(240&b)){for(w=y,D=b,E=v;b=(A=n.lencode[E+((l&(1<<w+D)-1)>>w)])>>>16&255,v=65535&A,!(w+(y=A>>>24)<=u);){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}l>>>=w,u-=w,n.back+=w}if(l>>>=y,u-=y,n.back+=y,n.length=v,0===b){n.mode=26;break}if(32&b){n.back=-1,n.mode=Rs;break}if(64&b){e.msg="invalid literal/length code",n.mode=Is;break}n.extra=15&b,n.mode=22;case 22:if(n.extra){for(_=n.extra;u<_;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}n.length+=l&(1<<n.extra)-1,l>>>=n.extra,u-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;b=(A=n.distcode[l&(1<<n.distbits)-1])>>>16&255,v=65535&A,!((y=A>>>24)<=u);){if(0===s)break e;s--,l+=a[o++]<<u,
-u+=8}if(0==(240&b)){for(w=y,D=b,E=v;b=(A=n.distcode[E+((l&(1<<w+D)-1)>>w)])>>>16&255,v=65535&A,!(w+(y=A>>>24)<=u);){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}l>>>=w,u-=w,n.back+=w}if(l>>>=y,u-=y,n.back+=y,64&b){e.msg="invalid distance code",n.mode=Is;break}n.offset=v,n.extra=15&b,n.mode=24;case 24:if(n.extra){for(_=n.extra;u<_;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}n.offset+=l&(1<<n.extra)-1,l>>>=n.extra,u-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=Is;break}n.mode=25;case 25:if(0===c)break e;if(p=m-c,n.offset>p){if((p=n.offset-p)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=Is;break}p>n.wnext?(p-=n.wnext,h=n.wsize-p):h=n.wnext-p,p>n.length&&(p=n.length),f=n.window}else f=r,h=i-n.offset,p=n.length;p>c&&(p=c),c-=p,n.length-=p;do{r[i++]=f[h++]}while(--p);0===n.length&&(n.mode=21);break;case 26:if(0===c)break e;r[i++]=n.length,c--,n.mode=21;break;case 27:if(n.wrap){for(;u<32;){if(0===s)break e;s--,l|=a[o++]<<u,u+=8}if(m-=c,
-e.total_out+=m,n.total+=m,m&&(e.adler=n.check=n.flags?crc32(n.check,r,m,i-m):adler32(n.check,r,m,i-m)),m=c,(n.flags?l:zswap32(l))!==n.check){e.msg="incorrect data check",n.mode=Is;break}l=0,u=0}n.mode=28;case 28:if(n.wrap&&n.flags){for(;u<32;){if(0===s)break e;s--,l+=a[o++]<<u,u+=8}if(l!==(4294967295&n.total)){e.msg="incorrect length check",n.mode=Is;break}l=0,u=0}n.mode=29;case 29:C=1;break e;case Is:C=-3;break e;case 31:return-4;case 32:default:return Fs}return e.next_out=i,e.avail_out=c,e.next_in=o,e.avail_in=s,n.hold=l,n.bits=u,(n.wsize||m!==e.avail_out&&n.mode<Is&&(n.mode<27||4!==t))&&function updatewindow(e,t,n,a){var r,o=e.state;return null===o.window&&(o.wsize=1<<o.wbits,o.wnext=0,o.whave=0,o.window=new Ki(o.wsize)),a>=o.wsize?(arraySet(o.window,t,n-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((r=o.wsize-o.wnext)>a&&(r=a),arraySet(o.window,t,n-a,r,o.wnext),(a-=r)?(arraySet(o.window,t,n-a,a,0),o.wnext=a,o.whave=o.wsize):(o.wnext+=r,o.wnext===o.wsize&&(o.wnext=0),
-o.whave<o.wsize&&(o.whave+=r))),0}(e,e.output,e.next_out,m-e.avail_out),d-=e.avail_in,m-=e.avail_out,e.total_in+=d,e.total_out+=m,n.total+=m,n.wrap&&m&&(e.adler=n.check=n.flags?crc32(n.check,r,m,e.next_out-m):adler32(n.check,r,m,e.next_out-m)),e.data_type=n.bits+(n.last?64:0)+(n.mode===Rs?128:0)+(20===n.mode||15===n.mode?256:0),(0===d&&0===m||4===t)&&0===C&&(C=-5),C}var Ps;function Zlib$1(e){if(e<1||e>7)throw new TypeError("Bad argument");this.mode=e,this.init_done=!1,this.write_in_progress=!1,this.pending_close=!1,this.windowBits=0,this.level=0,this.memLevel=0,this.strategy=0,this.dictionary=null}function bufferSet(e,t){for(var n=0;n<e.length;n++)this[t+n]=e[n]}Zlib$1.prototype.init=function(e,t,n,a,r){var o;switch(this.windowBits=e,this.level=t,this.memLevel=n,this.strategy=a,3!==this.mode&&4!==this.mode||(this.windowBits+=16),7===this.mode&&(this.windowBits+=32),5!==this.mode&&6!==this.mode||(this.windowBits=-this.windowBits),this.strm=new ZStream,this.mode){case 1:case 3:case 5:
-o=function deflateInit2(e,t,n,a,r,o){if(!e)return vs;var i=1;if(-1===t&&(t=6),a<0?(i=0,a=-a):a>15&&(i=2,a-=16),r<1||r>9||8!==n||a<8||a>15||t<0||t>9||o<0||o>4)return err(e,vs);8===a&&(a=9);var s=new DeflateState;return e.state=s,s.strm=e,s.wrap=i,s.gzhead=null,s.w_bits=a,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=r+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+3-1)/3),s.window=new Ki(2*s.w_size),s.head=new Ji(s.hash_size),s.prev=new Ji(s.w_size),s.lit_bufsize=1<<r+6,s.pending_buf_size=4*s.lit_bufsize,s.pending_buf=new Ki(s.pending_buf_size),s.d_buf=1*s.lit_bufsize,s.l_buf=3*s.lit_bufsize,s.level=t,s.strategy=o,s.method=n,deflateReset(e)}(this.strm,this.level,8,this.windowBits,this.memLevel,this.strategy);break;case 2:case 4:case 6:case 7:o=inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}0===o?(this.write_in_progress=!1,this.init_done=!0):this._error(o)},Zlib$1.prototype.params=function(){
-throw new Error("deflateParams Not supported")},Zlib$1.prototype._writeCheck=function(){if(!this.init_done)throw new Error("write before init");if(0===this.mode)throw new Error("already finalized");if(this.write_in_progress)throw new Error("write already in progress");if(this.pending_close)throw new Error("close is pending")},Zlib$1.prototype.write=function(e,t,n,a,r,o,i){this._writeCheck(),this.write_in_progress=!0;var s=this;return _.nextTick((function(){s.write_in_progress=!1;var c=s._write(e,t,n,a,r,o,i);s.callback(c[0],c[1]),s.pending_close&&s.close()})),this},Zlib$1.prototype.writeSync=function(e,t,n,a,r,o,i){return this._writeCheck(),this._write(e,t,n,a,r,o,i)},Zlib$1.prototype._write=function(e,t,n,a,r,o,i){if(this.write_in_progress=!0,0!==e&&1!==e&&2!==e&&3!==e&&4!==e&&5!==e)throw new Error("Invalid flush value");null==t&&(t=new Buffer$1(0),a=0,n=0),r._set?r.set=r._set:r.set=bufferSet;var s,c=this.strm;switch(c.avail_in=a,c.input=t,c.next_in=n,c.avail_out=i,c.output=r,
-c.next_out=o,this.mode){case 1:case 3:case 5:s=deflate(c,e);break;case 7:case 2:case 4:case 6:s=inflate(c,e);break;default:throw new Error("Unknown mode "+this.mode)}return 1!==s&&0!==s&&this._error(s),this.write_in_progress=!1,[c.avail_in,c.avail_out]},Zlib$1.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,1===this.mode||3===this.mode||5===this.mode?function deflateEnd(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&t!==Es&&t!==Ts&&t!==Cs?err(e,vs):(e.state=null,t===Ts?err(e,-3):0):vs}(this.strm):function inflateEnd(e){if(!e||!e.state)return Fs;var t=e.state;return t.window&&(t.window=null),e.state=null,0}(this.strm),this.mode=0)},Zlib$1.prototype.reset=function(){switch(this.mode){case 1:case 5:Ps=deflateReset(this.strm);break;case 2:case 6:Ps=inflateReset(this.strm)}0!==Ps&&this._error(Ps)},Zlib$1.prototype._error=function(e){this.onerror(Yi[e]+": "+this.strm.msg,e),this.write_in_progress=!1,
-this.pending_close&&this.close()};var Os=Object.freeze({__proto__:null,NONE:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8,Zlib:Zlib$1});var Bs={};Object.keys(Os).forEach((function(e){Bs[e]=Os[e]})),Bs.Z_MIN_WINDOWBITS=8,Bs.Z_MAX_WINDOWBITS=15,Bs.Z_DEFAULT_WINDOWBITS=15,Bs.Z_MIN_CHUNK=64,Bs.Z_MAX_CHUNK=1/0,Bs.Z_DEFAULT_CHUNK=16384,Bs.Z_MIN_MEMLEVEL=1,Bs.Z_MAX_MEMLEVEL=9,Bs.Z_DEFAULT_MEMLEVEL=8,Bs.Z_MIN_LEVEL=-1,Bs.Z_MAX_LEVEL=9,Bs.Z_DEFAULT_LEVEL=Bs.Z_DEFAULT_COMPRESSION;var Us={Z_OK:Bs.Z_OK,Z_STREAM_END:Bs.Z_STREAM_END,Z_NEED_DICT:Bs.Z_NEED_DICT,Z_ERRNO:Bs.Z_ERRNO,
-Z_STREAM_ERROR:Bs.Z_STREAM_ERROR,Z_DATA_ERROR:Bs.Z_DATA_ERROR,Z_MEM_ERROR:Bs.Z_MEM_ERROR,Z_BUF_ERROR:Bs.Z_BUF_ERROR,Z_VERSION_ERROR:Bs.Z_VERSION_ERROR};function gzip(e,t,n){return"function"==typeof t&&(n=t,t={}),function zlibBuffer(e,t,n){var a=[],r=0;function flow(){for(var t;null!==(t=e.read());)a.push(t),r+=t.length;e.once("readable",flow)}function onError(t){e.removeListener("end",onEnd),e.removeListener("readable",flow),n(t)}function onEnd(){var t=Buffer$1.concat(a,r);a=[],n(null,t),e.close()}e.on("error",onError),e.on("end",onEnd),e.end(t),flow()}(new Gzip(t),e,n)}function Gzip(e){if(!(this instanceof Gzip))return new Gzip(e);Zlib.call(this,e,Bs.GZIP)}function Zlib(e,t){if(this._opts=e=e||{},this._chunkSize=e.chunkSize||Bs.Z_DEFAULT_CHUNK,Transform.call(this,e),e.flush&&e.flush!==Bs.Z_NO_FLUSH&&e.flush!==Bs.Z_PARTIAL_FLUSH&&e.flush!==Bs.Z_SYNC_FLUSH&&e.flush!==Bs.Z_FULL_FLUSH&&e.flush!==Bs.Z_FINISH&&e.flush!==Bs.Z_BLOCK)throw new Error("Invalid flush flag: "+e.flush)
-;if(this._flushFlag=e.flush||Bs.Z_NO_FLUSH,e.chunkSize&&(e.chunkSize<Bs.Z_MIN_CHUNK||e.chunkSize>Bs.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBits<Bs.Z_MIN_WINDOWBITS||e.windowBits>Bs.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.level<Bs.Z_MIN_LEVEL||e.level>Bs.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevel<Bs.Z_MIN_MEMLEVEL||e.memLevel>Bs.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=Bs.Z_FILTERED&&e.strategy!=Bs.Z_HUFFMAN_ONLY&&e.strategy!=Bs.Z_RLE&&e.strategy!=Bs.Z_FIXED&&e.strategy!=Bs.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!Buffer$1.isBuffer(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._binding=new Bs.Zlib(t);var n=this;this._hadError=!1,this._binding.onerror=function(e,t){n._binding=null,n._hadError=!0
-;var a=new Error(e);a.errno=t,a.code=Bs.codes[t],n.emit("error",a)};var a=Bs.Z_DEFAULT_COMPRESSION;"number"==typeof e.level&&(a=e.level);var r=Bs.Z_DEFAULT_STRATEGY;"number"==typeof e.strategy&&(r=e.strategy),this._binding.init(e.windowBits||Bs.Z_DEFAULT_WINDOWBITS,a,e.memLevel||Bs.Z_DEFAULT_MEMLEVEL,r,e.dictionary),this._buffer=new Buffer$1(this._chunkSize),this._offset=0,this._closed=!1,this._level=a,this._strategy=r,this.once("end",this.close)}Object.keys(Us).forEach((function(e){Us[Us[e]]=e})),Fo(Zlib,Transform),Zlib.prototype.params=function(e,t,n){if(e<Bs.Z_MIN_LEVEL||e>Bs.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+e);if(t!=Bs.Z_FILTERED&&t!=Bs.Z_HUFFMAN_ONLY&&t!=Bs.Z_RLE&&t!=Bs.Z_FIXED&&t!=Bs.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+t);if(this._level!==e||this._strategy!==t){var a=this;this.flush(Bs.Z_SYNC_FLUSH,(function(){a._binding.params(e,t),a._hadError||(a._level=e,a._strategy=t,n&&n())}))}else _.nextTick(n)},
-Zlib.prototype.reset=function(){return this._binding.reset()},Zlib.prototype._flush=function(e){this._transform(new Buffer$1(0),"",e)},Zlib.prototype.flush=function(e,t){var n=this._writableState;if(("function"==typeof e||void 0===e&&!t)&&(t=e,e=Bs.Z_FULL_FLUSH),n.ended)t&&_.nextTick(t);else if(n.ending)t&&this.once("end",t);else if(n.needDrain){var a=this;this.once("drain",(function(){a.flush(t)}))}else this._flushFlag=e,this.write(new Buffer$1(0),"",t)},Zlib.prototype.close=function(e){if(e&&_.nextTick(e),!this._closed){this._closed=!0,this._binding.close();var t=this;_.nextTick((function(){t.emit("close")}))}},Zlib.prototype._transform=function(e,t,n){var a,r=this._writableState,o=(r.ending||r.ended)&&(!e||r.length===e.length);if(null===!e&&!Buffer$1.isBuffer(e))return n(new Error("invalid input"));o?a=Bs.Z_FINISH:(a=this._flushFlag,e.length>=r.length&&(this._flushFlag=this._opts.flush||Bs.Z_NO_FLUSH)),this._processChunk(e,a,n)},Zlib.prototype._processChunk=function(e,t,n){
-var a=e&&e.length,r=this._chunkSize-this._offset,o=0,i=this,s="function"==typeof n;if(!s){var c,l=[],u=0;this.on("error",(function(e){c=e}));do{var d=this._binding.writeSync(t,e,o,a,this._buffer,this._offset,r)}while(!this._hadError&&callback(d[0],d[1]));if(this._hadError)throw c;var m=Buffer$1.concat(l,u);return this.close(),m}var p=this._binding.write(t,e,o,a,this._buffer,this._offset,r);function callback(c,d){if(!i._hadError){var m=r-d;if(function assert$1(e,t){if(!e)throw new Error(t)}(m>=0,"have should not go down"),m>0){var p=i._buffer.slice(i._offset,i._offset+m);i._offset+=m,s?i.push(p):(l.push(p),u+=p.length)}if((0===d||i._offset>=i._chunkSize)&&(r=i._chunkSize,i._offset=0,i._buffer=new Buffer$1(i._chunkSize)),0===d){if(o+=a-c,a=c,!s)return!0;var h=i._binding.write(t,e,o,a,i._buffer,i._offset,i._chunkSize);return h.callback=callback,void(h.buffer=e)}if(!s)return!1;n()}}p.buffer=e,p.callback=callback},Fo((function Deflate(e){if(!(this instanceof Deflate))return new Deflate(e)
-;Zlib.call(this,e,Bs.DEFLATE)}),Zlib),Fo((function Inflate(e){if(!(this instanceof Inflate))return new Inflate(e);Zlib.call(this,e,Bs.INFLATE)}),Zlib),Fo(Gzip,Zlib),Fo((function Gunzip(e){if(!(this instanceof Gunzip))return new Gunzip(e);Zlib.call(this,e,Bs.GUNZIP)}),Zlib),Fo((function DeflateRaw(e){if(!(this instanceof DeflateRaw))return new DeflateRaw(e);Zlib.call(this,e,Bs.DEFLATERAW)}),Zlib),Fo((function InflateRaw(e){if(!(this instanceof InflateRaw))return new InflateRaw(e);Zlib.call(this,e,Bs.INFLATERAW)}),Zlib),Fo((function Unzip(e){if(!(this instanceof Unzip))return new Unzip(e);Zlib.call(this,e,Bs.UNZIP)}),Zlib);const js=["content-encoding","x-original-content-encoding","x-content-encoding-over-network"],zs=["gzip","br","deflate"],qs=["image","audio","video"],Ws=[NetworkRequest.TYPES.Document,NetworkRequest.TYPES.Script,NetworkRequest.TYPES.Stylesheet,NetworkRequest.TYPES.XHR,NetworkRequest.TYPES.Fetch,NetworkRequest.TYPES.EventSource]
-;class ResponseCompression extends FRGatherer{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}};static filterUnoptimizedResponses(e){const t=[];return e.forEach((e=>{if(e.isOutOfProcessIframe)return;const n=e.mimeType,a=e.resourceType||NetworkRequest.TYPES.Other,r=e.resourceSize,o=!(n&&qs.some((e=>n.startsWith(e))))&&Ws.includes(a),i=e.url.startsWith("chrome-extension:");if(!o||!r||!e.finished||i||!e.transferSize||304===e.statusCode)return;(e.responseHeaders||[]).find((e=>js.includes(e.name.toLowerCase())&&zs.includes(e.value)))||t.push({requestId:e.requestId,url:e.url,mimeType:n,transferSize:e.transferSize,resourceSize:r,gzipSize:0})})),t}async _getArtifact(e,t){const n=e.driver.defaultSession,a=ResponseCompression.filterUnoptimizedResponses(t);return Promise.all(a.map((e=>fetchResponseBodyFromCache(n,e.requestId).then((t=>t?new Promise(((n,a)=>gzip(t,((t,r)=>{if(t)return a(t);e.gzipSize=Buffer$1.byteLength(r,"utf8"),n(e)
-})))):e)).catch((t=>(Qo.captureException(t,{tags:{gatherer:"ResponseCompression"},extra:{url:UrlUtils.elideDataURI(e.url)},level:"warning"}),e.gzipSize=void 0,e))))))}async getArtifact(e){const t=e.dependencies.DevtoolsLog,n=await bo.request(t,e);return this._getArtifact(e,n)}async afterPass(e,t){return this._getArtifact({...e,dependencies:{}},t.networkRecords)}}var $s=Object.freeze({__proto__:null,default:ResponseCompression});function installMediaListener(){window.___linkMediaChanges=[],Object.defineProperty(HTMLLinkElement.prototype,"media",{set:function(e){const t={href:this.href,media:e,msSinceHTMLEnd:Date.now()-performance.timing.responseEnd,matches:window.matchMedia(e).matches};window.___linkMediaChanges.push(t),this.setAttribute("media",e)}})}async function collectTagsThatBlockFirstPaint(){const e=window.___linkMediaChanges;try{const t=[...document.querySelectorAll("link")].filter((e=>{
-const t="stylesheet"===e.rel&&window.matchMedia(e.media).matches&&!e.disabled,n="import"===e.rel&&!e.hasAttribute("async");return t||n})).map((t=>({tagName:"LINK",url:t.href,href:t.href,rel:t.rel,media:t.media,disabled:t.disabled,mediaChanges:e.filter((e=>e.href===t.href))}))),n=[...document.querySelectorAll("head script[src]")].filter((e=>!(e instanceof SVGScriptElement)&&!(e.hasAttribute("async")||e.hasAttribute("defer")||/^data:/.test(e.src)||/^blob:/.test(e.src)||"module"===e.getAttribute("type")))).map((e=>({tagName:"SCRIPT",url:e.src,src:e.src})));return[...t,...n]}catch(e){throw new Error(`${"Unable to gather Scripts/Stylesheets/HTML Imports on the page"}: ${e.message}`)}}class TagsBlockingFirstPaint extends FRGatherer{meta={supportedModes:["navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}};static _filteredAndIndexedByUrl(e){const t=new Map;for(const n of e){if(!n.finished)continue;const e="parser"===n.initiator.type,a=/(css|script)/.test(n.mimeType)&&e,r=n.failed
-;(n.mimeType&&n.mimeType.includes("html")||a||r&&e)&&t.set(n.url,n)}return t}static async findBlockingTags(e,t){const n=t.reduce(((e,t)=>Math.min(e,t.networkEndTime)),1/0),a=await e.executionContext.evaluate(collectTagsThatBlockFirstPaint,{args:[]}),r=TagsBlockingFirstPaint._filteredAndIndexedByUrl(t),o=[];for(const e of a){const t=r.get(e.url);if(!t||t.isLinkPreload)continue;let a,i=t.networkEndTime;if("LINK"===e.tagName){const r=e.mediaChanges.filter((e=>!e.matches)).map((e=>e.msSinceHTMLEnd));if(r.length>0){const e=Math.min(...r),a=Math.max(t.networkRequestTime,n+e/1e3);i=Math.min(i,a)}a=e.mediaChanges}const{tagName:s,url:c}=e;o.push({tag:{tagName:s,url:c,mediaChanges:a},transferSize:t.transferSize,startTime:t.networkRequestTime,endTime:i}),r.delete(e.url)}return o}async startSensitiveInstrumentation(e){const{executionContext:t}=e.driver;await t.evaluateOnNewDocument(installMediaListener,{args:[]})}async getArtifact(e){const t=e.dependencies.DevtoolsLog,n=await bo.request(t,e)
-;return TagsBlockingFirstPaint.findBlockingTags(e.driver,n)}afterPass(e,t){return TagsBlockingFirstPaint.findBlockingTags(e.driver,t.networkRecords)}}var Vs=Object.freeze({__proto__:null,default:TagsBlockingFirstPaint});
-/**
-   * @license Copyright 2020 Google Inc. All Rights Reserved.
-   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-   */function kebabCaseToCamelCase(e){return e.replace(/(-\w)/g,(e=>e[1].toUpperCase()))}function getObservedDeviceMetrics(){const e=kebabCaseToCamelCase(window.screen.orientation.type);return{width:window.outerWidth,height:window.outerHeight,screenOrientation:{type:e,angle:window.screen.orientation.angle},deviceScaleFactor:window.devicePixelRatio}}function getScreenshotAreaSize(){return{width:window.innerWidth,height:window.innerHeight}}function waitForDoubleRaf(){return new Promise((e=>{requestAnimationFrame((()=>requestAnimationFrame(e)))}))}var Hs=Object.freeze({__proto__:null,default:class FullPageScreenshot extends FRGatherer{meta={supportedModes:["snapshot","timespan","navigation"]};async _resizeViewport(e,t){const n=e.driver.defaultSession,a=await n.sendCommand("Page.getLayoutMetrics"),r=Math.round(t.height*a.cssContentSize.height/a.cssLayoutViewport.clientHeight),o=Math.min(r,16383),i=new NetworkMonitor(e.driver.targetManager),s=waitForNetworkIdle(n,i,{
-pretendDCLAlreadyFired:!0,networkQuietThresholdMs:1e3,busyEvent:"network-critical-busy",idleEvent:"network-critical-idle",isIdle:e=>e.isCriticalIdle()});await i.enable(),await n.sendCommand("Emulation.setDeviceMetricsOverride",{mobile:t.mobile,deviceScaleFactor:1,height:o,width:0}),await Promise.race([new Promise((e=>setTimeout(e,5e3))),s.promise]),s.cancel(),await i.disable(),await e.driver.executionContext.evaluate(waitForDoubleRaf,{args:[]})}async _takeScreenshot(e){const t="data:image/webp;base64,"+(await e.driver.defaultSession.sendCommand("Page.captureScreenshot",{format:"webp",quality:30})).data,n=await e.driver.executionContext.evaluate(getScreenshotAreaSize,{args:[],useIsolation:!0});return{data:t,width:n.width,height:n.height}}async _resolveNodes(e){function resolveNodes(){const e={};if(!window.__lighthouseNodesDontTouchOrAllVarianceGoesAway)return e;const t=window.__lighthouseNodesDontTouchOrAllVarianceGoesAway;for(const[n,a]of t.entries()){const t=getBoundingClientRect(n)
-;e[a]=t}return e}function resolveNodesInPage({useIsolation:t}){return e.driver.executionContext.evaluate(resolveNodes,{args:[],useIsolation:t,deps:[or.getBoundingClientRect]})}return{...await resolveNodesInPage({useIsolation:!1}),...await resolveNodesInPage({useIsolation:!0})}}async getArtifact(e){const t=e.driver.defaultSession,n=e.driver.executionContext,a=e.settings,r=!a.screenEmulation.disabled,o={...a.screenEmulation};try{if(!a.usePassiveGathering){if(!r){const e=await n.evaluate(getObservedDeviceMetrics,{args:[],useIsolation:!0,deps:[kebabCaseToCamelCase]});o.height=e.height,o.width=e.width,o.deviceScaleFactor=e.deviceScaleFactor,o.mobile="mobile"===a.formFactor}await this._resizeViewport(e,o)}const[i,s]=await Promise.all([this._takeScreenshot(e),this._resolveNodes(e)]);return{screenshot:i,nodes:s}}finally{a.usePassiveGathering||(r?await emulate(t,a):await t.sendCommand("Emulation.setDeviceMetricsOverride",{mobile:o.mobile,deviceScaleFactor:o.deviceScaleFactor,height:o.height,
-width:0}))}}}});class GlobalListeners extends FRGatherer{meta={supportedModes:["snapshot","timespan","navigation"]};static _filterForAllowlistedTypes(e){return"pagehide"===e.type||"unload"===e.type||"visibilitychange"===e.type}getListenerIndentifier(e){return`${e.type}:${e.scriptId}:${e.columnNumber}:${e.lineNumber}`}dedupeListeners(e){const t=new Set;return e.filter((e=>{const n=this.getListenerIndentifier(e);return!t.has(n)&&(t.add(n),!0)}))}async getArtifact(e){const t=e.driver.defaultSession,n=[];for(const a of e.driver.targetManager.mainFrameExecutionContexts()){let e;try{const{result:n}=await t.sendCommand("Runtime.evaluate",{expression:"window",returnByValue:!1,uniqueContextId:a.uniqueId});if(!n.objectId)throw new Error("Error fetching information about the global object");e=n.objectId}catch(e){Log.warn("Execution context is no longer valid",a,e);continue}const r=await t.sendCommand("DOMDebugger.getEventListeners",{objectId:e})
-;for(const e of r.listeners)if(GlobalListeners._filterForAllowlistedTypes(e)){const{type:t,scriptId:a,lineNumber:r,columnNumber:o}=e;n.push({type:t,scriptId:a,lineNumber:r,columnNumber:o})}}return this.dedupeListeners(n)}}var Gs=Object.freeze({__proto__:null,default:GlobalListeners});function collectIFrameElements(){const e=window.__HTMLElementBoundingClientRect||window.HTMLElement.prototype.getBoundingClientRect;return getElementsInDocument("iframe").map((t=>{const n=e.call(t),{top:a,bottom:r,left:o,right:i,width:s,height:c}=n;return{id:t.id,src:t.src,clientRect:{top:a,bottom:r,left:o,right:i,width:s,height:c},isPositionFixed:isPositionFixed(t),node:getNodeDetails(t)}}))}var Ys=Object.freeze({__proto__:null,default:class IFrameElements extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){const t=e.driver;return await t.executionContext.evaluate(collectIFrameElements,{args:[],useIsolation:!0,
-deps:[or.getElementsInDocument,or.isPositionFixed,or.getNodeDetails]})}}});function hasFontSizeDeclaration(e){return!!e&&!!e.cssProperties.find((({name:e})=>"font-size"===e))}function findMostSpecificMatchedCSSRule(e=[],t){let n;for(let a=e.length-1;a>=0;a--)if(t(e[a].rule.style)){n=e[a].rule;break}if(n)return{type:"Regular",...n.style,parentRule:{origin:n.origin,selectors:n.selectorList.selectors}}}function getEffectiveFontRule({attributesStyle:e,inlineStyle:t,matchedCSSRules:n,inherited:a}){if(hasFontSizeDeclaration(t))return{type:"Inline",...t};const r=findMostSpecificMatchedCSSRule(n,hasFontSizeDeclaration);if(r)return r;if(hasFontSizeDeclaration(e))return{type:"Attributes",...e};const o=function findInheritedCSSRule(e=[]){for(const{inlineStyle:t,matchedCSSRules:n}of e){if(hasFontSizeDeclaration(t))return{type:"Inline",...t};const e=findMostSpecificMatchedCSSRule(n,hasFontSizeDeclaration);if(e)return e}}(a);return o||void 0}function getTextLength(e){
-return e?Array.from(e.trim()).length:0}class FontSize$1 extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};static async fetchFailingNodeSourceRules(e,t){const n=t.sort(((e,t)=>t.textLength-e.textLength)).slice(0,50);await e.sendCommand("DOM.getDocument",{depth:-1,pierce:!0});const{nodeIds:a}=await e.sendCommand("DOM.pushNodesByBackendIdsToFrontend",{backendNodeIds:n.map((e=>e.parentNode.backendNodeId))}),r=n.map((async(t,n)=>{t.nodeId=a[n];try{const r=await async function fetchSourceRule(e,t){const n=getEffectiveFontRule(await e.sendCommand("CSS.getMatchedStylesForNode",{nodeId:t}));if(n)return{type:n.type,range:n.range,styleSheetId:n.styleSheetId,parentRule:n.parentRule&&{origin:n.parentRule.origin,selectors:n.parentRule.selectors}}}(e,a[n]);t.cssRule=r}catch(e){t.cssRule=void 0}return t})),o=await Promise.all(r),i=o.reduce(((e,{textLength:t})=>e+t),0);return{analyzedFailingNodesData:o,analyzedFailingTextLength:i}}getTextNodesInLayoutFromSnapshot(e){
-const t=e.strings,getString=e=>t[e],n=[];for(let a=0;a<e.documents.length;a++){const r=e.documents[a];if(!(r.nodes.backendNodeId&&r.nodes.parentIndex&&r.nodes.attributes&&r.nodes.nodeName))throw new Error("Unexpected response from DOMSnapshot.captureSnapshot.");const o=r.nodes,getParentData=e=>({backendNodeId:o.backendNodeId[e],attributes:o.attributes[e].map(getString),nodeName:getString(o.nodeName[e])});for(const e of r.textBoxes.layoutIndex){const a=t[r.layout.text[e]];if(!a)continue;const i=r.layout.nodeIndex[e],s=r.layout.styles[e],[c]=s,l=parseFloat(t[c]),u=o.parentIndex[i],d=o.parentIndex[u],m=getParentData(u),p=void 0!==d?getParentData(d):void 0;n.push({nodeIndex:i,backendNodeId:o.backendNodeId[i],fontSize:l,textLength:getTextLength(a),parentNode:{...m,parentNode:p}})}}return n}findFailingNodes(e){const t=[];let n=0,a=0;for(const r of this.getTextNodesInLayoutFromSnapshot(e))n+=r.textLength,r.fontSize<12&&(a+=r.textLength,t.push({nodeId:0,parentNode:r.parentNode,
-textLength:r.textLength,fontSize:r.fontSize}));return{totalTextLength:n,failingTextLength:a,failingNodes:t}}async getArtifact(e){const t=e.driver.defaultSession,n=new Map,onStylesheetAdded=e=>n.set(e.header.styleSheetId,e.header);t.on("CSS.styleSheetAdded",onStylesheetAdded),await Promise.all([t.sendCommand("DOMSnapshot.enable"),t.sendCommand("DOM.enable"),t.sendCommand("CSS.enable")]);const a=await t.sendCommand("DOMSnapshot.captureSnapshot",{computedStyles:["font-size"]}),{totalTextLength:r,failingTextLength:o,failingNodes:i}=this.findFailingNodes(a),{analyzedFailingNodesData:s,analyzedFailingTextLength:c}=await FontSize$1.fetchFailingNodeSourceRules(t,i);return t.off("CSS.styleSheetAdded",onStylesheetAdded),s.filter((e=>e.cssRule?.styleSheetId)).forEach((e=>e.cssRule.stylesheet=n.get(e.cssRule.styleSheetId))),await Promise.all([t.sendCommand("DOMSnapshot.disable"),t.sendCommand("DOM.disable"),t.sendCommand("CSS.disable")]),{analyzedFailingNodesData:s,analyzedFailingTextLength:c,
-failingTextLength:o,totalTextLength:r}}}var Ks=Object.freeze({__proto__:null,default:FontSize$1,getEffectiveFontRule,findMostSpecificMatchedCSSRule});function getClientRect(e){const t=e.getBoundingClientRect();return{top:t.top,bottom:t.bottom,left:t.left,right:t.right}}function getPosition(e,t){if(e.parentElement&&"PICTURE"===e.parentElement.tagName){return window.getComputedStyle(e.parentElement).getPropertyValue("position")}return t.getPropertyValue("position")}function getHTMLImages(e){return e.filter((e=>"img"===e.localName)).map((e=>{const t=window.getComputedStyle(e),n=!!e.parentElement&&"PICTURE"===e.parentElement.tagName,a=!n&&!e.srcset;return{src:e.currentSrc,srcset:e.srcset,displayedWidth:e.width,displayedHeight:e.height,clientRect:getClientRect(e),attributeWidth:e.getAttribute("width"),attributeHeight:e.getAttribute("height"),naturalDimensions:a?{width:e.naturalWidth,height:e.naturalHeight}:void 0,cssRules:void 0,computedStyles:{position:getPosition(e,t),
-objectFit:t.getPropertyValue("object-fit"),imageRendering:t.getPropertyValue("image-rendering")},isCss:!1,isPicture:n,loading:e.loading,isInShadowDOM:e.getRootNode()instanceof ShadowRoot,fetchPriority:e.fetchPriority,node:getNodeDetails(e)}}))}function getCSSImages(e){const t=/^url\("([^"]+)"\)$/,n=[];for(const a of e){const e=window.getComputedStyle(a);if(!e.backgroundImage||!t.test(e.backgroundImage))continue;const r=e.backgroundImage.match(t)[1];n.push({src:r,srcset:"",displayedWidth:a.clientWidth,displayedHeight:a.clientHeight,clientRect:getClientRect(a),attributeWidth:null,attributeHeight:null,naturalDimensions:void 0,cssEffectiveRules:void 0,computedStyles:{position:getPosition(a,e),objectFit:"",imageRendering:e.getPropertyValue("image-rendering")},isCss:!0,isPicture:!1,isInShadowDOM:a.getRootNode()instanceof ShadowRoot,node:getNodeDetails(a)})}return n}function collectImageElementInfo(){const e=getElementsInDocument();return getHTMLImages(e).concat(getCSSImages(e))}
-function determineNaturalSize(e){return new Promise(((t,n)=>{const a=new Image;a.addEventListener("error",(e=>n(new Error("determineNaturalSize failed img load")))),a.addEventListener("load",(()=>{t({naturalWidth:a.naturalWidth,naturalHeight:a.naturalHeight})})),a.src=e}))}function findSizeDeclaration(e,t){if(!e||!e.cssProperties)return;const n=e.cssProperties.find((({name:e})=>e===t));return n?n.value:void 0}function getEffectiveSizingRule({attributesStyle:e,inlineStyle:t,matchedCSSRules:n},a){const r=findSizeDeclaration(t,a);if(r)return r;const o=findSizeDeclaration(e,a);if(o)return o;const i=function findMostSpecificCSSRule(e,t){const n=findMostSpecificMatchedCSSRule(e,(e=>findSizeDeclaration(e,t)));if(n)return findSizeDeclaration(n,t)}(n,a);return i||null}function getPixelArea(e){return e.naturalDimensions?e.naturalDimensions.height*e.naturalDimensions.width:e.displayedHeight*e.displayedWidth}var Js=Object.freeze({__proto__:null,default:class ImageElements extends FRGatherer{meta={
-supportedModes:["snapshot","timespan","navigation"]};constructor(){super(),this._naturalSizeCache=new Map}async fetchElementWithSizeInformation(e,t){const n=t.src;let a=this._naturalSizeCache.get(n);if(!a)try{e.defaultSession.setNextProtocolTimeout(250),a=await e.executionContext.evaluate(determineNaturalSize,{args:[n],useIsolation:!0}),this._naturalSizeCache.set(n,a)}catch(e){}a&&(t.naturalDimensions={width:a.naturalWidth,height:a.naturalHeight})}async fetchSourceRules(e,t,n){try{const{nodeId:a}=await e.sendCommand("DOM.pushNodeByPathToFrontend",{path:t});if(!a)return;const r=await e.sendCommand("CSS.getMatchedStylesForNode",{nodeId:a}),o=getEffectiveSizingRule(r,"width"),i=getEffectiveSizingRule(r,"height"),s=getEffectiveSizingRule(r,"aspect-ratio");n.cssEffectiveRules={width:o,height:i,aspectRatio:s}}catch(e){if(/No node.*found/.test(e.message))return;throw e}}async collectExtraDetails(e,t){let n=!1;setTimeout((e=>n=!0),5e3);let a=0
-;for(const r of t)n?a++:(r.isInShadowDOM||r.isCss||await this.fetchSourceRules(e.defaultSession,r.node.devtoolsNodePath,r),(r.isPicture||r.isCss||r.srcset)&&await this.fetchElementWithSizeInformation(e,r));n&&Log.warn("ImageElements",`Reached gathering budget of 5s. Skipped extra details for ${a}/${t.length}`)}async getArtifact(e){const t=e.driver.defaultSession,n=e.driver.executionContext,a=await n.evaluate(collectImageElementInfo,{args:[],useIsolation:!0,deps:[or.getElementsInDocument,or.getBoundingClientRect,or.getNodeDetails,getClientRect,getPosition,getHTMLImages,getCSSImages]});return await Promise.all([t.sendCommand("DOM.enable"),t.sendCommand("CSS.enable"),t.sendCommand("DOM.getDocument",{depth:-1,pierce:!0})]),a.sort(((e,t)=>getPixelArea(t)-getPixelArea(e))),await this.collectExtraDetails(e.driver,a),await Promise.all([t.sendCommand("DOM.disable"),t.sendCommand("CSS.disable")]),a}}});function collectElements(){const e=[],t=new Map,n=new Map,a=getElementsInDocument("form")
-;for(const e of a)t.set(e,{id:e.id,name:e.name,autocomplete:e.autocomplete,node:getNodeDetails(e)});const r=getElementsInDocument("label");for(const e of r)n.set(e,{for:e.htmlFor,node:getNodeDetails(e)});const o=getElementsInDocument("textarea, input, select");for(const a of o){const r=a.form,o=r?[...t.keys()].indexOf(r):void 0,i=[...a.labels||[]].map((e=>[...n.keys()].indexOf(e)));let s;a.readOnly||(s=!a.dispatchEvent(new ClipboardEvent("paste",{cancelable:!0}))),e.push({parentFormIndex:o,labelIndices:i,id:a.id,name:a.name,type:a.type,placeholder:a instanceof HTMLSelectElement?void 0:a.placeholder,autocomplete:{property:a.autocomplete,attribute:a.getAttribute("autocomplete"),prediction:a.getAttribute("autofill-prediction")},preventsPaste:s,node:getNodeDetails(a)})}return{inputs:e,forms:[...t.values()],labels:[...n.values()]}}var Xs=Object.freeze({__proto__:null,default:class Inputs extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){
-return e.driver.executionContext.evaluate(collectElements,{args:[],useIsolation:!0,deps:[or.getElementsInDocument,or.getNodeDetails]})}}});var Zs=Object.freeze({__proto__:null,default:class InspectorIssues extends FRGatherer{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}};constructor(){super(),this._issues=[],this._onIssueAdded=this.onIssueAdded.bind(this)}onIssueAdded(e){this._issues.push(e.issue)}async startInstrumentation(e){const t=e.driver.defaultSession;t.on("Audits.issueAdded",this._onIssueAdded),await t.sendCommand("Audits.enable")}async stopInstrumentation(e){const t=e.driver.defaultSession;t.off("Audits.issueAdded",this._onIssueAdded),await t.sendCommand("Audits.disable")}async _getArtifact(e){const t={attributionReportingIssue:[],blockedByResponseIssue:[],bounceTrackingIssue:[],clientHintIssue:[],contentSecurityPolicyIssue:[],corsIssue:[],deprecationIssue:[],federatedAuthRequestIssue:[],genericIssue:[],heavyAdIssue:[],
-lowTextContrastIssue:[],mixedContentIssue:[],navigatorUserAgentIssue:[],quirksModeIssue:[],cookieIssue:[],sharedArrayBufferIssue:[],stylesheetLoadingIssue:[],federatedAuthUserInfoRequestIssue:[]},n=Object.keys(t);for(const a of n){const n=`${a}Details`,r=this._issues.map((e=>e.details[n]));for(const n of r){if(!n)continue;const r="request"in n&&n.request&&n.request.requestId;r?e.find((e=>e.requestId===r))&&t[a].push(n):t[a].push(n)}}return t}async getArtifact(e){const t=e.dependencies.DevtoolsLog,n=await bo.request(t,e);return this._getArtifact(n)}async afterPass(e,t){return await this.stopInstrumentation({...e,dependencies:{}}),this._getArtifact(t.networkRecords)}}});class InstallabilityErrors extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};static async getInstallabilityErrors(e){const t={msg:"Get webapp installability errors",id:"lh:gather:getInstallabilityErrors"};Log.time(t);const n=(await e.sendCommand("Page.getInstallabilityErrors")).installabilityErrors
-;return Log.timeEnd(t),{errors:n}}async getArtifact(e){const t=e.driver;try{return await InstallabilityErrors.getInstallabilityErrors(t.defaultSession)}catch{return{errors:[{errorId:"protocol-timeout",errorArguments:[]}]}}}}var Qs=Object.freeze({__proto__:null,default:InstallabilityErrors});var ec=Object.freeze({__proto__:null,default:class JsUsage extends FRGatherer{meta={supportedModes:["snapshot","timespan","navigation"]};constructor(){super(),this._scriptUsages=[]}async startInstrumentation(e){const t=e.driver.defaultSession;await t.sendCommand("Profiler.enable"),await t.sendCommand("Profiler.startPreciseCoverage",{detailed:!1})}async stopInstrumentation(e){const t=e.driver.defaultSession,n=await t.sendCommand("Profiler.takePreciseCoverage");this._scriptUsages=n.result,await t.sendCommand("Profiler.stopPreciseCoverage"),await t.sendCommand("Profiler.disable")}async getArtifact(){const e={}
-;for(const t of this._scriptUsages)""!==t.url&&"_lighthouse-eval.js"!==t.url&&"__puppeteer_evaluation_script__"!==t.url&&(e[t.scriptId]=t);return e}}}),tc=/^utf-?8|ascii|utf-?16-?le|ucs-?2|base-?64|latin-?1$/i,nc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ac=/\s|\uFEFF|\xA0/,rc=/\r?\n[\x20\x09]+/g,oc=/[;,"]/,ic=/[;,"]|\s/,sc=/^[!#$%&'*+\-\.^_`|~\da-zA-Z]+$/,cc=1,lc=2,uc=4;function trim(e){return e.replace(nc,"")}function hasWhitespace(e){return ac.test(e)}function skipWhitespace(e,t){for(;hasWhitespace(e[t]);)t++;return t}function needsQuotes(e){return ic.test(e)||!sc.test(e)}class Link{constructor(e){this.refs=[],e&&this.parse(e)}rel(e){for(var t=[],n=e.toLowerCase(),a=0;a<this.refs.length;a++)this.refs[a].rel.toLowerCase()===n&&t.push(this.refs[a]);return t}get(e,t){e=e.toLowerCase();for(var n=[],a=0;a<this.refs.length;a++)this.refs[a][e]===t&&n.push(this.refs[a]);return n}set(e){return this.refs.push(e),this}setUnique(e){return this.refs.some((t=>function shallowCompareObjects(e,t){
-return Object.keys(e).length===Object.keys(t).length&&Object.keys(e).every((n=>n in t&&e[n]===t[n]))}(t,e)))||this.refs.push(e),this}has(e,t){e=e.toLowerCase();for(var n=0;n<this.refs.length;n++)if(this.refs[n][e]===t)return!0;return!1}parse(e,t){e=trim(e=(t=t||0)?e.slice(t):e).replace(rc,"");for(var n=cc,a=e.length,r=(t=0,null);t<a;)if(n===cc){if(hasWhitespace(e[t])){t++;continue}if("<"!==e[t])throw new Error('Unexpected character "'+e[t]+'" at offset '+t);if(null!=r&&(null!=r.rel?this.refs.push(...Link.expandRelations(r)):this.refs.push(r)),-1===(s=e.indexOf(">",t)))throw new Error("Expected end of URI delimiter at offset "+t);r={uri:e.slice(t+1,s)},t=s,n=lc,t++}else if(n===lc){if(hasWhitespace(e[t])){t++;continue}if(";"===e[t])n=uc,t++;else{if(","!==e[t])throw new Error('Unexpected character "'+e[t]+'" at offset '+t);n=cc,t++}}else{if(n!==uc)throw new Error('Unknown parser state "'+n+'"');if(";"===e[t]||hasWhitespace(e[t])){t++;continue}
--1===(s=e.indexOf("=",t))&&(s=e.indexOf(";",t)),-1===s&&(s=e.length);var o=trim(e.slice(t,s)).toLowerCase(),i="";if('"'===e[t=skipWhitespace(e,t=s+1)])for(t++;t<a;){if('"'===e[t]){t++;break}"\\"===e[t]&&t++,i+=e[t],t++}else{for(var s=t+1;!oc.test(e[s])&&s<a;)s++;i=e.slice(t,s),t=s}switch(r[o]&&Link.isSingleOccurenceAttr(o)||("*"===o[o.length-1]?r[o]=Link.parseExtendedValue(i):(i="type"===o?i.toLowerCase():i,null!=r[o]?Array.isArray(r[o])?r[o].push(i):r[o]=[r[o],i]:r[o]=i)),e[t]){case",":n=cc;break;case";":n=uc}t++}return null!=r&&(null!=r.rel?this.refs.push(...Link.expandRelations(r)):this.refs.push(r)),r=null,this}toString(){for(var e=[],t="",n=null,a=0;a<this.refs.length;a++)n=this.refs[a],t=Object.keys(this.refs[a]).reduce((function(e,t){return"uri"===t?e:e+"; "+Link.formatAttribute(t,n[t])}),"<"+n.uri+">"),e.push(t);return e.join(", ")}}Link.isCompatibleEncoding=function(e){return tc.test(e)},Link.parse=function(e,t){return(new Link).parse(e,t)},
-Link.isSingleOccurenceAttr=function(e){return"rel"===e||"type"===e||"media"===e||"title"===e||"title*"===e},Link.isTokenAttr=function(e){return"rel"===e||"type"===e||"anchor"===e},Link.escapeQuotes=function(e){return e.replace(/"/g,'\\"')},Link.expandRelations=function(e){return e.rel.split(" ").map((function(t){var n=Object.assign({},e);return n.rel=t,n}))},Link.parseExtendedValue=function(e){var t=/([^']+)?(?:'([^']*)')?(.+)/.exec(e);return{language:t[2].toLowerCase(),encoding:Link.isCompatibleEncoding(t[1])?null:t[1].toLowerCase(),value:Link.isCompatibleEncoding(t[1])?decodeURIComponent(t[3]):t[3]}},Link.formatExtendedAttribute=function(e,t){var n=(t.encoding||"utf-8").toUpperCase();return e+"="+n+"'"+(t.language||"en")+"'"+(Buffer$1.isBuffer(t.value)&&Link.isCompatibleEncoding(n)?t.value.toString(n):Buffer$1.isBuffer(t.value)?t.value.toString("hex").replace(/[0-9a-f]{2}/gi,"%$1"):encodeURIComponent(t.value))},Link.formatAttribute=function(e,t){
-return Array.isArray(t)?t.map((t=>Link.formatAttribute(e,t))).join("; "):"*"===e[e.length-1]||"string"!=typeof t?Link.formatExtendedAttribute(e,t):(Link.isTokenAttr(e)?t=needsQuotes(t)?'"'+Link.escapeQuotes(t)+'"':Link.escapeQuotes(t):needsQuotes(t)&&(t='"'+(t=(t=encodeURIComponent(t)).replace(/%20/g," ").replace(/%2C/g,",").replace(/%3B/g,";"))+'"'),e+"="+t)};var dc=Link;const mc=makeComputedArtifact(class MainResource{static async compute_(e,t){const{mainDocumentUrl:n}=e.URL;if(!n)throw new Error("mainDocumentUrl must exist to get the main resource");const a=await bo.request(e.devtoolsLog,t),r=NetworkAnalyzer.findResourceForUrl(a,n);if(!r)throw new Error("Unable to identify the main resource");return r}},["URL","devtoolsLog"]),pc={headerParseWarning:"Error parsing `link` header ({error}): `{header}`"},gc=createIcuMessageFn("core/gather/gatherers/link-elements.js",pc);function normalizeUrlOrNull(e,t){try{return new URL(e,t).href}catch(e){return null}}function getLinkElementsInDOM(){
-const e=getElementsInDocument("link"),t=[];for(const n of e){if(!(n instanceof HTMLLinkElement))continue;const e=n.getAttribute("href")||"",a=n.closest("head")?"head":"body";t.push({rel:n.rel,href:n.href,hreflang:n.hreflang,as:n.as,crossOrigin:n.crossOrigin,hrefRaw:e,source:a,fetchPriority:n.fetchPriority,node:getNodeDetails(n)})}return t}class LinkElements extends FRGatherer{constructor(){super(),this.meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}}}static getLinkElementsInDOM(e){return e.driver.executionContext.evaluate(getLinkElementsInDOM,{args:[],useIsolation:!0,deps:[or.getNodeDetails,or.getElementsInDocument]})}static async getLinkElementsInHeaders(e,t){const n=await mc.request({devtoolsLog:t,URL:e.baseArtifacts.URL},e),a=[];for(const t of n.responseHeaders){if("link"!==t.name.toLowerCase())continue;let n=[];try{n=dc.parse(t.value).refs}catch(n){const a=Util.truncate(t.value,100),r=gc(pc.headerParseWarning,{error:n.message,header:a})
-;e.baseArtifacts.LighthouseRunWarnings.push(r)}for(const t of n)a.push({rel:t.rel||"",href:normalizeUrlOrNull(t.uri,e.baseArtifacts.URL.finalDisplayedUrl),hrefRaw:t.uri||"",hreflang:t.hreflang||"",as:t.as||"",crossOrigin:(r=t.crossorigin,"anonymous"===r?"anonymous":"use-credentials"===r?"use-credentials":null),source:"headers",fetchPriority:t.fetchpriority,node:null})}var r;return a}async _getArtifact(e,t){const n=await LinkElements.getLinkElementsInDOM(e),a=await LinkElements.getLinkElementsInHeaders(e,t),r=n.concat(a);for(const e of r)e.rel=e.rel.toLowerCase();return r}async afterPass(e,t){return this._getArtifact({...e,dependencies:{}},t.devtoolsLog)}async getArtifact(e){return this._getArtifact(e,e.dependencies.DevtoolsLog)}}var hc=Object.freeze({__proto__:null,default:LinkElements,UIStrings:pc});var fc=Object.freeze({__proto__:null,default:class MainDocumentContent extends FRGatherer{meta={supportedModes:["navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}}
-;async _getArtifact(e,t){const n=await mc.request({devtoolsLog:t,URL:e.baseArtifacts.URL},e);return fetchResponseBodyFromCache(e.driver.defaultSession,n.requestId)}async getArtifact(e){const t=e.dependencies.DevtoolsLog;return this._getArtifact(e,t)}async afterPass(e,t){return this._getArtifact({...e,dependencies:{}},t.devtoolsLog)}}});function collectMetaElements(){const e={getElementsInDocument,getNodeDetails};return e.getElementsInDocument("head meta").map((t=>{const getAttribute=e=>{const n=t.attributes.getNamedItem(e);if(n)return n.value};return{name:t.name.toLowerCase(),content:t.content,property:getAttribute("property"),httpEquiv:t.httpEquiv?t.httpEquiv.toLowerCase():void 0,charset:getAttribute("charset"),node:e.getNodeDetails(t)}}))}var yc=Object.freeze({__proto__:null,default:class MetaElements extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(collectMetaElements,{args:[],useIsolation:!0,
-deps:[or.getElementsInDocument,or.getNodeDetails]})}}});function collectAllScriptElements(){return getElementsInDocument("script").map((e=>({type:e.type||null,src:e.src||null,id:e.id||null,async:e.async,defer:e.defer,source:e.closest("head")?"head":"body",node:getNodeDetails(e)})))}var bc=Object.freeze({__proto__:null,default:class ScriptElements extends FRGatherer{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:DevtoolsLog.symbol}};async _getArtifact(e,t){const n=e.driver.executionContext,a=await n.evaluate(collectAllScriptElements,{args:[],useIsolation:!0,deps:[or.getNodeDetails,or.getElementsInDocument]}),r=t.filter((e=>e.resourceType===NetworkRequest.TYPES.Script)).filter((e=>!e.isOutOfProcessIframe));for(let e=0;e<r.length;e++){const t=r[e];a.find((e=>e.src===t.url))||a.push({type:null,src:t.url,id:null,async:!1,defer:!1,source:"network",node:null})}return a}async getArtifact(e){const t=e.dependencies.DevtoolsLog,n=await bo.request(t,e)
-;return this._getArtifact(e,n)}async afterPass(e,t){const n=t.networkRecords;return this._getArtifact({...e,dependencies:{}},n)}}});var vc=Object.freeze({__proto__:null,default:class Scripts extends FRGatherer{meta={supportedModes:["timespan","navigation"]};_scriptParsedEvents=[];_scriptContents=[];constructor(){super(),this.onScriptParsed=this.onScriptParsed.bind(this)}onScriptParsed(e){(function isLighthouseRuntimeEvaluateScript(e){return!e.embedderName||e.hasSourceURL&&"_lighthouse-eval.js"===e.url})(e)||this._scriptParsedEvents.push(e)}async startInstrumentation(e){const t=e.driver.defaultSession;t.on("Debugger.scriptParsed",this.onScriptParsed),await t.sendCommand("Debugger.enable")}async stopInstrumentation(e){const t=e.driver.defaultSession,n=e.baseArtifacts.HostFormFactor;t.off("Debugger.scriptParsed",this.onScriptParsed),await t.sendCommand("Debugger.enable"),this._scriptContents=await async function runInSeriesOrParallel(e,t,n){if(n){const n=[];for(const a of e){
-const e=await t(a);n.push(e)}return n}{const n=e.map(t);return await Promise.all(n)}}(this._scriptParsedEvents,(({scriptId:e})=>t.sendCommand("Debugger.getScriptSource",{scriptId:e}).then((e=>e.scriptSource)).catch((()=>{}))),"mobile"===n),await t.sendCommand("Debugger.disable")}async getArtifact(){return this._scriptParsedEvents.map(((e,t)=>({name:e.url,...e,url:e.embedderName||e.url,content:this._scriptContents[t]})))}}});function getEmbeddedContent(){const e={getElementsInDocument,getNodeDetails};return e.getElementsInDocument("object, embed, applet").map((t=>({tagName:t.tagName,type:t.getAttribute("type"),src:t.getAttribute("src"),data:t.getAttribute("data"),code:t.getAttribute("code"),params:Array.from(t.children).filter((e=>"PARAM"===e.tagName)).map((e=>({name:e.getAttribute("name")||"",value:e.getAttribute("value")||""}))),node:e.getNodeDetails(t)})))}var wc=Object.freeze({__proto__:null,default:class EmbeddedContent extends FRGatherer{meta={
-supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(getEmbeddedContent,{args:[],deps:[or.getElementsInDocument,or.getNodeDetails]})}}});var Dc=Object.freeze({__proto__:null,default:class RobotsTxt$1 extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){const{finalDisplayedUrl:t}=e.baseArtifacts.URL,n=new URL("/robots.txt",t).href;return e.driver.fetcher.fetchResource(n).catch((e=>({status:null,content:null,errorMessage:e.message})))}}});function rectContainsPoint(e,{x:t,y:n}){return e.left<=t&&e.right>=t&&e.top<=n&&e.bottom>=n}function rectContains(e,t){return t.top>=e.top&&t.right<=e.right&&t.bottom<=e.bottom&&t.left>=e.left}function getRectCenterPoint(e){return{x:e.left+e.width/2,y:e.top+e.height/2}}function rectsTouchOrOverlap(e,t){return e.left<=t.right&&t.left<=e.right&&e.top<=t.bottom&&t.top<=e.bottom}function getBoundingRectWithPadding(e,t){
-if(0===e.length)throw new Error("No rects to take bounds of");let n=Number.MAX_VALUE,a=-Number.MAX_VALUE,r=Number.MAX_VALUE,o=-Number.MAX_VALUE;for(const t of e)n=Math.min(n,t.left),a=Math.max(a,t.right),r=Math.min(r,t.top),o=Math.max(o,t.bottom);const i=t/2;return n-=i,a+=i,r-=i,o+=i,{left:n,right:a,top:r,bottom:o,width:a-n,height:o-r}}function getRectOverlapArea(e,t){const n=Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top);if(n<=0)return 0;const a=Math.min(e.right,t.right)-Math.max(e.left,t.left);return a<=0?0:a*n}function getRectArea(e){return e.width*e.height}function allRectsContainedWithinEachOther(e,t){for(const n of e)for(const e of t)if(!rectContains(n,e)&&!rectContains(e,n))return!1;return!0}const Ec=["button","a","input","textarea","select","option","[role=button]","[role=checkbox]","[role=link]","[role=menuitem]","[role=menuitemcheckbox]","[role=menuitemradio]","[role=option]","[role=scrollbar]","[role=slider]","[role=spinbutton]"].join(",");function elementIsVisible(e){
-return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)}function getClientRects(e){const t=Array.from(e.getClientRects()).map((e=>{const{width:t,height:n,left:a,top:r,right:o,bottom:i}=e;return{width:t,height:n,left:a,top:r,right:o,bottom:i}}));for(const n of e.children)t.push(...getClientRects(n));return t}function elementHasAncestorTapTarget(e,t){return!!e.parentElement&&(!!e.parentElement.matches(t)||elementHasAncestorTapTarget(e.parentElement,t))}function hasTextNodeSiblingsFormingTextBlock(e){if(!e.parentElement)return!1;const t=e.parentElement,n=e.textContent||"";if((t.textContent||"").length-n.length<5)return!1;for(const t of e.parentElement.childNodes){if(t===e)continue;const n=(t.textContent||"").trim();if(t.nodeType===Node.TEXT_NODE&&n.length>0)return!0}return!1}function elementIsInTextBlock(e){const{display:t}=getComputedStyle(e)
-;return("inline"===t||"inline-block"===t)&&(!!hasTextNodeSiblingsFormingTextBlock(e)||!!e.parentElement&&elementIsInTextBlock(e.parentElement))}function elementCenterIsAtZAxisTop(e,t){const n=window.innerHeight,a=Math.floor(t.y/n)*n;window.scrollY!==a&&window.scrollTo(0,a);const r=document.elementFromPoint(t.x,t.y-window.scrollY);return r===e||e.contains(r)}function disableFixedAndStickyElementPointerEvents(e){return document.querySelectorAll("*").forEach((t=>{const n=getComputedStyle(t).position;"fixed"!==n&&"sticky"!==n||t.classList.add(e)})),function undo(){Array.from(document.getElementsByClassName(e)).forEach((t=>{t.classList.remove(e)}))}}function gatherTapTargets(e,t){const n=[];window.scrollTo(0,0);const a=getElementsInDocument(e),r=[];a.forEach((t=>{elementHasAncestorTapTarget(t,e)||elementIsInTextBlock(t)||elementIsVisible(t)&&r.push({tapTargetElement:t,clientRects:getClientRects(t)})}));const o=disableFixedAndStickyElementPointerEvents(t),i=[]
-;r.forEach((({tapTargetElement:e,clientRects:t})=>{let n=t.filter((e=>0!==e.width&&0!==e.height));n=n.filter((t=>{const n=getRectCenterPoint(t);return elementCenterIsAtZAxisTop(e,n)})),n.length>0&&i.push({tapTargetElement:e,visibleClientRects:n})}));for(const{tapTargetElement:e,visibleClientRects:t}of i)n.push({clientRects:t,href:e.href||"",node:getNodeDetails(e)});return o(),n}function gatherTapTargetsAndResetScroll(e,t){const n={x:window.scrollX,y:window.scrollY};try{return gatherTapTargets(e,t)}finally{window.scrollTo(n.x,n.y)}}var Tc=Object.freeze({__proto__:null,default:class TapTargets$1 extends FRGatherer{constructor(){super(),this.meta={supportedModes:["snapshot","navigation"]}}async addStyleRule(e,t){const n=await e.sendCommand("Page.getFrameTree"),{styleSheetId:a}=await e.sendCommand("CSS.createStyleSheet",{frameId:n.frameTree.frame.id}),r=`.${t} { pointer-events: none !important }`;return await e.sendCommand("CSS.setStyleSheetText",{styleSheetId:a,text:r}),a}
-async removeStyleRule(e,t){await e.sendCommand("CSS.setStyleSheetText",{styleSheetId:t,text:""})}async getArtifact(e){const t=e.driver.defaultSession;await t.sendCommand("DOM.enable"),await t.sendCommand("CSS.enable");const n="lighthouse-disable-pointer-events",a=await this.addStyleRule(t,n),r=await e.driver.executionContext.evaluate(gatherTapTargetsAndResetScroll,{args:[Ec,n],useIsolation:!0,deps:[or.getNodeDetails,or.getElementsInDocument,disableFixedAndStickyElementPointerEvents,elementIsVisible,elementHasAncestorTapTarget,elementCenterIsAtZAxisTop,getClientRects,hasTextNodeSiblingsFormingTextBlock,elementIsInTextBlock,getRectCenterPoint,or.getNodePath,or.getNodeSelector,or.getNodeLabel,gatherTapTargets]});return await this.removeStyleRule(t,a),await t.sendCommand("CSS.disable"),await t.sendCommand("DOM.disable"),r}}});var Cc=Object.freeze({__proto__:null,default:class ServiceWorker$1 extends FRGatherer{meta={supportedModes:["navigation"]};async beforePass(e){
-return this.getArtifact({...e,dependencies:{}})}async afterPass(){}async getArtifact(e){const t=e.driver.defaultSession,{versions:n}=await getServiceWorkerVersions(t),{registrations:a}=await getServiceWorkerRegistrations(t);return{versions:n,registrations:a}}}}),Sc={exports:{}},_c={};Object.defineProperty(_c,"__esModule",{value:!0}),_c.ParsedURL=_c.normalizePath=void 0,_c.normalizePath=function normalizePath(e){if(-1===e.indexOf("..")&&-1===e.indexOf("."))return e;const t=("/"===e[0]?e.substring(1):e).split("/"),n=[];for(const e of t)"."!==e&&(".."===e?n.pop():n.push(e));let a=n.join("/");return"/"===e[0]&&a&&(a="/"+a),"/"===a[a.length-1]||"/"!==e[e.length-1]&&"."!==t[t.length-1]&&".."!==t[t.length-1]||(a+="/"),a};class ParsedURL$1{isValid;url;scheme;user;host;port;path;queryParams;fragment;folderPathComponents;lastPathComponent;blobInnerScheme;#displayNameInternal;#dataURLDisplayNameInternal;constructor(e){this.isValid=!1,this.url=e,this.scheme="",this.user="",this.host="",
-this.port="",this.path="",this.queryParams="",this.fragment="",this.folderPathComponents="",this.lastPathComponent="";const t=this.url.startsWith("blob:"),n=(t?e.substring(5):e).match(ParsedURL$1.urlRegex());if(n)this.isValid=!0,t?(this.blobInnerScheme=n[2].toLowerCase(),this.scheme="blob"):this.scheme=n[2].toLowerCase(),this.user=n[3]??"",this.host=n[4]??"",this.port=n[5]??"",this.path=n[6]??"/",this.queryParams=n[7]??"",this.fragment=n[8]??"";else{if(this.url.startsWith("data:"))return void(this.scheme="data");if(this.url.startsWith("blob:"))return void(this.scheme="blob");if("about:blank"===this.url)return void(this.scheme="about");this.path=this.url}const a=this.path.lastIndexOf("/");-1!==a?(this.folderPathComponents=this.path.substring(0,a),this.lastPathComponent=this.path.substring(a+1)):this.lastPathComponent=this.path}static concatenate(e,...t){return e.concat(...t)}static beginsWithWindowsDriveLetter(e){return/^[A-Za-z]:/.test(e)}static beginsWithScheme(e){
-return/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e)}static isRelativeURL(e){return!this.beginsWithScheme(e)||this.beginsWithWindowsDriveLetter(e)}get displayName(){return this.#displayNameInternal?this.#displayNameInternal:this.isDataURL()?this.dataURLDisplayName():this.isBlobURL()||this.isAboutBlank()?this.url:(this.#displayNameInternal=this.lastPathComponent,this.#displayNameInternal||(this.#displayNameInternal=(this.host||"")+"/"),"/"===this.#displayNameInternal&&(this.#displayNameInternal=this.url),this.#displayNameInternal)}static urlRegexInstance=null}_c.ParsedURL=ParsedURL$1;var Ac={ParsedURL:_c};var kc={ArrayUtilities:{lowerBound:function lowerBound(e,t,n,a,r){let o=a||0,i=void 0!==r?r:e.length;for(;o<i;){const a=o+i>>1;n(t,e[a])>0?o=a+1:i=a}return i},upperBound:function upperBound(e,t,n,a,r){let o=a||0,i=void 0!==r?r:e.length;for(;o<i;){const a=o+i>>1;n(t,e[a])>=0?o=a+1:i=a}return i}},DevToolsPath:{EmptyUrlString:""}};!function(e,t){const n=Ac,a=kc;function parseSourceMap(e){
-return e.startsWith(")]}")&&(e=e.substring(e.indexOf("\n"))),65279===e.charCodeAt(0)&&(e=e.slice(1)),JSON.parse(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.SourceMap=t.SourceMapEntry=t.parseSourceMap=void 0,t.parseSourceMap=parseSourceMap;class SourceMapEntry{lineNumber;columnNumber;sourceURL;sourceLineNumber;sourceColumnNumber;name;constructor(e,t,n,a,r,o){this.lineNumber=e,this.columnNumber=t,this.sourceURL=n,this.sourceLineNumber=a,this.sourceColumnNumber=r,this.name=o}static compare(e,t){return e.lineNumber!==t.lineNumber?e.lineNumber-t.lineNumber:e.columnNumber-t.columnNumber}}t.SourceMapEntry=SourceMapEntry;const r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=new Map;for(let e=0;e<r.length;++e)o.set(r.charAt(e),e);const i=new WeakMap;class SourceMap{#json;#compiledURLInternal;#sourceMappingURL;#baseURL;#mappingsInternal;#sourceInfos;constructor(e,t,n){this.#json=n,this.#compiledURLInternal=e,this.#sourceMappingURL=t,
-this.#baseURL=t.startsWith("data:")?e:t,this.#mappingsInternal=null,this.#sourceInfos=new Map,"sections"in this.#json&&this.#json.sections.find((e=>"url"in e))&&console.warn(`SourceMap "${t}" contains unsupported "URL" field in one of its sections.`),this.eachSection(this.parseSources.bind(this))}compiledURL(){return this.#compiledURLInternal}url(){return this.#sourceMappingURL}sourceURLs(){return[...this.#sourceInfos.keys()]}embeddedContentByURL(e){const t=this.#sourceInfos.get(e);return t?t.content:null}findEntry(e,t){const n=this.mappings(),r=a.ArrayUtilities.upperBound(n,void 0,((n,a)=>e-a.lineNumber||t-a.columnNumber));return r?n[r-1]:null}findEntryRanges(e,t){const n=this.mappings(),r=a.ArrayUtilities.upperBound(n,void 0,((n,a)=>e-a.lineNumber||t-a.columnNumber));if(!r)return null;const o=r-1,i=n[o].sourceURL;if(!i)return null
-;const s=r<n.length?n[r].lineNumber:2**31-1,c=r<n.length?n[r].columnNumber:2**31-1,l=new TextUtils.TextRange.TextRange(n[o].lineNumber,n[o].columnNumber,s,c),u=this.reversedMappings(i),d=n[o].sourceLineNumber,m=n[o].sourceColumnNumber,p=a.ArrayUtilities.upperBound(u,void 0,((e,t)=>d-n[t].sourceLineNumber||m-n[t].sourceColumnNumber));if(!p)return null;const h=p<u.length?n[u[p]].sourceLineNumber:2**31-1,f=p<u.length?n[u[p]].sourceColumnNumber:2**31-1;return{range:l,sourceRange:new TextUtils.TextRange.TextRange(d,m,h,f),sourceURL:i}}sourceLineMapping(e,t,n){const r=this.mappings(),o=this.reversedMappings(e),i=a.ArrayUtilities.lowerBound(o,t,lineComparator),s=a.ArrayUtilities.upperBound(o,t,lineComparator);if(i>=o.length||r[o[i]].sourceLineNumber!==t)return null;const c=o.slice(i,s);if(!c.length)return null;const l=a.ArrayUtilities.lowerBound(c,n,((e,t)=>e-r[t].sourceColumnNumber));return l>=c.length?r[c[c.length-1]]:r[c[l]];function lineComparator(e,t){return e-r[t].sourceLineNumber}}
-findReverseIndices(e,t,n){const r=this.mappings(),o=this.reversedMappings(e),i=a.ArrayUtilities.upperBound(o,void 0,((e,a)=>t-r[a].sourceLineNumber||n-r[a].sourceColumnNumber));let s=i;for(;s>0&&r[o[s-1]].sourceLineNumber===r[o[i-1]].sourceLineNumber&&r[o[s-1]].sourceColumnNumber===r[o[i-1]].sourceColumnNumber;)--s;return o.slice(s,i)}findReverseEntries(e,t,n){const a=this.mappings();return this.findReverseIndices(e,t,n).map((e=>a[e]))}findReverseRanges(e,t,n){const a=this.mappings(),r=this.findReverseIndices(e,t,n),o=[];for(let e=0;e<r.length;++e){const t=r[e];let n=t+1;for(;e+1<r.length&&n===r[e+1];)++n,++e;const i=a[t].lineNumber,s=a[t].columnNumber,c=n<a.length?a[n].lineNumber:2**31-1,l=n<a.length?a[n].columnNumber:2**31-1;o.push(new TextUtils.TextRange.TextRange(i,s,c,l))}return o}mappings(){return this.#ensureMappingsProcessed(),this.#mappingsInternal??[]}reversedMappings(e){return this.#ensureMappingsProcessed(),this.#sourceInfos.get(e)?.reverseMappings??[]}
-#ensureMappingsProcessed(){null===this.#mappingsInternal&&(this.#mappingsInternal=[],this.eachSection(this.parseMap.bind(this)),this.mappings().sort(SourceMapEntry.compare),this.#computeReverseMappings(this.#mappingsInternal),this.#json=null)}#computeReverseMappings(e){const t=new Map;for(let n=0;n<e.length;n++){const a=e[n].sourceURL;if(!a)continue;let r=t.get(a);r||(r=[],t.set(a,r)),r.push(n)}for(const[e,n]of t.entries()){const t=this.#sourceInfos.get(e);t&&(n.sort(sourceMappingComparator),t.reverseMappings=n)}function sourceMappingComparator(t,n){const a=e[t],r=e[n];return a.sourceLineNumber-r.sourceLineNumber||a.sourceColumnNumber-r.sourceColumnNumber||a.lineNumber-r.lineNumber||a.columnNumber-r.columnNumber}}eachSection(e){if(this.#json)if("sections"in this.#json)for(const t of this.#json.sections)"map"in t&&e(t.map,t.offset.line,t.offset.column);else e(this.#json,0,0)}parseSources(e){const t=[],a=e.sourceRoot??"",r=new Set(e.x_google_ignoreList)
-;for(let o=0;o<e.sources.length;++o){let i=e.sources[o];n.ParsedURL.ParsedURL.isRelativeURL(i)&&(i=a&&!a.endsWith("/")&&i&&!i.startsWith("/")?a.concat("/",i):a.concat(i));const s=i,c=e.sourcesContent&&e.sourcesContent[o];if(t.push(s),!this.#sourceInfos.has(s)){const e=c??null,t=r.has(o);this.#sourceInfos.set(s,{content:e,ignoreListHint:t,reverseMappings:null})}}i.set(e,t)}parseMap(e,t,n){let a=0,r=0,o=0,s=0;const c=i.get(e),l=e.names??[],u=new SourceMap.StringCharIterator(e.mappings);let d=c&&c[a];for(;;){if(","===u.peek())u.next();else{for(;";"===u.peek();)t+=1,n=0,u.next();if(!u.hasNext())break}if(n+=this.decodeVLQ(u),!u.hasNext()||this.isSeparator(u.peek())){this.mappings().push(new SourceMapEntry(t,n));continue}const e=this.decodeVLQ(u);e&&(a+=e,c&&(d=c[a])),r+=this.decodeVLQ(u),o+=this.decodeVLQ(u),u.hasNext()&&!this.isSeparator(u.peek())?(s+=this.decodeVLQ(u),this.mappings().push(new SourceMapEntry(t,n,d,r,o,l[s]))):this.mappings().push(new SourceMapEntry(t,n,d,r,o))}}
-isSeparator(e){return","===e||";"===e}decodeVLQ(e){let t=0,n=0,a=SourceMap._VLQ_CONTINUATION_MASK;for(;a&SourceMap._VLQ_CONTINUATION_MASK;)a=o.get(e.next())||0,t+=(a&SourceMap._VLQ_BASE_MASK)<<n,n+=SourceMap._VLQ_BASE_SHIFT;const r=1&t;return t>>=1,r?-t:t}mapsOrigin(){const e=this.mappings();if(e.length>0){const t=e[0];return 0===t?.lineNumber||0===t.columnNumber}return!1}hasIgnoreListHint(e){return this.#sourceInfos.get(e)?.ignoreListHint??!1}findRanges(e,t){const n=this.mappings(),a=[];if(!n.length)return[];let r=null;0===n[0].lineNumber&&0===n[0].columnNumber||!t?.isStartMatching||(r=TextUtils.TextRange.TextRange.createUnboundedFromLocation(0,0),a.push(r));for(const{sourceURL:t,lineNumber:o,columnNumber:i}of n){const n=t&&e(t);r||!n?r&&!n&&(r.endLine=o,r.endColumn=i,r=null):(r=TextUtils.TextRange.TextRange.createUnboundedFromLocation(o,i),a.push(r))}return a}}t.SourceMap=SourceMap,function(e){e._VLQ_BASE_SHIFT=5,e._VLQ_BASE_MASK=31,e._VLQ_CONTINUATION_MASK=32
-;e.StringCharIterator=class StringCharIterator{string;position;constructor(e){this.string=e,this.position=0}next(){return this.string.charAt(this.position++)}peek(){return this.string.charAt(this.position)}hasNext(){return this.position<this.string.length}}}(SourceMap=t.SourceMap||(t.SourceMap={})),e.exports=SourceMap,SourceMap.parseSourceMap=parseSourceMap}(Sc,Sc.exports);const xc={SourceMap:Sc.exports};xc.SourceMap.prototype.computeLastGeneratedColumns=function(){const e=this.mappings();if(!e.length||void 0===e[0].lastColumnNumber)for(let t=0;t<e.length-1;t++){const n=e[t],a=e[t+1];n.lineNumber===a.lineNumber&&(n.lastColumnNumber=a.columnNumber)}};var Fc=xc;var Rc=Object.freeze({__proto__:null,default:class SourceMaps extends FRGatherer{meta={supportedModes:["timespan","navigation"]};constructor(){super(),this._scriptParsedEvents=[],this.onScriptParsed=this.onScriptParsed.bind(this)}async fetchSourceMap(e,t){const n=await e.fetcher.fetchResource(t,{timeout:1500})
-;if(null===n.content)throw new Error(`Failed fetching source map (${n.status})`);return Fc.SourceMap.parseSourceMap(n.content)}parseSourceMapFromDataUrl(e){const t=Buffer.from(e.split(",")[1],"base64");return Fc.SourceMap.parseSourceMap(t.toString())}onScriptParsed(e){e.sourceMapURL&&this._scriptParsedEvents.push(e)}_resolveUrl(e,t){try{return new URL(e,t).href}catch(e){return}}async _retrieveMapFromScriptParsedEvent(e,t){if(!t.sourceMapURL)throw new Error("precondition failed: event.sourceMapURL should exist");const n=t.sourceMapURL.startsWith("data:"),a=t.url,r=n?t.sourceMapURL:this._resolveUrl(t.sourceMapURL,t.url);if(!r)return{scriptId:t.scriptId,scriptUrl:a,errorMessage:`Could not resolve map url: ${t.sourceMapURL}`};const o=n?void 0:r;try{const i=n?this.parseSourceMapFromDataUrl(r):await this.fetchSourceMap(e,r);if("number"!=typeof i.version)throw new Error("Map has no numeric `version` field");if(!Array.isArray(i.sources))throw new Error("Map has no `sources` list")
-;if("string"!=typeof i.mappings)throw new Error("Map has no `mappings` field");return i.sections&&(i.sections=i.sections.filter((e=>e.map))),{scriptId:t.scriptId,scriptUrl:a,sourceMapUrl:o,map:i}}catch(e){return{scriptId:t.scriptId,scriptUrl:a,sourceMapUrl:o,errorMessage:e.toString()}}}async startSensitiveInstrumentation(e){const t=e.driver.defaultSession;t.on("Debugger.scriptParsed",this.onScriptParsed),await t.sendCommand("Debugger.enable")}async stopSensitiveInstrumentation(e){const t=e.driver.defaultSession;await t.sendCommand("Debugger.disable"),t.off("Debugger.scriptParsed",this.onScriptParsed)}async getArtifact(e){const t=this._scriptParsedEvents.map((t=>this._retrieveMapFromScriptParsedEvent(e.driver,t)));return Promise.all(t)}}});async function detectLibraries(){const e=[],t=d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests;for(const[n,a]of Object.entries(t))try{let t;const r=new Promise((e=>t=setTimeout((()=>e(!1)),1e3))),o=await Promise.race([a.test(window),r])
-;t&&clearTimeout(t),o&&e.push({id:a.id,name:n,version:o.version,npm:a.npm})}catch(e){}return e}class Stacks extends FRGatherer{constructor(){super(),this.meta={supportedModes:["snapshot","navigation"]}}static async collectStacks(e){const t={msg:"Collect stacks",id:"lh:gather:collectStacks"};Log.time(t);const n=(await e.evaluate(detectLibraries,{args:[],
-deps:['function _createTimeoutHelper(){let e;return{timeoutPromise:new Promise(((t,o)=>{e=setTimeout((()=>o(new Error("Timed out"))),5e3)})),clearTimeout:()=>clearTimeout(e)}}var UNKNOWN_VERSION=null,d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests={GWT:{id:"gwt",icon:"gwt",url:"http://www.gwtproject.org/",test:function(e){var t=e.document,o=t.getElementById("__gwt_historyFrame"),n=t.gwt_uid,r=t.body.__listener,i=t.body.__eventBits,s=e.__gwt_activeModules,c=e.__gwt_jsonp__,u=e.__gwt_scriptsLoaded||e.__gwt_stylesLoaded||e.__gwt_activeModules;if(o||n||r||i||s||c||u){for(var a=t.getElementsByTagName("iframe"),l=UNKNOWN_VERSION,N=0;N<a.length;N++)try{if(a[N].tabIndex<0&&a[N].contentWindow&&a[N].contentWindow.$gwt_version){l=a[N].contentWindow.$gwt_version;break}}catch(e){}return"0.0.999"==l&&(l="Google Internal"),{version:l}}return!1}},Ink:{id:"ink",icon:"ink",url:"http://ink.sapo.pt/",test:function(e){return!(!e.Ink||!e.Ink.createModule)&&{version:UNKNOWN_VERSION}}},Vaadin:{id:"vaadin",icon:"vaadin",url:"https://vaadin.com/",test:function(e){return!(!e.vaadin||!e.vaadin.registerWidgetset)&&{version:UNKNOWN_VERSION}}},Bootstrap:{id:"bootstrap",icon:"bootstrap",url:"http://getbootstrap.com/",npm:"bootstrap",test:function(e){var t,o=e.$&&e.$.fn;if(o&&(["affix","alert","button","carousel","collapse","dropdown","modal","popover","scrollspy","tab","tooltip"].some((function(o){if(e.$.fn[o]){if(e.$.fn[o].Constructor&&e.$.fn[o].Constructor.VERSION)return t=e.$.fn[o].Constructor.VERSION,!0;if(new RegExp("\\\\$this\\\\.data\\\\((?:\'|\\")(?:bs\\\\.){1}"+o).test(e.$.fn[o].toString()))return t=">= 3.0.0 & <= 3.1.1",!0;if(new RegExp("\\\\$this\\\\.data\\\\((?:\'|\\")"+o).test(e.$.fn[o].toString()))return t=">= 2.0.0 & <= 2.3.2",!0}return!1})),t))return{version:t};return!1}},Zurb:{id:"zurb",icon:"zurb",url:"https://foundation.zurb.com/",npm:"foundation-sites",test:function(e){return!(!e.Foundation||!e.Foundation.Toggler)&&{version:e.Foundation.version||UNKNOWN_VERSION}}},Polymer:{id:"polymer",icon:"polymer",url:"https://www.polymer-project.org/",npm:"@polymer/polymer",test:function(e){return!(!e.Polymer||!e.Polymer.dom)&&{version:e.Polymer.version||UNKNOWN_VERSION}}},LitElement:{id:"litelement",icon:"polymer",url:"https://lit-element.polymer-project.org/",npm:"lit-element",test:function(e){if(e.litElementVersions&&e.litElementVersions.length){var t=[...e.litElementVersions].sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0})));return{version:t[t.length-1]}}return!1}},"lit-html":{id:"lit-html",icon:"polymer",url:"https://lit-html.polymer-project.org/",npm:"lit-element",test:function(e){if(e.litHtmlVersions&&e.litHtmlVersions.length){var t=[...e.litHtmlVersions].sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0})));return{version:t[t.length-1]}}return!1}},Highcharts:{id:"highcharts",icon:"highcharts",url:"http://www.highcharts.com",npm:"highcharts",test:function(e){return!(!e.Highcharts||!e.Highcharts.Point)&&{version:e.Highcharts.version||UNKNOWN_VERSION}}},InfoVis:{id:"jit",icon:"jit",url:"http://philogb.github.com/jit/",test:function(e){return!(!e.$jit||!e.$jit.PieChart)&&{version:e.$jit.version||UNKNOWN_VERSION}}},FlotCharts:{id:"flotcharts",icon:"flotcharts",url:"http://www.flotcharts.org/",npm:"flot",test:function(e){return!(!e.$||!e.$.plot)&&{version:e.$.plot.version||UNKNOWN_VERSION}}},CreateJS:{id:"createjs",icon:"createjs",url:"https://createjs.com/",npm:"createjs",test:function(e){return!(!e.createjs||!e.createjs.promote)&&{version:UNKNOWN_VERSION}}},"Google Maps":{id:"gmaps",icon:"gmaps",url:"https://developers.google.com/maps/",test:function(e){return!(!e.google||!e.google.maps)&&{version:e.google.maps.version||UNKNOWN_VERSION}}},jQuery:{id:"jquery",icon:"jquery",url:"http://jquery.com",npm:"jquery",test:function(e){var t=e.jQuery||e.$;return!!(t&&t.fn&&t.fn.jquery)&&{version:t.fn.jquery.replace(/[^\\d+\\.+]/g,"")||UNKNOWN_VERSION}}},"jQuery (Fast path)":{id:"jquery-fast",icon:"jquery",url:"http://jquery.com",npm:"jquery",test:function(e){var t=e.jQuery||e.$;return!(!t||!t.fn)&&{version:UNKNOWN_VERSION}}},"jQuery UI":{id:"jquery_ui",icon:"jquery_ui",url:"http://jqueryui.com",npm:"jquery-ui",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;if(t&&t.fn&&t.fn.jquery&&t.ui){for(var o="accordion,datepicker,dialog,draggable,droppable,progressbar,resizable,selectable,slider,menu,grid,tabs".split(","),n=[],r=0;r<o.length;r++)t.ui[o[r]]&&n.push(o[r].substr(0,1).toUpperCase()+o[r].substr(1));return{version:t.ui.version||UNKNOWN_VERSION,details:n.length?"Plugins used: "+n.join(","):""}}return!1}},Dojo:{id:"dojo",icon:"dojo",url:"http://dojotoolkit.org",npm:"dojo",test:function(e){return!(!e.dojo||!e.dojo.delegate)&&{version:e.dojo.version?e.dojo.version.toString():UNKNOWN_VERSION,details:"Details: "+(e.dijit?"Uses Dijit":"none")}}},Prototype:{id:"prototype",icon:"prototype",url:"http://prototypejs.org",test:function(e){return!(!e.Prototype||!e.Prototype.BrowserFeatures)&&{version:e.Prototype.Version||UNKNOWN_VERSION}}},Scriptaculous:{id:"scriptaculous",icon:"scriptaculous",url:"http://script.aculo.us",test:function(e){return!(!e.Scriptaculous||!e.Scriptaculous.load)&&{version:e.Scriptaculous.Version||UNKNOWN_VERSION}}},MooTools:{id:"mootools",icon:"mootools",url:"https://mootools.net/",test:function(e){return!(!e.MooTools||!e.MooTools.build)&&{version:e.MooTools.version||UNKNOWN_VERSION}}},Spry:{id:"spry",icon:"spry",url:"http://labs.adobe.com/technologies/spry",test:function(e){return!(!e.Spry||!e.Spry.Data)&&{version:UNKNOWN_VERSION}}},"YUI 2":{id:"yui",icon:"yui",url:"http://developer.yahoo.com/yui/2/",test:function(e){return!(!e.YAHOO||!e.YAHOO.util)&&{version:e.YAHOO.VERSION||UNKNOWN_VERSION}}},"YUI 3":{id:"yui3",icon:"yui3",url:"https://yuilibrary.com/",npm:"yui",test:function(e){return!(!e.YUI||!e.YUI.Env)&&{version:e.YUI.version||UNKNOWN_VERSION}}},Qooxdoo:{id:"qooxdoo",icon:"qooxdoo",url:"http://www.qooxdoo.org/",npm:"qooxdoo",test:function(e){return!(!e.qx||!e.qx.Bootstrap)&&{version:UNKNOWN_VERSION}}},"Ext JS":{id:"extjs",icon:"extjs",url:"https://www.sencha.com/products/extjs/",test:function(e){return e.Ext&&e.Ext.versions?{version:e.Ext.versions.core.version}:!!e.Ext&&{version:e.Ext.version||UNKNOWN_VERSION}}},Ezoic:{id:"ezoic",icon:"ezoic",url:"https://www.ezoic.com/",test:function(e){return!(!e.__ez||!e.__ez.template)&&{version:UNKNOWN_VERSION}}},base2:{id:"base2",icon:"base2",url:"http://code.google.com/p/base2",test:function(e){return!(!e.base2||!e.base2.dom)&&{version:e.base2.version||UNKNOWN_VERSION}}},"Closure Library":{id:"closure",icon:"closure",url:"https://developers.google.com/closure/library/",npm:"google-closure-library",test:function(e){return!(!e.goog||!e.goog.provide)&&{version:UNKNOWN_VERSION}}},"Rapha&euml;l":{id:"raphael",icon:"raphael",url:"http://dmitrybaranovskiy.github.io/raphael/",test:function(e){return!(!e.Raphael||!e.Raphael.circle)&&{version:e.Raphael.version||UNKNOWN_VERSION}}},React:{id:"react",icon:"react",url:"https://reactjs.org/",npm:"react",test:function(e){function t(e){return null!=e&&null!=e._reactRootContainer}var o=document.getElementById("react-root"),n=document.querySelector("*[data-reactroot]");return!!(t(document.body)||t(document.body.firstElementChild)||null!=document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return t(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()||o&&o.innerText.length>0||n||e.React&&e.React.Component)&&{version:e.React&&e.React.version||UNKNOWN_VERSION}}},"React (Fast path)":{id:"react-fast",icon:"react",url:"https://reactjs.org/",npm:"react",test:function(e){function t(e){return null!=e&&null!=e._reactRootContainer}var o=document.getElementById("react-root"),n=document.querySelector("*[data-reactroot]");return!!(t(document.body)||t(document.body.firstElementChild)||o||n||e.React)&&{version:e.React&&e.React.version||UNKNOWN_VERSION}}},"Next.js":{id:"next",icon:"next",url:"https://nextjs.org/",npm:"next",test:function(e){return!(!e.__NEXT_DATA__||!e.__NEXT_DATA__.buildId)&&{version:window.next&&window.next.version||UNKNOWN_VERSION}}},"Next.js (Fast path)":{id:"next-fast",icon:"next",url:"https://nextjs.org/",npm:"next",test:function(e){return!!e.__NEXT_DATA__&&{version:UNKNOWN_VERSION}}},Preact:{id:"preact",icon:"preact",url:"https://preactjs.com/",npm:"preact",test:function(e){var t="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("preactattr");function o(e){return"__k"in e&&"props"in e.__k&&"type"in e.__k||("_component"in e||"__preactattr_"in e||t&&null!=e[t])}function n(e){return null!=e&&o(e)&&e}var r=n(document.body)||n(document.body.firstElementChild);if(r||(r=document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return o(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()),r||e.preact){var i=UNKNOWN_VERSION;return r&&("__k"in r&&(i="10"),"__preactattr_"in r&&(i="8"),t&&null!=r[t]&&(i="7")),{version:i}}return!1}},"Preact (Fast path)":{id:"preact-fast",icon:"preact",url:"https://preactjs.com/",npm:"preact",test:function(e){var t=UNKNOWN_VERSION;function o(e){return null!=e&&function(e){return null!=e.__k?(t="10",!0):null!=e._component||null!=e.__preactattr_}(e)}return!(!o(document.body)&&!o(document.body.firstElementChild)&&!e.preact)&&{version:t}}},Modernizr:{id:"modernizr",icon:"modernizr",url:"https://modernizr.com/",npm:"modernizr",test:function(e){return!(!e.Modernizr||!e.Modernizr.addTest)&&{version:e.Modernizr._version||UNKNOWN_VERSION}}},"Processing.js":{id:"processingjs",icon:"processingjs",url:"http://processingjs.org",npm:"processing-js",test:function(e){return!(!e.Processing||!e.Processing.box)&&{version:Processing.version||UNKNOWN_VERSION}}},Backbone:{id:"backbone",icon:"backbone",url:"http://backbonejs.org/",npm:"backbone",test:function(e){return!(!e.Backbone||!e.Backbone.Model.extend)&&{version:e.Backbone.VERSION||UNKNOWN_VERSION}}},Leaflet:{id:"leaflet",icon:"leaflet",url:"http://leafletjs.com",npm:"leaflet",test:function(e){return!(!e.L||!e.L.GeoJSON||!e.L.marker&&!e.L.Marker)&&{version:e.L.version||e.L.VERSION||UNKNOWN_VERSION}}},Mapbox:{id:"mapbox",icon:"mapbox",url:"https://www.mapbox.com/",npm:"mapbox-gl",test:function(e){return!!(e.L&&e.L.mapbox&&e.L.mapbox.geocoder)&&{version:e.L.mapbox.VERSION||UNKNOWN_VERSION}}},"Lo-Dash":{id:"lodash",icon:"lodash",url:"https://lodash.com/",npm:"lodash",test:function(e){var t="function"==typeof(t=e._)&&t,o="function"==typeof(o=t&&t.chain)&&o,n=(o||t||function(){return{}})(1);return!(!t||!n.__wrapped__)&&{version:t.VERSION||UNKNOWN_VERSION}}},Underscore:{id:"underscore",icon:"underscore",url:"http://underscorejs.org/",npm:"underscore",test:function(e){return!(!e._||"function"!=typeof e._.tap||d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests["Lo-Dash"].test(e))&&{version:e._.VERSION||UNKNOWN_VERSION}}},Sammy:{id:"sammy",icon:"sammy",url:"http://sammyjs.org",test:function(e){return!(!e.Sammy||!e.Sammy.Application.curry)&&{version:e.Sammy.VERSION||UNKNOWN_VERSION}}},Rico:{id:"rico",icon:"rico",url:"http://openrico.sourceforge.net/examples/index.html",test:function(e){return!(!e.Rico||!window.Rico.checkIfComplete)&&{version:e.Rico.Version||UNKNOWN_VERSION}}},MochiKit:{id:"mochikit",icon:"mochikit",url:"https://mochi.github.io/mochikit/",test:function(e){return!(!e.MochiKit||!e.MochiKit.Base.module)&&{version:MochiKit.VERSION||UNKNOWN_VERSION}}},"gRapha&euml;l":{id:"graphael",icon:"graphael",url:"https://github.com/DmitryBaranovskiy/g.raphael",test:function(e){return!(!e.Raphael||!e.Raphael.fn.g)&&{version:UNKNOWN_VERSION}}},Glow:{id:"glow",icon:"glow",url:"http://www.bbc.co.uk/glow/",test:function(e){return e.gloader&&e.gloader.getRequests?{version:UNKNOWN_VERSION}:e.glow&&e.glow.dom?{version:e.glow.VERSION||UNKNOWN_VERSION}:!!e.Glow&&{version:e.Glow.version||UNKNOWN_VERSION}}},"Socket.IO":{id:"socketio",icon:"socketio",url:"https://socket.io/",npm:"socket.io",test:function(e){return!(!e.io||!e.io.sockets&&!e.io.Socket)&&{version:e.io.version||UNKNOWN_VERSION}}},Mustache:{id:"mustache",icon:"mustache",url:"http://mustache.github.io/",npm:"mustache",test:function(e){return!(!e.Mustache||!e.Mustache.to_html)&&{version:e.Mustache.version||UNKNOWN_VERSION}}},"Fabric.js":{id:"fabricjs",icon:"icon38",url:"http://fabricjs.com/",npm:"fabric",test:function(e){return!(!e.fabric||!e.fabric.util)&&{version:e.fabric.version||UNKNOWN_VERSION}}},FuseJS:{id:"fusejs",icon:"fusejs",url:"http://fusejs.io/",npm:"fuse.js",test:function(e){return!!e.Fuse&&{version:UNKNOWN_VERSION}}},"Tween.js":{id:"tweenjs",icon:"icon38",url:"https://github.com/tweenjs/tween.js",npm:"tween.js",test:function(e){return!(!e.TWEEN||!e.TWEEN.Easing)&&{version:UNKNOWN_VERSION}}},SproutCore:{id:"sproutcore",icon:"sproutcore",url:"http://sproutcore.com/",test:function(e){return!(!e.SC||!e.SC.Application)&&{version:UNKNOWN_VERSION}}},"Zepto.js":{id:"zepto",icon:"zepto",url:"http://zeptojs.com",npm:"zepto",test:function(e){return!(!e.Zepto||!e.Zepto.fn)&&{version:UNKNOWN_VERSION}}},"three.js":{id:"threejs",icon:"icon38",url:"https://threejs.org/",npm:"three",test:function(e){return e.THREE&&e.THREE.REVISION?{version:"r"+e.THREE.REVISION}:!!e.THREE&&{version:UNKNOWN_VERSION}}},PhiloGL:{id:"philogl",icon:"philogl",url:"http://www.senchalabs.org/philogl/",npm:"philogl",test:function(e){return!(!e.PhiloGL||!e.PhiloGL.Camera)&&{version:e.PhiloGL.version||UNKNOWN_VERSION}}},CamanJS:{id:"camanjs",icon:"camanjs",url:"http://camanjs.com/",npm:"caman",test:function(e){return e.Caman&&e.Caman.version?{version:e.Caman.version.release}:!!e.Caman&&{version:UNKNOWN_VERSION}}},yepnope:{id:"yepnope",icon:"yepnope",url:"http://yepnopejs.com/",test:function(e){return!(!e.yepnope||!e.yepnope.injectJs)&&{version:UNKNOWN_VERSION}}},LABjs:{id:"labjs",icon:"icon38",url:"https://github.com/getify/LABjs",test:function(e){return!(!e.$LAB||!e.$LAB.setOptions)&&{version:UNKNOWN_VERSION}}},"Head JS":{id:"headjs",icon:"headjs",url:"http://headjs.com/",npm:"headjs",test:function(e){return!(!e.head||!e.head.js)&&{version:UNKNOWN_VERSION}}},ControlJS:{id:"controljs",icon:"icon38",url:"http://stevesouders.com/controljs/",test:function(e){return!(!e.CJS||!e.CJS.start)&&{version:UNKNOWN_VERSION}}},RequireJS:{id:"requirejs",icon:"requirejs",url:"http://requirejs.org/",npm:"requirejs",test:function(e){var t=e.require||e.requirejs;return!(!t||!(t.load||t.s&&t.s.contexts&&t.s.contexts._&&(t.s.contexts._.loaded||t.s.contexts._.load)))&&{version:t.version||UNKNOWN_VERSION}}},RightJS:{id:"rightjs",icon:"rightjs",url:"http://rightjs.org/",test:function(e){return!(!e.RightJS||!e.RightJS.isNode)&&{version:e.RightJS.version||UNKNOWN_VERSION}}},"jQuery Tools":{id:"jquerytools",icon:"jquerytools",url:"http://jquerytools.github.io/",test:function(e){var t=e.jQuery||e.$;return!(!t||!t.tools)&&{version:t.tools.version||UNKNOWN_VERSION}}},Pusher:{id:"pusher",icon:"pusher",url:"https://pusher.com/docs/",npm:"pusher-js",test:function(e){return!(!e.Pusher||!e.Pusher.Channel)&&{version:e.Pusher.VERSION||UNKNOWN_VERSION}}},"Paper.js":{id:"paperjs",icon:"paperjs",url:"http://paperjs.org/",npm:"paper",test:function(e){return!(!e.paper||!e.paper.Point)&&{version:e.paper.version||UNKNOWN_VERSION}}},Swiffy:{id:"swiffy",icon:"icon38",url:"https://developers.google.com/swiffy/",test:function(e){return!(!e.swiffy||!e.swiffy.Stage)&&{version:UNKNOWN_VERSION}}},Move:{id:"move",icon:"move",url:"https://github.com/rsms/move",npm:"move",test:function(e){return!(!e.move||!e.move.compile)&&{version:e.move.version()||UNKNOWN_VERSION}}},AmplifyJS:{id:"amplifyjs",icon:"amplifyjs",url:"http://amplifyjs.com/",npm:"amplifyjs",test:function(e){return!(!e.amplify||!e.amplify.publish)&&{version:UNKNOWN_VERSION}}},"Popcorn.js":{id:"popcornjs",icon:"popcornjs",url:"https://github.com/mozilla/popcorn-js/",test:function(e){return!(!e.Popcorn||!e.Popcorn.Events)&&{version:e.Popcorn.version||UNKNOWN_VERSION}}},D3:{id:"d3",icon:"d3",url:"https://d3js.org/",npm:"d3",test:function(e){return!(!e.d3||!e.d3.select)&&{version:e.d3.version||UNKNOWN_VERSION}}},Handlebars:{id:"handlebars",icon:"handlebars",url:"http://handlebarsjs.com/",npm:"handlebars",test:function(e){return!(!e.Handlebars||!e.Handlebars.compile)&&{version:e.Handlebars.VERSION||UNKNOWN_VERSION}}},Handsontable:{id:"handsontable",icon:"handsontable",url:"https://handsontable.com/",npm:"handsontable",test:function(e){return!(!e.Handsontable||!e.Handsontable.Core)&&{version:e.Handsontable.version||UNKNOWN_VERSION}}},Knockout:{id:"knockout",icon:"knockout",url:"http://knockoutjs.com/",npm:"knockout",test:function(e){return!(!e.ko||!e.ko.applyBindings)&&{version:e.ko.version||UNKNOWN_VERSION}}},Spine:{id:"spine",icon:"icon38",url:"http://spine.github.io/",test:function(e){return!(!e.Spine||!e.Spine.Controller)&&{version:e.Spine.version||UNKNOWN_VERSION}}},"jQuery Mobile":{id:"jquery-mobile",icon:"jquery_mobile",url:"http://jquerymobile.com/",npm:"jquery-mobile",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;return!!(t&&t.fn&&t.fn.jquery&&t.mobile)&&{version:t.mobile.version||UNKNOWN_VERSION}}},"WebFont Loader":{id:"webfontloader",icon:"icon38",url:"https://github.com/typekit/webfontloader",npm:"webfontloader",test:function(e){return!(!e.WebFont||!e.WebFont.load)&&{version:UNKNOWN_VERSION}}},Angular:{id:"angular",icon:"angular",url:"https://angular.io/",npm:"@angular/core",test:function(e){var t=e.document.querySelector("[ng-version]");return t?{version:t.getAttribute("ng-version")||UNKNOWN_VERSION}:!!(e.ng&&e.ng.probe instanceof Function)&&{version:UNKNOWN_VERSION}}},AngularJS:{id:"angularjs",icon:"angularjs",url:"https://angularjs.org/",npm:"angular",test:function(e){var t=e.angular;return!!(t&&t.version&&t.version.full)&&{version:t.version.full}}},Ionic:{id:"ionic",icon:"ionic",url:"https://ionicframework.com/",npm:"@ionic/cli",test:function(e){var t=e.document.querySelector("ion-app");return!(!t||"ION-APP"!==t.nodeName)&&{version:UNKNOWN_VERSION}}},"Ember.js":{id:"emberjs",icon:"emberjs",url:"https://emberjs.com/",npm:"ember-source",test:function(e){var t=e.Ember||e.Em;return!(!t||!t.GUID_KEY)&&{version:t.VERSION||UNKNOWN_VERSION}}},"Hammer.js":{id:"hammerjs",icon:"hammerjs",url:"http://eightmedia.github.io/hammer.js/",npm:"hammerjs",test:function(e){return!(!e.Hammer||!e.Hammer.Pinch)&&{version:e.Hammer.VERSION||"&lt; 1.0.10"}}},"Visibility.js":{id:"visibilityjs",icon:"icon38",url:"https://github.com/ai/visibilityjs",npm:"visibilityjs",test:function(e){return!(!e.Visibility||!e.Visibility.every)&&{version:UNKNOWN_VERSION}}},"Velocity.js":{id:"velocityjs",icon:"icon38",url:"http://velocityjs.org/",npm:"velocity-animate",test:function(e){var t=e.jQuery||e.$,o=t?t.Velocity:e.Velocity;return o&&o.RegisterEffect&&o.version?{version:o.version.major+"."+o.version.minor+"."+o.version.patch}:!(!o||!o.RegisterEffect)&&{version:UNKNOWN_VERSION}}},"IfVisible.js":{id:"ifvisiblejs",icon:"icon38",url:"http://serkanyersen.github.io/ifvisible.js/",npm:"ifvisible.js",test:function(e){var t=e.ifvisible;return!(!t||"ifvisible.object.event.identifier"!==t.__ceGUID)&&{version:UNKNOWN_VERSION}}},"Pixi.js":{id:"pixi",icon:"pixi",url:"http://www.pixijs.com/",npm:"pixi.js",test:function(e){var t=e.PIXI;return!!(t&&t.WebGLRenderer&&t.VERSION)&&{version:t.VERSION.replace("v","")||UNKNOWN_VERSION}}},"DC.js":{id:"dcjs",icon:"dcjs",url:"http://dc-js.github.io/dc.js/",npm:"dc",test:function(e){var t=e.dc;return!(!t||!t.registerChart)&&{version:t.version||UNKNOWN_VERSION}}},"GreenSock JS":{id:"greensock",icon:"greensock",url:"https://greensock.com/gsap",npm:"gsap",test:function(e){return!(!e.TweenMax||!e.TweenMax.pauseAll)&&{version:e.TweenMax.version||UNKNOWN_VERSION}}},FastClick:{id:"fastclick",icon:"fastclick",url:"https://github.com/ftlabs/fastclick",npm:"fastclick",test:function(e){return!(!e.FastClick||!e.FastClick.notNeeded)&&{version:UNKNOWN_VERSION}}},Isotope:{id:"isotope",icon:"isotope",url:"https://isotope.metafizzy.co/",npm:"isotope-layout",test:function(e){return!!(e.Isotope||null!=e.$&&e.$.Isotope)&&{version:UNKNOWN_VERSION}}},Marionette:{id:"marionette",icon:"marionette",url:"https://marionettejs.com/",npm:"backbone.marionette",test:function(e){return!(!e.Marionette||!e.Marionette.Application)&&{version:e.Marionette.VERSION||UNKNOWN_VERSION}}},Can:{id:"canjs",icon:"canjs",url:"https://canjs.com/",npm:"can",test:function(e){return!(!e.can||!e.can.Construct)&&{version:e.can.VERSION||UNKNOWN_VERSION}}},Vue:{id:"vue",icon:"vue",url:"https://vuejs.org/",npm:"vue",test:function(e){return!(null===document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return null!=e.__vue__?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()&&!e.Vue)&&{version:e.Vue&&e.Vue.version||UNKNOWN_VERSION}}},"Vue (Fast path)":{id:"vue-fast",icon:"vue",url:"https://vuejs.org/",npm:"vue",test:function(e){return!!e.Vue&&{version:e.Vue&&e.Vue.version||UNKNOWN_VERSION}}},"Nuxt.js":{id:"nuxt",icon:"nuxt",url:"https://nuxtjs.org/",npm:"nuxt",test:function(e){return!!(e.__NUXT__||e.$nuxt||[...e.document.querySelectorAll("*")].some((e=>e.__vue__?.nuxt)))&&{version:UNKNOWN_VERSION}}},"Nuxt.js (Fast path)":{id:"nuxt-fast",icon:"nuxt",url:"https://nuxtjs.org/",npm:"nuxt",test:function(e){return!(!e.__NUXT__&&!e.$nuxt)&&{version:UNKNOWN_VERSION}}},Two:{id:"two",icon:"two",url:"https://two.js.org/",npm:"two.js",test:function(e){return!(!e.Two||!e.Two.Utils)&&{version:e.Two.Version||UNKNOWN_VERSION}}},Brewser:{id:"brewser",icon:"brewser",url:"https://robertpataki.github.io/brewser/",npm:"brewser",test:function(e){return!(!e.BREWSER||!e.BREWSER.ua)&&{version:BREWSER.VERSION||UNKNOWN_VERSION}}},"Material Design Lite":{id:"materialdesignlite",icon:"mdl",url:"https://getmdl.io/",npm:"material-design-lite",test:function(e){return!(!e.componentHandler||!e.componentHandler.upgradeElement)&&{version:UNKNOWN_VERSION}}},"Kendo UI":{id:"kendoui",icon:"kendoui",url:"https://github.com/telerik/kendo-ui-core",npm:"kendo-ui-core",test:function(e){return!!(e.kendo&&e.kendo.View&&e.kendo.View.extend)&&{version:e.kendo.version||UNKNOWN_VERSION}}},"Matter.js":{id:"matterjs",icon:"matter-js",url:"http://brm.io/matter-js/",npm:"matter-js",test:function(e){return!(!e.Matter||!e.Matter.Engine)&&{version:UNKNOWN_VERSION}}},Riot:{id:"riot",icon:"riot",url:"http://riotjs.com/",npm:"riot",test:function(e){return!(!e.riot||!e.riot.mixin)&&{version:e.riot.version||UNKNOWN_VERSION}}},"Sea.js":{id:"seajs",icon:"icon38",url:"https://seajs.github.io/seajs/docs/",npm:"seajs",test:function(e){return!(!e.seajs||!e.seajs.use)&&{version:e.seajs.version||UNKNOWN_VERSION}}},"Moment.js":{id:"momentjs",icon:"momentjs",url:"http://momentjs.com/",npm:"moment",test:function(e){return!(!e.moment||!e.moment.isMoment&&!e.moment.lang)&&{version:e.moment.version||UNKNOWN_VERSION}}},"Moment Timezone":{id:"moment-timezone",icon:"momentjs",url:"http://momentjs.com/timezone/",npm:"moment-timezone",test:function(e){return!(!e.moment||!e.moment.tz)&&{version:e.moment.tz.version||UNKNOWN_VERSION}}},ScrollMagic:{id:"scrollmagic",icon:"scrollmagic",url:"http://scrollmagic.io/",npm:"scrollmagic",test:function(e){return!(!e.ScrollMagic||!e.ScrollMagic.Controller)&&{version:ScrollMagic.version||UNKNOWN_VERSION}}},SWFObject:{id:"swfobject",icon:"icon38",url:"https://github.com/swfobject/swfobject",test:function(e){return e.swfobject&&e.swfobject.embedSWF?{version:e.swfobject.version||UNKNOWN_VERSION}:!(!e.deconcept||!e.deconcept.SWFObject)&&{version:UNKNOWN_VERSION}}},FlexSlider:{id:"flexslider",icon:"icon38",url:"https://woocommerce.com/flexslider/",npm:"flexslider",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;return!!(t&&t.fn&&t.fn.jquery&&t.flexslider)&&{version:UNKNOWN_VERSION}}},SPF:{id:"spf",icon:"icon38",url:"https://youtube.github.io/spfjs/",npm:"spf",test:function(e){return!(!e.spf||!e.spf.init)&&{version:UNKNOWN_VERSION}}},"Numeral.js":{id:"numeraljs",icon:"icon38",url:"http://numeraljs.com/",npm:"numeraljs",test:function(e){return!(!e.numeral||!e.isNumeral)&&{version:e.numeral.version||UNKNOWN_VERSION}}},"boomerang.js":{id:"boomerangjs",icon:"icon38",url:"https://soasta.github.io/boomerang/",npm:"boomerangjs",test:function(e){return!!(e.BOOMR&&e.BOOMR.utils&&e.BOOMR.init)&&{version:e.BOOMR.version||UNKNOWN_VERSION}}},Framer:{id:"framer",icon:"framer",url:"https://framer.com/",npm:"framerjs",test:function(e){return!(!e.Framer||!e.Framer.Layer)&&{version:e.Framer.Version.build||UNKNOWN_VERSION}}},Marko:{id:"marko",icon:"marko",url:"https://markojs.com/",npm:"marko",test:function(e){return!!document.querySelector("[data-marko-key], [data-marko]")&&{version:UNKNOWN_VERSION}}},AMP:{id:"amp",icon:"amp",url:"https://amp.dev/",npm:"https://www.npmjs.com/org/ampproject",test:function(e){var t=e.document.documentElement.getAttribute("amp-version");return!!t&&{version:t}}},Gatsby:{id:"gatsby",icon:"gatsby",url:"https://www.gatsbyjs.org/",npm:"gatsby",test:function(e){return!!document.getElementById("___gatsby")&&{version:UNKNOWN_VERSION}}},Shopify:{id:"shopify",icon:"shopify",url:"https://www.shopify.com/",npm:null,test:function(e){return!(!e.Shopify||!e.Shopify.shop)&&{version:UNKNOWN_VERSION}}},Magento:{id:"magento",icon:"magento",url:"https://magento.com/",npm:null,test:function(e){const t=/\\/static(?:\\/version\\d+)?\\/frontend\\/.+\\/.+\\/requirejs\\/require(?:\\.min)?\\.js/;return!!Array.from(document.querySelectorAll("script[src]")||[]).some((e=>t.test(e.src)))&&{version:2}}},WordPress:{id:"wordpress",icon:"wordpress",url:"https://wordpress.org/",npm:null,test:function(e){const t=!!document.querySelector(\'link[rel="https://api.w.org/"]\'),o=!!document.querySelectorAll(\'link[href*="wp-includes"], script[src*="wp-includes"]\').length;if(!t&&!o)return!1;const n=document.querySelector(\'meta[name=generator][content^="WordPress"]\');return{version:n?n.getAttribute("content").replace(/^\\w+\\s/,""):UNKNOWN_VERSION}}},Wix:{id:"wix",icon:"wix",url:"https://www.wix.com/",npm:null,test:function(e){return(e.wixPerformanceMeasurements&&e.wixPerformanceMeasurements.info||!(!e.wixBiSession||!e.wixBiSession.info))&&{version:UNKNOWN_VERSION}}},Workbox:{id:"workbox",icon:"workbox",url:"https://developers.google.com/web/tools/workbox/",npm:"workbox-sw",test:async function(e){var t=e.navigator;if(!("serviceWorker"in t))return!1;const{timeoutPromise:o,clearTimeout:n}=_createTimeoutHelper(),r=t.serviceWorker.getRegistration().then((function(e){var o=t.serviceWorker.controller?t.serviceWorker.controller.scriptURL:e.active.scriptURL;return fetch(o,{credentials:"include",headers:{"service-worker":"script"}}).then((function(e){return e.text()})).then((function(e){if(/new Workbox|new workbox|workbox\\.precaching\\.|workbox\\.strategies/gm.test(e)){var t=/workbox.*?\\b((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?)\\b/gim.exec(e),o=UNKNOWN_VERSION;return Array.isArray(t)&&t.length>1&&t[1]&&(o=t[1]),{version:o}}return!1}))})).catch((function(e){return!1}));return Promise.race([r,o]).catch((function(e){return!1})).finally((e=>(n(),e)))}},Boq:{id:"boq",icon:"icon38",url:"https://github.com/johnmichel/Library-Detector-for-Chrome/pull/143",npm:null,test:function(e){return!!e.WIZ_global_data&&{version:UNKNOWN_VERSION}}},Wiz:{id:"wiz",icon:"icon38",url:"https://github.com/johnmichel/Library-Detector-for-Chrome/pull/147",npm:null,test:function(e){return!!document.__wizdispatcher&&{version:UNKNOWN_VERSION}}},"core-js":{id:"corejs",icon:"icon38",url:"https://github.com/zloirock/core-js",npm:"core-js",test:function(e){const t=e["__core-js_shared__"],o=e.core;if(t){const e=t.versions;return{version:Array.isArray(e)?e.map((e=>`core-js-${e.mode}@${e.version}`)).join("; "):UNKNOWN_VERSION}}return!!o&&{version:o.version||UNKNOWN_VERSION}}},Drupal:{id:"drupal",icon:"drupal",url:"https://www.drupal.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="Drupal"]\'),o=t?t.getAttribute("content").replace(/\\D+/gi,""):UNKNOWN_VERSION,n=/\\/sites\\/(?:default|all)\\/(?:themes|modules|files)/,r=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(r.some((e=>n.test(e.src)))||r.some((e=>n.test(e.href)))||t||e.Drupal&&e.Drupal.behaviors)&&{version:o}}},TYPO3:{id:"typo3",icon:"typo3",url:"https://typo3.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="TYPO3"]\'),o=/\\/(typo3conf|typo3temp|fileadmin)/,n=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(t||n.some((e=>o.test(e.src)))||n.some((e=>o.test(e.href))))&&{version:UNKNOWN_VERSION}}},"Create React App":{id:"create-react-app",icon:"cra",url:"https://create-react-app.dev/",npm:"react-scripts",test:function(e){let t,o,n=e.document.body.firstElementChild;do{"noscript"===n.localName?t=n:"root"===n.id&&(o=n)}while(n=n.nextElementSibling);return!!(o&&t&&/You need to enable JavaScript to run this app/.test(t.textContent))&&{version:UNKNOWN_VERSION}}},"Guess.js":{id:"guessjs",icon:"guessjs",url:"https://guess-js.github.io/",test:function(e){return!(!e.__GUESS__||!e.__GUESS__.guess)&&{version:UNKNOWN_VERSION}}},"October CMS":{id:"octobercms",icon:"october",url:"https://octobercms.com/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="OctoberCMS"]\'),o=document.querySelector(\'meta[name="generator"][content^="October CMS"]\'),n=/\\/modules\\/system\\/assets\\/(css|js)\\/framework(\\.extras|\\.combined)?(-min)?/,r=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(t||o||r.some((e=>n.test(e.src||e.href))))&&{version:UNKNOWN_VERSION}}},Joomla:{id:"joomla",icon:"joomla",url:"https://www.joomla.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name=generator][content^="Joomla"]\'),o=!!document.querySelectorAll(\'script[src*="/media/jui/js/bootstrap.min.js"]\').length;return t?{version:t.getAttribute("content").replace(/^\\w+\\s/,"")}:!(!e.Joomla&&!o)&&{version:UNKNOWN_VERSION}}},Sugar:{id:"sugar",icon:"sugar",url:"https://sugarjs.com",npm:"sugar",test:function(e){return e.Sugar?{version:e.Sugar.VERSION||UNKNOWN_VERSION}:!!e.Array.SugarMethods&&{version:UNKNOWN_VERSION}}},Bento:{id:"bentojs",icon:"bentojs",url:"https://bentojs.dev",npm:"https://www.npmjs.com/org/bentoproject",test:function(e){return!(!e.BENTO||!e.BENTO.push)&&{version:UNKNOWN_VERSION}}},"WP Rocket":{id:"wp-rocket",icon:"wp-rocket",url:"https://wp-rocket.me/",npm:null,test:async function(e){const t="undefined"!=typeof RocketLazyLoadScripts||"undefined"!=typeof RocketPreloadLinksConfig||"undefined"!=typeof rocket_lazy,o=!!document.querySelector("style#wpr-usedcss"),n=document.lastChild.nodeType===Node.COMMENT_NODE&&document.lastChild.textContent.includes("WP Rocket");return!!(o||t||n)&&{version:UNKNOWN_VERSION}}}};']
-})).map((e=>({detector:"js",id:e.id,name:e.name,version:"number"==typeof e.version?String(e.version):e.version||void 0,npm:e.npm||void 0})));return Log.timeEnd(t),n}async getArtifact(e){try{return await Stacks.collectStacks(e.driver.executionContext)}catch{return[]}}}var Ic=Object.freeze({__proto__:null,default:Stacks});var Mc=Object.freeze({__proto__:null,default:class TraceCompat extends FRGatherer{meta={supportedModes:["timespan","navigation"],dependencies:{Trace:Trace.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.Trace}}}});const Lc=makeComputedArtifact(class ProcessedNavigation{static isProcessedTrace(e){return"timeOriginEvt"in e}static async compute_(e,t){if(this.isProcessedTrace(e))return LHTraceProcessor.processNavigation(e);const n=await mo.request(e,t);return LHTraceProcessor.processNavigation(n)}},null),Nc=new Set(["keydown","keypress","keyup"]),Pc=new Set(["mousedown","mouseup","pointerdown","pointerup","click"]),Oc={keyboard:Nc,tapOrClick:Pc,drag:Pc}
-;class Responsiveness{static getHighPercentileResponsiveness(e){const t=e.frameTreeEvents.filter((e=>"Responsiveness.Renderer.UserInteraction"===e.name)).sort(((e,t)=>t.args.data.maxDuration-e.args.data.maxDuration));if(0===t.length)return null;return t[Math.min(9,Math.floor(t.length/50))]}static findInteractionEvent(e,{traceEvents:t}){const n=t.filter((e=>"EventTiming"===e.name&&"e"!==e.ph));if(n.length&&n.every((e=>!e.args.data?.frame)))return{name:"FallbackTiming",duration:e.args.data.maxDuration};const{maxDuration:a,interactionType:r}=e.args.data;let o,i=Number.POSITIVE_INFINITY;for(const t of n){if(t.args.data.frame!==e.args.frame)continue;const{type:n,duration:s}=t.args.data,c=Oc[r];if(!c)throw new Error(`unexpected responsiveness interactionType '${r}'`);if(!c.has(n))continue;const l=Math.abs(s-a);l<i&&(o=t,i=l)}if(!o)throw new Error(`no interaction event found for responsiveness type '${r}'`)
-;if(i>5)throw new Error(`no interaction event found within 5ms of responsiveness maxDuration (max: ${a}, closest ${o.args.data.duration})`);return o}static async compute_(e,t){const{settings:n,trace:a}=e;if("simulate"===n.throttlingMethod)throw new Error("Responsiveness currently unsupported by simulated throttling");const r=await mo.request(a,t),o=Responsiveness.getHighPercentileResponsiveness(r);if(!o)return null;const i=Responsiveness.findInteractionEvent(o,a);return JSON.parse(JSON.stringify(i))}}const Bc=makeComputedArtifact(Responsiveness,["trace","settings"]);class CumulativeLayoutShift$1{static getLayoutShiftEvents(e){const t=[];let n=!1,a=e.timestamps.timeOrigin;const r=e.frameEvents.find((e=>"viewport"===e.name));r&&(a=r.ts);for(const r of e.frameTreeEvents)if("LayoutShift"===r.name&&r.args.data&&void 0!==r.args.data.is_main_frame){if(void 0===r.args.data.weighted_score_delta)throw new Error("CLS missing weighted_score_delta");if(r.args.data.had_recent_input){
-if((r.ts-a)/1e3>500||n)continue}else n=!0;t.push({ts:r.ts,isMainFrame:r.args.data.is_main_frame,weightedScore:r.args.data.weighted_score_delta,impactedNodes:r.args.data.impacted_nodes})}return t}static calculate(e){let t=0,n=0,a=Number.NEGATIVE_INFINITY,r=Number.NEGATIVE_INFINITY;for(const o of e)(o.ts-a>5e6||o.ts-r>1e6)&&(a=o.ts,n=0),r=o.ts,n+=o.weightedScore,t=Math.max(t,n);return t}static async compute_(e,t){const n=await mo.request(e,t),a=CumulativeLayoutShift$1.getLayoutShiftEvents(n),r=a.filter((e=>e.isMainFrame));return{cumulativeLayoutShift:CumulativeLayoutShift$1.calculate(a),cumulativeLayoutShiftMainFrame:CumulativeLayoutShift$1.calculate(r)}}}const Uc=makeComputedArtifact(CumulativeLayoutShift$1,null);function getNodeDetailsData(){const e=this.nodeType===document.ELEMENT_NODE?this:this.parentElement;let t;return e&&(t={node:getNodeDetails(e)}),t}class TraceElements extends FRGatherer{meta={supportedModes:["timespan","navigation"],dependencies:{Trace:Trace.symbol}}
-;animationIdToName=new Map;constructor(){super(),this._onAnimationStarted=this._onAnimationStarted.bind(this)}_onAnimationStarted({animation:{id:e,name:t}}){t&&this.animationIdToName.set(e,t)}static traceRectToLHRect(e){return function addRectTopAndBottom({x:e,y:t,width:n,height:a}){return{left:e,top:t,right:e+n,bottom:t+a,width:n,height:a}}({x:e[0],y:e[1],width:e[2],height:e[3]})}static getTopLayoutShiftElements(e){const t=new Map;Uc.getLayoutShiftEvents(e).forEach((e=>{if(!e||!e.impactedNodes)return;let n=0;const a=new Map;e.impactedNodes.forEach((e=>{if(!e.node_id||!e.old_rect||!e.new_rect)return;const t=TraceElements.traceRectToLHRect(e.old_rect),r=TraceElements.traceRectToLHRect(e.new_rect),o=getRectArea(t)+getRectArea(r)-getRectOverlapArea(t,r);a.set(e.node_id,o),n+=o}));for(const[r,o]of a.entries()){let a=t.get(r)||0;a+=o/n*e.weightedScore,t.set(r,a)}}));return[...t.entries()].sort(((e,t)=>t[1]-e[1])).slice(0,5).map((([e,t])=>({nodeId:e,score:t})))}
-static async getResponsivenessElement(e,t){const{settings:n}=t;try{const a=await Bc.request({trace:e,settings:n},t);if(!a||"FallbackTiming"===a.name)return;return{nodeId:a.args.data.nodeId}}catch{return}}async getAnimatedElements(e){const t=new Map;for(const n of e){if("Animation"!==n.name)continue;if(!n.id2||!n.id2.local)continue;const e=n.id2.local,a=t.get(e)||{begin:void 0,status:void 0};"b"===n.ph?a.begin=n:"n"===n.ph&&n.args.data&&void 0!==n.args.data.compositeFailed&&(a.status=n),t.set(e,a)}const n=new Map;for(const{begin:e,status:a}of t.values()){const t=e?.args?.data?.nodeId,r=e?.args?.data?.id,o=a?.args?.data?.compositeFailed,i=a?.args?.data?.unsupportedProperties;if(!t||!r)continue;const s=n.get(t)||new Set;s.add({animationId:r,failureReasonsMask:o,unsupportedProperties:i}),n.set(t,s)}const a=[];for(const[e,t]of n){const n=[];for(const{animationId:e,failureReasonsMask:a,unsupportedProperties:r}of t){const t=this.animationIdToName.get(e);n.push({name:t,failureReasonsMask:a,
-unsupportedProperties:r})}a.push({nodeId:e,animations:n})}return a}static async getLcpElement(e,t){let n;try{n=await Lc.request(e,t)}catch(e){if("timespan"===t.gatherMode&&e.code===LighthouseError.errors.NO_FCP.code)return;throw e}const a=n.largestContentfulPaintEvt?.args?.data;if(void 0!==a?.nodeId&&a.type)return{nodeId:a.nodeId,type:a.type}}async startInstrumentation(e){await e.driver.defaultSession.sendCommand("Animation.enable"),e.driver.defaultSession.on("Animation.animationStarted",this._onAnimationStarted)}async stopInstrumentation(e){e.driver.defaultSession.off("Animation.animationStarted",this._onAnimationStarted),await e.driver.defaultSession.sendCommand("Animation.disable")}async _getArtifact(e,t){const n=e.driver.defaultSession;if(!t)throw new Error("Trace is missing!")
-;const a=await mo.request(t,e),{mainThreadEvents:r}=a,o=await TraceElements.getLcpElement(t,e),i=TraceElements.getTopLayoutShiftElements(a),s=await this.getAnimatedElements(r),c=await TraceElements.getResponsivenessElement(t,e),l=new Map([["largest-contentful-paint",o?[o]:[]],["layout-shift",i],["animation",s],["responsiveness",c?[c]:[]]]),u=[];for(const[e,t]of l)for(let a=0;a<t.length;a++){const r=t[a].nodeId;let o;try{const e=await resolveNodeIdToObjectId(n,r);if(!e)continue;o=await n.sendCommand("Runtime.callFunctionOn",{objectId:e,functionDeclaration:`function () {\n              ${getNodeDetailsData.toString()};\n              ${or.getNodeDetails};\n              return getNodeDetailsData.call(this);\n            }`,returnByValue:!0,awaitPromise:!0})}catch(e){Qo.captureException(e,{tags:{gatherer:this.name},level:"error"});continue}o?.result?.value&&u.push({traceEventType:e,...o.result.value,score:t[a].score,animations:t[a].animations,nodeId:r,type:t[a].type})}return u}
-async getArtifact(e){return this._getArtifact(e,e.dependencies.Trace)}async afterPass(e,t){const n={...e,dependencies:{}};return await this.stopInstrumentation(n),this._getArtifact(n,t.trace)}}var jc=Object.freeze({__proto__:null,default:TraceElements});function getViewportDimensions(){return{innerWidth:window.innerWidth,innerHeight:window.innerHeight,outerWidth:window.outerWidth,outerHeight:window.outerHeight,devicePixelRatio:window.devicePixelRatio}}var zc=Object.freeze({__proto__:null,default:class ViewportDimensions extends FRGatherer{meta={supportedModes:["snapshot","timespan","navigation"]};async getArtifact(e){const t=e.driver,n=await t.executionContext.evaluate(getViewportDimensions,{args:[],useIsolation:!0});if(!Object.values(n).every(Number.isFinite)){const e=JSON.stringify(n);throw new Error(`ViewportDimensions results were not numeric: ${e}`)}return n}}})
-;const qc=["fullscreen","standalone","minimal-ui","browser"],Wc="browser",$c=["any","natural","landscape","portrait","portrait-primary","portrait-secondary","landscape-primary","landscape-secondary"];function parseString(e,t){let n,a;return"string"==typeof e?n=t?e.trim():e:(void 0!==e&&(a="ERROR: expected a string."),n=void 0),{raw:e,value:n,warning:a}}function parseColor(e){const t=parseString(e);return t.value,t}function parseName(e){return parseString(e.name,!0)}function parseShortName(e){return parseString(e.short_name,!0)}function parseStartUrl(e,t,n){const a=e.start_url;if(""===a)return{raw:a,value:n,warning:"ERROR: start_url string empty"};if(void 0===a)return{raw:a,value:n};if("string"!=typeof a)return{raw:a,value:n,warning:"ERROR: expected a string."};let r;try{r=new URL(a,t).href}catch(e){return{raw:a,value:n,warning:`ERROR: invalid start_url relative to ${t}`}}return function checkSameOrigin(e,t){const n=new URL(e),a=new URL(t);return n.origin===a.origin}(r,n)?{raw:a,value:r
-}:{raw:a,value:n,warning:"ERROR: start_url must be same-origin as document"}}function parseDisplay(e){const t=parseString(e.display,!0),n=t.value;if(!n)return{raw:e,value:Wc,warning:t.warning};const a=n.toLowerCase();return qc.includes(a)?{raw:e,value:a,warning:void 0}:{raw:e,value:Wc,warning:"ERROR: 'display' has invalid value "+a+". will fall back to browser."}}function parseOrientation(e){const t=parseString(e.orientation,!0);return t.value&&!$c.includes(t.value.toLowerCase())&&(t.value=void 0,t.warning="ERROR: 'orientation' has an invalid value, will be ignored."),t}function parseIcons(e,t){const n=e.icons;if(void 0===n)return{raw:n,value:[],warning:void 0};if(!Array.isArray(n))return{raw:n,value:[],warning:"ERROR: 'icons' expected to be an array but is not."};const a=n.filter((e=>void 0!==e.src)).map((e=>function parseIcon(e,t){const n=parseString(e.src,!0);if(""===n.value&&(n.value=void 0),n.value)try{n.value=new URL(n.value,t).href}catch(t){
-n.warning=`ERROR: invalid icon url will be ignored: '${e.src}'`,n.value=void 0}const a=parseString(e.type,!0),r=parseString(e.purpose),o={raw:e.purpose,value:["any"],warning:void 0};void 0!==r.value&&(o.value=r.value.split(/\s+/).map((e=>e.toLowerCase())));const i={raw:e.density,value:1,warning:void 0};let s;void 0!==i.raw&&(i.value=parseFloat(i.raw),(isNaN(i.value)||!isFinite(i.value)||i.value<=0)&&(i.value=1,i.warning="ERROR: icon density cannot be NaN, +∞, or less than or equal to +0."));const c=parseString(e.sizes);if(void 0!==c.value){const t=new Set;c.value.trim().split(/\s+/).forEach((e=>t.add(e.toLowerCase()))),s={raw:e.sizes,value:t.size>0?Array.from(t):void 0,warning:void 0}}else s={...c,value:void 0};return{raw:e,value:{src:n,type:a,density:i,sizes:s,purpose:o},warning:void 0}}(e,t))),r=a.filter((e=>{const t=[e.warning,e.value.type.warning,e.value.src.warning,e.value.sizes.warning,e.value.density.warning].filter(Boolean),n=!!e.value.src.value;return!!t.length&&!n}));return{
-raw:n,value:a.filter((e=>void 0!==e.value.src.value)),warning:r.length?"WARNING: Some icons were ignored due to warnings.":void 0}}function parseApplication(e){const t=parseString(e.platform,!0),n=parseString(e.id,!0),a=parseString(e.url,!0);if(a.value)try{a.value=new URL(a.value).href}catch(t){a.value=void 0,a.warning=`ERROR: invalid application URL ${e.url}`}return{raw:e,value:{platform:t,id:n,url:a},warning:void 0}}function parseRelatedApplications(e){const t=e.related_applications;if(void 0===t)return{raw:t,value:void 0,warning:void 0};if(!Array.isArray(t))return{raw:t,value:void 0,warning:"ERROR: 'related_applications' expected to be an array but is not."};const n=t.filter((e=>!!e.platform)).map(parseApplication).filter((e=>!!e.value.id.value||!!e.value.url.value));return{raw:t,value:n,warning:void 0}}function parsePreferRelatedApplications(e){const t=e.prefer_related_applications;let n,a
-;return"boolean"==typeof t?n=t:(void 0!==t&&(a="ERROR: 'prefer_related_applications' expected to be a boolean."),n=void 0),{raw:t,value:n,warning:a}}function parseThemeColor(e){return parseColor(e.theme_color)}function parseBackgroundColor(e){return parseColor(e.background_color)}class WebAppManifest extends FRGatherer{meta={supportedModes:["snapshot","navigation"]};static async fetchAppManifest(e){let t;e.setNextProtocolTimeout(1e4);try{t=await e.sendCommand("Page.getAppManifest")}catch(e){if("PROTOCOL_TIMEOUT"===e.code)return Log.error("WebAppManifest","Failed fetching manifest",e),null;throw e}let n=t.data;if(!n)return null;return 65279===n.charCodeAt(0)&&(n=Buffer.from(n).slice(3).toString()),{...t,data:n}}static async getWebAppManifest(e,t){const n={msg:"Get webapp manifest",id:"lh:gather:getWebAppManifest"};Log.time(n);const a=await WebAppManifest.fetchAppManifest(e);if(!a)return null;const r=function parseManifest(e,t,n){
-if(void 0===t||void 0===n)throw new Error("Manifest and document URLs required for manifest parsing.");let a;try{a=JSON.parse(e)}catch(n){return{raw:e,value:void 0,warning:"ERROR: file isn't valid JSON: "+n,url:t}}const r={name:parseName(a),short_name:parseShortName(a),start_url:parseStartUrl(a,t,n),display:parseDisplay(a),orientation:parseOrientation(a),icons:parseIcons(a,t),related_applications:parseRelatedApplications(a),prefer_related_applications:parsePreferRelatedApplications(a),theme_color:parseThemeColor(a),background_color:parseBackgroundColor(a)};let o;try{new URL(t).protocol.startsWith("http")||(o="WARNING: manifest URL not available over a valid network protocol")}catch(e){o=`ERROR: invalid manifest URL: '${t}'`}return{raw:e,value:r,warning:o,url:t}}(a.data,a.url,t);return Log.timeEnd(n),r}async getArtifact(e){const t=e.driver,{finalDisplayedUrl:n}=e.baseArtifacts.URL;try{return await WebAppManifest.getWebAppManifest(t.defaultSession,n)}catch{return null}}}
-var Vc=Object.freeze({__proto__:null,default:WebAppManifest});const Hc={failingElementsHeader:"Failing Elements"},Gc=createIcuMessageFn("core/audits/accessibility/axe-audit.js",Hc);class AxeAudit extends Audit{static audit(e){if((e.Accessibility.notApplicable||[]).find((e=>e.id===this.meta.id)))return{score:null,notApplicable:!0};const t=e.Accessibility.incomplete||[],n=t.find((e=>e.id===this.meta.id));if(n?.error)return{score:null,errorMessage:`axe-core Error: ${n.error.message||"Unknown error"}`};const a=this.meta.scoreDisplayMode===Audit.SCORING_MODES.INFORMATIVE,r=e.Accessibility.violations||[],o=(a?r.concat(t):r).find((e=>e.id===this.meta.id)),i=o?.impact,s=o?.tags;if(a&&!o)return{score:null,notApplicable:!0};let c=[];o?.nodes&&(c=o.nodes.map((e=>({node:{...Audit.makeNodeItem(e.node),explanation:e.failureSummary},subItems:e.relatedNodes.length?{type:"subitems",items:e.relatedNodes.map((e=>({relatedNode:Audit.makeNodeItem(e)})))}:void 0}))));const l=[{key:"node",valueType:"node",
-subItemsHeading:{key:"relatedNode",valueType:"node"},label:Gc(Hc.failingElementsHeader)}];let u;return(i||s)&&(u={type:"debugdata",impact:i,tags:s}),{score:Number(void 0===o),details:{...Audit.makeTableDetails(l,c),debugData:u}}}}const Yc={title:"`[accesskey]` values are unique",failureTitle:"`[accesskey]` values are not unique",description:"Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more about access keys](https://dequeuniversity.com/rules/axe/4.7/accesskeys)."},Kc=createIcuMessageFn("core/audits/accessibility/accesskeys.js",Yc);var Jc=Object.freeze({__proto__:null,default:class Accesskeys extends AxeAudit{static get meta(){return{id:"accesskeys",title:Kc(Yc.title),failureTitle:Kc(Yc.failureTitle),description:Kc(Yc.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Yc});const Xc={title:"`[aria-*]` attributes match their roles",failureTitle:"`[aria-*]` attributes do not match their roles",
-description:"Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn how to match ARIA attributes to their roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-attr)."},Zc=createIcuMessageFn("core/audits/accessibility/aria-allowed-attr.js",Xc);var Qc=Object.freeze({__proto__:null,default:class ARIAAllowedAttr extends AxeAudit{static get meta(){return{id:"aria-allowed-attr",title:Zc(Xc.title),failureTitle:Zc(Xc.failureTitle),description:Zc(Xc.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Xc});const el={title:"`button`, `link`, and `menuitem` elements have accessible names",failureTitle:"`button`, `link`, and `menuitem` elements do not have accessible names.",
-description:"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."},tl=createIcuMessageFn("core/audits/accessibility/aria-command-name.js",el);var nl=Object.freeze({__proto__:null,default:class AriaCommandName extends AxeAudit{static get meta(){return{id:"aria-command-name",title:tl(el.title),failureTitle:tl(el.failureTitle),description:tl(el.description),requiredArtifacts:["Accessibility"]}}},UIStrings:el});const al={title:'Elements with `role="dialog"` or `role="alertdialog"` have accessible names.',failureTitle:'Elements with `role="dialog"` or `role="alertdialog"` do not have accessible names.',
-description:"ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements. [Learn how to make ARIA dialog elements more accessible](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."},rl=createIcuMessageFn("core/audits/accessibility/aria-dialog-name.js",al);var ol=Object.freeze({__proto__:null,default:class AriaDialogName extends AxeAudit{static get meta(){return{id:"aria-dialog-name",title:rl(al.title),failureTitle:rl(al.failureTitle),description:rl(al.description),requiredArtifacts:["Accessibility"]}}},UIStrings:al});const il={title:'`[aria-hidden="true"]` is not present on the document `<body>`',failureTitle:'`[aria-hidden="true"]` is present on the document `<body>`',
-description:'Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document `<body>`. [Learn how `aria-hidden` affects the document body](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body).'},sl=createIcuMessageFn("core/audits/accessibility/aria-hidden-body.js",il);var cl=Object.freeze({__proto__:null,default:class AriaHiddenBody extends AxeAudit{static get meta(){return{id:"aria-hidden-body",title:sl(il.title),failureTitle:sl(il.failureTitle),description:sl(il.description),requiredArtifacts:["Accessibility"]}}},UIStrings:il});const ll={title:'`[aria-hidden="true"]` elements do not contain focusable descendents',failureTitle:'`[aria-hidden="true"]` elements contain focusable descendents',
-description:'Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn how `aria-hidden` affects focusable elements](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-focus).'},ul=createIcuMessageFn("core/audits/accessibility/aria-hidden-focus.js",ll);var dl=Object.freeze({__proto__:null,default:class AriaHiddenFocus extends AxeAudit{static get meta(){return{id:"aria-hidden-focus",title:ul(ll.title),failureTitle:ul(ll.failureTitle),description:ul(ll.description),requiredArtifacts:["Accessibility"]}}},UIStrings:ll});const ml={title:"ARIA input fields have accessible names",failureTitle:"ARIA input fields do not have accessible names",
-description:"When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about input field labels](https://dequeuniversity.com/rules/axe/4.7/aria-input-field-name)."},pl=createIcuMessageFn("core/audits/accessibility/aria-input-field-name.js",ml);var gl=Object.freeze({__proto__:null,default:class AriaInputFieldName extends AxeAudit{static get meta(){return{id:"aria-input-field-name",title:pl(ml.title),failureTitle:pl(ml.failureTitle),description:pl(ml.description),requiredArtifacts:["Accessibility"]}}},UIStrings:ml});const hl={title:"ARIA `meter` elements have accessible names",failureTitle:"ARIA `meter` elements do not have accessible names.",
-description:"When a meter element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `meter` elements](https://dequeuniversity.com/rules/axe/4.7/aria-meter-name)."},fl=createIcuMessageFn("core/audits/accessibility/aria-meter-name.js",hl);var yl=Object.freeze({__proto__:null,default:class AriaMeterName extends AxeAudit{static get meta(){return{id:"aria-meter-name",title:fl(hl.title),failureTitle:fl(hl.failureTitle),description:fl(hl.description),requiredArtifacts:["Accessibility"]}}},UIStrings:hl});const bl={title:"ARIA `progressbar` elements have accessible names",failureTitle:"ARIA `progressbar` elements do not have accessible names.",
-description:"When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to label `progressbar` elements](https://dequeuniversity.com/rules/axe/4.7/aria-progressbar-name)."},vl=createIcuMessageFn("core/audits/accessibility/aria-progressbar-name.js",bl);var wl=Object.freeze({__proto__:null,default:class AriaProgressbarName extends AxeAudit{static get meta(){return{id:"aria-progressbar-name",title:vl(bl.title),failureTitle:vl(bl.failureTitle),description:vl(bl.description),requiredArtifacts:["Accessibility"]}}},UIStrings:bl});const Dl={title:"`[role]`s have all required `[aria-*]` attributes",failureTitle:"`[role]`s do not have all required `[aria-*]` attributes",
-description:"Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more about roles and required attributes](https://dequeuniversity.com/rules/axe/4.7/aria-required-attr)."},El=createIcuMessageFn("core/audits/accessibility/aria-required-attr.js",Dl);var Tl=Object.freeze({__proto__:null,default:class ARIARequiredAttr extends AxeAudit{static get meta(){return{id:"aria-required-attr",title:El(Dl.title),failureTitle:El(Dl.failureTitle),description:El(Dl.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Dl});const Cl={title:"Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.",failureTitle:"Elements with an ARIA `[role]` that require children to contain a specific `[role]` are missing some or all of those required children.",
-description:"Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more about roles and required children elements](https://dequeuniversity.com/rules/axe/4.7/aria-required-children)."},Sl=createIcuMessageFn("core/audits/accessibility/aria-required-children.js",Cl);var _l=Object.freeze({__proto__:null,default:class AriaRequiredChildren extends AxeAudit{static get meta(){return{id:"aria-required-children",title:Sl(Cl.title),failureTitle:Sl(Cl.failureTitle),description:Sl(Cl.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Cl});const Al={title:"`[role]`s are contained by their required parent element",failureTitle:"`[role]`s are not contained by their required parent element",
-description:"Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more about ARIA roles and required parent element](https://dequeuniversity.com/rules/axe/4.7/aria-required-parent)."},kl=createIcuMessageFn("core/audits/accessibility/aria-required-parent.js",Al);var xl=Object.freeze({__proto__:null,default:class AriaRequiredParent extends AxeAudit{static get meta(){return{id:"aria-required-parent",title:kl(Al.title),failureTitle:kl(Al.failureTitle),description:kl(Al.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Al});const Fl={title:"`[role]` values are valid",failureTitle:"`[role]` values are not valid",description:"ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more about valid ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-roles)."},Rl=createIcuMessageFn("core/audits/accessibility/aria-roles.js",Fl);var Il=Object.freeze({
-__proto__:null,default:class AriaRoles extends AxeAudit{static get meta(){return{id:"aria-roles",title:Rl(Fl.title),failureTitle:Rl(Fl.failureTitle),description:Rl(Fl.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Fl});const Ml={title:"Elements with the `role=text` attribute do not have focusable descendents.",failureTitle:"Elements with the `role=text` attribute do have focusable descendents.",description:"Adding `role=text` around a text node split by markup enables VoiceOver to treat it as one phrase, but the element's focusable descendents will not be announced. [Learn more about the `role=text` attribute](https://dequeuniversity.com/rules/axe/4.7/aria-text)."},Ll=createIcuMessageFn("core/audits/accessibility/aria-text.js",Ml);var Nl=Object.freeze({__proto__:null,default:class AriaText extends AxeAudit{static get meta(){return{id:"aria-text",title:Ll(Ml.title),failureTitle:Ll(Ml.failureTitle),description:Ll(Ml.description),requiredArtifacts:["Accessibility"]}}},
-UIStrings:Ml});const Pl={title:"ARIA toggle fields have accessible names",failureTitle:"ARIA toggle fields do not have accessible names",description:"When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about toggle fields](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."},Ol=createIcuMessageFn("core/audits/accessibility/aria-toggle-field-name.js",Pl);var Bl=Object.freeze({__proto__:null,default:class AriaToggleFieldName extends AxeAudit{static get meta(){return{id:"aria-toggle-field-name",title:Ol(Pl.title),failureTitle:Ol(Pl.failureTitle),description:Ol(Pl.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Pl});const Ul={title:"ARIA `tooltip` elements have accessible names",failureTitle:"ARIA `tooltip` elements do not have accessible names.",
-description:"When a tooltip element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `tooltip` elements](https://dequeuniversity.com/rules/axe/4.7/aria-tooltip-name)."},jl=createIcuMessageFn("core/audits/accessibility/aria-tooltip-name.js",Ul);var zl=Object.freeze({__proto__:null,default:class AriaTooltipName extends AxeAudit{static get meta(){return{id:"aria-tooltip-name",title:jl(Ul.title),failureTitle:jl(Ul.failureTitle),description:jl(Ul.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Ul});const ql={title:"ARIA `treeitem` elements have accessible names",failureTitle:"ARIA `treeitem` elements do not have accessible names.",
-description:"When a `treeitem` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about labeling `treeitem` elements](https://dequeuniversity.com/rules/axe/4.7/aria-treeitem-name)."},Wl=createIcuMessageFn("core/audits/accessibility/aria-treeitem-name.js",ql);var $l=Object.freeze({__proto__:null,default:class AriaTreeitemName extends AxeAudit{static get meta(){return{id:"aria-treeitem-name",title:Wl(ql.title),failureTitle:Wl(ql.failureTitle),description:Wl(ql.description),requiredArtifacts:["Accessibility"]}}},UIStrings:ql});const Vl={title:"`[aria-*]` attributes have valid values",failureTitle:"`[aria-*]` attributes do not have valid values",description:"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more about valid values for ARIA attributes](https://dequeuniversity.com/rules/axe/4.7/aria-valid-attr-value)."
-},Hl=createIcuMessageFn("core/audits/accessibility/aria-valid-attr-value.js",Vl);var Gl=Object.freeze({__proto__:null,default:class ARIAValidAttr$1 extends AxeAudit{static get meta(){return{id:"aria-valid-attr-value",title:Hl(Vl.title),failureTitle:Hl(Vl.failureTitle),description:Hl(Vl.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Vl});const Yl={title:"`[aria-*]` attributes are valid and not misspelled",failureTitle:"`[aria-*]` attributes are not valid or misspelled",description:"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more about valid ARIA attributes](https://dequeuniversity.com/rules/axe/4.7/aria-valid-attr)."},Kl=createIcuMessageFn("core/audits/accessibility/aria-valid-attr.js",Yl);var Jl=Object.freeze({__proto__:null,default:class ARIAValidAttr extends AxeAudit{static get meta(){return{id:"aria-valid-attr",title:Kl(Yl.title),failureTitle:Kl(Yl.failureTitle),description:Kl(Yl.description),
-requiredArtifacts:["Accessibility"]}}},UIStrings:Yl});const Xl={title:"Buttons have an accessible name",failureTitle:"Buttons do not have an accessible name",description:'When a button doesn\'t have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. [Learn how to make buttons more accessible](https://dequeuniversity.com/rules/axe/4.7/button-name).'},Zl=createIcuMessageFn("core/audits/accessibility/button-name.js",Xl);var Ql=Object.freeze({__proto__:null,default:class ButtonName extends AxeAudit{static get meta(){return{id:"button-name",title:Zl(Xl.title),failureTitle:Zl(Xl.failureTitle),description:Zl(Xl.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Xl});const eu={title:"The page contains a heading, skip link, or landmark region",failureTitle:"The page does not contain a heading, skip link, or landmark region",
-description:"Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more about bypass blocks](https://dequeuniversity.com/rules/axe/4.7/bypass)."},tu=createIcuMessageFn("core/audits/accessibility/bypass.js",eu);var nu=Object.freeze({__proto__:null,default:class Bypass extends AxeAudit{static get meta(){return{id:"bypass",title:tu(eu.title),failureTitle:tu(eu.failureTitle),description:tu(eu.description),scoreDisplayMode:AxeAudit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},UIStrings:eu});const au={title:"Background and foreground colors have a sufficient contrast ratio",failureTitle:"Background and foreground colors do not have a sufficient contrast ratio.",description:"Low-contrast text is difficult or impossible for many users to read. [Learn how to provide sufficient color contrast](https://dequeuniversity.com/rules/axe/4.7/color-contrast)."},ru=createIcuMessageFn("core/audits/accessibility/color-contrast.js",au)
-;var ou=Object.freeze({__proto__:null,default:class ColorContrast extends AxeAudit{static get meta(){return{id:"color-contrast",title:ru(au.title),failureTitle:ru(au.failureTitle),description:ru(au.description),requiredArtifacts:["Accessibility"]}}},UIStrings:au});const iu={title:"`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",failureTitle:"`<dl>`'s do not contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",description:"When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.7/definition-list)."},su=createIcuMessageFn("core/audits/accessibility/definition-list.js",iu);var cu=Object.freeze({__proto__:null,default:class DefinitionList extends AxeAudit{static get meta(){return{id:"definition-list",title:su(iu.title),
-failureTitle:su(iu.failureTitle),description:su(iu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:iu});const lu={title:"Definition list items are wrapped in `<dl>` elements",failureTitle:"Definition list items are not wrapped in `<dl>` elements",description:"Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.7/dlitem)."},uu=createIcuMessageFn("core/audits/accessibility/dlitem.js",lu);var du=Object.freeze({__proto__:null,default:class DLItem extends AxeAudit{static get meta(){return{id:"dlitem",title:uu(lu.title),failureTitle:uu(lu.failureTitle),description:uu(lu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:lu});const mu={title:"Document has a `<title>` element",failureTitle:"Document doesn't have a `<title>` element",
-description:"The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more about document titles](https://dequeuniversity.com/rules/axe/4.7/document-title)."},pu=createIcuMessageFn("core/audits/accessibility/document-title.js",mu);var gu=Object.freeze({__proto__:null,default:class DocumentTitle extends AxeAudit{static get meta(){return{id:"document-title",title:pu(mu.title),failureTitle:pu(mu.failureTitle),description:pu(mu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:mu});const hu={title:"`[id]` attributes on active, focusable elements are unique",failureTitle:"`[id]` attributes on active, focusable elements are not unique",description:"All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. [Learn how to fix duplicate `id`s](https://dequeuniversity.com/rules/axe/4.7/duplicate-id-active)."
-},fu=createIcuMessageFn("core/audits/accessibility/duplicate-id-active.js",hu);var yu=Object.freeze({__proto__:null,default:class DuplicateIdActive extends AxeAudit{static get meta(){return{id:"duplicate-id-active",title:fu(hu.title),failureTitle:fu(hu.failureTitle),description:fu(hu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:hu});const bu={title:"ARIA IDs are unique",failureTitle:"ARIA IDs are not unique",description:"The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn how to fix duplicate ARIA IDs](https://dequeuniversity.com/rules/axe/4.7/duplicate-id-aria)."},vu=createIcuMessageFn("core/audits/accessibility/duplicate-id-aria.js",bu);var wu=Object.freeze({__proto__:null,default:class DuplicateIdAria extends AxeAudit{static get meta(){return{id:"duplicate-id-aria",title:vu(bu.title),failureTitle:vu(bu.failureTitle),description:vu(bu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:bu
-});const Du={title:"All heading elements contain content.",failureTitle:"Heading elements do not contain content.",description:"A heading with no content or inaccessible text prevent screen reader users from accessing information on the page's structure. [Learn more about headings](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."},Eu=createIcuMessageFn("core/audits/accessibility/empty-heading.js",Du);var Tu=Object.freeze({__proto__:null,default:class EmptyHeading extends AxeAudit{static get meta(){return{id:"empty-heading",title:Eu(Du.title),failureTitle:Eu(Du.failureTitle),description:Eu(Du.description),scoreDisplayMode:AxeAudit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},UIStrings:Du});const Cu={title:"No form fields have multiple labels",failureTitle:"Form fields have multiple labels",
-description:"Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn how to use form labels](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."},Su=createIcuMessageFn("core/audits/accessibility/form-field-multiple-labels.js",Cu);var _u=Object.freeze({__proto__:null,default:class FormFieldMultipleLabels extends AxeAudit{static get meta(){return{id:"form-field-multiple-labels",title:Su(Cu.title),failureTitle:Su(Cu.failureTitle),description:Su(Cu.description),scoreDisplayMode:AxeAudit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},UIStrings:Cu});const Au={title:"`<frame>` or `<iframe>` elements have a title",failureTitle:"`<frame>` or `<iframe>` elements do not have a title",
-description:"Screen reader users rely on frame titles to describe the contents of frames. [Learn more about frame titles](https://dequeuniversity.com/rules/axe/4.7/frame-title)."},ku=createIcuMessageFn("core/audits/accessibility/frame-title.js",Au);var xu=Object.freeze({__proto__:null,default:class FrameTitle extends AxeAudit{static get meta(){return{id:"frame-title",title:ku(Au.title),failureTitle:ku(Au.failureTitle),description:ku(Au.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Au});const Fu={title:"Heading elements appear in a sequentially-descending order",failureTitle:"Heading elements are not in a sequentially-descending order",description:"Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. [Learn more about heading order](https://dequeuniversity.com/rules/axe/4.7/heading-order)."
-},Ru=createIcuMessageFn("core/audits/accessibility/heading-order.js",Fu);var Iu=Object.freeze({__proto__:null,default:class HeadingOrder extends AxeAudit{static get meta(){return{id:"heading-order",title:Ru(Fu.title),failureTitle:Ru(Fu.failureTitle),description:Ru(Fu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Fu});const Mu={title:"`<html>` element has a `[lang]` attribute",failureTitle:"`<html>` element does not have a `[lang]` attribute",description:"If a page doesn't specify a `lang` attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.7/html-has-lang)."},Lu=createIcuMessageFn("core/audits/accessibility/html-has-lang.js",Mu);var Nu=Object.freeze({__proto__:null,
-default:class HTMLHasLang extends AxeAudit{static get meta(){return{id:"html-has-lang",title:Lu(Mu.title),failureTitle:Lu(Mu.failureTitle),description:Lu(Mu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Mu});const Pu={title:"`<html>` element has a valid value for its `[lang]` attribute",failureTitle:"`<html>` element does not have a valid value for its `[lang]` attribute.",description:"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.7/html-lang-valid)."},Ou=createIcuMessageFn("core/audits/accessibility/html-lang-valid.js",Pu);var Bu=Object.freeze({__proto__:null,default:class HTMLLangValid extends AxeAudit{static get meta(){return{id:"html-lang-valid",title:Ou(Pu.title),failureTitle:Ou(Pu.failureTitle),description:Ou(Pu.description),requiredArtifacts:["Accessibility"]}}},
-UIStrings:Pu});const Uu={title:"`<html>` element has an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.",failureTitle:"`<html>` element does not have an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.",description:"If the webpage does not specify a consistent language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.7/html-xml-lang-mismatch)."},ju=createIcuMessageFn("core/audits/accessibility/html-xml-lang-mismatch.js",Uu);var zu=Object.freeze({__proto__:null,default:class HTMLXMLLangMismatch extends AxeAudit{static get meta(){return{id:"html-xml-lang-mismatch",title:ju(Uu.title),failureTitle:ju(Uu.failureTitle),description:ju(Uu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Uu});const qu={title:"Identical links have the same purpose.",failureTitle:"Identical links do not have the same purpose.",
-description:"Links with the same destination should have the same description, to help users understand the link's purpose and decide whether to follow it. [Learn more about identical links](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."},Wu=createIcuMessageFn("core/audits/accessibility/identical-links-same-purpose.js",qu);var $u=Object.freeze({__proto__:null,default:class IdenticalLinksSamePurpose extends AxeAudit{static get meta(){return{id:"identical-links-same-purpose",title:Wu(qu.title),failureTitle:Wu(qu.failureTitle),description:Wu(qu.description),scoreDisplayMode:AxeAudit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},UIStrings:qu});const Vu={title:"Image elements have `[alt]` attributes",failureTitle:"Image elements do not have `[alt]` attributes",
-description:"Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-alt)."},Hu=createIcuMessageFn("core/audits/accessibility/image-alt.js",Vu);var Gu=Object.freeze({__proto__:null,default:class ImageAlt extends AxeAudit{static get meta(){return{id:"image-alt",title:Hu(Vu.title),failureTitle:Hu(Vu.failureTitle),description:Hu(Vu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Vu});const Yu={title:"Input buttons have discernible text.",failureTitle:"Input buttons do not have discernible text.",description:"Adding discernable and accessible text to input buttons may help screen reader users understand the purpose of the input button. [Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."},Ku=createIcuMessageFn("core/audits/accessibility/input-button-name.js",Yu)
-;var Ju=Object.freeze({__proto__:null,default:class InputButtonName extends AxeAudit{static get meta(){return{id:"input-button-name",title:Ku(Yu.title),failureTitle:Ku(Yu.failureTitle),description:Ku(Yu.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Yu});const Xu={title:'`<input type="image">` elements have `[alt]` text',failureTitle:'`<input type="image">` elements do not have `[alt]` text',description:"When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn about input image alt text](https://dequeuniversity.com/rules/axe/4.7/input-image-alt)."},Zu=createIcuMessageFn("core/audits/accessibility/input-image-alt.js",Xu);var Qu=Object.freeze({__proto__:null,default:class InputImageAlt extends AxeAudit{static get meta(){return{id:"input-image-alt",title:Zu(Xu.title),failureTitle:Zu(Xu.failureTitle),description:Zu(Xu.description),requiredArtifacts:["Accessibility"]}}},
-UIStrings:Xu});const ed={title:"Form elements have associated labels",failureTitle:"Form elements do not have associated labels",description:"Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more about form element labels](https://dequeuniversity.com/rules/axe/4.7/label)."},td=createIcuMessageFn("core/audits/accessibility/label.js",ed);var nd=Object.freeze({__proto__:null,default:class Label extends AxeAudit{static get meta(){return{id:"label",title:td(ed.title),failureTitle:td(ed.failureTitle),description:td(ed.description),requiredArtifacts:["Accessibility"]}}},UIStrings:ed});const ad={title:"Document has a main landmark.",failureTitle:"Document does not have a main landmark.",description:"One main landmark helps screen reader users navigate a web page. [Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."},rd=createIcuMessageFn("core/audits/accessibility/landmark-one-main.js",ad)
-;var od=Object.freeze({__proto__:null,default:class LandmarkOneMain extends AxeAudit{static get meta(){return{id:"landmark-one-main",title:rd(ad.title),failureTitle:rd(ad.failureTitle),description:rd(ad.description),scoreDisplayMode:AxeAudit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},UIStrings:ad});const id={title:"Links are distinguishable without relying on color.",failureTitle:"Links rely on color to be distinguishable.",description:"Low-contrast text is difficult or impossible for many users to read. Link text that is discernible improves the experience for users with low vision. [Learn how to make links distinguishable](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."},sd=createIcuMessageFn("core/audits/accessibility/link-in-text-block.js",id);var cd=Object.freeze({__proto__:null,default:class LinkInTextBlock extends AxeAudit{static get meta(){return{id:"link-in-text-block",title:sd(id.title),failureTitle:sd(id.failureTitle),
-description:sd(id.description),requiredArtifacts:["Accessibility"]}}},UIStrings:id});const ld={title:"Links have a discernible name",failureTitle:"Links do not have a discernible name",description:"Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn how to make links accessible](https://dequeuniversity.com/rules/axe/4.7/link-name)."},ud=createIcuMessageFn("core/audits/accessibility/link-name.js",ld);var dd=Object.freeze({__proto__:null,default:class LinkName extends AxeAudit{static get meta(){return{id:"link-name",title:ud(ld.title),failureTitle:ud(ld.failureTitle),description:ud(ld.description),requiredArtifacts:["Accessibility"]}}},UIStrings:ld});const md={title:"Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",
-failureTitle:"Lists do not contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",description:"Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.7/list)."},pd=createIcuMessageFn("core/audits/accessibility/list.js",md);var gd=Object.freeze({__proto__:null,default:class List extends AxeAudit{static get meta(){return{id:"list",title:pd(md.title),failureTitle:pd(md.failureTitle),description:pd(md.description),requiredArtifacts:["Accessibility"]}}},UIStrings:md});const hd={title:"List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements",failureTitle:"List items (`<li>`) are not contained within `<ul>`, `<ol>` or `<menu>` parent elements.",
-description:"Screen readers require list items (`<li>`) to be contained within a parent `<ul>`, `<ol>` or `<menu>` to be announced properly. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.7/listitem)."},fd=createIcuMessageFn("core/audits/accessibility/listitem.js",hd);var yd=Object.freeze({__proto__:null,default:class ListItem extends AxeAudit{static get meta(){return{id:"listitem",title:fd(hd.title),failureTitle:fd(hd.failureTitle),description:fd(hd.description),requiredArtifacts:["Accessibility"]}}},UIStrings:hd});class ManualAudit extends Audit{static get partialMeta(){return{scoreDisplayMode:Audit.SCORING_MODES.MANUAL,requiredArtifacts:[]}}static audit(){return{score:0}}}var bd=Object.freeze({__proto__:null,default:class CustomControlsLabels extends ManualAudit{static get meta(){return Object.assign({id:"custom-controls-labels",
-description:"Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more about custom controls and labels](https://developer.chrome.com/docs/lighthouse/accessibility/custom-controls-labels/).",title:"Custom controls have associated labels"},super.partialMeta)}}});var vd=Object.freeze({__proto__:null,default:class CustomControlsRoles extends ManualAudit{static get meta(){return Object.assign({id:"custom-controls-roles",description:"Custom interactive controls have appropriate ARIA roles. [Learn how to add roles to custom controls](https://developer.chrome.com/docs/lighthouse/accessibility/custom-control-roles/).",title:"Custom controls have ARIA roles"},super.partialMeta)}}});var wd=Object.freeze({__proto__:null,default:class FocusTraps extends ManualAudit{static get meta(){return Object.assign({id:"focus-traps",
-description:"A user can tab into and out of any control or region without accidentally trapping their focus. [Learn how to avoid focus traps](https://developer.chrome.com/docs/lighthouse/accessibility/focus-traps/).",title:"User focus is not accidentally trapped in a region"},super.partialMeta)}}});var Dd=Object.freeze({__proto__:null,default:class FocusableControls extends ManualAudit{static get meta(){return Object.assign({id:"focusable-controls",description:"Custom interactive controls are keyboard focusable and display a focus indicator. [Learn how to make custom controls focusable](https://developer.chrome.com/docs/lighthouse/accessibility/focusable-controls/).",title:"Interactive controls are keyboard focusable"},super.partialMeta)}}});var Ed=Object.freeze({__proto__:null,default:class InteractiveElementAffordance extends ManualAudit{static get meta(){return Object.assign({id:"interactive-element-affordance",
-description:"Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn how to decorate interactive elements with affordance hints](https://developer.chrome.com/docs/lighthouse/accessibility/interactive-element-affordance/).",title:"Interactive elements indicate their purpose and state"},super.partialMeta)}}});var Td=Object.freeze({__proto__:null,default:class LogicalTabOrder extends ManualAudit{static get meta(){return Object.assign({id:"logical-tab-order",description:"Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more about logical tab ordering](https://developer.chrome.com/docs/lighthouse/accessibility/logical-tab-order/).",title:"The page has a logical tab order"},super.partialMeta)}}});var Cd=Object.freeze({__proto__:null,default:class ManagedFocus extends ManualAudit{static get meta(){return Object.assign({id:"managed-focus",
-description:"If new content, such as a dialog, is added to the page, the user's focus is directed to it. [Learn how to direct focus to new content](https://developer.chrome.com/docs/lighthouse/accessibility/managed-focus/).",title:"The user's focus is directed to new content added to the page"},super.partialMeta)}}});var Sd=Object.freeze({__proto__:null,default:class OffscreenContentHidden extends ManualAudit{static get meta(){return Object.assign({id:"offscreen-content-hidden",description:"Offscreen content is hidden with display: none or aria-hidden=true. [Learn how to properly hide offscreen content](https://developer.chrome.com/docs/lighthouse/accessibility/offscreen-content-hidden/).",title:"Offscreen content is hidden from assistive technology"},super.partialMeta)}}});var _d=Object.freeze({__proto__:null,default:class UseLandmarks extends ManualAudit{static get meta(){return Object.assign({id:"use-landmarks",
-description:"Landmark elements (`<main>`, `<nav>`, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more about landmark elements](https://developer.chrome.com/docs/lighthouse/accessibility/use-landmarks/).",title:"HTML5 landmark elements are used to improve navigation"},super.partialMeta)}}});var Ad=Object.freeze({__proto__:null,default:class VisualOrderFollowsDOM extends ManualAudit{static get meta(){return Object.assign({id:"visual-order-follows-dom",description:"DOM order matches the visual order, improving navigation for assistive technology. [Learn more about DOM and visual ordering](https://developer.chrome.com/docs/lighthouse/accessibility/visual-order-follows-dom/).",title:"Visual order on the page follows DOM order"},super.partialMeta)}}});const kd={title:'The document does not use `<meta http-equiv="refresh">`',failureTitle:'The document uses `<meta http-equiv="refresh">`',
-description:"Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more about the refresh meta tag](https://dequeuniversity.com/rules/axe/4.7/meta-refresh)."},xd=createIcuMessageFn("core/audits/accessibility/meta-refresh.js",kd);var Fd=Object.freeze({__proto__:null,default:class MetaRefresh extends AxeAudit{static get meta(){return{id:"meta-refresh",title:xd(kd.title),failureTitle:xd(kd.failureTitle),description:xd(kd.description),requiredArtifacts:["Accessibility"]}}},UIStrings:kd});const Rd={title:'`[user-scalable="no"]` is not used in the `<meta name="viewport">` element and the `[maximum-scale]` attribute is not less than 5.',failureTitle:'`[user-scalable="no"]` is used in the `<meta name="viewport">` element or the `[maximum-scale]` attribute is less than 5.',
-description:"Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more about the viewport meta tag](https://dequeuniversity.com/rules/axe/4.7/meta-viewport)."},Id=createIcuMessageFn("core/audits/accessibility/meta-viewport.js",Rd);var Md=Object.freeze({__proto__:null,default:class MetaViewport extends AxeAudit{static get meta(){return{id:"meta-viewport",title:Id(Rd.title),failureTitle:Id(Rd.failureTitle),description:Id(Rd.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Rd});const Ld={title:"`<object>` elements have alternate text",failureTitle:"`<object>` elements do not have alternate text",description:"Screen readers cannot translate non-text content. Adding alternate text to `<object>` elements helps screen readers convey meaning to users. [Learn more about alt text for `object` elements](https://dequeuniversity.com/rules/axe/4.7/object-alt)."
-},Nd=createIcuMessageFn("core/audits/accessibility/object-alt.js",Ld);var Pd=Object.freeze({__proto__:null,default:class ObjectAlt extends AxeAudit{static get meta(){return{id:"object-alt",title:Nd(Ld.title),failureTitle:Nd(Ld.failureTitle),description:Nd(Ld.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Ld});const Od={title:"Select elements have associated label elements.",failureTitle:"Select elements do not have associated label elements.",description:"Form elements without effective labels can create frustrating experiences for screen reader users. [Learn more about the `select` element](https://dequeuniversity.com/rules/axe/4.7/select-name)."},Bd=createIcuMessageFn("core/audits/accessibility/select-name.js",Od);var Ud=Object.freeze({__proto__:null,default:class SelectName extends AxeAudit{static get meta(){return{id:"select-name",title:Bd(Od.title),failureTitle:Bd(Od.failureTitle),description:Bd(Od.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Od})
-;const jd={title:"No element has a `[tabindex]` value greater than 0",failureTitle:"Some elements have a `[tabindex]` value greater than 0",description:"A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.7/tabindex)."},zd=createIcuMessageFn("core/audits/accessibility/tabindex.js",jd);var qd=Object.freeze({__proto__:null,default:class TabIndex extends AxeAudit{static get meta(){return{id:"tabindex",title:zd(jd.title),failureTitle:zd(jd.failureTitle),description:zd(jd.description),requiredArtifacts:["Accessibility"]}}},UIStrings:jd});const Wd={title:"Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.",failureTitle:"Tables do not use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.",
-description:"Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users. [Learn more about captions](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."},$d=createIcuMessageFn("core/audits/accessibility/table-fake-caption.js",Wd);var Vd=Object.freeze({__proto__:null,default:class TableFakeCaption extends AxeAudit{static get meta(){return{id:"table-fake-caption",title:$d(Wd.title),failureTitle:$d(Wd.failureTitle),description:$d(Wd.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Wd});const Hd={title:"Touch targets have sufficient size and spacing.",failureTitle:"Touch targets do not have sufficient size or spacing.",
-description:"Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."},Gd=createIcuMessageFn("core/audits/accessibility/target-size.js",Hd);var Yd=Object.freeze({__proto__:null,default:class TargetSize extends AxeAudit{static get meta(){return{id:"target-size",title:Gd(Hd.title),failureTitle:Gd(Hd.failureTitle),description:Gd(Hd.description),scoreDisplayMode:AxeAudit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},UIStrings:Hd});const Kd={title:"`<td>` elements in a large `<table>` have one or more table headers.",failureTitle:"`<td>` elements in a large `<table>` do not have table headers.",
-description:"Screen readers have features to make navigating tables easier. Ensuring that `<td>` elements in a large table (3 or more cells in width and height) have an associated table header may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."},Jd=createIcuMessageFn("core/audits/accessibility/td-has-header.js",Kd);var Xd=Object.freeze({__proto__:null,default:class TDHasHeader extends AxeAudit{static get meta(){return{id:"td-has-header",title:Jd(Kd.title),failureTitle:Jd(Kd.failureTitle),description:Jd(Kd.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Kd});const Zd={title:"Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",failureTitle:"Cells in a `<table>` element that use the `[headers]` attribute refer to an element `id` not found within the same table.",
-description:"Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more about the `headers` attribute](https://dequeuniversity.com/rules/axe/4.7/td-headers-attr)."},Qd=createIcuMessageFn("core/audits/accessibility/td-headers-attr.js",Zd);var em=Object.freeze({__proto__:null,default:class TDHeadersAttr extends AxeAudit{static get meta(){return{id:"td-headers-attr",title:Qd(Zd.title),failureTitle:Qd(Zd.failureTitle),description:Qd(Zd.description),requiredArtifacts:["Accessibility"]}}},UIStrings:Zd});const tm={title:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have data cells they describe.',failureTitle:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` do not have data cells they describe.',
-description:"Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.7/th-has-data-cells)."},nm=createIcuMessageFn("core/audits/accessibility/th-has-data-cells.js",tm);var am=Object.freeze({__proto__:null,default:class THHasDataCells extends AxeAudit{static get meta(){return{id:"th-has-data-cells",title:nm(tm.title),failureTitle:nm(tm.failureTitle),description:nm(tm.description),scoreDisplayMode:AxeAudit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},UIStrings:tm});const rm={title:"`[lang]` attributes have a valid value",failureTitle:"`[lang]` attributes do not have a valid value",
-description:"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.7/valid-lang)."},om=createIcuMessageFn("core/audits/accessibility/valid-lang.js",rm);var im=Object.freeze({__proto__:null,default:class ValidLang extends AxeAudit{static get meta(){return{id:"valid-lang",title:om(rm.title),failureTitle:om(rm.failureTitle),description:om(rm.description),requiredArtifacts:["Accessibility"]}}},UIStrings:rm});const sm={title:'`<video>` elements contain a `<track>` element with `[kind="captions"]`',failureTitle:'`<video>` elements do not contain a `<track>` element with `[kind="captions"]`.',
-description:"When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more about video captions](https://dequeuniversity.com/rules/axe/4.7/video-caption)."},cm=createIcuMessageFn("core/audits/accessibility/video-caption.js",sm);var lm=Object.freeze({__proto__:null,default:class VideoCaption extends AxeAudit{static get meta(){return{id:"video-caption",title:cm(sm.title),failureTitle:cm(sm.failureTitle),description:cm(sm.description),scoreDisplayMode:AxeAudit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},UIStrings:sm});const um={title:"`<input>` elements correctly use `autocomplete`",failureTitle:"`<input>` elements do not have correct `autocomplete` attributes",
-description:"`autocomplete` helps users submit forms quicker. To reduce user effort, consider enabling by setting the `autocomplete` attribute to a valid value. [Learn more about `autocomplete` in forms](https://developers.google.com/web/fundamentals/design-and-ux/input/forms#use_metadata_to_enable_auto-complete)",columnSuggestions:"Suggested Token",columnCurrent:"Current Value",warningInvalid:'`autocomplete` token(s): "{token}" is invalid in {snippet}',warningOrder:'Review order of tokens: "{tokens}" in {snippet}',reviewOrder:"Review order of tokens",manualReview:"Requires manual review"
-},dm=createIcuMessageFn("core/audits/autocomplete.js",um),mm=["name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","username","new-password","current-password","one-time-code","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","url","photo","tel","tel-country-code","tel-national","tel-area-code","on","tel-local","tel-local-prefix","tel-local-suffix","tel-extension","email","impp","off","additional-name-initial","home","work","mobile","fax","pager","shipping","billing"],pm=["NO_SERVER_DATA","UNKNOWN_TYPE","EMPTY_TYPE","HTML_TYPE_UNSPECIFIED","HTML_TYPE_UNRECOGNIZED"],gm={
-NO_SERVER_DATA:dm(um.manualReview),UNKNOWN_TYPE:dm(um.manualReview),EMPTY_TYPE:dm(um.manualReview),NAME_FIRST:"given-name",NAME_MIDDLE:"additional-name",NAME_LAST:"family-name",NAME_FULL:"name",NAME_MIDDLE_INITIAL:"additional-name-initial",NAME_SUFFIX:"honorific-suffix",NAME_BILLING_FIRST:"billing given-name",NAME_BILLING_MIDDLE:"billing additional-name",NAME_BILLING_LAST:"billing family-name",NAME_BILLING_MIDDLE_INITIAL:"billing additional-name-initial",NAME_BILLING_FULL:"billing name",NAME_BILLING_SUFFIX:"billing honorific-suffix",EMAIL_ADDRESS:"email",MERCHANT_EMAIL_SIGNUP:"email",PHONE_HOME_NUMBER:"tel-local",PHONE_HOME_CITY_CODE:"tel-area-code",PHONE_HOME_COUNTRY_CODE:"tel-country-code",PHONE_HOME_CITY_AND_NUMBER:"tel-national",PHONE_HOME_WHOLE_NUMBER:"tel",PHONE_HOME_EXTENSION:"tel-extension",PHONE_BILLING_NUMBER:"billing tel-local",PHONE_BILLING_CITY_CODE:"billing tel-area-code",PHONE_BILLING_COUNTRY_CODE:"tel-country-code",PHONE_BILLING_CITY_AND_NUMBER:"tel-national",
-PHONE_BILLING_WHOLE_NUMBER:"tel",ADDRESS_HOME_STREET_ADDRESS:"street-address",ADDRESS_HOME_LINE1:"address-line1",ADDRESS_HOME_LINE2:"address-line2",ADDRESS_HOME_LINE3:"address-line3",ADDRESS_HOME_STATE:"address-level1",ADDRESS_HOME_CITY:"address-level2",ADDRESS_HOME_DEPENDENT_LOCALITY:"address-level3",ADDRESS_HOME_ZIP:"postal-code",ADDRESS_HOME_COUNTRY:"country-name",ADDRESS_BILLING_DEPENDENT_LOCALITY:"billing address-level3",ADDRESS_BILLING_STREET_ADDRESS:"billing street-address",ADDRESS_BILLING_LINE1:"billing address-line1",ADDRESS_BILLING_LINE2:"billing address-line2",ADDRESS_BILLING_LINE3:"billing address-line3",ADDRESS_BILLING_APT_NUM:"billing address-level3",ADDRESS_BILLING_CITY:"billing address-level2",ADDRESS_BILLING_STATE:"billing address-level1",ADDRESS_BILLING_ZIP:"billing postal-code",ADDRESS_BILLING_COUNTRY:"billing country-name",CREDIT_CARD_NAME_FULL:"cc-name",CREDIT_CARD_NAME_FIRST:"cc-given-name",CREDIT_CARD_NAME_LAST:"cc-family-name",CREDIT_CARD_NUMBER:"cc-number",
-CREDIT_CARD_EXP_MONTH:"cc-exp-month",CREDIT_CARD_EXP_2_DIGIT_YEAR:"cc-exp-year",CREDIT_CARD_EXP_4_DIGIT_YEAR:"cc-exp-year",CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:"cc-exp",CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:"cc-exp",CREDIT_CARD_TYPE:"cc-type",CREDIT_CARD_VERIFICATION_CODE:"cc-csc",COMPANY_NAME:"organization",PASSWORD:"current-password",ACCOUNT_CREATION_PASSWORD:"new-password",HTML_TYPE_UNSPECIFIED:dm(um.manualReview),HTML_TYPE_NAME:"name",HTML_TYPE_HONORIFIC_PREFIX:"honorific-prefix",HTML_TYPE_GIVEN_NAME:"given-name",HTML_TYPE_ADDITIONAL_NAME:"additional-name",HTML_TYPE_FAMILY_NAME:"family-name",HTML_TYPE_ORGANIZATION:"organization",HTML_TYPE_STREET_ADDRESS:"street-address",HTML_TYPE_ADDRESS_LINE1:"address-line1",HTML_TYPE_ADDRESS_LINE2:"address-line2",HTML_TYPE_ADDRESS_LINE3:"address-line3",HTML_TYPE_ADDRESS_LEVEL1:"address-level1",HTML_TYPE_ADDRESS_LEVEL2:"address-level2",HTML_TYPE_ADDRESS_LEVEL3:"address-level3",HTML_TYPE_COUNTRY_CODE:"tel-country-code",
-HTML_TYPE_COUNTRY_NAME:"country-name",HTML_TYPE_POSTAL_CODE:"postal-code",HTML_TYPE_FULL_ADDRESS:"street-address",HTML_TYPE_CREDIT_CARD_NAME_FULL:"cc-name",HTML_TYPE_CREDIT_CARD_NAME_FIRST:"cc-given-name",HTML_TYPE_CREDIT_CARD_NAME_LAST:"cc-family-name",HTML_TYPE_CREDIT_CARD_NUMBER:"cc-number",HTML_TYPE_CREDIT_CARD_EXP:"cc-exp",HTML_TYPE_CREDIT_CARD_EXP_MONTH:"cc-exp-month",HTML_TYPE_CREDIT_CARD_EXP_YEAR:"cc-exp-year",HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE:"cc-csc",HTML_TYPE_CREDIT_CARD_TYPE:"cc-csc",HTML_TYPE_TEL:"tel",HTML_TYPE_TEL_COUNTRY_CODE:"tel-country-code",HTML_TYPE_TEL_NATIONAL:"tel-national",HTML_TYPE_TEL_AREA_CODE:"tel-area-code",HTML_TYPE_TEL_LOCAL:"tel-local",HTML_TYPE_TEL_LOCAL_PREFIX:"tel-local-prefix",HTML_TYPE_TEL_LOCAL_SUFFIX:"tel-local-suffix",HTML_TYPE_TEL_EXTENSION:"tel-extension",HTML_TYPE_EMAIL:"email",HTML_TYPE_ADDITIONAL_NAME_INITIAL:"additional-name-initial",HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:"cc-exp-year",
-HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:"cc-exp-year",HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR:"cc-exp-year",HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR:"cc-exp-year",HTML_TYPE_UPI_VPA:dm(um.manualReview),HTML_TYPE_ONE_TIME_CODE:"one-time-code",HTML_TYPE_UNRECOGNIZED:dm(um.manualReview),HTML_TYPE_TRANSACTION_AMOUNT:"transaction-amount",HTML_TYPE_TRANSACTION_CURRENCY:"transaction-currency"};var hm=Object.freeze({__proto__:null,default:class AutocompleteAudit extends Audit{static get meta(){return{id:"autocomplete",title:dm(um.title),failureTitle:dm(um.failureTitle),description:dm(um.description),requiredArtifacts:["Inputs"]}}static checkAttributeValidity(e){if(!e.autocomplete.attribute)return{hasValidTokens:!1};const t=e.autocomplete.attribute.split(" ");for(const e of t)if("section-"!==e.slice(0,8)&&!mm.includes(e))return{hasValidTokens:!1};return e.autocomplete.property?{hasValidTokens:!0,isValidOrder:!0}:{hasValidTokens:!0,isValidOrder:!1}}static audit(e){const t=[],n=[];let a=!1
-;for(const r of e.Inputs.inputs){const e=this.checkAttributeValidity(r);if(e.hasValidTokens&&e.isValidOrder)continue;if(!r.autocomplete.prediction)continue;if(pm.includes(r.autocomplete.prediction)&&!r.autocomplete.attribute)continue;a=!0;let o=gm[r.autocomplete.prediction];r.autocomplete.attribute||(r.autocomplete.attribute=""),r.autocomplete.attribute&&n.push(dm(um.warningInvalid,{token:r.autocomplete.attribute,snippet:r.node.snippet})),!1===e.isValidOrder&&(n.push(dm(um.warningOrder,{tokens:r.autocomplete.attribute,snippet:r.node.snippet})),o=um.reviewOrder),r.autocomplete.prediction in gm||!e.isValidOrder?t.push({node:Audit.makeNodeItem(r.node),suggestion:o,current:r.autocomplete.attribute}):Log.warn(`Autocomplete prediction (${r.autocomplete.prediction})\n            not found in our mapping`)}const r=[{key:"node",valueType:"node",label:dm(Ar.columnFailingElem)},{key:"current",valueType:"text",label:dm(um.columnCurrent)},{key:"suggestion",valueType:"text",
-label:dm(um.columnSuggestions)}],o=Audit.makeTableDetails(r,t);let i;return t.length>0&&(i=dm(Ar.displayValueElementsFound,{nodeCount:t.length})),{score:t.length>0?0:1,notApplicable:!a,displayValue:i,details:o,warnings:n}}},UIStrings:um});const fm={notMainFrame:"Navigation happened in a frame other than the main frame.",backForwardCacheDisabled:"Back/forward cache is disabled by flags. Visit chrome://flags/#back-forward-cache to enable it locally on this device.",relatedActiveContentsExist:"The page was opened using '`window.open()`' and another tab has a reference to it, or the page opened a window.",HTTPStatusNotOK:"Only pages with a status code of 2XX can be cached.",schemeNotHTTPOrHTTPS:"Only pages whose URL scheme is HTTP / HTTPS can be cached.",loading:"The page did not finish loading before navigating away.",wasGrantedMediaAccess:"Pages that have granted access to record video or audio are not currently eligible for back/forward cache.",
-HTTPMethodNotGET:"Only pages loaded via a GET request are eligible for back/forward cache.",subframeIsNavigating:"An iframe on the page started a navigation that did not complete.",timeout:"The page exceeded the maximum time in back/forward cache and was expired.",cacheLimit:"The page was evicted from the cache to allow another page to be cached.",JavaScriptExecution:"Chrome detected an attempt to execute JavaScript while in the cache.",rendererProcessKilled:"The renderer process for the page in back/forward cache was killed.",rendererProcessCrashed:"The renderer process for the page in back/forward cache crashed.",grantedMediaStreamAccess:"Pages that have granted media stream access are not currently eligible for back/forward cache.",cacheFlushed:"The cache was intentionally cleared.",serviceWorkerVersionActivation:"The page was evicted from back/forward cache due to a service worker activation.",sessionRestored:"Chrome restarted and cleared the back/forward cache entries.",
-serviceWorkerPostMessage:"A service worker attempted to send the page in back/forward cache a `MessageEvent`.",enteredBackForwardCacheBeforeServiceWorkerHostAdded:"A service worker was activated while the page was in back/forward cache.",serviceWorkerClaim:"The page was claimed by a service worker while it is in back/forward cache.",haveInnerContents:"Pages that use portals are not currently eligible for back/forward cache.",timeoutPuttingInCache:"The page timed out entering back/forward cache (likely due to long-running pagehide handlers).",backForwardCacheDisabledByLowMemory:"Back/forward cache is disabled due to insufficient memory.",backForwardCacheDisabledByCommandLine:"Back/forward cache is disabled by the command line.",networkRequestDatapipeDrainedAsBytesConsumer:"Pages that have inflight fetch() or XHR are not currently eligible for back/forward cache.",
-networkRequestRedirected:"The page was evicted from back/forward cache because an active network request involved a redirect.",networkRequestTimeout:"The page was evicted from the cache because a network connection was open too long. Chrome limits the amount of time that a page may receive data while cached.",networkExceedsBufferLimit:"The page was evicted from the cache because an active network connection received too much data. Chrome limits the amount of data that a page may receive while cached.",navigationCancelledWhileRestoring:"Navigation was cancelled before the page could be restored from back/forward cache.",backForwardCacheDisabledForPrerender:"Back/forward cache is disabled for prerenderer.",userAgentOverrideDiffers:"Browser has changed the user agent override header.",foregroundCacheLimit:"The page was evicted from the cache to allow another page to be cached.",backForwardCacheDisabledForDelegate:"Back/forward cache is not supported by delegate.",
-unloadHandlerExistsInMainFrame:"The page has an unload handler in the main frame.",unloadHandlerExistsInSubFrame:"The page has an unload handler in a sub frame.",serviceWorkerUnregistration:"ServiceWorker was unregistered while a page was in back/forward cache.",noResponseHead:"Pages that do not have a valid response head cannot enter back/forward cache.",cacheControlNoStore:"Pages with cache-control:no-store header cannot enter back/forward cache.",ineligibleAPI:"Ineligible APIs were used.",internalError:"Internal error.",webSocket:"Pages with WebSocket cannot enter back/forward cache.",webTransport:"Pages with WebTransport cannot enter back/forward cache.",webRTC:"Pages with WebRTC cannot enter back/forward cache.",mainResourceHasCacheControlNoStore:"Pages whose main resource has cache-control:no-store cannot enter back/forward cache.",mainResourceHasCacheControlNoCache:"Pages whose main resource has cache-control:no-cache cannot enter back/forward cache.",
-subresourceHasCacheControlNoStore:"Pages whose subresource has cache-control:no-store cannot enter back/forward cache.",subresourceHasCacheControlNoCache:"Pages whose subresource has cache-control:no-cache cannot enter back/forward cache.",containsPlugins:"Pages containing plugins are not currently eligible for back/forward cache.",documentLoaded:"The document did not finish loading before navigating away.",dedicatedWorkerOrWorklet:"Pages that use a dedicated worker or worklet are not currently eligible for back/forward cache.",outstandingNetworkRequestOthers:"Pages with an in-flight network request are not currently eligible for back/forward cache.",outstandingIndexedDBTransaction:"Page with ongoing indexed DB transactions are not currently eligible for back/forward cache.",requestedNotificationsPermission:"Pages that have requested notifications permissions are not currently eligible for back/forward cache.",
-requestedMIDIPermission:"Pages that have requested MIDI permissions are not currently eligible for back/forward cache.",requestedAudioCapturePermission:"Pages that have requested audio capture permissions are not currently eligible for back/forward cache.",requestedVideoCapturePermission:"Pages that have requested video capture permissions are not currently eligible for back/forward cache.",requestedBackForwardCacheBlockedSensors:"Pages that have requested sensor permissions are not currently eligible for back/forward cache.",requestedBackgroundWorkPermission:"Pages that have requested background sync or fetch permissions are not currently eligible for back/forward cache.",broadcastChannel:"The page cannot be cached because it has a BroadcastChannel instance with registered listeners.",indexedDBConnection:"Pages that have an open IndexedDB connection are not currently eligible for back/forward cache.",webXR:"Pages that use WebXR are not currently eligible for back/forward cache.",
-sharedWorker:"Pages that use SharedWorker are not currently eligible for back/forward cache.",webLocks:"Pages that use WebLocks are not currently eligible for back/forward cache.",webHID:"Pages that use WebHID are not currently eligible for back/forward cache.",webShare:"Pages that use WebShare are not currently eligible for back/forwad cache.",requestedStorageAccessGrant:"Pages that have requested storage access are not currently eligible for back/forward cache.",webNfc:"Pages that use WebNfc are not currently eligible for back/forwad cache.",outstandingNetworkRequestFetch:"Pages with an in-flight fetch network request are not currently eligible for back/forward cache.",outstandingNetworkRequestXHR:"Pages with an in-flight XHR network request are not currently eligible for back/forward cache.",appBanner:"Pages that requested an AppBanner are not currently eligible for back/forward cache.",printing:"Pages that show Printing UI are not currently eligible for back/forward cache.",
-webDatabase:"Pages that use WebDatabase are not currently eligible for back/forward cache.",pictureInPicture:"Pages that use Picture-in-Picture are not currently eligible for back/forward cache.",portal:"Pages that use portals are not currently eligible for back/forward cache.",speechRecognizer:"Pages that use SpeechRecognizer are not currently eligible for back/forward cache.",idleManager:"Pages that use IdleManager are not currently eligible for back/forward cache.",paymentManager:"Pages that use PaymentManager are not currently eligible for back/forward cache.",speechSynthesis:"Pages that use SpeechSynthesis are not currently eligible for back/forward cache.",keyboardLock:"Pages that use Keyboard lock are not currently eligible for back/forward cache.",webOTPService:"Pages that use WebOTPService are not currently eligible for bfcache.",outstandingNetworkRequestDirectSocket:"Pages with an in-flight network request are not currently eligible for back/forward cache.",
-injectedJavascript:"Pages that `JavaScript` is injected into by extensions are not currently eligible for back/forward cache.",injectedStyleSheet:"Pages that a `StyleSheet` is injected into by extensions are not currently eligible for back/forward cache.",contentSecurityHandler:"Pages that use SecurityHandler are not eligible for back/forward cache.",contentWebAuthenticationAPI:"Pages that use WebAuthetication API are not eligible for back/forward cache.",contentFileChooser:"Pages that use FileChooser API are not eligible for back/forward cache.",contentSerial:"Pages that use Serial API are not eligible for back/forward cache.",contentFileSystemAccess:"Pages that use File System Access API are not eligible for back/forward cache.",contentMediaDevicesDispatcherHost:"Pages that use Media Device Dispatcher are not eligible for back/forward cache.",contentWebBluetooth:"Pages that use WebBluetooth API are not eligible for back/forward cache.",
-contentWebUSB:"Pages that use WebUSB API are not eligible for back/forward cache.",contentMediaSession:"Pages that use MediaSession API and set a playback state are not eligible for back/forward cache.",contentMediaSessionService:"Pages that use MediaSession API and set action handlers are not eligible for back/forward cache.",contentMediaPlay:"A media player was playing upon navigating away.",contentScreenReader:"Back/forward cache is disabled due to screen reader.",embedderPopupBlockerTabHelper:"Popup blocker was present upon navigating away.",embedderSafeBrowsingTriggeredPopupBlocker:"Safe Browsing considered this page to be abusive and blocked popup.",embedderSafeBrowsingThreatDetails:"Safe Browsing details were shown upon navigating away.",embedderAppBannerManager:"App Banner was present upon navigating away.",embedderDomDistillerViewerSource:"DOM Distiller Viewer was present upon navigating away.",
-embedderDomDistillerSelfDeletingRequestDelegate:"DOM distillation was in progress upon navigating away.",embedderOomInterventionTabHelper:"Out-Of-Memory Intervention bar was present upon navigating away.",embedderOfflinePage:"The offline page was shown upon navigating away.",embedderChromePasswordManagerClientBindCredentialManager:"Chrome Password Manager was present upon navigating away.",embedderPermissionRequestManager:"There were permission requests upon navigating away.",embedderModalDialog:"Modal dialog such as form resubmission or http password dialog was shown for the page upon navigating away.",embedderExtensions:"Back/forward cache is disabled due to extensions.",embedderExtensionMessaging:"Back/forward cache is disabled due to extensions using messaging API.",embedderExtensionMessagingForOpenPort:"Extensions with long-lived connection should close the connection before entering back/forward cache.",
-embedderExtensionSentMessageToCachedFrame:"Extensions with long-lived connection attempted to send messages to frames in back/forward cache.",errorDocument:"Back/forward cache is disabled due to a document error.",fencedFramesEmbedder:"Pages using FencedFrames cannot be stored in bfcache.",keepaliveRequest:"Back/forward cache is disabled due to a keepalive request.",authorizationHeader:"Back/forward cache is disabled due to a keepalive request.",indexedDBEvent:"Back/forward cache is disabled due to an IndexedDB event.",cookieDisabled:"Back/forward cache is disabled because cookies are disabled on a page that uses `Cache-Control: no-store`."},ym=createIcuMessageFn("core/lib/bf-cache-strings.js",fm),bm={NotPrimaryMainFrame:{name:ym(fm.notMainFrame)},BackForwardCacheDisabled:{name:ym(fm.backForwardCacheDisabled)},RelatedActiveContentsExist:{name:ym(fm.relatedActiveContentsExist)},HTTPStatusNotOK:{name:ym(fm.HTTPStatusNotOK)},SchemeNotHTTPOrHTTPS:{name:ym(fm.schemeNotHTTPOrHTTPS)},
-Loading:{name:ym(fm.loading)},WasGrantedMediaAccess:{name:ym(fm.wasGrantedMediaAccess)},HTTPMethodNotGET:{name:ym(fm.HTTPMethodNotGET)},SubframeIsNavigating:{name:ym(fm.subframeIsNavigating)},Timeout:{name:ym(fm.timeout)},CacheLimit:{name:ym(fm.cacheLimit)},JavaScriptExecution:{name:ym(fm.JavaScriptExecution)},RendererProcessKilled:{name:ym(fm.rendererProcessKilled)},RendererProcessCrashed:{name:ym(fm.rendererProcessCrashed)},GrantedMediaStreamAccess:{name:ym(fm.grantedMediaStreamAccess)},CacheFlushed:{name:ym(fm.cacheFlushed)},ServiceWorkerVersionActivation:{name:ym(fm.serviceWorkerVersionActivation)},SessionRestored:{name:ym(fm.sessionRestored)},ServiceWorkerPostMessage:{name:ym(fm.serviceWorkerPostMessage)},EnteredBackForwardCacheBeforeServiceWorkerHostAdded:{name:ym(fm.enteredBackForwardCacheBeforeServiceWorkerHostAdded)},ServiceWorkerClaim:{name:ym(fm.serviceWorkerClaim)},HaveInnerContents:{name:ym(fm.haveInnerContents)},TimeoutPuttingInCache:{name:ym(fm.timeoutPuttingInCache)},
-BackForwardCacheDisabledByLowMemory:{name:ym(fm.backForwardCacheDisabledByLowMemory)},BackForwardCacheDisabledByCommandLine:{name:ym(fm.backForwardCacheDisabledByCommandLine)},NetworkRequestDatapipeDrainedAsBytesConsumer:{name:ym(fm.networkRequestDatapipeDrainedAsBytesConsumer)},NetworkRequestRedirected:{name:ym(fm.networkRequestRedirected)},NetworkRequestTimeout:{name:ym(fm.networkRequestTimeout)},NetworkExceedsBufferLimit:{name:ym(fm.networkExceedsBufferLimit)},NavigationCancelledWhileRestoring:{name:ym(fm.navigationCancelledWhileRestoring)},BackForwardCacheDisabledForPrerender:{name:ym(fm.backForwardCacheDisabledForPrerender)},UserAgentOverrideDiffers:{name:ym(fm.userAgentOverrideDiffers)},ForegroundCacheLimit:{name:ym(fm.foregroundCacheLimit)},BackForwardCacheDisabledForDelegate:{name:ym(fm.backForwardCacheDisabledForDelegate)},UnloadHandlerExistsInMainFrame:{name:ym(fm.unloadHandlerExistsInMainFrame)},UnloadHandlerExistsInSubFrame:{name:ym(fm.unloadHandlerExistsInSubFrame)},
-ServiceWorkerUnregistration:{name:ym(fm.serviceWorkerUnregistration)},NoResponseHead:{name:ym(fm.noResponseHead)},CacheControlNoStore:{name:ym(fm.cacheControlNoStore)},CacheControlNoStoreCookieModified:{name:ym(fm.cacheControlNoStore)},CacheControlNoStoreHTTPOnlyCookieModified:{name:ym(fm.cacheControlNoStore)},DisableForRenderFrameHostCalled:{name:ym(fm.ineligibleAPI)},BlocklistedFeatures:{name:ym(fm.ineligibleAPI)},SchedulerTrackedFeatureUsed:{name:ym(fm.ineligibleAPI)},DomainNotAllowed:{name:ym(fm.internalError)},ConflictingBrowsingInstance:{name:ym(fm.internalError)},NotMostRecentNavigationEntry:{name:ym(fm.internalError)},IgnoreEventAndEvict:{name:ym(fm.internalError)},BrowsingInstanceNotSwapped:{name:ym(fm.internalError)},ActivationNavigationsDisallowedForBug1234857:{name:ym(fm.internalError)},Unknown:{name:ym(fm.internalError)},RenderFrameHostReused_SameSite:{name:ym(fm.internalError)},RenderFrameHostReused_CrossSite:{name:ym(fm.internalError)},WebSocket:{name:ym(fm.webSocket)},
-WebTransport:{name:ym(fm.webTransport)},WebRTC:{name:ym(fm.webRTC)},MainResourceHasCacheControlNoStore:{name:ym(fm.mainResourceHasCacheControlNoStore)},MainResourceHasCacheControlNoCache:{name:ym(fm.mainResourceHasCacheControlNoCache)},SubresourceHasCacheControlNoStore:{name:ym(fm.subresourceHasCacheControlNoStore)},SubresourceHasCacheControlNoCache:{name:ym(fm.subresourceHasCacheControlNoCache)},ContainsPlugins:{name:ym(fm.containsPlugins)},DocumentLoaded:{name:ym(fm.documentLoaded)},DedicatedWorkerOrWorklet:{name:ym(fm.dedicatedWorkerOrWorklet)},OutstandingNetworkRequestOthers:{name:ym(fm.outstandingNetworkRequestOthers)},OutstandingIndexedDBTransaction:{name:ym(fm.outstandingIndexedDBTransaction)},RequestedNotificationsPermission:{name:ym(fm.requestedNotificationsPermission)},RequestedMIDIPermission:{name:ym(fm.requestedMIDIPermission)},RequestedAudioCapturePermission:{name:ym(fm.requestedAudioCapturePermission)},RequestedVideoCapturePermission:{
-name:ym(fm.requestedVideoCapturePermission)},RequestedBackForwardCacheBlockedSensors:{name:ym(fm.requestedBackForwardCacheBlockedSensors)},RequestedBackgroundWorkPermission:{name:ym(fm.requestedBackgroundWorkPermission)},BroadcastChannel:{name:ym(fm.broadcastChannel)},IndexedDBConnection:{name:ym(fm.indexedDBConnection)},WebXR:{name:ym(fm.webXR)},SharedWorker:{name:ym(fm.sharedWorker)},WebLocks:{name:ym(fm.webLocks)},WebHID:{name:ym(fm.webHID)},WebShare:{name:ym(fm.webShare)},RequestedStorageAccessGrant:{name:ym(fm.requestedStorageAccessGrant)},WebNfc:{name:ym(fm.webNfc)},OutstandingNetworkRequestFetch:{name:ym(fm.outstandingNetworkRequestFetch)},OutstandingNetworkRequestXHR:{name:ym(fm.outstandingNetworkRequestXHR)},AppBanner:{name:ym(fm.appBanner)},Printing:{name:ym(fm.printing)},WebDatabase:{name:ym(fm.webDatabase)},PictureInPicture:{name:ym(fm.pictureInPicture)},Portal:{name:ym(fm.portal)},SpeechRecognizer:{name:ym(fm.speechRecognizer)},IdleManager:{name:ym(fm.idleManager)},
-PaymentManager:{name:ym(fm.paymentManager)},SpeechSynthesis:{name:ym(fm.speechSynthesis)},KeyboardLock:{name:ym(fm.keyboardLock)},WebOTPService:{name:ym(fm.webOTPService)},OutstandingNetworkRequestDirectSocket:{name:ym(fm.outstandingNetworkRequestDirectSocket)},InjectedJavascript:{name:ym(fm.injectedJavascript)},InjectedStyleSheet:{name:ym(fm.injectedStyleSheet)},Dummy:{name:ym(fm.internalError)},ContentSecurityHandler:{name:ym(fm.contentSecurityHandler)},ContentWebAuthenticationAPI:{name:ym(fm.contentWebAuthenticationAPI)},ContentFileChooser:{name:ym(fm.contentFileChooser)},ContentSerial:{name:ym(fm.contentSerial)},ContentFileSystemAccess:{name:ym(fm.contentFileSystemAccess)},ContentMediaDevicesDispatcherHost:{name:ym(fm.contentMediaDevicesDispatcherHost)},ContentWebBluetooth:{name:ym(fm.contentWebBluetooth)},ContentWebUSB:{name:ym(fm.contentWebUSB)},ContentMediaSession:{name:ym(fm.contentMediaSession)},ContentMediaSessionService:{name:ym(fm.contentMediaSessionService)},
-ContentMediaPlay:{name:ym(fm.contentMediaPlay)},ContentScreenReader:{name:ym(fm.contentScreenReader)},EmbedderPopupBlockerTabHelper:{name:ym(fm.embedderPopupBlockerTabHelper)},EmbedderSafeBrowsingTriggeredPopupBlocker:{name:ym(fm.embedderSafeBrowsingTriggeredPopupBlocker)},EmbedderSafeBrowsingThreatDetails:{name:ym(fm.embedderSafeBrowsingThreatDetails)},EmbedderAppBannerManager:{name:ym(fm.embedderAppBannerManager)},EmbedderDomDistillerViewerSource:{name:ym(fm.embedderDomDistillerViewerSource)},EmbedderDomDistillerSelfDeletingRequestDelegate:{name:ym(fm.embedderDomDistillerSelfDeletingRequestDelegate)},EmbedderOomInterventionTabHelper:{name:ym(fm.embedderOomInterventionTabHelper)},EmbedderOfflinePage:{name:ym(fm.embedderOfflinePage)},EmbedderChromePasswordManagerClientBindCredentialManager:{name:ym(fm.embedderChromePasswordManagerClientBindCredentialManager)},EmbedderPermissionRequestManager:{name:ym(fm.embedderPermissionRequestManager)},EmbedderModalDialog:{
-name:ym(fm.embedderModalDialog)},EmbedderExtensions:{name:ym(fm.embedderExtensions)},EmbedderExtensionMessaging:{name:ym(fm.embedderExtensionMessaging)},EmbedderExtensionMessagingForOpenPort:{name:ym(fm.embedderExtensionMessagingForOpenPort)},EmbedderExtensionSentMessageToCachedFrame:{name:ym(fm.embedderExtensionSentMessageToCachedFrame)},ErrorDocument:{name:ym(fm.errorDocument)},FencedFramesEmbedder:{name:ym(fm.fencedFramesEmbedder)},KeepaliveRequest:{name:ym(fm.keepaliveRequest)},AuthorizationHeader:{name:ym(fm.authorizationHeader)},IndexedDBEvent:{name:ym(fm.indexedDBEvent)},CookieDisabled:{name:ym(fm.cookieDisabled)}},vm={title:"Page didn't prevent back/forward cache restoration",failureTitle:"Page prevented back/forward cache restoration",
-description:"Many navigations are performed by going back to a previous page, or forwards again. The back/forward cache (bfcache) can speed up these return navigations. [Learn more about the bfcache](https://developer.chrome.com/docs/lighthouse/performance/bf-cache/)",actionableFailureType:"Actionable",notActionableFailureType:"Not actionable",supportPendingFailureType:"Pending browser support",failureReasonColumn:"Failure reason",failureTypeColumn:"Failure type",displayValue:"{itemCount, plural,\n    =1 {1 failure reason}\n    other {# failure reasons}\n    }"},wm=createIcuMessageFn("core/audits/bf-cache.js",vm),Dm=["PageSupportNeeded","SupportPending","Circumstantial"],Em={PageSupportNeeded:wm(vm.actionableFailureType),Circumstantial:wm(vm.notActionableFailureType),SupportPending:wm(vm.supportPendingFailureType)};var Tm=Object.freeze({__proto__:null,default:class BFCache extends Audit{static get meta(){return{id:"bf-cache",title:wm(vm.title),failureTitle:wm(vm.failureTitle),
-description:wm(vm.description),supportedModes:["navigation","timespan"],requiredArtifacts:["BFCacheFailures"]}}static async audit(e){const t=e.BFCacheFailures;if(!t.length)return{score:1};const{notRestoredReasonsTree:n}=t[0];let a=0;const r=[];for(const e of Dm){const t=n[e];for(const[n,o]of Object.entries(t))a+=o.length,r.push({reason:bm[n]?.name??n,failureType:Em[e],subItems:{type:"subitems",items:o.map((e=>({frameUrl:e})))},protocolReason:n})}const o=[{key:"reason",valueType:"text",subItemsHeading:{key:"frameUrl",valueType:"url"},label:wm(vm.failureReasonColumn)},{key:"failureType",valueType:"text",label:wm(vm.failureTypeColumn)}],i=Audit.makeTableDetails(o,r),s=a?wm(vm.displayValue,{itemCount:a}):void 0;return{score:r.length?0:1,displayValue:s,details:i}}},UIStrings:vm});const Cm={parseHTML:{id:"parseHTML",label:"Parse HTML & CSS",traceEventNames:["ParseHTML","ParseAuthorStyleSheet"]},styleLayout:{id:"styleLayout",label:"Style & Layout",
-traceEventNames:["ScheduleStyleRecalculation","UpdateLayoutTree","InvalidateLayout","Layout"]},paintCompositeRender:{id:"paintCompositeRender",label:"Rendering",traceEventNames:["Animation","HitTest","PaintSetup","Paint","PaintImage","RasterTask","ScrollLayer","UpdateLayer","UpdateLayerTree","CompositeLayers","PrePaint"]},scriptParseCompile:{id:"scriptParseCompile",label:"Script Parsing & Compilation",traceEventNames:["v8.compile","v8.compileModule","v8.parseOnBackground"]},scriptEvaluation:{id:"scriptEvaluation",label:"Script Evaluation",traceEventNames:["EventDispatch","EvaluateScript","v8.evaluateModule","FunctionCall","TimerFire","FireIdleCallback","FireAnimationFrame","RunMicrotasks","V8.Execute"]},garbageCollection:{id:"garbageCollection",label:"Garbage Collection",traceEventNames:["MinorGC","MajorGC","BlinkGC.AtomicPhase","ThreadState::performIdleLazySweep","ThreadState::completeSweep","BlinkGCMarking"]},other:{id:"other",label:"Other",
-traceEventNames:["MessageLoop::RunTask","TaskQueueManager::ProcessTaskFromWorkQueue","ThreadControllerImpl::DoWork"]}},Sm={};for(const e of Object.values(Cm))for(const t of e.traceEventNames)Sm[t]=e;class MainThreadTasks$2{static _createNewTaskNode(e,t){const n="X"===e.ph&&!t,a="B"===e.ph&&t&&"E"===t.ph;if(!n&&!a)throw new Error("Invalid parameters for _createNewTaskNode");const r=e.ts,o=t?t.ts:e.ts+Number(e.dur||0);return{event:e,endEvent:t,startTime:r,endTime:o,duration:o-r,unbounded:!1,parent:void 0,children:[],attributableURLs:[],group:Cm.other,selfTime:NaN}}static _assignAllTimersUntilTs(e,t,n,a){for(;a.length;){const r=a.pop();if(!r)break;if(r.ts>t){a.push(r);break}if(r.ts<e.startTime)continue;const o=r.args.data.timerId;n.timers.set(o,e)}}static _createTasksFromStartAndEndEvents(e,t,n){const a=[],r=t.slice().reverse();for(let t=0;t<e.length;t++){const o=e[t];if("X"===o.ph){a.push(MainThreadTasks$2._createNewTaskNode(o));continue}let i,s=-1,c=0,l=t+1
-;for(let t=r.length-1;t>=0;t--){const n=r[t];for(;l<e.length&&!(e[l].ts>=n.ts);l++)e[l].name===o.name&&c++;if(n.name===o.name&&!(n.ts<o.ts)){if(!(c>0)){s=t;break}c--}}let u=!1;-1===s?(i={...o,ph:"E",ts:n},u=!0):i=s===r.length-1?r.pop():r.splice(s,1)[0];const d=MainThreadTasks$2._createNewTaskNode(o,i);d.unbounded=u,a.push(d)}if(r.length)throw new Error(`Fatal trace logic error - ${r.length} unmatched end events`);return a}static _createTaskRelationships(e,t,n){let a;const r=t.slice().reverse();for(let t=0;t<e.length;t++){let o=e[t];if("XHRReadyStateChange"===o.event.name){const e=o.event.args.data,t=e?.url;e&&t&&1===e.readyState&&n.xhrs.set(t,o)}for(;a&&Number.isFinite(a.endTime)&&a.endTime<=o.startTime;)MainThreadTasks$2._assignAllTimersUntilTs(a,a.endTime,n,r),a=a.parent;if(a){if(o.endTime>a.endTime){const e=o.endTime-a.endTime;if(e<1e3)a.endTime=o.endTime,a.duration+=e;else if(o.unbounded)o.endTime=a.endTime,o.duration=o.endTime-o.startTime;else{
-if(!(o.startTime-a.startTime<1e3)||a.children.length){const t=new Error("Fatal trace logic error - child cannot end after parent");throw t.timeDelta=e,t.nextTaskEvent=o.event,t.nextTaskEndEvent=o.endEvent,t.nextTaskEndTime=o.endTime,t.currentTaskEvent=a.event,t.currentTaskEndEvent=a.endEvent,t.currentTaskEndTime=a.endTime,t}{const e=o,t=a,n=a.parent;if(n){const a=n.children.length-1;if(n.children[a]!==t)throw new Error("Fatal trace logic error - impossible children");n.children.pop(),n.children.push(e)}e.parent=n,e.startTime=t.startTime,e.duration=e.endTime-e.startTime,a=e,o=t}}}o.parent=a,a.children.push(o),MainThreadTasks$2._assignAllTimersUntilTs(a,o.startTime,n,r)}a=o}a&&MainThreadTasks$2._assignAllTimersUntilTs(a,a.endTime,n,r)}static _createTasksFromEvents(e,t,n){const a=[],r=[],o=[];for(const t of e)"X"!==t.ph&&"B"!==t.ph||a.push(t),"E"===t.ph&&r.push(t),"TimerInstall"===t.name&&o.push(t)
-;const i=MainThreadTasks$2._createTasksFromStartAndEndEvents(a,r,n).sort(((e,t)=>e.startTime-t.startTime||t.duration-e.duration));return MainThreadTasks$2._createTaskRelationships(i,o,t),i.sort(((e,t)=>e.startTime-t.startTime||t.duration-e.duration))}static _computeRecursiveSelfTime(e,t){if(t&&e.endTime>t.endTime)throw new Error("Fatal trace logic error - child cannot end after parent");const n=e.children.map((t=>MainThreadTasks$2._computeRecursiveSelfTime(t,e))).reduce(((e,t)=>e+t),0);return e.selfTime=e.duration-n,e.duration}static _computeRecursiveAttributableURLs(e,t,n,a){const r=e.event.args,o={...r.beginData||{},...r.data||{}},i=o.frame||"";let s=a.frameURLsById.get(i);const c=(o.stackTrace||[]).map((e=>e.url)),l=c[0];i&&s&&s.startsWith("about:")&&l&&(a.frameURLsById.set(i,l),s=l);let u=[];switch(e.event.name){case"v8.compile":case"EvaluateScript":case"FunctionCall":u=[o.url,s];break;case"v8.compileModule":u=[e.event.args.fileName];break;case"TimerFire":{
-const t=e.event.args.data.timerId,n=a.timers.get(t);if(!n)break;u=n.attributableURLs;break}case"ParseHTML":u=[o.url,s];break;case"ParseAuthorStyleSheet":u=[o.styleSheetUrl,s];break;case"UpdateLayoutTree":case"Layout":case"Paint":if(s){u=[s];break}if(n.length)break;u=a.lastTaskURLs;break;case"XHRReadyStateChange":case"XHRLoad":{const e=o.url,t=o.readyState;if(!e||"number"==typeof t&&4!==t)break;const n=a.xhrs.get(e);if(!n)break;u=n.attributableURLs;break}default:u=[]}const d=Array.from(t);for(const e of[...u,...c])e&&(n.includes(e)||n.push(e),d[d.length-1]!==e&&d.push(e));e.attributableURLs=d,e.children.forEach((e=>MainThreadTasks$2._computeRecursiveAttributableURLs(e,d,n,a))),d.length||e.parent||!n.length||MainThreadTasks$2._setRecursiveEmptyAttributableURLs(e,n)}static _setRecursiveEmptyAttributableURLs(e,t){e.attributableURLs.length||(e.attributableURLs=t.slice(),e.children.forEach((e=>MainThreadTasks$2._setRecursiveEmptyAttributableURLs(e,t))))}
-static _computeRecursiveTaskGroup(e,t){const n=Sm[e.event.name];e.group=n||t||Cm.other,e.children.forEach((t=>MainThreadTasks$2._computeRecursiveTaskGroup(t,e.group)))}static getMainThreadTasks(e,t,n,a){const r=new Map,o=new Map,i=new Map;t.forEach((({id:e,url:t})=>i.set(e,t)));const s={timers:r,xhrs:o,frameURLsById:i,lastTaskURLs:[]},c=MainThreadTasks$2._createTasksFromEvents(e,s,n);for(const e of c)e.parent||(MainThreadTasks$2._computeRecursiveSelfTime(e,void 0),MainThreadTasks$2._computeRecursiveAttributableURLs(e,[],[],s),MainThreadTasks$2._computeRecursiveTaskGroup(e),s.lastTaskURLs=e.attributableURLs);const l=a??c[0].startTime;for(const e of c)if(e.startTime=(e.startTime-l)/1e3,e.endTime=(e.endTime-l)/1e3,e.duration/=1e3,e.selfTime/=1e3,!Number.isFinite(e.selfTime))throw new Error("Invalid task timing data");return c}static printTaskTreeToDebugString(e,t={}){const n=Math.max(...e.map((e=>e.endTime)),0),{printWidth:a=100,startTime:r=0,endTime:o=n,taskLabelFn:i=(e=>e.event.name)}=t
-;function computeTaskDepth(e){let t=0;for(;e.parent;e=e.parent)t++;return t}const s=(o-r)/a,c=new Map,l=new Map;for(const t of e){if(t.startTime>o||t.endTime<r)continue;const e=computeTaskDepth(t),n=l.get(e)||[];n.push(t),l.set(e,n);const a=String.fromCharCode(65+c.size%26);c.set(t,{id:a,task:t})}const u=[`Trace Duration: ${n.toFixed(0)}ms`,`Range: [${r}, ${o}]`,`█ = ${s.toFixed(2)}ms`,""],d=Array.from(l.entries()).sort(((e,t)=>e[0]-t[0]));for(const[,e]of d){const t=Array.from({length:a}).map((()=>" "));for(const n of e){const e=Math.max(n.startTime,r),a=Math.min(n.endTime,o),{id:i}=c.get(n)||{id:"?"},l=Math.floor(e/s),u=Math.floor(a/s),d=Math.floor((l+u)/2);for(let e=l;e<=u;e++)t[e]="█";for(let e=0;e<i.length;e++)t[d]=i}u.push(t.join(""))}u.push("");for(const{id:e,task:t}of c.values())u.push(`${e} = ${i(t)}`);return u.join("\n")}}const _m=makeComputedArtifact(class MainThreadTasks$1{static async compute_(e,t){const{mainThreadEvents:n,frames:a,timestamps:r}=await mo.request(e,t)
-;return MainThreadTasks$2.getMainThreadTasks(n,a,r.traceEnd,r.timeOrigin)}},null),Am=new Set(["CpuProfiler::StartProfiling"]),km=new Set(["V8.GCCompactor","MajorGC","MinorGC"]);function getJavaScriptURLs(e){const t=new Set;for(const n of e)n.resourceType===NetworkRequest.TYPES.Script&&t.add(n.url);return t}function getAttributableURLForTask(e,t){const n=e.attributableURLs.find((e=>t.has(e))),a=e.attributableURLs[0];let r=n||a;return r&&"about:blank"!==r||(r=Am.has(e.event.name)?"Browser":km.has(e.event.name)?"Browser GC":"Unattributable"),r}function getExecutionTimingsByURL(e,t){const n=getJavaScriptURLs(t),a=new Map;for(const t of e){const e=getAttributableURLForTask(t,n),r=a.get(e)||{},o=r[t.group.id]||0;r[t.group.id]=o+t.selfTime,a.set(e,r)}return a}const xm={title:"JavaScript execution time",failureTitle:"Reduce JavaScript execution time",
-description:"Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to reduce Javascript execution time](https://developer.chrome.com/docs/lighthouse/performance/bootup-time/).",columnTotal:"Total CPU Time",columnScriptEval:"Script Evaluation",columnScriptParse:"Script Parse",chromeExtensionsWarning:"Chrome extensions negatively affected this page's load performance. Try auditing the page in incognito mode or from a Chrome profile without extensions."},Fm=createIcuMessageFn("core/audits/bootup-time.js",xm);class BootupTime extends Audit{static get meta(){return{id:"bootup-time",title:Fm(xm.title),failureTitle:Fm(xm.failureTitle),description:Fm(xm.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{p10:1282,median:3500,thresholdInMs:50}}static async audit(e,t){
-const n=t.settings||{},a=e.traces[BootupTime.DEFAULT_PASS],r=e.devtoolsLogs[BootupTime.DEFAULT_PASS],o=await bo.request(r,t),i=await _m.request(a,t),s="simulate"===n.throttlingMethod?n.throttling.cpuSlowdownMultiplier:1,c=getExecutionTimingsByURL(i,o);let l=!1,u=0;const d=Array.from(c).map((([e,n])=>{let a=0;for(const[e,t]of Object.entries(n))n[e]=t*s,a+=t*s;const r=n[Cm.scriptEvaluation.id]||0,o=n[Cm.scriptParseCompile.id]||0;return a>=t.options.thresholdInMs&&(u+=r+o),l=l||e.startsWith("chrome-extension:")&&r>100,{url:e,total:a,scripting:r,scriptParseCompile:o}})).filter((e=>e.total>=t.options.thresholdInMs)).sort(((e,t)=>t.total-e.total));let m;l&&(m=[Fm(xm.chromeExtensionsWarning)]);const p=[{key:"url",valueType:"url",label:Fm(Ar.columnURL)},{key:"total",granularity:1,valueType:"ms",label:Fm(xm.columnTotal)},{key:"scripting",granularity:1,valueType:"ms",label:Fm(xm.columnScriptEval)},{key:"scriptParseCompile",granularity:1,valueType:"ms",label:Fm(xm.columnScriptParse)
-}],h=BootupTime.makeTableDetails(p,d,{wastedMs:u,sortedBy:["total"]});return{score:Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},u),numericValue:u,numericUnit:"millisecond",displayValue:u>0?Fm(Ar.seconds,{timeInMs:u}):"",details:h,runWarnings:m}}}var Rm=Object.freeze({__proto__:null,default:BootupTime,UIStrings:xm});class LanternMetric{static getScriptUrls(e,t){const n=new Set;return e.traverse((e=>{e.type!==BaseNode.TYPES.CPU&&e.record.resourceType===NetworkRequest.TYPES.Script&&(t&&!t(e)||n.add(e.record.url))})),n}static get COEFFICIENTS(){throw new Error("COEFFICIENTS unimplemented!")}static getScaledCoefficients(e){return this.COEFFICIENTS}static getOptimisticGraph(e,t){throw new Error("Optimistic graph unimplemented!")}static getPessimisticGraph(e,t){throw new Error("Pessmistic graph unimplemented!")}static getEstimateFromSimulation(e,t){return e}static async computeMetricWithGraphs(e,t,n){if("navigation"!==(e.gatherContext||{gatherMode:"navigation"
-}).gatherMode)throw new Error("Lantern metrics can only be computed on navigations");const a=this.name.replace("Lantern",""),r=await fo.request(e,t),o=await Lc.request(e.trace,t),i=e.simulator||await Go.request(e,t),s=this.getOptimisticGraph(r,o),c=this.getPessimisticGraph(r,o);let l={label:`optimistic${a}`};const u=i.simulate(s,l);l={label:`optimisticFlex${a}`,flexibleOrdering:!0};const d=i.simulate(s,l);l={label:`pessimistic${a}`};const m=i.simulate(c,l),p=this.getEstimateFromSimulation(u.timeInMs<d.timeInMs?u:d,{...n,optimistic:!0}),h=this.getEstimateFromSimulation(m,{...n,optimistic:!1}),f=this.getScaledCoefficients(i.rtt),y=f.intercept>0?Math.min(1,p.timeInMs/1e3):1;return{timing:f.intercept*y+f.optimistic*p.timeInMs+f.pessimistic*h.timeInMs,optimisticEstimate:p,pessimisticEstimate:h,optimisticGraph:s,pessimisticGraph:c}}static async compute_(e,t){return this.computeMetricWithGraphs(e,t)}}const Im=makeComputedArtifact(class LanternFirstContentfulPaint extends LanternMetric{
-static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getBlockingNodeData(e,t,n,a){const r=new Map,o=[];e.traverse((e=>{if(e.type===BaseNode.TYPES.CPU){e.startTime<=t&&o.push(e);const n=e.getEvaluateScriptURLs();for(const t of n){const n=r.get(t)||e;r.set(t,e.startTime<n.startTime?e:n)}}})),o.sort(((e,t)=>e.startTime-t.startTime));const i=LanternMetric.getScriptUrls(e,(e=>e.endTime<=t&&n(e))),s=new Set,c=new Set;for(const e of i){const t=r.get(e);t&&(o.includes(t)?c.add(t.id):s.add(e))}const l=o.find((e=>e.didPerformLayout()));l&&c.add(l.id);const u=o.find((e=>e.childEvents.some((e=>"Paint"===e.name))));u&&c.add(u.id);const d=o.find((e=>e.childEvents.some((e=>"ParseHTML"===e.name))));return d&&c.add(d.id),a&&o.filter(a).forEach((e=>c.add(e.id))),{definitelyNotRenderBlockingScriptUrls:s,blockingCpuNodeIds:c}}static getFirstPaintBasedGraph(e,t,n,a){const{definitelyNotRenderBlockingScriptUrls:r,blockingCpuNodeIds:o}=this.getBlockingNodeData(e,t,n,a)
-;return e.cloneWithRelationships((e=>{if(e.type===BaseNode.TYPES.NETWORK){if((e.endTime>t||e.startTime>t)&&!e.isMainDocument())return!1;const a=e.record.url;return!r.has(a)&&n(e)}return o.has(e.id)}))}static getOptimisticGraph(e,t){return this.getFirstPaintBasedGraph(e,t.timestamps.firstContentfulPaint,(e=>e.hasRenderBlockingPriority()&&"script"!==e.initiatorType))}static getPessimisticGraph(e,t){return this.getFirstPaintBasedGraph(e,t.timestamps.firstContentfulPaint,(e=>e.hasRenderBlockingPriority()))}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const Mm=makeComputedArtifact(class LanternFirstMeaningfulPaint extends LanternMetric{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e,t){const n=t.timestamps.firstMeaningfulPaint;if(!n)throw new LighthouseError(LighthouseError.errors.NO_FMP);return Im.getFirstPaintBasedGraph(e,n,(e=>e.hasRenderBlockingPriority()&&"script"!==e.initiatorType))}
-static getPessimisticGraph(e,t){const n=t.timestamps.firstMeaningfulPaint;if(!n)throw new LighthouseError(LighthouseError.errors.NO_FMP);return Im.getFirstPaintBasedGraph(e,n,(e=>e.hasRenderBlockingPriority()),(e=>e.didPerformLayout()))}static async compute_(e,t){const n=await Im.request(e,t),a=await this.computeMetricWithGraphs(e,t);return a.timing=Math.max(a.timing,n.timing),a}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);class LanternInteractive extends LanternMetric{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e.cloneWithRelationships((e=>{if(e.type===BaseNode.TYPES.CPU)return e.event.dur>2e4;const t=e.record.resourceType===NetworkRequest.TYPES.Image,n=e.record.resourceType===NetworkRequest.TYPES.Script;return!t&&(n||"High"===e.record.priority||"VeryHigh"===e.record.priority)}))}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){
-if(!t.fmpResult)throw new Error("missing fmpResult");const n=LanternInteractive.getLastLongTaskEndTime(e.nodeTimings),a=t.optimistic?t.fmpResult.optimisticEstimate.timeInMs:t.fmpResult.pessimisticEstimate.timeInMs;return{timeInMs:Math.max(a,n),nodeTimings:e.nodeTimings}}static async compute_(e,t){const n=await Mm.request(e,t),a=await this.computeMetricWithGraphs(e,t,{fmpResult:n});return a.timing=Math.max(a.timing,n.timing),a}static getLastLongTaskEndTime(e,t=50){return Array.from(e.entries()).filter((([e,n])=>e.type===BaseNode.TYPES.CPU&&n.duration>t)).map((([e,t])=>t.endTime)).reduce(((e,t)=>Math.max(e||0,t||0)),0)}}const Lm=makeComputedArtifact(LanternInteractive,["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);class LanternLargestContentfulPaint extends LanternMetric{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static isNotLowPriorityImageNode(e){if("network"!==e.type)return!0
-;const t="Image"===e.record.resourceType,n="Low"===e.record.priority||"VeryLow"===e.record.priority;return!t||!n}static getOptimisticGraph(e,t){const n=t.timestamps.largestContentfulPaint;if(!n)throw new LighthouseError(LighthouseError.errors.NO_LCP);return Im.getFirstPaintBasedGraph(e,n,LanternLargestContentfulPaint.isNotLowPriorityImageNode)}static getPessimisticGraph(e,t){const n=t.timestamps.largestContentfulPaint;if(!n)throw new LighthouseError(LighthouseError.errors.NO_LCP);return Im.getFirstPaintBasedGraph(e,n,(e=>!0),(e=>e.didPerformLayout()))}static getEstimateFromSimulation(e){const t=Array.from(e.nodeTimings.entries()).filter((e=>LanternLargestContentfulPaint.isNotLowPriorityImageNode(e[0]))).map((e=>e[1].endTime));return{timeInMs:Math.max(...t),nodeTimings:e.nodeTimings}}static async compute_(e,t){const n=await Im.request(e,t),a=await this.computeMetricWithGraphs(e,t);return a.timing=Math.max(a.timing,n.timing),a}}
-const Nm=makeComputedArtifact(LanternLargestContentfulPaint,["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const Pm=makeComputedArtifact(class LCPImageRecord{static async compute_(e,t){const{trace:n,devtoolsLog:a}=e,r=await bo.request(a,t),o=await Lc.request(n,t);if(void 0===o.timings.largestContentfulPaint)throw new LighthouseError(LighthouseError.errors.NO_LCP);const i=o.largestContentfulPaintEvt;if(!i)return;const s=n.traceEvents.filter((e=>"LargestImagePaint::Candidate"===e.name&&e.args.frame===i.args.frame&&e.args.data?.DOMNodeId===i.args.data?.nodeId&&e.args.data?.size===i.args.data?.size)).sort(((e,t)=>t.ts-e.ts))[0],c=s?.args.data?.imageUrl;if(!c)return;return r.filter((e=>e.url===c&&e.finished&&e.frameId===s.args.frame&&e.networkRequestTime<(o.timestamps.largestContentfulPaint||0))).map((e=>{for(;e.redirectDestination;)e=e.redirectDestination;return e})).filter((e=>"Image"===e.resourceType)).sort(((e,t)=>e.networkEndTime-t.networkEndTime))[0]}
-},["devtoolsLog","trace"]),Om=createIcuMessageFn("core/audits/byte-efficiency/byte-efficiency-audit.js",{});class ByteEfficiencyAudit extends Audit{static scoreForWastedMs(e){return Audit.computeLogNormalScore({p10:150,median:935},e)}static estimateTransferSize(e,t,n){if(e){if(e.resourceType===n)return e.transferSize||0;{const n=e.transferSize||0,a=e.resourceSize||0,r=Number.isFinite(a)&&a>0?n/a:1;return Math.round(t*r)}}switch(n){case"Stylesheet":return Math.round(.2*t);case"Script":case"Document":return Math.round(.33*t);default:return Math.round(.5*t)}}static async audit(e,t){const n=e.GatherContext,a=e.devtoolsLogs[Audit.DEFAULT_PASS],r={devtoolsLog:a,settings:t?.settings||{}},o=await bo.request(a,t);if(!o.some((e=>e.transferSize))&&"timespan"===n.gatherMode)return{score:1,notApplicable:!0};const i=Audit.makeMetricComputationDataInput(e,t),[s,c]=await Promise.all([this.audit_(e,o,t),Go.request(r,t)]);return this.createAuditProduct(s,c,i,t)}static computeWasteWithGraph(e,t,n,a){
-a=Object.assign({label:""},a);const r=`${this.meta.id}-${a.label}-before`,o=`${this.meta.id}-${a.label}-after`,i=n.simulate(t,{label:r}),s=a.providedWastedBytesByUrl||new Map;if(!a.providedWastedBytesByUrl)for(const{url:t,wastedBytes:n}of e)s.set(t,(s.get(t)||0)+n);const c=new Map;t.traverse((e=>{if("network"!==e.type)return;const t=s.get(e.record.url);if(!t)return;const n=e.record.transferSize;c.set(e.record.requestId,n),e.record.transferSize=Math.max(n-t,0)}));const l=n.simulate(t,{label:o});t.traverse((e=>{if("network"!==e.type)return;const t=c.get(e.record.requestId);void 0!==t&&(e.record.transferSize=t)}));const u=i.timeInMs-l.timeInMs;return{savings:10*Math.round(Math.max(u,0)/10),simulationBeforeChanges:i,simulationAfterChanges:l}}static computeWasteWithTTIGraph(e,t,n,a){a=Object.assign({includeLoad:!0},a);const{savings:r,simulationBeforeChanges:o,simulationAfterChanges:i}=this.computeWasteWithGraph(e,t,n,{...a,label:"overallLoad"})
-;let s=Lm.getLastLongTaskEndTime(o.nodeTimings)-Lm.getLastLongTaskEndTime(i.nodeTimings);return a.includeLoad&&(s=Math.max(s,r)),10*Math.round(Math.max(s,0)/10)}static async createAuditProduct(e,t,n,a){const r=e.items.sort(((e,t)=>t.wastedBytes-e.wastedBytes)),o=r.reduce(((e,t)=>e+t.wastedBytes),0),i={FCP:0,LCP:0};let s;if("navigation"===n.gatherContext.gatherMode){const o=await fo.request(n,a),{pessimisticGraph:c}=await Im.request(n,a),{pessimisticGraph:l}=await Nm.request(n,a);s=this.computeWasteWithTTIGraph(r,o,t,{providedWastedBytesByUrl:e.wastedBytesByUrl});const{savings:u}=this.computeWasteWithGraph(r,c,t,{providedWastedBytesByUrl:e.wastedBytesByUrl,label:"fcp"}),{savings:d}=this.computeWasteWithGraph(r,l,t,{providedWastedBytesByUrl:e.wastedBytesByUrl,label:"lcp"});let m=0;const p=await Pm.request(n,a);if(p){const e=r.find((e=>e.url===p.url));e&&(m=t.computeWastedMsFromWastedBytes(e.wastedBytes))}i.FCP=u,i.LCP=Math.max(d,m)}else s=t.computeWastedMsFromWastedBytes(o)
-;let c=e.displayValue||"";void 0===e.displayValue&&o&&(c=Om(Ar.displayValueByteSavings,{wastedBytes:o}));const l=e.sortedBy||["wastedBytes"],u=Audit.makeOpportunityDetails(e.headings,r,{overallSavingsMs:s,overallSavingsBytes:o,sortedBy:l});return u.debugData={type:"debugdata",metricSavings:i},{explanation:e.explanation,warnings:e.warnings,displayValue:c,numericValue:s,numericUnit:"millisecond",score:ByteEfficiencyAudit.scoreForWastedMs(s),details:u,metricSavings:i}}static audit_(e,t,n){throw new Error("audit_ unimplemented")}}function computeGeneratedFileSizes(e,t,n){const a=n.split("\n"),r={},o=t;let i=o;e.computeLastGeneratedColumns();for(const t of e.mappings()){const n=t.sourceURL,o=t.lineNumber,s=t.columnNumber,c=t.lastColumnNumber;if(!n)continue;const l=a[o];if(null==l){const t=`${e.url()} mapping for line out of bounds: ${o+1}`;return Log.error("JSBundles",t),{errorMessage:t}}if(s>l.length){const t=`${e.url()} mapping for column out of bounds: ${o+1}:${s}`
-;return Log.error("JSBundles",t),{errorMessage:t}}let u=0;if(void 0!==c){if(c>l.length){const t=`${e.url()} mapping for last column out of bounds: ${o+1}:${c}`;return Log.error("JSBundles",t),{errorMessage:t}}u=c-s}else u=l.length-s+1;r[n]=(r[n]||0)+u,i-=u}return{files:r,unmappedBytes:i,totalBytes:o}}const Bm=makeComputedArtifact(class JSBundles{static async compute_(e){const{SourceMaps:t,Scripts:n}=e,a=[];for(const e of t){if(!e.map)continue;const{scriptId:t,map:r}=e;if(!r.mappings)continue;const o=n.find((e=>e.scriptId===t));if(!o)continue;const i=e.scriptUrl||"compiled.js",s=e.sourceMapUrl||"compiled.js.map",c=new Fc.SourceMap(i,s,r),l={rawMap:r,script:o,map:c,sizes:computeGeneratedFileSizes(c,o.length||0,o.content||"")};a.push(l)}return a}},["Scripts","SourceMaps"]);class ModuleDuplication{static normalizeSource(e){const t=(e=e.replace(/\?$/,"")).lastIndexOf("node_modules");return-1!==t&&(e=e.substring(t)),e}static _shouldIgnoreSource(e){
-return!!e.includes("webpack/bootstrap")||(!!e.includes("(webpack)/buildin")||!!e.includes("external "))}static _normalizeAggregatedData(e){for(const[t,n]of e.entries()){let a=n;if(a.sort(((e,t)=>t.resourceSize-e.resourceSize)),a.length>1){const e=a[0].resourceSize;a=a.filter((t=>t.resourceSize/e>=.1))}a=a.filter((e=>e.resourceSize>=512)),a.length>1?e.set(t,a):e.delete(t)}}static async compute_(e,t){const n=await Bm.request(e,t),a=new Map;for(const{rawMap:e,sizes:t}of n){if("errorMessage"in t)continue;const n=[];a.set(e,n);for(let a=0;a<e.sources.length;a++){if(this._shouldIgnoreSource(e.sources[a]))continue;const r=(e.sourceRoot||"")+e.sources[a],o=t.files[r];n.push({source:ModuleDuplication.normalizeSource(e.sources[a]),resourceSize:o})}}const r=new Map;for(const{rawMap:e,script:t}of n){const n=a.get(e);if(n)for(const e of n){let n=r.get(e.source);n||(n=[],r.set(e.source,n)),n.push({scriptId:t.scriptId,scriptUrl:t.url,resourceSize:e.resourceSize})}}
-return this._normalizeAggregatedData(r),r}}const Um=makeComputedArtifact(ModuleDuplication,["Scripts","SourceMaps"]);function isInline(e){return Boolean(e.startLine||e.startColumn)}function getRequestForScript(e,t){let n=e.find((e=>e.url===t.url));for(;n?.redirectDestination;)n=n.redirectDestination;return n}const jm={title:"Remove duplicate modules in JavaScript bundles",description:"Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. "},zm=createIcuMessageFn("core/audits/byte-efficiency/duplicated-javascript.js",jm);function indexOfOrEnd(e,t,n=0){const a=e.indexOf(t,n);return-1===a?e.length:a}class DuplicatedJavascript extends ByteEfficiencyAudit{static get meta(){return{id:"duplicated-javascript",title:zm(jm.title),description:zm(jm.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","SourceMaps","Scripts","GatherContext","URL"]}}static _getNodeModuleName(e){
-const t=e.split("node_modules/"),n=indexOfOrEnd(e=t[t.length-1],"/");return"@"===e[0]?e.slice(0,indexOfOrEnd(e,"/",n+1)):e.slice(0,n)}static async _getDuplicationGroupedByNodeModules(e,t){const n=await Um.request(e,t),a=new Map;for(const[e,t]of n.entries()){if(!e.includes("node_modules")){a.set(e,t);continue}const n="node_modules/"+DuplicatedJavascript._getNodeModuleName(e),r=a.get(n)||[];for(const{scriptId:e,scriptUrl:n,resourceSize:a}of t){let t=r.find((t=>t.scriptId===e));t||(t={scriptId:e,scriptUrl:n,resourceSize:0},r.push(t)),t.resourceSize+=a}a.set(n,r)}for(const e of n.values())e.sort(((e,t)=>t.resourceSize-e.resourceSize));return a}static _estimateTransferRatio(e,t){return ByteEfficiencyAudit.estimateTransferSize(e,t,"Script")/t}static async audit_(e,t,n){const a=n.options?.ignoreThresholdInBytes||1024,r=await DuplicatedJavascript._getDuplicationGroupedByNodeModules(e,n),o=new Map,i=[];let s=0;const c=new Set,l=new Map;for(const[n,u]of r.entries()){const r=[];let d=0
-;for(let n=0;n<u.length;n++){const a=u[n],i=a.scriptId,s=e.Scripts.find((e=>e.scriptId===i)),c=s?.url||"";let m=o.get(c);if(void 0===m){if(!s||void 0===s.length)continue;const e=s.length,n=getRequestForScript(t,s);m=DuplicatedJavascript._estimateTransferRatio(n,e),o.set(c,m)}if(void 0===m)continue;const p=Math.round(a.resourceSize*m);r.push({url:c,sourceTransferBytes:p}),0!==n&&(d+=p,l.set(c,(l.get(c)||0)+p))}if(d<=a){s+=d;for(const e of r)c.add(e.url)}else i.push({source:n,wastedBytes:d,url:"",totalBytes:0,subItems:{type:"subitems",items:r}})}s>a&&i.push({source:"Other",wastedBytes:s,url:"",totalBytes:0,subItems:{type:"subitems",items:Array.from(c).map((e=>({url:e})))}});return{items:i,headings:[{key:"source",valueType:"code",subItemsHeading:{key:"url",valueType:"url"},label:zm(Ar.columnSource)},{key:null,valueType:"bytes",subItemsHeading:{key:"sourceTransferBytes"},granularity:.05,label:zm(Ar.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",granularity:.05,
-label:zm(Ar.columnWastedBytes)}],wastedBytesByUrl:l}}}var qm=Object.freeze({__proto__:null,default:DuplicatedJavascript,UIStrings:jm});const Wm={title:"Use video formats for animated content",description:"Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more about efficient video formats](https://developer.chrome.com/docs/lighthouse/performance/efficient-animated-content/)"},$m=createIcuMessageFn("core/audits/byte-efficiency/efficient-animated-content.js",Wm);class EfficientAnimatedContent extends ByteEfficiencyAudit{static get meta(){return{id:"efficient-animated-content",title:$m(Wm.title),description:$m(Wm.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","GatherContext","URL"]}}static getPercentSavings(e){return Math.round(29.1*Math.log10(e)-100.7)/100}static audit_(e,t){return{
-items:t.filter((e=>"image/gif"===e.mimeType&&e.resourceType===NetworkRequest.TYPES.Image&&(e.resourceSize||0)>102400)).map((e=>{const t=e.resourceSize||0;return{url:e.url,totalBytes:t,wastedBytes:Math.round(t*EfficientAnimatedContent.getPercentSavings(t))}})),headings:[{key:"url",valueType:"url",label:$m(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:$m(Ar.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:$m(Ar.columnWastedBytes)}]}}}var Vm=Object.freeze({__proto__:null,default:EfficientAnimatedContent,UIStrings:Wm})
-;const Hm=JSON.parse('{\n  "moduleSizes": [11897, 498, 265, 277, 263, 453, 219, 216, 546, 339, 1608, 671, 1525, 420, 214, 504, 98, 524, 196, 268, 642, 204, 742, 618, 169, 394, 127, 433, 1473, 779, 239, 144, 182, 254, 77, 508, 124, 1388, 75, 133, 301, 362, 170, 1078, 182, 490, 195, 321, 316, 447, 551, 216, 284, 253, 17, 107, 295, 356, 345, 1939, 1596, 291, 139, 259, 1291, 179, 528, 174, 61, 326, 20, 444, 522, 104, 1945, 120, 1943, 680, 1409, 850, 630, 288, 38, 695, 569, 106, 587, 208, 370, 606, 766, 535, 616, 200, 170, 224, 422, 970, 978, 498, 284, 241, 210, 151, 194, 178, 814, 205, 189, 215, 111, 236, 147, 237, 191, 691, 212, 432, 499, 445, 176, 333, 129, 414, 617, 380, 251, 199, 524, 515, 681, 160, 259, 295, 283, 178, 472, 786, 520, 202, 575, 575, 349, 549, 458, 166, 173, 508, 1522, 743, 414, 431, 393, 899, 137, 270, 131, 472, 457, 205, 778, 801, 133, 3000],\n  "dependencies": {\n    "Array.prototype.fill": [0, 5, 8, 11, 21, 23, 25, 26, 29, 36, 37, 54, 55, 57, 58, 60, 66, 73, 74, 75, 76, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 114, 116],\n    "Array.prototype.filter": [0, 11, 12, 13, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 57, 58, 60, 62, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 117],\n    "Array.prototype.find": [0, 5, 11, 12, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 55, 57, 58, 60, 62, 64, 66, 73, 74, 75, 76, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 108, 114, 119],\n    "Array.prototype.findIndex": [0, 5, 11, 12, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 55, 57, 58, 60, 62, 64, 66, 73, 74, 75, 76, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 108, 114, 118],\n    "Array.prototype.forEach": [0, 9, 11, 12, 14, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 57, 58, 60, 62, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 120],\n    "Array.from": [0, 10, 11, 19, 20, 21, 22, 23, 25, 26, 27, 29, 36, 37, 41, 46, 49, 50, 54, 57, 58, 60, 61, 64, 66, 72, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 121],\n    "Array.isArray": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 62, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 122],\n    "Array.prototype.map": [0, 11, 12, 13, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 57, 58, 60, 62, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 123],\n    "Array.of": [0, 11, 21, 22, 23, 25, 26, 27, 29, 36, 37, 54, 57, 58, 60, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 124],\n    "Array.prototype.some": [0, 11, 12, 14, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 57, 58, 60, 62, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 125],\n    "Date.now": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 126],\n    "Date.prototype.toISOString": [0, 11, 21, 22, 23, 25, 26, 28, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 98, 99, 101, 102, 103, 104, 108, 109, 114, 127],\n    "Date.prototype.toJSON": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 128],\n    "Date.prototype.toString": [0, 25, 26, 29, 54, 58, 60, 74, 94, 114, 129],\n    "Function.prototype.name": [0, 130],\n    "Number.isInteger": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 67, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 131],\n    "Number.isSafeInteger": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 67, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 132],\n    "Object.defineProperties": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 114, 133],\n    "Object.defineProperty": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 134],\n    "Object.freeze": [0, 7, 11, 15, 21, 23, 25, 26, 27, 29, 36, 37, 39, 54, 57, 58, 59, 60, 66, 73, 74, 75, 79, 80, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 136],\n    "Object.getPrototypeOf": [0, 11, 21, 23, 24, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 83, 86, 88, 92, 94, 101, 102, 103, 104, 114, 138],\n    "Object.isExtensible": [0, 7, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 139],\n    "Object.isFrozen": [0, 7, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 140],\n    "Object.isSealed": [0, 7, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 141],\n    "Object.keys": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 114, 142],\n    "Object.preventExtensions": [0, 7, 11, 15, 21, 23, 25, 26, 27, 29, 36, 37, 39, 54, 57, 58, 59, 60, 66, 73, 74, 75, 79, 80, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 143],\n    "Object.seal": [0, 7, 11, 15, 21, 23, 25, 26, 27, 29, 36, 37, 39, 54, 57, 58, 59, 60, 66, 73, 74, 75, 79, 80, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 144],\n    "Object.setPrototypeOf": [0, 4, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 89, 92, 94, 101, 102, 103, 104, 114, 145],\n    "Reflect.apply": [0, 11, 21, 23, 25, 26, 29, 36, 37, 40, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 147],\n    "Reflect.construct": [0, 3, 11, 16, 21, 22, 23, 25, 26, 29, 36, 37, 40, 43, 54, 55, 57, 58, 60, 64, 66, 73, 74, 75, 76, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 108, 114, 148],\n    "Reflect.defineProperty": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 149],\n    "Reflect.deleteProperty": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 150],\n    "Reflect.get": [0, 11, 21, 23, 24, 25, 26, 29, 36, 37, 54, 57, 58, 60, 65, 66, 73, 74, 75, 79, 81, 82, 83, 86, 88, 92, 94, 101, 102, 103, 104, 114, 153],\n    "Reflect.getOwnPropertyDescriptor": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 151],\n    "Reflect.getPrototypeOf": [0, 11, 21, 23, 24, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 83, 86, 88, 92, 94, 101, 102, 103, 104, 114, 152],\n    "Reflect.has": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 154],\n    "Reflect.isExtensible": [0, 7, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 155],\n    "Reflect.ownKeys": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 156],\n    "Reflect.preventExtensions": [0, 11, 21, 23, 25, 26, 29, 36, 37, 39, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 157],\n    "Reflect.setPrototypeOf": [0, 4, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 89, 92, 94, 101, 102, 103, 104, 114, 158],\n    "String.prototype.codePointAt": [0, 11, 21, 22, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 97, 101, 102, 103, 104, 108, 109, 114, 159],\n    "String.fromCodePoint": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 160],\n    "String.raw": [0, 11, 21, 22, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 109, 114, 161],\n    "String.prototype.repeat": [0, 11, 21, 22, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 99, 101, 102, 103, 104, 108, 109, 114, 162],\n    "Object.entries": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 87, 88, 90, 92, 94, 101, 102, 103, 104, 114, 135],\n    "Object.getOwnPropertyDescriptors": [0, 11, 21, 23, 25, 26, 27, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 137],\n    "Object.values": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 87, 88, 90, 92, 94, 101, 102, 103, 104, 114, 146],\n    "focus-visible": [163]\n  },\n  "maxSize": 87683\n}'),Gm={
-title:"Avoid serving legacy JavaScript to modern browsers",description:"Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren't necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. [Learn how to use modern JavaScript](https://web.dev/publish-modern-javascript/)"},Ym=createIcuMessageFn("core/audits/byte-efficiency/legacy-javascript.js",Gm);class CodePatternMatcher{constructor(e){const t=e.map((e=>`(${e.expression})`)).join("|");this.re=new RegExp(`(^\r\n|\r|\n)|${t}`,"g"),this.patterns=e}match(e){this.re.lastIndex=0;const t=new Set,n=[];let a,r=0,o=0;for(;null!==(a=this.re.exec(e));){const e=a.slice(1),[i,...s]=e;if(i){r++,o=a.index+1;continue}const c=this.patterns[s.findIndex(Boolean)];if(t.has(c)){const e=n.find((e=>e.name===c.name));e&&(e.count+=1)
-}else t.add(c),n.push({name:c.name,line:r,column:a.index-o,count:1})}return n}}var Km=Object.freeze({__proto__:null,default:class LegacyJavascript extends ByteEfficiencyAudit{static get meta(){return{id:"legacy-javascript",scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,description:Ym(Gm.description),title:Ym(Gm.title),requiredArtifacts:["devtoolsLogs","traces","Scripts","SourceMaps","GatherContext","URL"]}}static buildPolyfillExpression(e,t){const qt=e=>`['"]${e}['"]`;let n="";if(n+=e?`${e}\\.${t}\\s?=[^=]`:`(?:window\\.|[\\s;]+)${t}\\s?=[^=]`,e&&(n+=`|${e}\\[${qt(t)}\\]\\s?=[^=]`),n+=`|defineProperty\\(${e||"window"},\\s?${qt(t)}`,e){const a=e.replace(".prototype","");n+=`|\\$export\\([^,]+,${qt(a)},{${t}:`,n+=`|{target:${qt(a)}\\S*},{${t}:`}else n+=`|function ${t}\\(`;return n}static getPolyfillData(){const e=[{name:"focus-visible",modules:["focus-visible"]
-}],t=[["Array.prototype.fill","es6.array.fill"],["Array.prototype.filter","es6.array.filter"],["Array.prototype.find","es6.array.find"],["Array.prototype.findIndex","es6.array.find-index"],["Array.prototype.forEach","es6.array.for-each"],["Array.from","es6.array.from"],["Array.isArray","es6.array.is-array"],["Array.prototype.map","es6.array.map"],["Array.of","es6.array.of"],["Array.prototype.some","es6.array.some"],["Date.now","es6.date.now"],["Date.prototype.toISOString","es6.date.to-iso-string"],["Date.prototype.toJSON","es6.date.to-json"],["Date.prototype.toString","es6.date.to-string"],["Function.prototype.name","es6.function.name"],["Number.isInteger","es6.number.is-integer"],["Number.isSafeInteger","es6.number.is-safe-integer"],["Object.defineProperties","es6.object.define-properties"],["Object.defineProperty","es6.object.define-property"],["Object.freeze","es6.object.freeze"],["Object.getPrototypeOf","es6.object.get-prototype-of"],["Object.isExtensible","es6.object.is-extensible"],["Object.isFrozen","es6.object.is-frozen"],["Object.isSealed","es6.object.is-sealed"],["Object.keys","es6.object.keys"],["Object.preventExtensions","es6.object.prevent-extensions"],["Object.seal","es6.object.seal"],["Object.setPrototypeOf","es6.object.set-prototype-of"],["Reflect.apply","es6.reflect.apply"],["Reflect.construct","es6.reflect.construct"],["Reflect.defineProperty","es6.reflect.define-property"],["Reflect.deleteProperty","es6.reflect.delete-property"],["Reflect.get","es6.reflect.get"],["Reflect.getOwnPropertyDescriptor","es6.reflect.get-own-property-descriptor"],["Reflect.getPrototypeOf","es6.reflect.get-prototype-of"],["Reflect.has","es6.reflect.has"],["Reflect.isExtensible","es6.reflect.is-extensible"],["Reflect.ownKeys","es6.reflect.own-keys"],["Reflect.preventExtensions","es6.reflect.prevent-extensions"],["Reflect.setPrototypeOf","es6.reflect.set-prototype-of"],["String.prototype.codePointAt","es6.string.code-point-at"],["String.fromCodePoint","es6.string.from-code-point"],["String.raw","es6.string.raw"],["String.prototype.repeat","es6.string.repeat"],["Object.entries","es7.object.entries"],["Object.getOwnPropertyDescriptors","es7.object.get-own-property-descriptors"],["Object.values","es7.object.values"]]
-;for(const[n,a]of t)e.push({name:n,modules:[a,a.replace("es6.","es.").replace("es7.","es.").replace("typed.","typed-array.")],corejs:!0});return e}static getCoreJsPolyfillData(){return this.getPolyfillData().filter((e=>e.corejs)).map((e=>({name:e.name,coreJs2Module:e.modules[0],coreJs3Module:e.modules[1]})))}static getPolyfillPatterns(){const e=[];for(const{name:t}of this.getCoreJsPolyfillData()){const n=t.split("."),a=n.length>1?n.slice(0,n.length-1).join("."):null,r=n[n.length-1];e.push({name:t,expression:this.buildPolyfillExpression(a,r)})}return e}static getTransformPatterns(){return[{name:"@babel/plugin-transform-classes",expression:"Cannot call a class as a function",estimateBytes:e=>150+e.count*"_classCallCheck()".length},{name:"@babel/plugin-transform-regenerator",expression:/regeneratorRuntime\(?\)?\.a?wrap/.source,estimateBytes:e=>80*e.count},{name:"@babel/plugin-transform-spread",expression:/\.apply\(void 0,\s?_toConsumableArray/.source,
-estimateBytes:e=>1169+e.count*"_toConsumableArray()".length}]}static detectAcrossScripts(e,t,n,a){const r=new Map,o=this.getPolyfillData();for(const n of Object.values(t)){if(!n.content)continue;const t=e.match(n.content),i=a.find((e=>e.script.scriptId===n.scriptId));if(i)for(const{name:e,modules:n}of o){if(t.some((t=>t.name===e)))continue;const a=i.rawMap.sources.find((e=>n.some((t=>e.endsWith(`${t}.js`)))));if(!a)continue;const r=i.map.mappings().find((e=>e.sourceURL===a));r?t.push({name:e,line:r.lineNumber,column:r.columnNumber,count:1}):t.push({name:e,line:0,column:0,count:1})}t.length&&r.set(n,t)}return r}static estimateWastedBytes(e){const t=e.filter((e=>!e.name.startsWith("@"))),n=e.filter((e=>e.name.startsWith("@")));let a=0;const r=new Set;for(const e of t){const t=Hm.dependencies[e.name];if(t)for(const e of t)r.add(e)}a+=[...r].reduce(((e,t)=>e+Hm.moduleSizes[t]),0),a=Math.min(a,Hm.maxSize);let o=0;for(const e of n){
-const t=this.getTransformPatterns().find((t=>t.name===e.name));t&&t.estimateBytes&&(o+=t.estimateBytes(e))}return a+o}static async estimateTransferRatioForScript(e,t,n,a){let r=e.get(t);if(void 0!==r)return r;const o=n.Scripts.find((e=>e.url===t));if(o&&null!==o.content){const e=getRequestForScript(a,o),t=o.length||0;r=ByteEfficiencyAudit.estimateTransferSize(e,t,"Script")/t}else r=1;return e.set(t,r),r}static async audit_(e,t,n){const a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=await li.request({URL:e.URL,devtoolsLog:a},n),o=await Bm.request(e,n),i=[],s=new CodePatternMatcher([...this.getPolyfillPatterns(),...this.getTransformPatterns()]),c=new Map,l=this.detectAcrossScripts(s,e.Scripts,t,o);for(const[n,a]of l.entries()){const r=await this.estimateTransferRatioForScript(c,n.url,e,t),s=Math.round(this.estimateWastedBytes(a)*r),l={url:n.url,wastedBytes:s,subItems:{type:"subitems",items:[]},totalBytes:0},u=o.find((e=>e.script.scriptId===n.scriptId));for(const e of a){
-const{name:t,line:a,column:r}=e,o={signal:t,location:ByteEfficiencyAudit.makeSourceLocation(n.url,a,r,u)};l.subItems.items.push(o)}i.push(l)}const u=new Map;for(const e of i)r.isFirstParty(e.url)&&u.set(e.url,e.wastedBytes);return{items:i,headings:[{key:"url",valueType:"url",subItemsHeading:{key:"location",valueType:"source-location"},label:Ym(Ar.columnURL)},{key:null,valueType:"code",subItemsHeading:{key:"signal"},label:""},{key:"wastedBytes",valueType:"bytes",label:Ym(Ar.columnWastedBytes)}],wastedBytesByUrl:u}}},UIStrings:Gm});const Jm={title:"Serve images in next-gen formats",description:"Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/)."},Xm=createIcuMessageFn("core/audits/byte-efficiency/modern-image-formats.js",Jm);class ModernImageFormats extends ByteEfficiencyAudit{
-static get meta(){return{id:"modern-image-formats",title:Xm(Jm.title),description:Xm(Jm.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["OptimizedImages","devtoolsLogs","traces","URL","GatherContext","ImageElements"]}}static estimateWebPSizeFromDimensions(e){const t=e.naturalWidth*e.naturalHeight;return Math.round(.2*t)}static estimateAvifSizeFromDimensions(e){const t=e.naturalWidth*e.naturalHeight;return Math.round(t*(2/12))}static estimateAvifSizeFromWebPAndJpegEstimates(e){if(!e.jpegSize||!e.webpSize)return;return 5*e.jpegSize/10/2+8*e.webpSize/10/2}static audit_(e){const t=e.URL.finalDisplayedUrl,n=e.OptimizedImages,a=e.ImageElements,r=new Map;a.forEach((e=>r.set(e.src,e)));const o=[],i=[];for(const e of n){const n=r.get(e.url);if(e.failed){i.push(`Unable to decode ${UrlUtils.getURLDisplayName(e.url)}`);continue}if("image/webp"===e.mimeType||"image/avif"===e.mimeType)continue;const a=e.jpegSize
-;let s=e.webpSize,c=ModernImageFormats.estimateAvifSizeFromWebPAndJpegEstimates({jpegSize:a,webpSize:s}),l=!0;if(void 0===s){if(!n){i.push(`Unable to locate resource ${UrlUtils.getURLDisplayName(e.url)}`);continue}if(!n.naturalDimensions)continue;const t=n.naturalDimensions.height,a=n.naturalDimensions.width;if(!a||!t)continue;s=ModernImageFormats.estimateWebPSizeFromDimensions({naturalHeight:t,naturalWidth:a}),c=ModernImageFormats.estimateAvifSizeFromDimensions({naturalHeight:t,naturalWidth:a}),l=!1}if(void 0===s||void 0===c)continue;const u=e.originalSize-s,d=e.originalSize-c;if(d<8192)continue;const m=UrlUtils.elideDataURI(e.url),p=!UrlUtils.originsMatch(t,e.url);o.push({node:n?ByteEfficiencyAudit.makeNodeItem(n.node):void 0,url:m,fromProtocol:l,isCrossOrigin:p,totalBytes:e.originalSize,wastedBytes:d,wastedWebpBytes:u})}return{warnings:i,items:o,headings:[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:Xm(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",
-label:Xm(Ar.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:Xm(Ar.columnWastedBytes)}]}}}var Zm=Object.freeze({__proto__:null,default:ModernImageFormats,UIStrings:Jm});class Metric{constructor(){}static getMetricComputationInput(e){return{trace:e.trace,devtoolsLog:e.devtoolsLog,gatherContext:e.gatherContext,settings:e.settings,URL:e.URL}}static computeSimulatedMetric(e,t){throw new Error("Unimplemented")}static computeObservedMetric(e,t){throw new Error("Unimplemented")}static async compute_(e,t){const n=e.gatherContext||{gatherMode:"navigation"},{trace:a,devtoolsLog:r,settings:o}=e;if(!a||!r||!o)throw new Error("Did not provide necessary metric computation data");const i=await mo.request(a,t),s="timespan"===n.gatherMode?void 0:await Lc.request(a,t),c=Object.assign({networkRecords:await bo.request(r,t),gatherContext:n,processedTrace:i,processedNavigation:s},e);switch(TraceProcessor.assertHasToplevelEvents(c.processedTrace.mainThreadEvents),o.throttlingMethod){
-case"simulate":if("navigation"!==n.gatherMode)throw new Error(`${n.gatherMode} does not support throttlingMethod simulate`);return this.computeSimulatedMetric(c,t);case"provided":case"devtools":return this.computeObservedMetric(c,t);default:throw new TypeError(`Unrecognized throttling method: ${o.throttlingMethod}`)}}}class NavigationMetric extends Metric{static computeSimulatedMetric(e,t){throw new Error("Unimplemented")}static computeObservedMetric(e,t){throw new Error("Unimplemented")}static async compute_(e,t){if("navigation"!==e.gatherContext.gatherMode)throw new Error(`${this.name} can only be computed on navigations`);return super.compute_(e,t)}}const Qm=5e3;class Interactive extends NavigationMetric{static _findNetworkQuietPeriods(e,t){const n=t.timestamps.traceEnd/1e3,a=e.filter((e=>e.finished&&"GET"===e.requestMethod&&!e.failed&&e.statusCode<400));return NetworkMonitor.findNetworkQuietPeriods(a,2,n)}static _findCPUQuietPeriods(e,t){
-const n=t.timestamps.timeOrigin/1e3,a=t.timestamps.traceEnd/1e3;if(0===e.length)return[{start:0,end:a}];const r=[];return e.forEach(((t,o)=>{0===o&&r.push({start:0,end:t.start+n}),o===e.length-1?r.push({start:t.end+n,end:a}):r.push({start:t.end+n,end:e[o+1].start+n})})),r}static findOverlappingQuietPeriods(e,t,n){const a=n.timestamps.firstContentfulPaint/1e3,isLongEnoughQuietPeriod=e=>e.end>a+Qm&&e.end-e.start>=Qm,r=this._findNetworkQuietPeriods(t,n).filter(isLongEnoughQuietPeriod),o=this._findCPUQuietPeriods(e,n).filter(isLongEnoughQuietPeriod),i=o.slice(),s=r.slice();let c=i.shift(),l=s.shift();for(;c&&l;)if(c.start>=l.start){if(l.end>=c.start+Qm)return{cpuQuietPeriod:c,networkQuietPeriod:l,cpuQuietPeriods:o,networkQuietPeriods:r};l=s.shift()}else{if(c.end>=l.start+Qm)return{cpuQuietPeriod:c,networkQuietPeriod:l,cpuQuietPeriods:o,networkQuietPeriods:r};c=i.shift()}
-throw new LighthouseError(c?LighthouseError.errors.NO_TTI_NETWORK_IDLE_PERIOD:LighthouseError.errors.NO_TTI_CPU_IDLE_PERIOD)}static computeSimulatedMetric(e,t){const n=NavigationMetric.getMetricComputationInput(e);return Lm.request(n,t)}static computeObservedMetric(e){const{processedTrace:t,processedNavigation:n,networkRecords:a}=e;if(!n.timestamps.domContentLoaded)throw new LighthouseError(LighthouseError.errors.NO_DCL);const r=TraceProcessor.getMainThreadTopLevelEvents(t).filter((e=>e.duration>=50)),o=Interactive.findOverlappingQuietPeriods(r,a,n).cpuQuietPeriod,i=1e3*Math.max(o.start,n.timestamps.firstContentfulPaint/1e3,n.timestamps.domContentLoaded/1e3),s=(i-n.timestamps.timeOrigin)/1e3;return Promise.resolve({timing:s,timestamp:i})}}const ep=makeComputedArtifact(Interactive,["devtoolsLog","gatherContext","settings","simulator","trace","URL"]),tp={title:"Defer offscreen images",
-description:"Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/)."},np=createIcuMessageFn("core/audits/byte-efficiency/offscreen-images.js",tp);class OffscreenImages extends ByteEfficiencyAudit{static get meta(){return{id:"offscreen-images",title:np(tp.title),description:np(tp.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["ImageElements","ViewportDimensions","GatherContext","devtoolsLogs","traces","URL"]}}static computeVisiblePixels(e,t){const n=t.innerWidth,a=t.innerHeight,r=3*t.innerHeight,o=Math.max(e.top,-100),i=Math.min(e.right,n+100),s=Math.min(e.bottom,a+r),c=Math.max(e.left,-100);return Math.max(i-c,0)*Math.max(s-o,0)}static computeWaste(e,t,n){const a=n.find((t=>t.url===e.src));if(!a)return null
-;if("lazy"===e.loading||"eager"===e.loading)return null;const r=UrlUtils.elideDataURI(e.src),o=e.displayedWidth*e.displayedHeight,i=this.computeVisiblePixels(e.clientRect,t),s=0===o?1:1-i/o,c=NetworkRequest.getResourceSizeOnNetwork(a),l=Math.round(c*s);return Number.isFinite(s)?{node:ByteEfficiencyAudit.makeNodeItem(e.node),url:r,requestStartTime:a.networkRequestTime,totalBytes:c,wastedBytes:l,wastedPercent:100*s}:new Error(`Invalid image sizing information ${r}`)}static filterLanternResults(e,t){const n=t.pessimisticEstimate.nodeTimings;let a=0;const r=new Map;for(const[e,t]of n)"cpu"===e.type&&t.duration>=50?a=Math.max(a,t.startTime):"network"===e.type&&r.set(e.record.url,t.startTime);return e.filter((e=>{if(e.wastedBytes<2048)return!1;if(e.wastedPercent<75)return!1;return(r.get(e.url)||0)<a-50}))}static filterObservedResults(e,t){return e.filter((e=>!(e.wastedBytes<2048)&&(!(e.wastedPercent<75)&&e.requestStartTime<t/1e3-50)))}static computeWasteWithTTIGraph(e,t,n){
-return super.computeWasteWithTTIGraph(e,t,n,{includeLoad:!1})}static async audit_(e,t,n){const a=e.ImageElements,r=e.ViewportDimensions,o=e.GatherContext,i=e.traces[ByteEfficiencyAudit.DEFAULT_PASS],s=e.devtoolsLogs[ByteEfficiencyAudit.DEFAULT_PASS],c=e.URL,l=[],u=new Map;for(const e of a){const n=OffscreenImages.computeWaste(e,r,t);if(null===n)continue;if(n instanceof Error){l.push(n.message),Qo.captureException(n,{tags:{audit:this.meta.id},level:"warning"});continue}const a=u.get(n.url);(!a||a.wastedBytes>n.wastedBytes)&&u.set(n.url,n)}const d=n.settings;let m;const p=Array.from(u.values());try{const e={trace:i,devtoolsLog:s,gatherContext:o,settings:d,URL:c},t=await ep.request(e,n),a=t;m="simulate"===n.settings.throttlingMethod?OffscreenImages.filterLanternResults(p,a):OffscreenImages.filterObservedResults(p,t.timestamp)}catch(e){if("simulate"===n.settings.throttlingMethod)throw e;m=OffscreenImages.filterObservedResults(p,await mo.request(i,n).then((e=>e.timestamps.traceEnd)))}
-return{warnings:l,items:m,headings:[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:np(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:np(Ar.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:np(Ar.columnWastedBytes)}]}}}var ap=Object.freeze({__proto__:null,default:OffscreenImages,UIStrings:tp});const rp=100;class UnusedCSS{static indexStylesheetsById(e,t){const n=t.filter((e=>e.resourceSize>0)).reduce(((e,t)=>(e[t.url]=t,e)),{});return e.reduce(((e,t)=>(e[t.header.styleSheetId]=Object.assign({usedRules:[],networkRecord:n[t.header.sourceURL]},t),e)),{})}static indexUsedRules(e,t){e.forEach((e=>{const n=t[e.styleSheetId];n&&e.used&&n.usedRules.push(e)}))}static computeUsage(e){let t=0;const n=e.content.length;for(const n of e.usedRules)t+=n.endOffset-n.startOffset;const a=ByteEfficiencyAudit.estimateTransferSize(e.networkRecord,n,"Stylesheet"),r=(n-t)/n;return{wastedBytes:Math.round(r*a),wastedPercent:100*r,totalBytes:a}}
-static determineContentPreview(e){let t=Util.truncate(e||"",500,"").replace(/( {2,}|\t)+/g,"  ").replace(/\n\s+}/g,"\n}").trim();if(t.length>rp){const e=t.indexOf("{"),n=t.indexOf("}");if(-1===e||-1===n||e>n||e>rp)t=Util.truncate(t,rp);else if(n<rp)t=t.slice(0,n+1)+" …";else{const n=Util.truncate(t,rp,""),a=n.lastIndexOf(";");t=a<e?n+"… } …":t.slice(0,a+1)+" … } …"}}return t}static mapSheetToResult(e){let t=e.header.sourceURL;if(!t||e.header.isInline){t=UnusedCSS.determineContentPreview(e.content)}return{url:t,...UnusedCSS.computeUsage(e)}}static async compute_(e,t){const{CSSUsage:n,devtoolsLog:a}=e,r=await bo.request(a,t),o=UnusedCSS.indexStylesheetsById(n.stylesheets,r);UnusedCSS.indexUsedRules(n.rules,o);return Object.keys(o).map((e=>UnusedCSS.mapSheetToResult(o[e])))}}const op=makeComputedArtifact(UnusedCSS,["CSSUsage","devtoolsLog"]);const ip=makeComputedArtifact(class FirstContentfulPaint$1 extends NavigationMetric{static computeSimulatedMetric(e,t){
-const n=NavigationMetric.getMetricComputationInput(e);return Im.request(n,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaint,timestamp:t.timestamps.firstContentfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]),sp={title:"Eliminate render-blocking resources",description:"Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/)."},cp=createIcuMessageFn("core/audits/byte-efficiency/render-blocking-resources.js",sp);function computeStackSpecificTiming(e,t,n){const a={...t};return n.some((e=>"amp"===e.id))&&e.type===BaseNode.TYPES.NETWORK&&e.record.resourceType===NetworkRequest.TYPES.Stylesheet&&t.endTime>2100&&(a.endTime=Math.max(t.startTime,2100),
-a.duration=a.endTime-a.startTime),a}class RenderBlockingResources extends Audit{static get meta(){return{id:"render-blocking-resources",title:cp(sp.title),supportedModes:["navigation"],scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,description:cp(sp.description),requiredArtifacts:["URL","TagsBlockingFirstPaint","traces","devtoolsLogs","CSSUsage","GatherContext","Stacks"]}}static async computeResults(e,t){const n=e.GatherContext,a=e.traces[Audit.DEFAULT_PASS],r=e.devtoolsLogs[Audit.DEFAULT_PASS],o={devtoolsLog:r,settings:t.settings},i=await Lc.request(a,t),s=await Go.request(o,t),c=await RenderBlockingResources.computeWastedCSSBytes(e,t),l={trace:a,devtoolsLog:r,gatherContext:n,simulator:s,settings:{...t.settings,throttlingMethod:"simulate"},URL:e.URL},u=await ip.request(l,t),d=i.timestamps.firstContentfulPaint/1e3,m=function getNodesAndTimingByUrl(e){const t={};return Array.from(e.keys()).forEach((n=>{if("network"!==n.type)return;const a=e.get(n);a&&(t[n.record.url]={node:n,nodeTiming:a
-})})),t}(u.optimisticEstimate.nodeTimings),p=[],h=new Set;for(const t of e.TagsBlockingFirstPaint){if(t.endTime>d)continue;if(!m[t.tag.url])continue;const{node:n,nodeTiming:a}=m[t.tag.url],r=computeStackSpecificTiming(n,a,e.Stacks);n.traverse((e=>h.add(e.id)));const o=Math.round(r.duration);o<50||p.push({url:t.tag.url,totalBytes:t.transferSize,wastedMs:o})}if(!p.length)return{results:p,wastedMs:0};return{results:p,wastedMs:RenderBlockingResources.estimateSavingsWithGraphs(s,u.optimisticGraph,h,c,e.Stacks)}}static estimateSavingsWithGraphs(e,t,n,a,r){const{nodeTimings:o}=e.simulate(t),i=new Map(o);let s=0;const c=t.cloneWithRelationships((e=>{!function adjustNodeTimings(e,t,n){const a=e.get(t);if(!a)return;const r=computeStackSpecificTiming(t,a,n);a.duration-r.duration&&(t.traverse((t=>{e.delete(t)})),e.set(t,r))}(i,e,r);const t=n.has(e.id);if(e.type!==BaseNode.TYPES.NETWORK)return!t;const o=e.record.resourceType===NetworkRequest.TYPES.Stylesheet;if(t&&o){const t=a.get(e.record.url)||0
-;s+=(e.record.transferSize||0)-t}return!t}));if("network"!==c.type)throw new Error("minimalFCPGraph not a NetworkNode");const l=Math.max(...Array.from(Array.from(i).map((e=>e[1].endTime)))),u=c.record.transferSize,d=u||0;c.record.transferSize=d+s;const m=e.simulate(c).timeInMs;return c.record.transferSize=u,Math.round(Math.max(l-m,0))}static async computeWastedCSSBytes(e,t){const n=new Map;try{const a=await op.request({CSSUsage:e.CSSUsage,devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS]},t);for(const e of a)n.set(e.url,e.wastedBytes)}catch{}return n}static async audit(e,t){const{results:n,wastedMs:a}=await RenderBlockingResources.computeResults(e,t);let r;n.length>0&&(r=cp(Ar.displayValueMsSavings,{wastedMs:a}));const o=[{key:"url",valueType:"url",label:cp(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:cp(Ar.columnTransferSize)},{key:"wastedMs",valueType:"timespanMs",label:cp(Ar.columnWastedMs)}],i=Audit.makeOpportunityDetails(o,n,{overallSavingsMs:a});return{displayValue:r,
-score:ByteEfficiencyAudit.scoreForWastedMs(a),numericValue:a,numericUnit:"millisecond",details:i}}}var lp=Object.freeze({__proto__:null,default:RenderBlockingResources,UIStrings:sp});const up={title:"Avoids enormous network payloads",failureTitle:"Avoid enormous network payloads",description:"Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",displayValue:"Total size was {totalBytes, number, bytes} KiB"},dp=createIcuMessageFn("core/audits/byte-efficiency/total-byte-weight.js",up);var mp=Object.freeze({__proto__:null,default:class TotalByteWeight extends Audit{static get meta(){return{id:"total-byte-weight",title:dp(up.title),failureTitle:dp(up.failureTitle),description:dp(up.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs"]}}static get defaultOptions(){return{p10:2731008,median:4096e3}}
-static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await bo.request(n,t);let r=0,o=[];a.forEach((e=>{if(NetworkRequest.isNonNetworkRequest(e)||!e.transferSize)return;const t={url:e.url,totalBytes:e.transferSize};r+=t.totalBytes,o.push(t)})),o=o.sort(((e,t)=>t.totalBytes-e.totalBytes||e.url.localeCompare(t.url))).slice(0,10);const i=Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},r),s=[{key:"url",valueType:"url",label:dp(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:dp(Ar.columnTransferSize)}],c=Audit.makeTableDetails(s,o,{sortedBy:["totalBytes"]});return{score:i,numericValue:r,numericUnit:"byte",displayValue:dp(up.displayValue,{totalBytes:r}),details:c}}},UIStrings:up});const pp=/(return|case|{|\(|\[|\.\.\.|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\*\*|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|\*\*=|<<=|>>=|>>>=|&=|\|=|\^=|=>|\/|\/=|\})$/,gp=/( |\n|\t)+$/;function hasPunctuatorBefore(e,t){for(let n=t;n>0;n--){
-const t=Math.max(0,n-6),a=e.slice(t,n);if(!gp.test(a))return pp.test(a)}return!0}function computeTokenLength(e,t){let n=0,a=!1,r=!1,o=!1,i=!1,s=!1,c=!1,l=null;const u=[];for(let d=0;d<e.length;d++){const m=e.substr(d,2),p=m.charAt(0),h=" "===p||"\n"===p||"\t"===p,f="'"===p||'"'===p||"`"===p;a?"\n"===p&&(a=!1):r?(o&&n++,"*/"===m&&(o&&n++,r=!1,d++)):i?(n++,"`"===l&&"${"===m?(u.push("templateBrace"),i=!1,n++,d++):"\\"===p?(n++,d++):p===l&&(i=!1)):s?(n++,"\\"===p?(n++,d++):"["===p?c=!0:"]"===p&&c?c=!1:"/"!==p||c||(s=!1)):"/*"===m?(r=!0,o="!"===e.charAt(d+2),o&&(n+=2),d++):"//"===m&&t.singlelineComments?(a=!0,r=!1,o=!1,d++):"/"===p&&t.regex&&hasPunctuatorBefore(e,d)?(s=!0,n++):"{"===p&&u.length?(u.push("normalBrace"),n++):"}"===p&&u.length?("templateBrace"===u[u.length-1]&&(i=!0,l="`"),u.pop(),n++):f?(i=!0,l=p,n++):h||n++}return r||i?e.length:n}const hp={title:"Minify CSS",
-description:"Minifying CSS files can reduce network payload sizes. [Learn how to minify CSS](https://developer.chrome.com/docs/lighthouse/performance/unminified-css/)."},fp=createIcuMessageFn("core/audits/byte-efficiency/unminified-css.js",hp);class UnminifiedCSS extends ByteEfficiencyAudit{static get meta(){return{id:"unminified-css",title:fp(hp.title),description:fp(hp.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["CSSUsage","devtoolsLogs","traces","URL","GatherContext"]}}static computeTokenLength(e){return function computeCSSTokenLength(e){return computeTokenLength(e,{singlelineComments:!1,regex:!1})}(e)}static computeWaste(e,t){const n=e.content,a=UnminifiedCSS.computeTokenLength(n);let r=e.header.sourceURL;if(!r||e.header.isInline){r=op.determineContentPreview(e.content)}const o=ByteEfficiencyAudit.estimateTransferSize(t,n.length,"Stylesheet"),i=1-a/n.length;return{url:r,totalBytes:o,wastedBytes:Math.round(o*i),wastedPercent:100*i}}
-static audit_(e,t){const n=[];for(const a of e.CSSUsage.stylesheets){const e=t.find((e=>e.url===a.header.sourceURL));if(!a.content)continue;const r=UnminifiedCSS.computeWaste(a,e);r.wastedPercent<5||r.wastedBytes<2048||!Number.isFinite(r.wastedBytes)||n.push(r)}return{items:n,headings:[{key:"url",valueType:"url",label:fp(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:fp(Ar.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:fp(Ar.columnWastedBytes)}]}}}var yp=Object.freeze({__proto__:null,default:UnminifiedCSS,UIStrings:hp});const bp={title:"Minify JavaScript",description:"Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/)."},vp=createIcuMessageFn("core/audits/byte-efficiency/unminified-javascript.js",bp);class UnminifiedJavaScript extends ByteEfficiencyAudit{static get meta(){return{id:"unminified-javascript",
-title:vp(bp.title),description:vp(bp.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["Scripts","devtoolsLogs","traces","GatherContext","URL"]}}static computeWaste(e,t,n){const a=e.length,r=function computeJSTokenLength(e){return computeTokenLength(e,{singlelineComments:!0,regex:!0})}(e),o=ByteEfficiencyAudit.estimateTransferSize(n,a,"Script"),i=1-r/a;return{url:t,totalBytes:o,wastedBytes:Math.round(o*i),wastedPercent:100*i}}static audit_(e,t){const n=[],a=[];for(const r of e.Scripts){if(!r.content)continue;const e=getRequestForScript(t,r),o=isInline(r)?`inline: ${Util.truncate(r.content,40)}`:r.url;try{const t=UnminifiedJavaScript.computeWaste(r.content,o,e);if(t.wastedPercent<10||t.wastedBytes<2048||!Number.isFinite(t.wastedBytes))continue;n.push(t)}catch(e){a.push(`Unable to process script ${r.url}: ${e.message}`)}}return{items:n,warnings:a,headings:[{key:"url",valueType:"url",label:vp(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",
-label:vp(Ar.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:vp(Ar.columnWastedBytes)}]}}}var wp=Object.freeze({__proto__:null,default:UnminifiedJavaScript,UIStrings:bp});const Dp={title:"Reduce unused CSS",description:"Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/)."},Ep=createIcuMessageFn("core/audits/byte-efficiency/unused-css-rules.js",Dp);var Tp=Object.freeze({__proto__:null,default:class UnusedCSSRules extends ByteEfficiencyAudit{static get meta(){return{id:"unused-css-rules",title:Ep(Dp.title),description:Ep(Dp.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["CSSUsage","URL","devtoolsLogs","traces","GatherContext"]}}static async audit_(e,t,n){return{items:(await op.request({CSSUsage:e.CSSUsage,
-devtoolsLog:e.devtoolsLogs[ByteEfficiencyAudit.DEFAULT_PASS]},n)).filter((e=>e&&e.wastedBytes>10240)),headings:[{key:"url",valueType:"url",label:Ep(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:Ep(Ar.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:Ep(Ar.columnWastedBytes)}]}}},UIStrings:Dp});
-/**
-   * @license Copyright 2020 Google Inc. All Rights Reserved.
-   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-   */class UnusedJavascriptSummary{static computeWaste(e){let t=0;for(const n of e.functions)t=Math.max(t,...n.ranges.map((e=>e.endOffset)));const n=new Uint8Array(t);for(const t of e.functions)for(const e of t.ranges)if(0===e.count)for(let t=e.startOffset;t<e.endOffset;t++)n[t]=1;let a=0;for(const e of n)a+=e;return{unusedByIndex:n,unusedLength:a,contentLength:t}}static createItem(e,t){const n=t.unusedLength/t.contentLength||0,a=Math.round(t.contentLength*n);return{scriptId:e,totalBytes:t.contentLength,wastedBytes:a,wastedPercent:100*n}}static createSourceWastedBytes(e,t){if(!t.script.content)return;const n={},a=t.script.content.split("\n").map((e=>e.length));let r=0;const o=a.map((e=>{const t=r;return r+=e+1,t}));t.map.computeLastGeneratedColumns();for(const r of t.map.mappings()){let t=o[r.lineNumber];t+=r.columnNumber;const i=void 0!==r.lastColumnNumber?r.lastColumnNumber-1:a[r.lineNumber];for(let a=r.columnNumber;a<=i;a++){if(1===e.unusedByIndex[t]){
-const e=r.sourceURL||"(unmapped)";n[e]=(n[e]||0)+1}t+=1}}const i=Object.entries(n).sort((([e,t],[n,a])=>a-t)),s={};for(const[e,t]of i)s[e]=t;return s}static async compute_(e){const{scriptId:t,scriptCoverage:n,bundle:a}=e,r=UnusedJavascriptSummary.computeWaste(n),o=UnusedJavascriptSummary.createItem(t,r);return a?{...o,sourcesWastedBytes:UnusedJavascriptSummary.createSourceWastedBytes(r,a)}:o}}const Cp=makeComputedArtifact(UnusedJavascriptSummary,["bundle","scriptCoverage","scriptId"]),Sp={title:"Reduce unused JavaScript",description:"Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/)."},_p=createIcuMessageFn("core/audits/byte-efficiency/unused-javascript.js",Sp),Ap=20480,kp=512;function commonPrefix(e){if(!e.length)return"";const t=e.reduce(((e,t)=>e>t?e:t));let n=e.reduce(((e,t)=>e>t?t:e))
-;for(;!t.startsWith(n);)n=n.slice(0,-1);return n}function trimCommonPrefix(e,t){return t&&e.startsWith(t)?"…"+e.slice(t.length):e}var xp=Object.freeze({__proto__:null,default:class UnusedJavaScript extends ByteEfficiencyAudit{static get meta(){return{id:"unused-javascript",title:_p(Sp.title),description:_p(Sp.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["JsUsage","Scripts","SourceMaps","GatherContext","devtoolsLogs","traces","URL"]}}static async audit_(e,t,n){const a=await Bm.request(e,n),{unusedThreshold:r=Ap,bundleSourceUnusedThreshold:o=kp}=n.options||{},i=[];for(const[s,c]of Object.entries(e.JsUsage)){const l=e.Scripts.find((e=>e.scriptId===s));if(!l)continue;const u=getRequestForScript(t,l);if(!u)continue;const d=a.find((e=>e.script.scriptId===s)),m=await Cp.request({scriptId:s,scriptCoverage:c,bundle:d},n);if(0===m.wastedBytes||0===m.totalBytes)continue
-;const p=ByteEfficiencyAudit.estimateTransferSize(u,m.totalBytes,"Script")/m.totalBytes,h={url:l.url,totalBytes:Math.round(p*m.totalBytes),wastedBytes:Math.round(p*m.wastedBytes),wastedPercent:m.wastedPercent};if(h.wastedBytes<=r)continue;if(i.push(h),!d||"errorMessage"in d.sizes)continue;const f=d.sizes;if(m.sourcesWastedBytes){const e=Object.entries(m.sourcesWastedBytes).sort(((e,t)=>t[1]-e[1])).slice(0,5).map((([e,t])=>{const n="(unmapped)"===e?f.unmappedBytes:f.files[e];return{source:e,unused:Math.round(t*p),total:Math.round(n*p)}})).filter((e=>e.unused>=o)),t=commonPrefix(d.map.sourceURLs());h.subItems={type:"subitems",items:e.map((({source:e,unused:n,total:a})=>({source:trimCommonPrefix(e,t),sourceBytes:a,sourceWastedBytes:n})))}}}return{items:i,headings:[{key:"url",valueType:"url",subItemsHeading:{key:"source",valueType:"code"},label:_p(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",subItemsHeading:{key:"sourceBytes"},label:_p(Ar.columnTransferSize)},{key:"wastedBytes",
-valueType:"bytes",subItemsHeading:{key:"sourceWastedBytes"},label:_p(Ar.columnWastedBytes)}]}}},UIStrings:Sp}),Fp=function parseCacheControl(e){if("string"!=typeof e)return null;var t={},n=e.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,(function(e,n,a,r){var o=a||r;return t[n]=!o||o.toLowerCase(),""}));if(t["max-age"])try{var a=parseInt(t["max-age"],10);if(isNaN(a))return null;t["max-age"]=a}catch(n){}return n?null:t};const Rp={title:"Uses efficient cache policy on static assets",failureTitle:"Serve static assets with an efficient cache policy",description:"A long cache lifetime can speed up repeat visits to your page. [Learn more about efficient cache policies](https://developer.chrome.com/docs/lighthouse/performance/uses-long-cache-ttl/).",displayValue:"{itemCount, plural,\n    =1 {1 resource found}\n    other {# resources found}\n    }"
-},Ip=createIcuMessageFn("core/audits/byte-efficiency/uses-long-cache-ttl.js",Rp);class CacheHeaders extends Audit{static get meta(){return{id:"uses-long-cache-ttl",title:Ip(Rp.title),failureTitle:Ip(Rp.failureTitle),description:Ip(Rp.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs"]}}static get defaultOptions(){return{p10:28672,median:131072}}static getCacheHitProbability(e){const t=[0,.2,1,3,8,12,24,48,72,168,8760,1/0];if(12!==t.length)throw new Error("deciles 0-10 and 1 for overflow");const n=e/3600,a=t.findIndex((e=>e>=n));if(a===t.length-1)return 1;if(0===a)return 0;const r=t[a];return function linearInterpolation(e,t,n,a,r){return t+(a-t)/(n-e)*(r-e)}(t[a-1],(a-1)/10,r,a/10,n)}static computeCacheLifetimeInSeconds(e,t){if(t&&void 0!==t["max-age"])return t["max-age"];const n=e.get("expires");if(n){const e=new Date(n).getTime();return e?Math.ceil((e-Date.now())/1e3):0}return null}static isCacheableAsset(e){
-const t=new Set([200,203,206]),n=new Set([NetworkRequest.TYPES.Font,NetworkRequest.TYPES.Image,NetworkRequest.TYPES.Media,NetworkRequest.TYPES.Script,NetworkRequest.TYPES.Stylesheet]);return!NetworkRequest.isNonNetworkRequest(e)&&(t.has(e.statusCode)&&n.has(e.resourceType||"Other"))}static shouldSkipRecord(e,t){return!(t||!(e.get("pragma")||"").includes("no-cache"))||!(!t||!(t["must-revalidate"]||t["no-cache"]||t["no-store"]||t["stale-while-revalidate"]||t.private))}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await bo.request(n,t),r=[];let o=0;for(const e of a){if(!CacheHeaders.isCacheableAsset(e))continue;const t=new Map;for(const n of e.responseHeaders||[])if(t.has(n.name.toLowerCase())){const e=t.get(n.name.toLowerCase());t.set(n.name.toLowerCase(),`${e}, ${n.value}`)}else t.set(n.name.toLowerCase(),n.value);const n=Fp(t.get("cache-control"));if(this.shouldSkipRecord(t,n))continue;let a=CacheHeaders.computeCacheLifetimeInSeconds(t,n)
-;if(null!==a&&(!Number.isFinite(a)||a<=0))continue;a=a||0;const i=CacheHeaders.getCacheHitProbability(a);if(i>.925)continue;const s=UrlUtils.elideDataURI(e.url),c=e.transferSize||0,l=(1-i)*c;let u;o+=l,n&&(u={type:"debugdata",...n}),r.push({url:s,debugData:u,cacheLifetimeMs:1e3*a,cacheHitProbability:i,totalBytes:c,wastedBytes:l})}r.sort(((e,t)=>e.cacheLifetimeMs-t.cacheLifetimeMs||t.totalBytes-e.totalBytes||e.url.localeCompare(t.url)));const i=Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},o),s=[{key:"url",valueType:"url",label:Ip(Ar.columnURL)},{key:"cacheLifetimeMs",valueType:"ms",label:Ip(Ar.columnCacheTTL),displayUnit:"duration"},{key:"totalBytes",valueType:"bytes",label:Ip(Ar.columnTransferSize),displayUnit:"kb",granularity:1}],c=Audit.makeTableDetails(s,r,{wastedBytes:o,sortedBy:["totalBytes"],skipSumming:["cacheLifetimeMs"]});return{score:i,numericValue:o,numericUnit:"byte",displayValue:Ip(Rp.displayValue,{itemCount:r.length}),details:c}}}
-var Mp=Object.freeze({__proto__:null,default:CacheHeaders,UIStrings:Rp});const Lp={title:"Efficiently encode images",description:"Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/)."},Np=createIcuMessageFn("core/audits/byte-efficiency/uses-optimized-images.js",Lp);class UsesOptimizedImages extends ByteEfficiencyAudit{static get meta(){return{id:"uses-optimized-images",title:Np(Lp.title),description:Np(Lp.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["OptimizedImages","ImageElements","GatherContext","devtoolsLogs","traces","URL"]}}static computeSavings(e){const t=e.originalSize-e.jpegSize;return{bytes:t,percent:100*t/e.originalSize}}static estimateJPEGSizeFromDimensions(e){const t=e.naturalWidth*e.naturalHeight;return Math.round(t*(2/8))}static audit_(e){
-const t=e.URL.finalDisplayedUrl,n=e.OptimizedImages,a=e.ImageElements,r=new Map;a.forEach((e=>r.set(e.src,e)));const o=[],i=[];for(const e of n){const n=r.get(e.url);if(e.failed){i.push(`Unable to decode ${UrlUtils.getURLDisplayName(e.url)}`);continue}if(!1===/(jpeg|bmp)/.test(e.mimeType))continue;let a=e.jpegSize,s=!0;if(void 0===a){if(!n){i.push(`Unable to locate resource ${UrlUtils.getURLDisplayName(e.url)}`);continue}if(!n.naturalDimensions)continue;const t=n.naturalDimensions.height,r=n.naturalDimensions.width;if(!t||!r)continue;a=UsesOptimizedImages.estimateJPEGSizeFromDimensions({naturalHeight:t,naturalWidth:r}),s=!1}if(e.originalSize<a+4096)continue;const c=UrlUtils.elideDataURI(e.url),l=!UrlUtils.originsMatch(t,e.url),u=UsesOptimizedImages.computeSavings({...e,jpegSize:a});o.push({node:n?ByteEfficiencyAudit.makeNodeItem(n.node):void 0,url:c,fromProtocol:s,isCrossOrigin:l,totalBytes:e.originalSize,wastedBytes:u.bytes})}return{warnings:i,items:o,headings:[{key:"node",
-valueType:"node",label:""},{key:"url",valueType:"url",label:Np(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:Np(Ar.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:Np(Ar.columnWastedBytes)}]}}}var Pp=Object.freeze({__proto__:null,default:UsesOptimizedImages,UIStrings:Lp});class ImageRecords{static indexNetworkRecords(e){return e.reduce(((e,t)=>((/^image/.test(t.mimeType)||/\.(avif|webp)$/i.test(t.url))&&t.finished&&200===t.statusCode&&(e[t.url]=t),e)),{})}static async compute_(e){const t=ImageRecords.indexNetworkRecords(e.networkRecords),n=[];for(const a of e.ImageElements){const e=t[a.src]?.mimeType;n.push({...a,mimeType:e||UrlUtils.guessMimeType(a.src)})}return n.sort(((e,n)=>{const a=t[e.src]||{};return(t[n.src]||{}).resourceSize-a.resourceSize})),n}}const Op=makeComputedArtifact(ImageRecords,["ImageElements","networkRecords"]),Bp={title:"Properly size images",
-description:"Serve images that are appropriately-sized to save cellular data and improve load time. [Learn how to size images](https://developer.chrome.com/docs/lighthouse/performance/uses-responsive-images/)."},Up=createIcuMessageFn("core/audits/byte-efficiency/uses-responsive-images.js",Bp);class UsesResponsiveImages extends ByteEfficiencyAudit{static get meta(){return{id:"uses-responsive-images",title:Up(Bp.title),description:Up(Bp.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["ImageElements","ViewportDimensions","GatherContext","devtoolsLogs","traces","URL"]}}static getDisplayedDimensions(e,t){if(e.displayedWidth&&e.displayedHeight)return{width:e.displayedWidth*t.devicePixelRatio,height:e.displayedHeight*t.devicePixelRatio};const n=t.innerWidth,a=2*t.innerHeight,r=e.naturalWidth/e.naturalHeight;let o=n,i=a;return r>n/a?i=n/r:o=a*r,{width:o*t.devicePixelRatio,height:i*t.devicePixelRatio}}static computeWaste(e,t,n){
-const a=n.find((t=>t.url===e.src));if(!a)return null;const r=this.getDisplayedDimensions(e,t),o=r.width*r.height,i=UrlUtils.elideDataURI(e.src),s=1-o/(e.naturalWidth*e.naturalHeight),c=NetworkRequest.getResourceSizeOnNetwork(a),l=Math.round(c*s);return{node:ByteEfficiencyAudit.makeNodeItem(e.node),url:i,totalBytes:c,wastedBytes:l,wastedPercent:100*s}}static determineAllowableWaste(e){return e.srcset||e.isPicture?12288:4096}static async audit_(e,t,n){const a=await Op.request({ImageElements:e.ImageElements,networkRecords:t},n),r=e.ViewportDimensions,o=new Map,i=[];for(const e of a){if("image/svg+xml"===e.mimeType||e.isCss)continue;if(!e.naturalDimensions)continue;const n=e.naturalDimensions.height,a=e.naturalDimensions.width;if(!a||!n)continue;const s=UsesResponsiveImages.computeWaste({...e,naturalHeight:n,naturalWidth:a},r,t);if(!s)continue;const c=s.wastedBytes>this.determineAllowableWaste(e),l=o.get(s.url)
-;c&&!i.includes(s.url)?(!l||l.wastedBytes>s.wastedBytes)&&o.set(s.url,s):(o.delete(s.url),i.push(s.url))}return{items:Array.from(o.values()),headings:[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:Up(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:Up(Ar.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:Up(Ar.columnWastedBytes)}]}}}var jp=Object.freeze({__proto__:null,default:UsesResponsiveImages,UIStrings:Bp,str_:Up});const zp={title:"Images were appropriate for their displayed size",failureTitle:"Images were larger than their displayed size",columnDisplayedDimensions:"Displayed dimensions",columnActualDimensions:"Actual dimensions"},qp=createIcuMessageFn("core/audits/byte-efficiency/uses-responsive-images-snapshot.js",zp);var Wp=Object.freeze({__proto__:null,default:class UsesResponsiveImagesSnapshot extends Audit{static get meta(){return{id:"uses-responsive-images-snapshot",title:qp(zp.title),failureTitle:qp(zp.failureTitle),
-description:Up(Bp.description),supportedModes:["snapshot"],requiredArtifacts:["ImageElements","ViewportDimensions"]}}static async audit(e){let t=1;const n=[];for(const a of e.ImageElements){if(a.isCss)continue;if(!a.naturalDimensions)continue;const r=a.naturalDimensions,o=UsesResponsiveImages.getDisplayedDimensions({...a,naturalWidth:r.width,naturalHeight:r.height},e.ViewportDimensions),i=r.width*r.height,s=o.width*o.height;i<=s||(i-s>1365&&(t=0),n.push({node:Audit.makeNodeItem(a.node),url:UrlUtils.elideDataURI(a.src),displayedDimensions:`${o.width}x${o.height}`,actualDimensions:`${r.width}x${r.height}`}))}const a=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:qp(Ar.columnURL)},{key:"displayedDimensions",valueType:"text",label:qp(zp.columnDisplayedDimensions)},{key:"actualDimensions",valueType:"text",label:qp(zp.columnActualDimensions)}];return{score:t,details:Audit.makeTableDetails(a,n)}}},UIStrings:zp});const $p={title:"Enable text compression",
-description:"Text-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more about text compression](https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/)."},Vp=createIcuMessageFn("core/audits/byte-efficiency/uses-text-compression.js",$p);var Hp=Object.freeze({__proto__:null,default:class ResponsesAreCompressed extends ByteEfficiencyAudit{static get meta(){return{id:"uses-text-compression",title:Vp($p.title),description:Vp($p.description),scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,requiredArtifacts:["ResponseCompression","GatherContext","devtoolsLogs","traces","URL"]}}static audit_(e){const t=e.ResponseCompression,n=[];t.forEach((e=>{if(!e.gzipSize||e.gzipSize<0)return;const t=e.resourceSize,a=e.gzipSize,r=t-a;if(1-a/t<.1||r<1400||e.transferSize<a)return;const o=UrlUtils.elideDataURI(e.url);n.find((t=>t.url===o&&t.totalBytes===e.resourceSize))||n.push({url:o,totalBytes:t,
-wastedBytes:r})}));const a=[{key:"url",valueType:"url",label:Vp(Ar.columnURL)},{key:"totalBytes",valueType:"bytes",label:Vp(Ar.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:Vp(Ar.columnWastedBytes)}];return{items:n,headings:a}}},UIStrings:$p});const Gp={title:"Content is sized correctly for the viewport",failureTitle:"Content is not sized correctly for the viewport",description:"If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn how to size content for the viewport](https://developer.chrome.com/docs/lighthouse/pwa/content-width/).",explanation:"The viewport size of {innerWidth}px does not match the window size of {outerWidth}px."},Yp=createIcuMessageFn("core/audits/content-width.js",Gp);var Kp=Object.freeze({__proto__:null,default:class ContentWidth extends Audit{static get meta(){return{id:"content-width",title:Yp(Gp.title),failureTitle:Yp(Gp.failureTitle),
-description:Yp(Gp.description),requiredArtifacts:["ViewportDimensions"]}}static audit(e,t){const n=e.ViewportDimensions.innerWidth===e.ViewportDimensions.outerWidth;if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};let a;return n||(a=Yp(Gp.explanation,{innerWidth:e.ViewportDimensions.innerWidth,outerWidth:e.ViewportDimensions.outerWidth})),{score:Number(n),explanation:a}}},UIStrings:Gp});class CriticalRequestChains$1{static isCritical(e,t){if(!t)throw new Error("mainResource not provided");if(e.requestId===t.requestId)return!0;if(e.isLinkPreload)return!1;for(;e.redirectDestination;)e=e.redirectDestination;const n=e.resourceType===NetworkRequest.TYPES.Document&&e.frameId!==t.frameId;return!([NetworkRequest.TYPES.Image,NetworkRequest.TYPES.XHR,NetworkRequest.TYPES.Fetch,NetworkRequest.TYPES.EventSource].includes(e.resourceType||"Other")||n||e.mimeType&&e.mimeType.startsWith("image/"))&&(!!e.initiatorRequest&&["VeryHigh","High","Medium"].includes(e.priority))}
-static extractChainsFromGraph(e,t){const n={};const a=new Set;return t.traverse(((t,r)=>{if(a.add(t),"network"!==t.type)return;if(!CriticalRequestChains$1.isCritical(t.record,e))return;const o=r.filter((e=>"network"===e.type)).reverse().map((e=>e.record));o.some((t=>!CriticalRequestChains$1.isCritical(t,e)))||NetworkRequest.isNonNetworkRequest(t.record)||function addChain(e){let t=n;for(const n of e)t[n.requestId]||(t[n.requestId]={request:n,children:{}}),t=t[n.requestId].children}(o)}),(function getNextNodes(e){return e.getDependents().filter((e=>e.getDependencies().every((e=>a.has(e)))))})),n}static async compute_(e,t){const n=await mc.request(e,t),a=await fo.request(e,t);return CriticalRequestChains$1.extractChainsFromGraph(n,a)}}const Jp=makeComputedArtifact(CriticalRequestChains$1,["URL","devtoolsLog","trace"]),Xp={title:"Avoid chaining critical requests",
-description:"The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. [Learn how to avoid chaining critical requests](https://developer.chrome.com/docs/lighthouse/performance/critical-request-chains/).",displayValue:"{itemCount, plural,\n    =1 {1 chain found}\n    other {# chains found}\n    }"},Zp=createIcuMessageFn("core/audits/critical-request-chains.js",Xp);class CriticalRequestChains extends Audit{static get meta(){return{id:"critical-request-chains",title:Zp(Xp.title),description:Zp(Xp.description),scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static _traverse(e,t){!function walk(e,n,a,r=0){const o=Object.keys(e);0!==o.length&&o.forEach((o=>{const i=e[o];a||(a=i.request.networkRequestTime),t({depth:n,id:o,
-node:i,chainDuration:i.request.networkEndTime-a,chainTransferSize:r+i.request.transferSize}),i.children&&walk(i.children,n+1,a)}),"")}(e,0)}static _getLongestChain(e){const t={duration:0,length:0,transferSize:0};return CriticalRequestChains._traverse(e,(e=>{const n=e.chainDuration;n>t.duration&&(t.duration=n,t.transferSize=e.chainTransferSize,t.length=e.depth)})),t.length++,t}static flattenRequests(e){const t={},n=new Map;return CriticalRequestChains._traverse(e,(function flatten(e){const a=e.node.request,r={url:a.url,startTime:a.networkRequestTime/1e3,endTime:a.networkEndTime/1e3,responseReceivedTime:a.responseHeadersEndTime/1e3,transferSize:a.transferSize};let o=n.get(e.id);if(o?o.request=r:(o={request:r},t[e.id]=o),e.node.children)for(const t of Object.keys(e.node.children)){const e={request:{}};n.set(t,e),o.children||(o.children={}),o.children[t]=e}n.set(e.id,o)})),t}static async audit(e,t){
-const n=e.traces[Audit.DEFAULT_PASS],a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=e.URL,o=await Jp.request({devtoolsLog:a,trace:n,URL:r},t);let i=0;const s=CriticalRequestChains.flattenRequests(o),c=Object.keys(s)[0],l=c&&s[c].children;l&&Object.keys(l).length>0&&function walk(e,t){Object.keys(e).forEach((t=>{const n=e[t];n.children?walk(n.children):i++}),"")}(l);const u=CriticalRequestChains._getLongestChain(o);return{score:Number(0===i),notApplicable:0===i,displayValue:i?Zp(Xp.displayValue,{itemCount:i}):"",details:{type:"criticalrequestchain",chains:s,longestChain:u}}}}var Qp=Object.freeze({__proto__:null,default:CriticalRequestChains,UIStrings:Xp}),eg={},tg={},ng={},ag={};!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Type=e.Severity=e.Finding=void 0;class Finding{constructor(e,t,n,a,r){this.type=e,this.description=t,this.severity=n,this.directive=a,this.value=r}static getHighestSeverity(e){if(0===e.length)return t.NONE
-;return e.map((e=>e.severity)).reduce(((e,t)=>e<t?e:t),t.NONE)}equals(e){return e instanceof Finding&&(e.type===this.type&&e.description===this.description&&e.severity===this.severity&&e.directive===this.directive&&e.value===this.value)}}var t,n;e.Finding=Finding,function(e){e[e.HIGH=10]="HIGH",e[e.SYNTAX=20]="SYNTAX",e[e.MEDIUM=30]="MEDIUM",e[e.HIGH_MAYBE=40]="HIGH_MAYBE",e[e.STRICT_CSP=45]="STRICT_CSP",e[e.MEDIUM_MAYBE=50]="MEDIUM_MAYBE",e[e.INFO=60]="INFO",e[e.NONE=100]="NONE"}(t=e.Severity||(e.Severity={})),(n=e.Type||(e.Type={}))[n.MISSING_SEMICOLON=100]="MISSING_SEMICOLON",n[n.UNKNOWN_DIRECTIVE=101]="UNKNOWN_DIRECTIVE",n[n.INVALID_KEYWORD=102]="INVALID_KEYWORD",n[n.NONCE_CHARSET=106]="NONCE_CHARSET",n[n.MISSING_DIRECTIVES=300]="MISSING_DIRECTIVES",n[n.SCRIPT_UNSAFE_INLINE=301]="SCRIPT_UNSAFE_INLINE",n[n.SCRIPT_UNSAFE_EVAL=302]="SCRIPT_UNSAFE_EVAL",n[n.PLAIN_URL_SCHEMES=303]="PLAIN_URL_SCHEMES",n[n.PLAIN_WILDCARD=304]="PLAIN_WILDCARD",
-n[n.SCRIPT_ALLOWLIST_BYPASS=305]="SCRIPT_ALLOWLIST_BYPASS",n[n.OBJECT_ALLOWLIST_BYPASS=306]="OBJECT_ALLOWLIST_BYPASS",n[n.NONCE_LENGTH=307]="NONCE_LENGTH",n[n.IP_SOURCE=308]="IP_SOURCE",n[n.DEPRECATED_DIRECTIVE=309]="DEPRECATED_DIRECTIVE",n[n.SRC_HTTP=310]="SRC_HTTP",n[n.STRICT_DYNAMIC=400]="STRICT_DYNAMIC",n[n.STRICT_DYNAMIC_NOT_STANDALONE=401]="STRICT_DYNAMIC_NOT_STANDALONE",n[n.NONCE_HASH=402]="NONCE_HASH",n[n.UNSAFE_INLINE_FALLBACK=403]="UNSAFE_INLINE_FALLBACK",n[n.ALLOWLIST_FALLBACK=404]="ALLOWLIST_FALLBACK",n[n.IGNORED=405]="IGNORED",n[n.REQUIRE_TRUSTED_TYPES_FOR_SCRIPTS=500]="REQUIRE_TRUSTED_TYPES_FOR_SCRIPTS",n[n.REPORTING_DESTINATION_MISSING=600]="REPORTING_DESTINATION_MISSING",n[n.REPORT_TO_ONLY=601]="REPORT_TO_ONLY"}(ag),function(e){Object.defineProperty(e,"__esModule",{value:!0}),
-e.CspError=e.isHash=e.HASH_PATTERN=e.STRICT_HASH_PATTERN=e.isNonce=e.NONCE_PATTERN=e.STRICT_NONCE_PATTERN=e.isUrlScheme=e.isKeyword=e.isDirective=e.Version=e.FETCH_DIRECTIVES=e.Directive=e.TrustedTypesSink=e.Keyword=e.Csp=void 0;const t=ag;class Csp{constructor(){this.directives={}}clone(){const e=new Csp;for(const[t,n]of Object.entries(this.directives))n&&(e.directives[t]=[...n]);return e}convertToString(){let e="";for(const[t,n]of Object.entries(this.directives)){if(e+=t,void 0!==n)for(let t,a=0;t=n[a];a++)e+=" ",e+=t;e+="; "}return e}getEffectiveCsp(e,o){const i=o||[],s=this.clone(),c=s.getEffectiveDirective(a.SCRIPT_SRC),l=this.directives[c]||[],u=s.directives[c];if(u&&(s.policyHasScriptNonces()||s.policyHasScriptHashes()))if(e>=r.CSP2)l.includes(n.UNSAFE_INLINE)&&(arrayRemove(u,n.UNSAFE_INLINE),
-i.push(new t.Finding(t.Type.IGNORED,"unsafe-inline is ignored if a nonce or a hash is present. (CSP2 and above)",t.Severity.NONE,c,n.UNSAFE_INLINE)));else for(const e of l)(e.startsWith("'nonce-")||e.startsWith("'sha"))&&arrayRemove(u,e);if(u&&this.policyHasStrictDynamic())if(e>=r.CSP3)for(const e of l)e.startsWith("'")&&e!==n.SELF&&e!==n.UNSAFE_INLINE||(arrayRemove(u,e),i.push(new t.Finding(t.Type.IGNORED,"Because of strict-dynamic this entry is ignored in CSP3 and above",t.Severity.NONE,c,e)));else arrayRemove(u,n.STRICT_DYNAMIC);return e<r.CSP3&&(delete s.directives[a.REPORT_TO],delete s.directives[a.WORKER_SRC],delete s.directives[a.MANIFEST_SRC],delete s.directives[a.TRUSTED_TYPES],delete s.directives[a.REQUIRE_TRUSTED_TYPES_FOR]),s}getEffectiveDirective(t){return!(t in this.directives)&&e.FETCH_DIRECTIVES.includes(t)?a.DEFAULT_SRC:t}getEffectiveDirectives(e){return[...new Set(e.map((e=>this.getEffectiveDirective(e))))]}policyHasScriptNonces(){
-const e=this.getEffectiveDirective(a.SCRIPT_SRC);return(this.directives[e]||[]).some((e=>isNonce(e)))}policyHasScriptHashes(){const e=this.getEffectiveDirective(a.SCRIPT_SRC);return(this.directives[e]||[]).some((e=>isHash(e)))}policyHasStrictDynamic(){const e=this.getEffectiveDirective(a.SCRIPT_SRC);return(this.directives[e]||[]).includes(n.STRICT_DYNAMIC)}}var n,a,r;function isNonce(t,n){return(n?e.STRICT_NONCE_PATTERN:e.NONCE_PATTERN).test(t)}function isHash(t,n){return(n?e.STRICT_HASH_PATTERN:e.HASH_PATTERN).test(t)}e.Csp=Csp,function(e){e.SELF="'self'",e.NONE="'none'",e.UNSAFE_INLINE="'unsafe-inline'",e.UNSAFE_EVAL="'unsafe-eval'",e.WASM_EVAL="'wasm-eval'",e.WASM_UNSAFE_EVAL="'wasm-unsafe-eval'",e.STRICT_DYNAMIC="'strict-dynamic'",e.UNSAFE_HASHED_ATTRIBUTES="'unsafe-hashed-attributes'",e.UNSAFE_HASHES="'unsafe-hashes'",e.REPORT_SAMPLE="'report-sample'",e.BLOCK="'block'",e.ALLOW="'allow'"}(n=e.Keyword||(e.Keyword={})),(e.TrustedTypesSink||(e.TrustedTypesSink={})).SCRIPT="'script'",
-function(e){e.CHILD_SRC="child-src",e.CONNECT_SRC="connect-src",e.DEFAULT_SRC="default-src",e.FONT_SRC="font-src",e.FRAME_SRC="frame-src",e.IMG_SRC="img-src",e.MEDIA_SRC="media-src",e.OBJECT_SRC="object-src",e.SCRIPT_SRC="script-src",e.SCRIPT_SRC_ATTR="script-src-attr",e.SCRIPT_SRC_ELEM="script-src-elem",e.STYLE_SRC="style-src",e.STYLE_SRC_ATTR="style-src-attr",e.STYLE_SRC_ELEM="style-src-elem",e.PREFETCH_SRC="prefetch-src",e.MANIFEST_SRC="manifest-src",e.WORKER_SRC="worker-src",e.BASE_URI="base-uri",e.PLUGIN_TYPES="plugin-types",e.SANDBOX="sandbox",e.DISOWN_OPENER="disown-opener",e.FORM_ACTION="form-action",e.FRAME_ANCESTORS="frame-ancestors",e.NAVIGATE_TO="navigate-to",e.REPORT_TO="report-to",e.REPORT_URI="report-uri",e.BLOCK_ALL_MIXED_CONTENT="block-all-mixed-content",e.UPGRADE_INSECURE_REQUESTS="upgrade-insecure-requests",e.REFLECTED_XSS="reflected-xss",e.REFERRER="referrer",e.REQUIRE_SRI_FOR="require-sri-for",e.TRUSTED_TYPES="trusted-types",
-e.REQUIRE_TRUSTED_TYPES_FOR="require-trusted-types-for",e.WEBRTC="webrtc"}(a=e.Directive||(e.Directive={})),e.FETCH_DIRECTIVES=[a.CHILD_SRC,a.CONNECT_SRC,a.DEFAULT_SRC,a.FONT_SRC,a.FRAME_SRC,a.IMG_SRC,a.MANIFEST_SRC,a.MEDIA_SRC,a.OBJECT_SRC,a.SCRIPT_SRC,a.SCRIPT_SRC_ATTR,a.SCRIPT_SRC_ELEM,a.STYLE_SRC,a.STYLE_SRC_ATTR,a.STYLE_SRC_ELEM,a.WORKER_SRC],function(e){e[e.CSP1=1]="CSP1",e[e.CSP2=2]="CSP2",e[e.CSP3=3]="CSP3"}(r=e.Version||(e.Version={})),e.isDirective=function isDirective(e){return Object.values(a).includes(e)},e.isKeyword=function isKeyword(e){return Object.values(n).includes(e)},e.isUrlScheme=function isUrlScheme(e){return new RegExp("^[a-zA-Z][+a-zA-Z0-9.-]*:$").test(e)},e.STRICT_NONCE_PATTERN=new RegExp("^'nonce-[a-zA-Z0-9+/_-]+[=]{0,2}'$"),e.NONCE_PATTERN=new RegExp("^'nonce-(.+)'$"),e.isNonce=isNonce,e.STRICT_HASH_PATTERN=new RegExp("^'(sha256|sha384|sha512)-[a-zA-Z0-9+/]+[=]{0,2}'$"),e.HASH_PATTERN=new RegExp("^'(sha256|sha384|sha512)-(.+)'$"),e.isHash=isHash
-;class CspError extends Error{constructor(e){super(e)}}function arrayRemove(e,t){if(e.includes(t)){const n=e.findIndex((e=>t===e));e.splice(n,1)}}e.CspError=CspError}(ng);var rg=globalThis&&globalThis.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),og=globalThis&&globalThis.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),ig=globalThis&&globalThis.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&rg(t,e,n);return og(t,e),t};Object.defineProperty(tg,"__esModule",{value:!0}),tg.checkInvalidKeyword=tg.checkMissingSemicolon=tg.checkUnknownDirective=void 0;const sg=ig(ng),cg=ng,lg=ag;tg.checkUnknownDirective=function checkUnknownDirective(e){const t=[]
-;for(const n of Object.keys(e.directives))sg.isDirective(n)||(n.endsWith(":")?t.push(new lg.Finding(lg.Type.UNKNOWN_DIRECTIVE,"CSP directives don't end with a colon.",lg.Severity.SYNTAX,n)):t.push(new lg.Finding(lg.Type.UNKNOWN_DIRECTIVE,'Directive "'+n+'" is not a known CSP directive.',lg.Severity.SYNTAX,n)));return t},tg.checkMissingSemicolon=function checkMissingSemicolon(e){const t=[];for(const[n,a]of Object.entries(e.directives))if(void 0!==a)for(const e of a)sg.isDirective(e)&&t.push(new lg.Finding(lg.Type.MISSING_SEMICOLON,'Did you forget the semicolon? "'+e+'" seems to be a directive, not a value.',lg.Severity.SYNTAX,n,e));return t},tg.checkInvalidKeyword=function checkInvalidKeyword(e){const t=[],n=Object.values(cg.Keyword).map((e=>e.replace(/'/g,"")))
-;for(const[a,r]of Object.entries(e.directives))if(void 0!==r)for(const e of r)if(n.some((t=>t===e))||e.startsWith("nonce-")||e.match(/^(sha256|sha384|sha512)-/))t.push(new lg.Finding(lg.Type.INVALID_KEYWORD,'Did you forget to surround "'+e+'" with single-ticks?',lg.Severity.SYNTAX,a,e));else if(e.startsWith("'")){if(a===sg.Directive.REQUIRE_TRUSTED_TYPES_FOR){if(e===sg.TrustedTypesSink.SCRIPT)continue}else if(a===sg.Directive.TRUSTED_TYPES){if("'allow-duplicates'"===e||"'none'"===e)continue}else if(sg.isKeyword(e)||sg.isHash(e)||sg.isNonce(e))continue;t.push(new lg.Finding(lg.Type.INVALID_KEYWORD,e+" seems to be an invalid CSP keyword.",lg.Severity.SYNTAX,a,e))}return t};var ug={},dg={};Object.defineProperty(dg,"__esModule",{value:!0}),dg.URLS=void 0,
-dg.URLS=["//gstatic.com/fsn/angular_js-bundle1.js","//www.gstatic.com/fsn/angular_js-bundle1.js","//www.googleadservices.com/pageadimg/imgad","//yandex.st/angularjs/1.2.16/angular-cookies.min.js","//yastatic.net/angularjs/1.2.23/angular.min.js","//yuedust.yuedu.126.net/js/components/angular/angular.js","//art.jobs.netease.com/script/angular.js","//csu-c45.kxcdn.com/angular/angular.js","//elysiumwebsite.s3.amazonaws.com/uploads/blog-media/rockstar/angular.min.js","//inno.blob.core.windows.net/new/libs/AngularJS/1.2.1/angular.min.js","//gift-talk.kakao.com/public/javascripts/angular.min.js","//ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular-route.min.js","//master-sumok.ru/vendors/angular/angular-cookies.js","//ayicommon-a.akamaihd.net/static/vendor/angular-1.4.2.min.js","//pangxiehaitao.com/framework/angular-1.3.9/angular-animate.min.js","//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js","//96fe3ee995e96e922b6b-d10c35bd0a0de2c718b252bc575fdb73.ssl.cf1.rackcdn.com/angular.js","//oss.maxcdn.com/angularjs/1.2.20/angular.min.js","//reports.zemanta.com/smedia/common/angularjs/1.2.11/angular.js","//cdn.shopify.com/s/files/1/0225/6463/t/1/assets/angular-animate.min.js","//parademanagement.com.s3-website-ap-southeast-1.amazonaws.com/js/angular.min.js","//cdn.jsdelivr.net/angularjs/1.1.2/angular.min.js","//eb2883ede55c53e09fd5-9c145fb03d93709ea57875d307e2d82e.ssl.cf3.rackcdn.com/components/angular-resource.min.js","//andors-trail.googlecode.com/git/AndorsTrailEdit/lib/angular.min.js","//cdn.walkme.com/General/EnvironmentTests/angular/angular.min.js","//laundrymail.com/angular/angular.js","//s3-eu-west-1.amazonaws.com/staticancpa/js/angular-cookies.min.js","//collade.demo.stswp.com/js/vendor/angular.min.js","//mrfishie.github.io/sailor/bower_components/angular/angular.min.js","//askgithub.com/static/js/angular.min.js","//services.amazon.com/solution-providers/assets/vendor/angular-cookies.min.js","//raw.githubusercontent.com/angular/code.angularjs.org/master/1.0.7/angular-resource.js","//prb-resume.appspot.com/bower_components/angular-animate/angular-animate.js","//dl.dropboxusercontent.com/u/30877786/angular.min.js","//static.tumblr.com/x5qdx0r/nPOnngtff/angular-resource.min_1_.js","//storage.googleapis.com/assets-prod.urbansitter.net/us-sym/assets/vendor/angular-sanitize/angular-sanitize.min.js","//twitter.github.io/labella.js/bower_components/angular/angular.min.js","//cdn2-casinoroom.global.ssl.fastly.net/js/lib/angular-animate.min.js","//www.adobe.com/devnet-apps/flashshowcase/lib/angular/angular.1.1.5.min.js","//eternal-sunset.herokuapp.com/bower_components/angular/angular.js","//cdn.bootcss.com/angular.js/1.2.0/angular.min.js"]
-;var mg={};Object.defineProperty(mg,"__esModule",{value:!0}),mg.URLS=void 0,mg.URLS=["//vk.com/swf/video.swf","//ajax.googleapis.com/ajax/libs/yui/2.8.0r4/build/charts/assets/charts.swf"];var pg={};Object.defineProperty(pg,"__esModule",{value:!0}),pg.URLS=pg.NEEDS_EVAL=void 0,pg.NEEDS_EVAL=["googletagmanager.com","www.googletagmanager.com","www.googleadservices.com","google-analytics.com","ssl.google-analytics.com","www.google-analytics.com"],
-pg.URLS=["//bebezoo.1688.com/fragment/index.htm","//www.google-analytics.com/gtm/js","//googleads.g.doubleclick.net/pagead/conversion/1036918760/wcm","//www.googleadservices.com/pagead/conversion/1070110417/wcm","//www.google.com/tools/feedback/escalation-options","//pin.aliyun.com/check_audio","//offer.alibaba.com/market/CID100002954/5/fetchKeyword.do","//ccrprod.alipay.com/ccr/arriveTime.json","//group.aliexpress.com/ajaxAcquireGroupbuyProduct.do","//detector.alicdn.com/2.7.3/index.php","//suggest.taobao.com/sug","//translate.google.com/translate_a/l","//count.tbcdn.cn//counter3","//wb.amap.com/channel.php","//translate.googleapis.com/translate_a/l","//afpeng.alimama.com/ex","//accounts.google.com/o/oauth2/revoke","//pagead2.googlesyndication.com/relatedsearch","//yandex.ru/soft/browsers/check","//api.facebook.com/restserver.php","//mts0.googleapis.com/maps/vt","//syndication.twitter.com/widgets/timelines/765840589183213568","//www.youtube.com/profile_style","//googletagmanager.com/gtm/js","//mc.yandex.ru/watch/24306916/1","//share.yandex.net/counter/gpp/","//ok.go.mail.ru/lady_on_lady_recipes_r.json","//d1f69o4buvlrj5.cloudfront.net/__efa_15_1_ornpba.xekq.arg/optout_check","//www.googletagmanager.com/gtm/js","//api.vk.com/method/wall.get","//www.sharethis.com/get-publisher-info.php","//google.ru/maps/vt","//pro.netrox.sc/oapi/h_checksite.ashx","//vimeo.com/api/oembed.json/","//de.blog.newrelic.com/wp-admin/admin-ajax.php","//ajax.googleapis.com/ajax/services/search/news","//ssl.google-analytics.com/gtm/js","//pubsub.pubnub.com/subscribe/demo/hello_world/","//pass.yandex.ua/services","//id.rambler.ru/script/topline_info.js","//m.addthis.com/live/red_lojson/100eng.json","//passport.ngs.ru/ajax/check","//catalog.api.2gis.ru/ads/search","//gum.criteo.com/sync","//maps.google.com/maps/vt","//ynuf.alipay.com/service/um.json","//securepubads.g.doubleclick.net/gampad/ads","//c.tiles.mapbox.com/v3/texastribune.tx-congress-cvap/6/15/26.grid.json","//rexchange.begun.ru/banners","//an.yandex.ru/page/147484","//links.services.disqus.com/api/ping","//api.map.baidu.com/","//tj.gongchang.com/api/keywordrecomm/","//data.gongchang.com/livegrail/","//ulogin.ru/token.php","//beta.gismeteo.ru/api/informer/layout.js/120x240-3/ru/","//maps.googleapis.com/maps/api/js/GeoPhotoService.GetMetadata","//a.config.skype.com/config/v1/Skype/908_1.33.0.111/SkypePersonalization","//maps.beeline.ru/w","//target.ukr.net/","//www.meteoprog.ua/data/weather/informer/Poltava.js","//cdn.syndication.twimg.com/widgets/timelines/599200054310604802","//wslocker.ru/client/user.chk.php","//community.adobe.com/CommunityPod/getJSON","//maps.google.lv/maps/vt","//dev.virtualearth.net/REST/V1/Imagery/Metadata/AerialWithLabels/26.318581","//awaps.yandex.ru/10/8938/02400400.","//a248.e.akamai.net/h5.hulu.com/h5.mp4","//nominatim.openstreetmap.org/","//plugins.mozilla.org/en-us/plugins_list.json","//h.cackle.me/widget/32153/bootstrap","//graph.facebook.com/1/","//fellowes.ugc.bazaarvoice.com/data/reviews.json","//widgets.pinterest.com/v3/pidgets/boards/ciciwin/hedgehog-squirrel-crafts/pins/","//www.linkedin.com/countserv/count/share","//se.wikipedia.org/w/api.php","//cse.google.com/api/007627024705277327428/cse/r3vs7b0fcli/queries/js","//relap.io/api/v2/similar_pages_jsonp.js","//c1n3.hypercomments.com/stream/subscribe","//maps.google.de/maps/vt","//books.google.com/books","//connect.mail.ru/share_count","//tr.indeed.com/m/newjobs","//www-onepick-opensocial.googleusercontent.com/gadgets/proxy","//www.panoramio.com/map/get_panoramas.php","//client.siteheart.com/streamcli/client","//www.facebook.com/restserver.php","//autocomplete.travelpayouts.com/avia","//www.googleapis.com/freebase/v1/topic/m/0344_","//mts1.googleapis.com/mapslt/ft","//api.twitter.com/1/statuses/oembed.json","//fast.wistia.com/embed/medias/o75jtw7654.json","//partner.googleadservices.com/gampad/ads","//pass.yandex.ru/services","//gupiao.baidu.com/stocks/stockbets","//widget.admitad.com/widget/init","//api.instagram.com/v1/tags/partykungen23328/media/recent","//video.media.yql.yahoo.com/v1/video/sapi/streams/063fb76c-6c70-38c5-9bbc-04b7c384de2b","//ib.adnxs.com/jpt","//pass.yandex.com/services","//www.google.de/maps/vt","//clients1.google.com/complete/search","//api.userlike.com/api/chat/slot/proactive/","//www.youku.com/index_cookielist/s/jsonp","//mt1.googleapis.com/mapslt/ft","//api.mixpanel.com/track/","//wpd.b.qq.com/cgi/get_sign.php","//pipes.yahooapis.com/pipes/pipe.run","//gdata.youtube.com/feeds/api/videos/WsJIHN1kNWc","//9.chart.apis.google.com/chart","//cdn.syndication.twitter.com/moments/709229296800440320","//api.flickr.com/services/feeds/photos_friends.gne","//cbks0.googleapis.com/cbk","//www.blogger.com/feeds/5578653387562324002/posts/summary/4427562025302749269","//query.yahooapis.com/v1/public/yql","//kecngantang.blogspot.com/feeds/posts/default/-/Komik","//www.travelpayouts.com/widgets/50f53ce9ada1b54bcc000031.json","//i.cackle.me/widget/32586/bootstrap","//translate.yandex.net/api/v1.5/tr.json/detect","//a.tiles.mapbox.com/v3/zentralmedia.map-n2raeauc.jsonp","//maps.google.ru/maps/vt","//c1n2.hypercomments.com/stream/subscribe","//rec.ydf.yandex.ru/cookie","//cdn.jsdelivr.net"]
-;var gg={};function getSchemeFreeUrl(e){return e=(e=e.replace(/^\w[+\w.-]*:\/\//i,"")).replace(/^\/\//,"")}function setScheme(e){return e.startsWith("//")?e.replace("//","https://"):e}Object.defineProperty(gg,"__esModule",{value:!0}),gg.applyCheckFunktionToDirectives=gg.matchWildcardUrls=gg.getHostname=gg.getSchemeFreeUrl=void 0,gg.getSchemeFreeUrl=getSchemeFreeUrl,gg.getHostname=function getHostname(e){const t=new URL("https://"+getSchemeFreeUrl(e).replace(":*","").replace("*","wildcard_placeholder")).hostname.replace("wildcard_placeholder","*"),n=/^\[[\d:]+\]/;return getSchemeFreeUrl(e).match(n)&&!t.match(n)?"["+t+"]":t},gg.matchWildcardUrls=function matchWildcardUrls(e,t){const n=new URL(setScheme(e.replace(":*","").replace("*","wildcard_placeholder"))),a=t.map((e=>new URL(setScheme(e)))),r=n.hostname.toLowerCase(),o=r.startsWith("wildcard_placeholder."),i=r.replace(/^\wildcard_placeholder/i,""),s=n.pathname,c="/"!==s;for(const e of a){const t=e.hostname
-;if(t.endsWith(i)&&(o||r===t)){if(c)if(s.endsWith("/")){if(!e.pathname.startsWith(s))continue}else if(e.pathname!==s)continue;return e}}return null},gg.applyCheckFunktionToDirectives=function applyCheckFunktionToDirectives(e,t){const n=Object.keys(e.directives);for(const a of n){const n=e.directives[a];n&&t(a,n)}},function(e){var t=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&t(a,e,r);return n(a,e),a};Object.defineProperty(e,"__esModule",{value:!0}),
-e.checkHasConfiguredReporting=e.checkSrcHttp=e.checkNonceLength=e.checkDeprecatedDirective=e.checkIpSource=e.looksLikeIpAddress=e.checkFlashObjectAllowlistBypass=e.checkScriptAllowlistBypass=e.checkMissingDirectives=e.checkMultipleMissingBaseUriDirective=e.checkMissingBaseUriDirective=e.checkMissingScriptSrcDirective=e.checkMissingObjectSrcDirective=e.checkWildcards=e.checkPlainUrlSchemes=e.checkScriptUnsafeEval=e.checkScriptUnsafeInline=e.URL_SCHEMES_CAUSING_XSS=e.DIRECTIVES_CAUSING_XSS=void 0;const r=a(dg),o=a(mg),i=a(pg),s=a(ng),c=ng,l=ag,u=a(gg);function checkMissingObjectSrcDirective(e){let t=[];return c.Directive.OBJECT_SRC in e.directives?t=e.directives[c.Directive.OBJECT_SRC]:c.Directive.DEFAULT_SRC in e.directives&&(t=e.directives[c.Directive.DEFAULT_SRC]),void 0!==t&&t.length>=1?[]:[new l.Finding(l.Type.MISSING_DIRECTIVES,"Missing object-src allows the injection of plugins which can execute JavaScript. Can you set it to 'none'?",l.Severity.HIGH,c.Directive.OBJECT_SRC)]}
-function checkMissingScriptSrcDirective(e){return c.Directive.SCRIPT_SRC in e.directives||c.Directive.DEFAULT_SRC in e.directives?[]:[new l.Finding(l.Type.MISSING_DIRECTIVES,"script-src directive is missing.",l.Severity.HIGH,c.Directive.SCRIPT_SRC)]}function checkMissingBaseUriDirective(e){return checkMultipleMissingBaseUriDirective([e])}function checkMultipleMissingBaseUriDirective(e){if(e.some((e=>e.policyHasScriptNonces()||e.policyHasScriptHashes()&&e.policyHasStrictDynamic()))&&!e.some((e=>c.Directive.BASE_URI in e.directives))){const e="Missing base-uri allows the injection of base tags. They can be used to set the base URL for all relative (script) URLs to an attacker controlled domain. Can you set it to 'none' or 'self'?";return[new l.Finding(l.Type.MISSING_DIRECTIVES,e,l.Severity.HIGH,c.Directive.BASE_URI)]}return[]}function looksLikeIpAddress(e){return!(!e.startsWith("[")||!e.endsWith("]"))||!!/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/.test(e)}
-e.DIRECTIVES_CAUSING_XSS=[c.Directive.SCRIPT_SRC,c.Directive.OBJECT_SRC,c.Directive.BASE_URI],e.URL_SCHEMES_CAUSING_XSS=["data:","http:","https:"],e.checkScriptUnsafeInline=function checkScriptUnsafeInline(e){const t=e.getEffectiveDirective(c.Directive.SCRIPT_SRC);return(e.directives[t]||[]).includes(c.Keyword.UNSAFE_INLINE)?[new l.Finding(l.Type.SCRIPT_UNSAFE_INLINE,"'unsafe-inline' allows the execution of unsafe in-page scripts and event handlers.",l.Severity.HIGH,t,c.Keyword.UNSAFE_INLINE)]:[]},e.checkScriptUnsafeEval=function checkScriptUnsafeEval(e){const t=e.getEffectiveDirective(c.Directive.SCRIPT_SRC);return(e.directives[t]||[]).includes(c.Keyword.UNSAFE_EVAL)?[new l.Finding(l.Type.SCRIPT_UNSAFE_EVAL,"'unsafe-eval' allows the execution of code injected into DOM APIs such as eval().",l.Severity.MEDIUM_MAYBE,t,c.Keyword.UNSAFE_EVAL)]:[]},e.checkPlainUrlSchemes=function checkPlainUrlSchemes(t){const n=[],a=t.getEffectiveDirectives(e.DIRECTIVES_CAUSING_XSS);for(const r of a){
-const a=t.directives[r]||[];for(const t of a)e.URL_SCHEMES_CAUSING_XSS.includes(t)&&n.push(new l.Finding(l.Type.PLAIN_URL_SCHEMES,t+" URI in "+r+" allows the execution of unsafe scripts.",l.Severity.HIGH,r,t))}return n},e.checkWildcards=function checkWildcards(t){const n=[],a=t.getEffectiveDirectives(e.DIRECTIVES_CAUSING_XSS);for(const e of a){const a=t.directives[e]||[];for(const t of a){"*"!==u.getSchemeFreeUrl(t)||n.push(new l.Finding(l.Type.PLAIN_WILDCARD,e+" should not allow '*' as source",l.Severity.HIGH,e,t))}}return n},e.checkMissingObjectSrcDirective=checkMissingObjectSrcDirective,e.checkMissingScriptSrcDirective=checkMissingScriptSrcDirective,e.checkMissingBaseUriDirective=checkMissingBaseUriDirective,e.checkMultipleMissingBaseUriDirective=checkMultipleMissingBaseUriDirective,e.checkMissingDirectives=function checkMissingDirectives(e){return[...checkMissingObjectSrcDirective(e),...checkMissingScriptSrcDirective(e),...checkMissingBaseUriDirective(e)]},
-e.checkScriptAllowlistBypass=function checkScriptAllowlistBypass(e){const t=[],n=e.getEffectiveDirective(c.Directive.SCRIPT_SRC),a=e.directives[n]||[];if(a.includes(c.Keyword.NONE))return t;for(const e of a){if(e===c.Keyword.SELF){t.push(new l.Finding(l.Type.SCRIPT_ALLOWLIST_BYPASS,"'self' can be problematic if you host JSONP, AngularJS or user uploaded files.",l.Severity.MEDIUM_MAYBE,n,e));continue}if(e.startsWith("'"))continue;if(s.isUrlScheme(e)||-1===e.indexOf("."))continue;const o="//"+u.getSchemeFreeUrl(e),d=u.matchWildcardUrls(o,r.URLS);let m=u.matchWildcardUrls(o,i.URLS);if(m){const e=i.NEEDS_EVAL.includes(m.hostname),t=a.includes(c.Keyword.UNSAFE_EVAL);e&&!t&&(m=null)}if(m||d){let a="",r="";m&&(a=m.hostname,r=" JSONP endpoints"),d&&(a=d.hostname,r+=""===r.trim()?"":" and",r+=" Angular libraries"),t.push(new l.Finding(l.Type.SCRIPT_ALLOWLIST_BYPASS,a+" is known to host"+r+" which allow to bypass this CSP.",l.Severity.HIGH,n,e))
-}else t.push(new l.Finding(l.Type.SCRIPT_ALLOWLIST_BYPASS,"No bypass found; make sure that this URL doesn't serve JSONP replies or Angular libraries.",l.Severity.MEDIUM_MAYBE,n,e))}return t},e.checkFlashObjectAllowlistBypass=function checkFlashObjectAllowlistBypass(e){const t=[],n=e.getEffectiveDirective(c.Directive.OBJECT_SRC),a=e.directives[n]||[],r=e.directives[c.Directive.PLUGIN_TYPES];if(r&&!r.includes("application/x-shockwave-flash"))return[];for(const e of a){if(e===c.Keyword.NONE)return[];const a="//"+u.getSchemeFreeUrl(e),r=u.matchWildcardUrls(a,o.URLS);r?t.push(new l.Finding(l.Type.OBJECT_ALLOWLIST_BYPASS,r.hostname+" is known to host Flash files which allow to bypass this CSP.",l.Severity.HIGH,n,e)):n===c.Directive.OBJECT_SRC&&t.push(new l.Finding(l.Type.OBJECT_ALLOWLIST_BYPASS,"Can you restrict object-src to 'none' only?",l.Severity.MEDIUM_MAYBE,n,e))}return t},e.looksLikeIpAddress=looksLikeIpAddress,e.checkIpSource=function checkIpSource(e){const t=[]
-;return u.applyCheckFunktionToDirectives(e,((e,n)=>{for(const a of n){const n=u.getHostname(a);looksLikeIpAddress(n)&&("127.0.0.1"===n?t.push(new l.Finding(l.Type.IP_SOURCE,e+" directive allows localhost as source. Please make sure to remove this in production environments.",l.Severity.INFO,e,a)):t.push(new l.Finding(l.Type.IP_SOURCE,e+" directive has an IP-Address as source: "+n+" (will be ignored by browsers!). ",l.Severity.INFO,e,a)))}})),t},e.checkDeprecatedDirective=function checkDeprecatedDirective(e){const t=[];return c.Directive.REFLECTED_XSS in e.directives&&t.push(new l.Finding(l.Type.DEPRECATED_DIRECTIVE,"reflected-xss is deprecated since CSP2. Please, use the X-XSS-Protection header instead.",l.Severity.INFO,c.Directive.REFLECTED_XSS)),c.Directive.REFERRER in e.directives&&t.push(new l.Finding(l.Type.DEPRECATED_DIRECTIVE,"referrer is deprecated since CSP2. Please, use the Referrer-Policy header instead.",l.Severity.INFO,c.Directive.REFERRER)),
-c.Directive.DISOWN_OPENER in e.directives&&t.push(new l.Finding(l.Type.DEPRECATED_DIRECTIVE,"disown-opener is deprecated since CSP3. Please, use the Cross Origin Opener Policy header instead.",l.Severity.INFO,c.Directive.DISOWN_OPENER)),t},e.checkNonceLength=function checkNonceLength(e){const t=new RegExp("^'nonce-(.+)'$"),n=[];return u.applyCheckFunktionToDirectives(e,((e,a)=>{for(const r of a){const a=r.match(t);if(!a)continue;a[1].length<8&&n.push(new l.Finding(l.Type.NONCE_LENGTH,"Nonces should be at least 8 characters long.",l.Severity.MEDIUM,e,r)),s.isNonce(r,!0)||n.push(new l.Finding(l.Type.NONCE_CHARSET,"Nonces should only use the base64 charset.",l.Severity.INFO,e,r))}})),n},e.checkSrcHttp=function checkSrcHttp(e){const t=[];return u.applyCheckFunktionToDirectives(e,((e,n)=>{for(const a of n){const n=e===c.Directive.REPORT_URI?"Use HTTPS to send violation reports securely.":"Allow only resources downloaded over HTTPS."
-;a.startsWith("http://")&&t.push(new l.Finding(l.Type.SRC_HTTP,n,l.Severity.MEDIUM,e,a))}})),t},e.checkHasConfiguredReporting=function checkHasConfiguredReporting(e){return(e.directives[c.Directive.REPORT_URI]||[]).length>0?[]:(e.directives[c.Directive.REPORT_TO]||[]).length>0?[new l.Finding(l.Type.REPORT_TO_ONLY,"This CSP policy only provides a reporting destination via the 'report-to' directive. This directive is only supported in Chromium-based browsers so it is recommended to also use a 'report-uri' directive.",l.Severity.INFO,c.Directive.REPORT_TO)]:[new l.Finding(l.Type.REPORTING_DESTINATION_MISSING,"This CSP policy does not configure a reporting destination. This makes it difficult to maintain the CSP policy over time and monitor for any breakages.",l.Severity.INFO,c.Directive.REPORT_URI)]}}(ug);var hg={},fg=globalThis&&globalThis.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})
-}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),yg=globalThis&&globalThis.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),bg=globalThis&&globalThis.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&fg(t,e,n);return yg(t,e),t};Object.defineProperty(hg,"__esModule",{value:!0}),hg.checkRequiresTrustedTypesForScripts=hg.checkAllowlistFallback=hg.checkUnsafeInlineFallback=hg.checkStrictDynamicNotStandalone=hg.checkStrictDynamic=void 0;const vg=bg(ng),wg=ng,Dg=ag;hg.checkStrictDynamic=function checkStrictDynamic(e){const t=e.getEffectiveDirective(vg.Directive.SCRIPT_SRC),n=e.directives[t]||[]
-;return n.some((e=>!e.startsWith("'")))&&!n.includes(wg.Keyword.STRICT_DYNAMIC)?[new Dg.Finding(Dg.Type.STRICT_DYNAMIC,"Host allowlists can frequently be bypassed. Consider using 'strict-dynamic' in combination with CSP nonces or hashes.",Dg.Severity.STRICT_CSP,t)]:[]},hg.checkStrictDynamicNotStandalone=function checkStrictDynamicNotStandalone(e){const t=e.getEffectiveDirective(vg.Directive.SCRIPT_SRC);return!(e.directives[t]||[]).includes(wg.Keyword.STRICT_DYNAMIC)||e.policyHasScriptNonces()||e.policyHasScriptHashes()?[]:[new Dg.Finding(Dg.Type.STRICT_DYNAMIC_NOT_STANDALONE,"'strict-dynamic' without a CSP nonce/hash will block all scripts.",Dg.Severity.INFO,t)]},hg.checkUnsafeInlineFallback=function checkUnsafeInlineFallback(e){if(!e.policyHasScriptNonces()&&!e.policyHasScriptHashes())return[];const t=e.getEffectiveDirective(vg.Directive.SCRIPT_SRC)
-;return(e.directives[t]||[]).includes(wg.Keyword.UNSAFE_INLINE)?[]:[new Dg.Finding(Dg.Type.UNSAFE_INLINE_FALLBACK,"Consider adding 'unsafe-inline' (ignored by browsers supporting nonces/hashes) to be backward compatible with older browsers.",Dg.Severity.STRICT_CSP,t)]},hg.checkAllowlistFallback=function checkAllowlistFallback(e){const t=e.getEffectiveDirective(vg.Directive.SCRIPT_SRC),n=e.directives[t]||[];return n.includes(wg.Keyword.STRICT_DYNAMIC)?n.some((e=>["http:","https:","*"].includes(e)||e.includes(".")))?[]:[new Dg.Finding(Dg.Type.ALLOWLIST_FALLBACK,"Consider adding https: and http: url schemes (ignored by browsers supporting 'strict-dynamic') to be backward compatible with older browsers.",Dg.Severity.STRICT_CSP,t)]:[]},hg.checkRequiresTrustedTypesForScripts=function checkRequiresTrustedTypesForScripts(e){const t=e.getEffectiveDirective(vg.Directive.REQUIRE_TRUSTED_TYPES_FOR)
-;return(e.directives[t]||[]).includes(vg.TrustedTypesSink.SCRIPT)?[]:[new Dg.Finding(Dg.Type.REQUIRE_TRUSTED_TYPES_FOR_SCRIPTS,"Consider requiring Trusted Types for scripts to lock down DOM XSS injection sinks. You can do this by adding \"require-trusted-types-for 'script'\" to your policy.",Dg.Severity.INFO,vg.Directive.REQUIRE_TRUSTED_TYPES_FOR)]},Object.defineProperty(eg,"__esModule",{value:!0});var Eg=eg.evaluateForSyntaxErrors=kg=eg.evaluateForWarnings=Ag=eg.evaluateForFailure=void 0;const Tg=tg,Cg=ug,Sg=hg,_g=ng;function arrayContains(e,t){return e.some((e=>e.equals(t)))}function atLeastOnePasses(e,t){const n=[];for(const a of e)n.push(t(a));return function setIntersection(e){const t=[];if(0===e.length)return t;const n=e[0];for(const a of n)e.every((e=>arrayContains(e,a)))&&t.push(a);return t}(n)}function atLeastOneFails(e,t){const n=[];for(const a of e)n.push(t(a));return function setUnion(e){const t=[];for(const n of e)for(const e of n)arrayContains(t,e)||t.push(e);return t}(n)
-}var Ag=eg.evaluateForFailure=function evaluateForFailure(e){const t=[...atLeastOnePasses(e,Cg.checkMissingScriptSrcDirective),...atLeastOnePasses(e,Cg.checkMissingObjectSrcDirective),...Cg.checkMultipleMissingBaseUriDirective(e)],n=e.map((e=>e.getEffectiveCsp(_g.Version.CSP3))),a=n.filter((e=>{const t=e.getEffectiveDirective(_g.Directive.SCRIPT_SRC);return e.directives[t]}));return[...t,...[...atLeastOnePasses(a,Sg.checkStrictDynamic),...atLeastOnePasses(a,Cg.checkScriptUnsafeInline),...atLeastOnePasses(n,Cg.checkWildcards),...atLeastOnePasses(n,Cg.checkPlainUrlSchemes)]]};var kg=eg.evaluateForWarnings=function evaluateForWarnings(e){return[...atLeastOneFails(e,Sg.checkUnsafeInlineFallback),...atLeastOneFails(e,Sg.checkAllowlistFallback)]};Eg=eg.evaluateForSyntaxErrors=function evaluateForSyntaxErrors(e){const t=[];for(const n of e){
-const e=[...Cg.checkNonceLength(n),...Tg.checkUnknownDirective(n),...Cg.checkDeprecatedDirective(n),...Tg.checkMissingSemicolon(n),...Tg.checkInvalidKeyword(n)];t.push(e)}return t};var xg={},Fg=globalThis&&globalThis.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),Rg=globalThis&&globalThis.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Ig=globalThis&&globalThis.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&Fg(t,e,n);return Rg(t,e),t};Object.defineProperty(xg,"__esModule",{value:!0}),xg.TEST_ONLY=Lg=xg.CspParser=void 0;const Mg=Ig(ng);var Lg=xg.CspParser=class CspParser{constructor(e){this.csp=new Mg.Csp,this.parse(e)}parse(e){this.csp=new Mg.Csp
-;const t=e.split(";");for(let e=0;e<t.length;e++){const n=t[e].trim().match(/\S+/g);if(Array.isArray(n)){const e=n[0].toLowerCase();if(e in this.csp.directives)continue;Mg.isDirective(e);const t=[];for(let e,a=1;e=n[a];a++)e=normalizeDirectiveValue(e),t.includes(e)||t.push(e);this.csp.directives[e]=t}}return this.csp}};function normalizeDirectiveValue(e){const t=(e=e.trim()).toLowerCase();return Mg.isKeyword(t)||Mg.isUrlScheme(e)?t:e}xg.TEST_ONLY={normalizeDirectiveValue};const Ng={missingBaseUri:"Missing base-uri allows injected <base> tags to set the base URL for all relative URLs (e.g. scripts) to an attacker controlled domain. Consider setting base-uri to 'none' or 'self'.",missingScriptSrc:"script-src directive is missing. This can allow the execution of unsafe scripts.",missingObjectSrc:"Missing object-src allows the injection of plugins that execute unsafe scripts. Consider setting object-src to 'none' if you can.",
-strictDynamic:"Host allowlists can frequently be bypassed. Consider using CSP nonces or hashes instead, along with 'strict-dynamic' if necessary.",unsafeInline:"'unsafe-inline' allows the execution of unsafe in-page scripts and event handlers. Consider using CSP nonces or hashes to allow scripts individually.",unsafeInlineFallback:"Consider adding 'unsafe-inline' (ignored by browsers supporting nonces/hashes) to be backward compatible with older browsers.",allowlistFallback:"Consider adding https: and http: URL schemes (ignored by browsers supporting 'strict-dynamic') to be backward compatible with older browsers.",reportToOnly:"The reporting destination is only configured via the report-to directive. This directive is only supported in Chromium-based browsers so it is recommended to also use a report-uri directive.",reportingDestinationMissing:"No CSP configures a reporting destination. This makes it difficult to maintain the CSP over time and monitor for any breakages.",
-nonceLength:"Nonces should be at least 8 characters long.",nonceCharset:"Nonces should use the base64 charset.",missingSemicolon:"Did you forget the semicolon? {keyword} seems to be a directive, not a keyword.",unknownDirective:"Unknown CSP directive.",unknownKeyword:"{keyword} seems to be an invalid keyword.",deprecatedReflectedXSS:"reflected-xss is deprecated since CSP2. Please, use the X-XSS-Protection header instead.",deprecatedReferrer:"referrer is deprecated since CSP2. Please, use the Referrer-Policy header instead.",deprecatedDisownOpener:"disown-opener is deprecated since CSP3. Please, use the Cross-Origin-Opener-Policy header instead.",plainWildcards:"Avoid using plain wildcards ({keyword}) in this directive. Plain wildcards allow scripts to be sourced from an unsafe domain.",plainUrlScheme:"Avoid using plain URL schemes ({keyword}) in this directive. Plain URL schemes allow scripts to be sourced from an unsafe domain."
-},Pg=createIcuMessageFn("core/lib/csp-evaluator.js",Ng),Og={[ag.Type.MISSING_SEMICOLON]:Ng.missingSemicolon,[ag.Type.UNKNOWN_DIRECTIVE]:Pg(Ng.unknownDirective),[ag.Type.INVALID_KEYWORD]:Ng.unknownKeyword,[ag.Type.MISSING_DIRECTIVES]:{[ng.Directive.BASE_URI]:Pg(Ng.missingBaseUri),[ng.Directive.SCRIPT_SRC]:Pg(Ng.missingScriptSrc),[ng.Directive.OBJECT_SRC]:Pg(Ng.missingObjectSrc)},[ag.Type.SCRIPT_UNSAFE_INLINE]:Pg(Ng.unsafeInline),[ag.Type.PLAIN_WILDCARD]:Ng.plainWildcards,[ag.Type.PLAIN_URL_SCHEMES]:Ng.plainUrlScheme,[ag.Type.NONCE_LENGTH]:Pg(Ng.nonceLength),[ag.Type.NONCE_CHARSET]:Pg(Ng.nonceCharset),[ag.Type.DEPRECATED_DIRECTIVE]:{[ng.Directive.REFLECTED_XSS]:Pg(Ng.deprecatedReflectedXSS),[ng.Directive.REFERRER]:Pg(Ng.deprecatedReferrer),[ng.Directive.DISOWN_OPENER]:Pg(Ng.deprecatedDisownOpener)},[ag.Type.STRICT_DYNAMIC]:Pg(Ng.strictDynamic),[ag.Type.UNSAFE_INLINE_FALLBACK]:Pg(Ng.unsafeInlineFallback),[ag.Type.ALLOWLIST_FALLBACK]:Pg(Ng.allowlistFallback),
-[ag.Type.REPORTING_DESTINATION_MISSING]:Pg(Ng.reportingDestinationMissing),[ag.Type.REPORT_TO_ONLY]:Pg(Ng.reportToOnly)};function getTranslatedDescription(e){let t=Og[e.type];return t?isIcuMessage(t)?t:"string"==typeof t?Pg(t,{keyword:e.value||""}):(t=t[e.directive],t||(Log.warn("CSP Evaluator",`No translation found for description: ${e.description}`),e.description)):(Log.warn("CSP Evaluator",`No translation found for description: ${e.description}`),e.description)}function parseCsp(e){return new Lg(e).csp}function evaluateRawCspsForXss(e){const t=e.map(parseCsp);return{bypasses:Ag(t),warnings:kg(t),syntax:Eg(t)}}const Bg={title:"Ensure CSP is effective against XSS attacks",description:"A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn how to use a CSP to prevent XSS](https://developer.chrome.com/docs/lighthouse/best-practices/csp-xss/)",noCsp:"No CSP found in enforcement mode",
-metaTagMessage:"The page contains a CSP defined in a <meta> tag. Consider moving the CSP to an HTTP header or defining another strict CSP in an HTTP header.",columnDirective:"Directive",columnSeverity:"Severity",itemSeveritySyntax:"Syntax"},Ug=createIcuMessageFn("core/audits/csp-xss.js",Bg);var jg=Object.freeze({__proto__:null,default:class CspXss extends Audit{static get meta(){return{id:"csp-xss",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:Ug(Bg.title),description:Ug(Bg.description),requiredArtifacts:["devtoolsLogs","MetaElements","URL"]}}static async getRawCsps(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await mc.request({devtoolsLog:n,URL:e.URL},t),r=e.MetaElements.filter((e=>e.httpEquiv&&"content-security-policy"===e.httpEquiv.toLowerCase())).flatMap((e=>(e.content||"").split(","))).filter((e=>e.replace(/\s/g,"")));return{
-cspHeaders:a.responseHeaders.filter((e=>"content-security-policy"===e.name.toLowerCase())).flatMap((e=>e.value.split(","))).filter((e=>e.replace(/\s/g,""))),cspMetaTags:r}}static findingToTableItem(e,t){return{directive:e.directive,description:getTranslatedDescription(e),severity:t}}static constructSyntaxResults(e,t){const n=[];for(let a=0;a<e.length;++a){const r=e[a].map((e=>this.findingToTableItem(e)));r.length&&n.push({severity:Ug(Bg.itemSeveritySyntax),description:{type:"code",value:t[a]},subItems:{type:"subitems",items:r}})}return n}static constructResults(e,t){const n=[...e,...t];if(!n.length)return{score:0,results:[{severity:Ug(Ar.itemSeverityHigh),description:Ug(Bg.noCsp),directive:void 0}]}
-;const{bypasses:a,warnings:r,syntax:o}=evaluateRawCspsForXss(n),i=[...this.constructSyntaxResults(o,n),...a.map((e=>this.findingToTableItem(e,Ug(Ar.itemSeverityHigh)))),...r.map((e=>this.findingToTableItem(e,Ug(Ar.itemSeverityMedium))))],s=evaluateRawCspsForXss(e).bypasses.length>0||0===e.length;return t.length>0&&s&&i.push({severity:Ug(Ar.itemSeverityMedium),description:Ug(Bg.metaTagMessage),directive:void 0}),{score:a.length?0:1,results:i}}static async audit(e,t){const{cspHeaders:n,cspMetaTags:a}=await this.getRawCsps(e,t),{score:r,results:o}=this.constructResults(n,a),i=[{key:"description",valueType:"text",subItemsHeading:{key:"description"},label:Ug(Ar.columnDescription)},{key:"directive",valueType:"code",subItemsHeading:{key:"directive"},label:Ug(Bg.columnDirective)},{key:"severity",valueType:"text",subItemsHeading:{key:"severity"},label:Ug(Bg.columnSeverity)}],s=Audit.makeTableDetails(i,o);return{score:r,notApplicable:!o.length,details:s}}},UIStrings:Bg});const zg={
-AuthorizationCoveredByWildcard:"Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling.",CanRequestURLHTTPContainingNewline:"Resource requests whose URLs contained both removed whitespace `(n|r|t)` characters and less-than characters (`<`) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources.",ChromeLoadTimesConnectionInfo:"`chrome.loadTimes()` is deprecated, instead use standardized API: Navigation Timing 2.",ChromeLoadTimesFirstPaintAfterLoadTime:"`chrome.loadTimes()` is deprecated, instead use standardized API: Paint Timing.",ChromeLoadTimesWasAlternateProtocolAvailable:"`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.",CookieWithTruncatingChar:"Cookies containing a `(0|r|n)` character will be rejected instead of truncated.",
-CrossOriginAccessBasedOnDocumentDomain:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting `document.domain`.",CrossOriginWindowAlert:"Triggering window.alert from cross origin iframes has been deprecated and will be removed in the future.",CrossOriginWindowConfirm:"Triggering window.confirm from cross origin iframes has been deprecated and will be removed in the future.",CSSSelectorInternalMediaControlsOverlayCastButton:"The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.",DataUrlInSvgUse:"Support for data: URLs in SVG <use> element is deprecated and it will be removed in the future.",
-DocumentDomainSettingWithoutOriginAgentClusterHeader:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details.",DOMMutationEvents:"DOM Mutation Events, including `DOMSubtreeModified`, `DOMNodeInserted`, `DOMNodeRemoved`, `DOMNodeRemovedFromDocument`, `DOMNodeInsertedIntoDocument`, and `DOMCharacterDataModified` are deprecated (https://w3c.github.io/uievents/#legacy-event-types) and will be removed. Please use `MutationObserver` instead.",ExpectCTHeader:"The `Expect-CT` header is deprecated and will be removed. Chrome requires Certificate Transparency for all publicly trusted certificates issued after April 30, 2018.",
-GeolocationInsecureOrigin:"`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",GeolocationInsecureOriginDeprecatedNotRemoved:"`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",GetUserMediaInsecureOrigin:"`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",
-HostCandidateAttributeGetter:"`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.",IdentityInCanMakePaymentEvent:"The merchant origin and arbitrary data from the `canmakepayment` service worker event are deprecated and will be removed: `topOrigin`, `paymentRequestOrigin`, `methodData`, `modifiers`.",InsecurePrivateNetworkSubresourceRequest:"The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the internet, increasing the risk of a cross-site request forgery (CSRF) attack, and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts, and will start blocking them.",
-InterestGroupDailyUpdateUrl:"The `dailyUpdateUrl` field of `InterestGroups` passed to `joinAdInterestGroup()` has been renamed to `updateUrl`, to more accurately reflect its behavior.",LocalCSSFileExtensionRejected:"CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension.",MediaSourceAbortRemove:"Using `SourceBuffer.abort()` to abort `remove()`'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should listen to the `updateend` event instead. `abort()` is intended to only abort an asynchronous media append or reset parser state.",
-MediaSourceDurationTruncatingBuffered:"Setting `MediaSource.duration` below the highest presentation timestamp of any buffered coded frames is deprecated due to specification change. Support for implicit removal of truncated buffered media will be removed in the future. You should instead perform explicit `remove(newDuration, oldDuration)` on all `sourceBuffers`, where `newDuration < oldDuration`.",NonStandardDeclarativeShadowDOM:"The older, non-standardized `shadowroot` attribute is deprecated, and will *no longer function* in M119. Please use the new, standardized `shadowrootmode` attribute instead.",NoSysexWebMIDIWithoutPermission:"Web MIDI will ask a permission to use even if the sysex is not specified in the `MIDIOptions`.",NotificationInsecureOrigin:"The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",
-NotificationPermissionRequestedIframe:"Permission for the Notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead.",ObsoleteCreateImageBitmapImageOrientationNone:"Option `imageOrientation: 'none'` in createImageBitmap is deprecated. Please use createImageBitmap with option \\{imageOrientation: 'from-image'\\} instead.",ObsoleteWebRtcCipherSuite:"Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed.",OverflowVisibleOnReplacedElement:"Specifying `overflow: visible` on img, video and canvas tags may cause them to produce visual content outside of the element bounds. See https://github.com/WICG/shared-element-transitions/blob/main/debugging_overflow_on_images.md.",PaymentInstruments:"`paymentManager.instruments` is deprecated. Please use just-in-time install for payment handlers instead.",
-PaymentRequestCSPViolation:"Your `PaymentRequest` call bypassed Content-Security-Policy (CSP) `connect-src` directive. This bypass is deprecated. Please add the payment method identifier from the `PaymentRequest` API (in `supportedMethods` field) to your CSP `connect-src` directive.",PersistentQuotaType:"`StorageType.persistent` is deprecated. Please use standardized `navigator.storage` instead.",PictureSourceSrc:"`<source src>` with a `<picture>` parent is invalid and therefore ignored. Please use `<source srcset>` instead.",PrefixedCancelAnimationFrame:"webkitCancelAnimationFrame is vendor-specific. Please use the standard cancelAnimationFrame instead.",PrefixedRequestAnimationFrame:"webkitRequestAnimationFrame is vendor-specific. Please use the standard requestAnimationFrame instead.",PrefixedVideoDisplayingFullscreen:"HTMLVideoElement.webkitDisplayingFullscreen is deprecated. Please use Document.fullscreenElement instead.",
-PrefixedVideoEnterFullScreen:"HTMLVideoElement.webkitEnterFullScreen() is deprecated. Please use Element.requestFullscreen() instead.",PrefixedVideoEnterFullscreen:"HTMLVideoElement.webkitEnterFullscreen() is deprecated. Please use Element.requestFullscreen() instead.",PrefixedVideoExitFullScreen:"HTMLVideoElement.webkitExitFullScreen() is deprecated. Please use Document.exitFullscreen() instead.",PrefixedVideoExitFullscreen:"HTMLVideoElement.webkitExitFullscreen() is deprecated. Please use Document.exitFullscreen() instead.",PrefixedVideoSupportsFullscreen:"HTMLVideoElement.webkitSupportsFullscreen is deprecated. Please use Document.fullscreenEnabled instead.",
-PrivacySandboxExtensionsAPI:"We're deprecating the API `chrome.privacy.websites.privacySandboxEnabled`, though it will remain active for backward compatibility until release M113. Instead, please use `chrome.privacy.websites.topicsEnabled`, `chrome.privacy.websites.fledgeEnabled` and `chrome.privacy.websites.adMeasurementEnabled`. See https://developer.chrome.com/docs/extensions/reference/privacy/#property-websites-privacySandboxEnabled.",RangeExpand:"Range.expand() is deprecated. Please use Selection.modify() instead.",RequestedSubresourceWithEmbeddedCredentials:"Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.",RTCConstraintEnableDtlsSrtpFalse:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `false` value for this constraint, which is interpreted as an attempt to use the removed `SDES key negotiation` method. This functionality is removed; use a service that supports `DTLS key negotiation` instead.",
-RTCConstraintEnableDtlsSrtpTrue:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `true` value for this constraint, which had no effect, but you can remove this constraint for tidiness.",RTCPeerConnectionGetStatsLegacyNonCompliant:"The callback-based getStats() is deprecated and will be removed. Use the spec-compliant getStats() instead.",RtcpMuxPolicyNegotiate:"The `rtcpMuxPolicy` option is deprecated and will be removed.",SharedArrayBufferConstructedWithoutIsolation:"`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.",TextToSpeech_DisallowedByAutoplay:"`speechSynthesis.speak()` without user activation is deprecated and will be removed.",V8SharedArrayBufferConstructedInExtensionWithoutIsolation:"Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.",
-WebSQL:"Web SQL is deprecated. Please use SQLite WebAssembly or Indexed Database",WindowPlacementPermissionDescriptorUsed:"The permission descriptor `window-placement` is deprecated. Use `window-management` instead. For more help, check https://bit.ly/window-placement-rename.",WindowPlacementPermissionPolicyParsed:"The permission policy `window-placement` is deprecated. Use `window-management` instead. For more help, check https://bit.ly/window-placement-rename.",XHRJSONEncodingDetection:"UTF-16 is not supported by response json in `XMLHttpRequest`",XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload:"Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.",XRSupportsSession:"`supportsSession()` is deprecated. Please use `isSessionSupported()` and check the resolved boolean value instead."},qg={AuthorizationCoveredByWildcard:{milestone:97},
-CSSSelectorInternalMediaControlsOverlayCastButton:{chromeStatusFeature:5714245488476160},CanRequestURLHTTPContainingNewline:{chromeStatusFeature:5735596811091968},ChromeLoadTimesConnectionInfo:{chromeStatusFeature:5637885046816768},ChromeLoadTimesFirstPaintAfterLoadTime:{chromeStatusFeature:5637885046816768},ChromeLoadTimesWasAlternateProtocolAvailable:{chromeStatusFeature:5637885046816768},CookieWithTruncatingChar:{milestone:103},CrossOriginAccessBasedOnDocumentDomain:{milestone:115},DOMMutationEvents:{chromeStatusFeature:5083947249172480,milestone:127},DataUrlInSvgUse:{chromeStatusFeature:5128825141198848,milestone:119},DocumentDomainSettingWithoutOriginAgentClusterHeader:{milestone:115},ExpectCTHeader:{chromeStatusFeature:6244547273687040,milestone:107},IdentityInCanMakePaymentEvent:{chromeStatusFeature:5190978431352832},InsecurePrivateNetworkSubresourceRequest:{chromeStatusFeature:5436853517811712,milestone:92},LocalCSSFileExtensionRejected:{milestone:64},MediaSourceAbortRemove:{
-chromeStatusFeature:6107495151960064},MediaSourceDurationTruncatingBuffered:{chromeStatusFeature:6107495151960064},NoSysexWebMIDIWithoutPermission:{chromeStatusFeature:5138066234671104,milestone:82},NonStandardDeclarativeShadowDOM:{chromeStatusFeature:6239658726391808,milestone:119},NotificationPermissionRequestedIframe:{chromeStatusFeature:6451284559265792},ObsoleteCreateImageBitmapImageOrientationNone:{milestone:111},ObsoleteWebRtcCipherSuite:{milestone:81},OverflowVisibleOnReplacedElement:{chromeStatusFeature:5137515594383360,milestone:108},PaymentInstruments:{chromeStatusFeature:5099285054488576},PaymentRequestCSPViolation:{chromeStatusFeature:6286595631087616},PersistentQuotaType:{chromeStatusFeature:5176235376246784,milestone:106},RTCConstraintEnableDtlsSrtpFalse:{milestone:97},RTCConstraintEnableDtlsSrtpTrue:{milestone:97},RTCPeerConnectionGetStatsLegacyNonCompliant:{chromeStatusFeature:4631626228695040,milestone:117},RequestedSubresourceWithEmbeddedCredentials:{
-chromeStatusFeature:5669008342777856},RtcpMuxPolicyNegotiate:{chromeStatusFeature:5654810086866944,milestone:62},SharedArrayBufferConstructedWithoutIsolation:{milestone:106},TextToSpeech_DisallowedByAutoplay:{chromeStatusFeature:5687444770914304,milestone:71},V8SharedArrayBufferConstructedInExtensionWithoutIsolation:{milestone:96},WebSQL:{chromeStatusFeature:5134293578285056,milestone:115},WindowPlacementPermissionDescriptorUsed:{chromeStatusFeature:5137018030391296,milestone:112},WindowPlacementPermissionPolicyParsed:{chromeStatusFeature:5137018030391296,milestone:112},XHRJSONEncodingDetection:{milestone:93},XRSupportsSession:{milestone:80}},Wg={feature:"Check the feature status page for more details.",milestone:"This change will go into effect with milestone {milestone}.",title:"Deprecated Feature Used"},$g=createIcuMessageFn("core/lib/deprecation-description.js",Wg),Vg=createIcuMessageFn("core/lib/deprecation-description.js",zg);const Hg={title:"Avoids deprecated APIs",
-failureTitle:"Uses deprecated APIs",description:"Deprecated APIs will eventually be removed from the browser. [Learn more about deprecated APIs](https://developer.chrome.com/docs/lighthouse/best-practices/deprecations/).",displayValue:"{itemCount, plural,\n    =1 {1 warning found}\n    other {# warnings found}\n    }",columnDeprecate:"Deprecation / Warning",columnLine:"Line"},Gg=createIcuMessageFn("core/audits/deprecations.js",Hg);var Yg=Object.freeze({__proto__:null,default:class Deprecations extends Audit{static get meta(){return{id:"deprecations",title:Gg(Hg.title),failureTitle:Gg(Hg.failureTitle),description:Gg(Hg.description),requiredArtifacts:["InspectorIssues","SourceMaps","Scripts"]}}static async audit(e,t){const n=await Bm.request(e,t),a=e.InspectorIssues.deprecationIssue.map((e=>{const{scriptId:t,url:a,lineNumber:r,columnNumber:o}=e.sourceCodeLocation,i=n.find((e=>e.script.scriptId===t)),s=function getIssueDetailDescription(e){let t;const n=e.type,a=zg[n];a&&(t=Vg(a))
-;const r=[],o=qg[n],i=o?.chromeStatusFeature??0;0!==i&&r.push({link:`https://chromestatus.com/feature/${i}`,linkTitle:$g(Wg.feature)});const s=o?.milestone??0;return 0!==s&&r.push({link:"https://chromiumdash.appspot.com/schedule",linkTitle:$g(Wg.milestone,{milestone:s})}),{substitutions:new Map([["PLACEHOLDER_title",$g(Wg.title)],["PLACEHOLDER_message",t]]),links:r,message:t}}(e);let c;s.links.length&&(c={type:"subitems",items:s.links.map((e=>({type:"link",url:e.link,text:e.linkTitle})))});const l=e.message;return{value:s.message||l||e.type,source:Audit.makeSourceLocation(a,r,o-1,i),subItems:c}})),r=[{key:"value",valueType:"text",label:Gg(Hg.columnDeprecate)},{key:"source",valueType:"source-location",label:Gg(Ar.columnSource)}],o=Audit.makeTableDetails(r,a);let i;return a.length>0&&(i=Gg(Hg.displayValue,{itemCount:a.length})),{score:Number(0===a.length),displayValue:i,details:o}}},UIStrings:Hg});var Kg=Object.freeze({__proto__:null,default:class Diagnostics extends Audit{
-static get meta(){return{id:"diagnostics",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:"Diagnostics",description:"Collection of useful page vitals.",supportedModes:["navigation"],requiredArtifacts:["URL","traces","devtoolsLogs"]}}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=await _m.request(n,t),o=await bo.request(a,t),i=await Ho.request(a,t),s=await mc.request({devtoolsLog:a,URL:e.URL},t),c=r.filter((e=>!e.parent)),l=s.transferSize,u=o.reduce(((e,t)=>e+(t.transferSize||0)),0),d=c.reduce(((e,t)=>e+(t.duration||0)),0),m=Math.max(...i.additionalRttByOrigin.values())+i.rtt,p=Math.max(...i.serverResponseTimeByOrigin.values());return{score:1,details:{type:"debugdata",items:[{numRequests:o.length,numScripts:o.filter((e=>"Script"===e.resourceType)).length,numStylesheets:o.filter((e=>"Stylesheet"===e.resourceType)).length,numFonts:o.filter((e=>"Font"===e.resourceType)).length,numTasks:c.length,
-numTasksOver10ms:c.filter((e=>e.duration>10)).length,numTasksOver25ms:c.filter((e=>e.duration>25)).length,numTasksOver50ms:c.filter((e=>e.duration>50)).length,numTasksOver100ms:c.filter((e=>e.duration>100)).length,numTasksOver500ms:c.filter((e=>e.duration>500)).length,rtt:i.rtt,throughput:i.throughput,maxRtt:m,maxServerLatency:p,totalByteWeight:u,totalTaskTime:d,mainDocumentTransferSize:l}]}}}}});const Jg={title:"Properly defines charset",failureTitle:"Charset declaration is missing or occurs too late in the HTML",description:"A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more about declaring the character encoding](https://developer.chrome.com/docs/lighthouse/best-practices/charset/)."},Xg=createIcuMessageFn("core/audits/dobetterweb/charset.js",Jg),Zg=/^[a-zA-Z0-9-_:.()]{2,}$/,Qg=/<meta[^>]+charset[^<]+>/i,eh=/charset\s*=\s*[a-zA-Z0-9-_:.()]{2,}/i
-;var th=Object.freeze({__proto__:null,default:class CharsetDefined extends Audit{static get meta(){return{id:"charset",title:Xg(Jg.title),failureTitle:Xg(Jg.failureTitle),description:Xg(Jg.description),requiredArtifacts:["MainDocumentContent","URL","devtoolsLogs","MetaElements"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await mc.request({devtoolsLog:n,URL:e.URL},t);let r=!1;if(a.responseHeaders){const e=a.responseHeaders.find((e=>"content-type"===e.name.toLowerCase()));e&&(r=eh.test(e.value))}return r=r||65279===e.MainDocumentContent.charCodeAt(0),Qg.test(e.MainDocumentContent.slice(0,1024))&&(r=r||e.MetaElements.some((e=>e.charset&&Zg.test(e.charset)||"content-type"===e.httpEquiv&&e.content&&eh.test(e.content)))),{score:Number(r)}}},UIStrings:Jg,CHARSET_HTML_REGEX:Qg,CHARSET_HTTP_REGEX:eh,IANA_REGEX:Zg});const nh={title:"Page has the HTML doctype",failureTitle:"Page lacks the HTML doctype, thus triggering quirks-mode",
-description:"Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more about the doctype declaration](https://developer.chrome.com/docs/lighthouse/best-practices/doctype/).",explanationNoDoctype:"Document must contain a doctype",explanationWrongDoctype:"Document contains a `doctype` that triggers `quirks-mode`",explanationLimitedQuirks:"Document contains a `doctype` that triggers `limited-quirks-mode`",explanationPublicId:"Expected publicId to be an empty string",explanationSystemId:"Expected systemId to be an empty string",explanationBadDoctype:"Doctype name must be the string `html`"},ah=createIcuMessageFn("core/audits/dobetterweb/doctype.js",nh);var rh=Object.freeze({__proto__:null,default:class Doctype extends Audit{static get meta(){return{id:"doctype",title:ah(nh.title),failureTitle:ah(nh.failureTitle),description:ah(nh.description),requiredArtifacts:["Doctype"],__internalOptionalArtifacts:["InspectorIssues","traces"]}}static async audit(e,t){
-if(!e.Doctype)return{score:0,explanation:ah(nh.explanationNoDoctype)};const n=e.Doctype.name,a=e.Doctype.publicId,r=e.Doctype.systemId,o=e.Doctype.documentCompatMode,i=e.traces?.[Audit.DEFAULT_PASS];let s=[];if(i&&e.InspectorIssues){const n=(await mo.request(i,t)).mainFrameInfo.frameId;s=e.InspectorIssues.quirksModeIssue.filter((e=>e.frameId===n))}const c=s.some((e=>e.isLimitedQuirksMode));return"CSS1Compat"!==o||c?c?{score:0,explanation:ah(nh.explanationLimitedQuirks)}:""!==a?{score:0,explanation:ah(nh.explanationPublicId)}:""!==r?{score:0,explanation:ah(nh.explanationSystemId)}:"html"!==n?{score:0,explanation:ah(nh.explanationBadDoctype)}:{score:0,explanation:ah(nh.explanationWrongDoctype)}:{score:1}}},UIStrings:nh});const oh={title:"Avoids an excessive DOM size",failureTitle:"Avoid an excessive DOM size",
-description:"A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",columnStatistic:"Statistic",columnValue:"Value",displayValue:"{itemCount, plural,\n    =1 {1 element}\n    other {# elements}\n    }",statisticDOMElements:"Total DOM Elements",statisticDOMDepth:"Maximum DOM Depth",statisticDOMWidth:"Maximum Child Elements"},ih=createIcuMessageFn("core/audits/dobetterweb/dom-size.js",oh);var sh=Object.freeze({__proto__:null,default:class DOMSize extends Audit{static get meta(){return{id:"dom-size",title:ih(oh.title),failureTitle:ih(oh.failureTitle),description:ih(oh.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,
-requiredArtifacts:["DOMStats"]}}static get defaultOptions(){return{p10:818,median:1400}}static audit(e,t){const n=e.DOMStats,a=Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},n.totalBodyElements),r=[{key:"statistic",valueType:"text",label:ih(oh.columnStatistic)},{key:"node",valueType:"node",label:ih(Ar.columnElement)},{key:"value",valueType:"numeric",label:ih(oh.columnValue)}],o=[{statistic:ih(oh.statisticDOMElements),value:{type:"numeric",granularity:1,value:n.totalBodyElements}},{node:Audit.makeNodeItem(n.depth),statistic:ih(oh.statisticDOMDepth),value:{type:"numeric",granularity:1,value:n.depth.max}},{node:Audit.makeNodeItem(n.width),statistic:ih(oh.statisticDOMWidth),value:{type:"numeric",granularity:1,value:n.width.max}}];return{score:a,numericValue:n.totalBodyElements,numericUnit:"element",displayValue:ih(oh.displayValue,{itemCount:n.totalBodyElements}),details:Audit.makeTableDetails(r,o)}}},UIStrings:oh});var ch=class ViolationAudit extends Audit{
-static async getViolationResults(e,t,n){const a=await Bm.request(e,t);const r=new Set;return e.ConsoleMessages.filter((e=>e.url&&"violation"===e.source&&n.test(e.text))).map((e=>{const t=a.find((t=>t.script.scriptId===e.scriptId));return Audit.makeSourceLocationFromConsoleMessage(e,t)})).filter((function filterUndefined(e){return void 0!==e})).filter((e=>{const t=`${e.url}!${e.line}!${e.column}`;return!r.has(t)&&(r.add(t),!0)})).map((e=>({source:e})))}};const lh={title:"Avoids requesting the geolocation permission on page load",failureTitle:"Requests the geolocation permission on page load",description:"Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more about the geolocation permission](https://developer.chrome.com/docs/lighthouse/best-practices/geolocation-on-start/)."},uh=createIcuMessageFn("core/audits/dobetterweb/geolocation-on-start.js",lh);var dh=Object.freeze({__proto__:null,
-default:class GeolocationOnStart extends ch{static get meta(){return{id:"geolocation-on-start",title:uh(lh.title),failureTitle:uh(lh.failureTitle),description:uh(lh.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static async audit(e,t){const n=await ch.getViolationResults(e,t,/geolocation/),a=[{key:"source",valueType:"source-location",label:uh(Ar.columnSource)}],r=ch.makeTableDetails(a,n);return{score:Number(0===n.length),details:r}}},UIStrings:lh});const mh={title:"No issues in the `Issues` panel in Chrome Devtools",failureTitle:"Issues were logged in the `Issues` panel in Chrome Devtools",description:"Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.",columnIssueType:"Issue type",
-issueTypeBlockedByResponse:"Blocked by cross-origin policy",issueTypeHeavyAds:"Heavy resource usage by ads"},ph=createIcuMessageFn("core/audits/dobetterweb/inspector-issues.js",mh);var gh=Object.freeze({__proto__:null,default:class IssuesPanelEntries extends Audit{static get meta(){return{id:"inspector-issues",title:ph(mh.title),failureTitle:ph(mh.failureTitle),description:ph(mh.description),requiredArtifacts:["InspectorIssues"]}}static getMixedContentRow(e){const t=new Set;for(const n of e){const e=n.request?.url||n.mainResourceURL;t.add(e)}return{issueType:"Mixed content",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getCookieRow(e){const t=new Set;for(const n of e){const e=n.request?.url||n.cookieUrl;e&&t.add(e)}return{issueType:"Cookie",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getBlockedByResponseRow(e){const t=new Set;for(const n of e){const e=n.request?.url;e&&t.add(e)}return{
-issueType:ph(mh.issueTypeBlockedByResponse),subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getContentSecurityPolicyRow(e){const t=new Set;for(const n of e){const e=n.blockedURL;e&&t.add(e)}return{issueType:"Content security policy",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static audit(e){const t=[{key:"issueType",valueType:"text",subItemsHeading:{key:"url",valueType:"url"},label:ph(mh.columnIssueType)}],n=e.InspectorIssues,a=[];n.mixedContentIssue.length&&a.push(this.getMixedContentRow(n.mixedContentIssue)),n.cookieIssue.length&&a.push(this.getCookieRow(n.cookieIssue)),n.blockedByResponseIssue.length&&a.push(this.getBlockedByResponseRow(n.blockedByResponseIssue)),n.heavyAdIssue.length&&a.push({issueType:ph(mh.issueTypeHeavyAds)});const r=n.contentSecurityPolicyIssue.filter((e=>"kTrustedTypesSinkViolation"!==e.contentSecurityPolicyViolationType&&"kTrustedTypesPolicyViolation"!==e.contentSecurityPolicyViolationType))
-;return r.length&&a.push(this.getContentSecurityPolicyRow(r)),{score:a.length>0?0:1,details:Audit.makeTableDetails(t,a)}}},UIStrings:mh});const hh={title:"Detected JavaScript libraries",description:"All front-end JavaScript libraries detected on the page. [Learn more about this JavaScript library detection diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/js-libraries/).",columnVersion:"Version"},fh=createIcuMessageFn("core/audits/dobetterweb/js-libraries.js",hh);var yh=Object.freeze({__proto__:null,default:class JsLibrariesAudit extends Audit{static get meta(){return{id:"js-libraries",title:fh(hh.title),scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,description:fh(hh.description),requiredArtifacts:["Stacks"]}}static audit(e){const t=e.Stacks.filter((e=>"js"===e.detector)).filter((e=>!e.id.endsWith("-fast"))).map((e=>({name:e.name,version:e.version,npm:e.npm}))),n=[{key:"name",valueType:"text",label:fh(Ar.columnName)},{key:"version",valueType:"text",
-label:fh(hh.columnVersion)}],a=Audit.makeTableDetails(n,t),r={type:"debugdata",stacks:e.Stacks.map((e=>({id:e.id,version:e.version})))};return t.length?{score:1,details:{...a,debugData:r}}:{score:null,notApplicable:!0}}},UIStrings:hh});const bh={title:"Avoids `document.write()`",failureTitle:"Avoid `document.write()`",description:"For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. [Learn how to avoid document.write()](https://developer.chrome.com/docs/lighthouse/best-practices/no-document-write/)."},vh=createIcuMessageFn("core/audits/dobetterweb/no-document-write.js",bh);var wh=Object.freeze({__proto__:null,default:class NoDocWriteAudit extends ch{static get meta(){return{id:"no-document-write",title:vh(bh.title),failureTitle:vh(bh.failureTitle),description:vh(bh.description),requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static async audit(e,t){
-const n=await ch.getViolationResults(e,t,/document\.write/),a=[{key:"source",valueType:"source-location",label:vh(Ar.columnSource)}],r=ch.makeTableDetails(a,n);return{score:Number(0===n.length),details:r}}},UIStrings:bh});const Dh={title:"Avoids requesting the notification permission on page load",failureTitle:"Requests the notification permission on page load",description:"Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more about responsibly getting permission for notifications](https://developer.chrome.com/docs/lighthouse/best-practices/notification-on-start/)."},Eh=createIcuMessageFn("core/audits/dobetterweb/notification-on-start.js",Dh);var Th=Object.freeze({__proto__:null,default:class NotificationOnStart extends ch{static get meta(){return{id:"notification-on-start",title:Eh(Dh.title),failureTitle:Eh(Dh.failureTitle),description:Eh(Dh.description),
-supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static async audit(e,t){const n=await ch.getViolationResults(e,t,/notification permission/),a=[{key:"source",valueType:"source-location",label:Eh(Ar.columnSource)}],r=ch.makeTableDetails(a,n);return{score:Number(0===n.length),details:r}}},UIStrings:Dh});const Ch={title:"Allows users to paste into input fields",failureTitle:"Prevents users from pasting into input fields",description:"Preventing input pasting is a bad practice for the UX, and weakens security by blocking password managers.[Learn more about user-friendly input fields](https://developer.chrome.com/docs/lighthouse/best-practices/paste-preventing-inputs/)."},Sh=createIcuMessageFn("core/audits/dobetterweb/paste-preventing-inputs.js",Ch);var _h=Object.freeze({__proto__:null,default:class PastePreventingInputsAudit extends Audit{static get meta(){return{id:"paste-preventing-inputs",title:Sh(Ch.title),failureTitle:Sh(Ch.failureTitle),
-description:Sh(Ch.description),requiredArtifacts:["Inputs"]}}static audit(e){const t=e.Inputs.inputs.filter((e=>e.preventsPaste)),n=[];t.forEach((e=>{n.push({node:Audit.makeNodeItem(e.node),type:e.type})}));const a=[{key:"node",valueType:"node",label:Sh(Ar.columnFailingElem)}];return{score:Number(0===t.length),details:Audit.makeTableDetails(a,n)}}},UIStrings:Ch});const Ah={title:"Use HTTP/2",description:"HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. [Learn more about HTTP/2](https://developer.chrome.com/docs/lighthouse/best-practices/uses-http2/).",displayValue:"{itemCount, plural,\n    =1 {1 request not served via HTTP/2}\n    other {# requests not served via HTTP/2}\n    }",columnProtocol:"Protocol"
-},kh=createIcuMessageFn("core/audits/dobetterweb/uses-http2.js",Ah),xh=new Set([NetworkRequest.TYPES.Document,NetworkRequest.TYPES.Font,NetworkRequest.TYPES.Image,NetworkRequest.TYPES.Stylesheet,NetworkRequest.TYPES.Script,NetworkRequest.TYPES.Media]);class UsesHTTP2Audit extends Audit{static get meta(){return{id:"uses-http2",title:kh(Ah.title),description:kh(Ah.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["timespan","navigation"],requiredArtifacts:["URL","devtoolsLogs","traces","GatherContext"]}}static computeWasteWithTTIGraph(e,t,n){const a=new Set(e.map((e=>e.url))),r=n.simulate(t,{label:"uses-http2-before",flexibleOrdering:true}),o=new Map;t.traverse((e=>{"network"===e.type&&a.has(e.record.url)&&(o.set(e.record.requestId,e.record.protocol),e.record.protocol="h2")}));const i=n.simulate(t,{label:"uses-http2-after",flexibleOrdering:true});t.traverse((e=>{if("network"!==e.type)return;const t=o.get(e.record.requestId);void 0!==t&&(e.record.protocol=t)}))
-;const s=r.timeInMs-i.timeInMs,c=Lm.getLastLongTaskEndTime(r.nodeTimings)-Lm.getLastLongTaskEndTime(i.nodeTimings),l=Math.max(c,s);return 10*Math.round(Math.max(l,0)/10)}static isStaticAsset(e,t){if(!xh.has(e.resourceType))return!1;if(e.resourceSize<100){const n=t.entityByUrl.get(e.url);if(n&&!n.isUnrecognized)return!1}return!0}static determineNonHttp2Resources(e,t){const n=[],a=new Set,r=new Map;for(const n of e){if(!UsesHTTP2Audit.isStaticAsset(n,t))continue;if(UrlUtils.isLikeLocalhost(n.parsedURL.host))continue;const e=r.get(n.parsedURL.securityOrigin)||[];e.push(n),r.set(n.parsedURL.securityOrigin,e)}for(const t of e){if(a.has(t.url))continue;if(t.fetchedViaServiceWorker)continue;if(!/HTTP\/[01][.\d]?/i.test(t.protocol))continue;(r.get(t.parsedURL.securityOrigin)||[]).length<6||(a.add(t.url),n.push({protocol:t.protocol,url:t.url}))}return n}static async audit(e,t){
-const n=e.traces[Audit.DEFAULT_PASS],a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=e.URL,o=await bo.request(a,t),i=await li.request({URL:r,devtoolsLog:a},t),s=UsesHTTP2Audit.determineNonHttp2Resources(o,i);let c;if(s.length>0&&(c=kh(Ah.displayValue,{itemCount:s.length})),"timespan"===e.GatherContext.gatherMode){const e=[{key:"url",valueType:"url",label:kh(Ar.columnURL)},{key:"protocol",valueType:"text",label:kh(Ah.columnProtocol)}],t=Audit.makeTableDetails(e,s);return{displayValue:c,score:s.length?0:1,details:t}}const l={devtoolsLog:a,settings:t?.settings||{}},u=await fo.request({trace:n,devtoolsLog:a,URL:r},t),d=await Go.request(l,t),m=UsesHTTP2Audit.computeWasteWithTTIGraph(s,u,d),p=[{key:"url",valueType:"url",label:kh(Ar.columnURL)},{key:"protocol",valueType:"text",label:kh(Ah.columnProtocol)}],h=Audit.makeOpportunityDetails(p,s,{overallSavingsMs:m});return{displayValue:c,numericValue:m,numericUnit:"millisecond",score:ByteEfficiencyAudit.scoreForWastedMs(m),details:h}}}
-var Fh=Object.freeze({__proto__:null,default:UsesHTTP2Audit,UIStrings:Ah});const Rh={title:"Uses passive listeners to improve scrolling performance",failureTitle:"Does not use passive listeners to improve scrolling performance",description:"Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. [Learn more about adopting passive event listeners](https://developer.chrome.com/docs/lighthouse/best-practices/uses-passive-event-listeners/)."},Ih=createIcuMessageFn("core/audits/dobetterweb/uses-passive-event-listeners.js",Rh);var Mh=Object.freeze({__proto__:null,default:class PassiveEventsAudit extends ch{static get meta(){return{id:"uses-passive-event-listeners",title:Ih(Rh.title),failureTitle:Ih(Rh.failureTitle),description:Ih(Rh.description),requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static async audit(e,t){const n=await ch.getViolationResults(e,t,/passive event listener/),a=[{key:"source",
-valueType:"source-location",label:Ih(Ar.columnSource)}],r=ch.makeTableDetails(a,n);return{score:Number(0===n.length),details:r}}},UIStrings:Rh});const Lh={title:"No browser errors logged to the console",failureTitle:"Browser errors were logged to the console",description:"Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more about this errors in console diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/errors-in-console/)"},Nh=createIcuMessageFn("core/audits/errors-in-console.js",Lh);class ErrorLogs extends Audit{static get meta(){return{id:"errors-in-console",title:Nh(Lh.title),failureTitle:Nh(Lh.failureTitle),description:Nh(Lh.description),requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static get defaultOptions(){return{ignoredPatterns:["ERR_BLOCKED_BY_CLIENT.Inspector"]}}static filterAccordingToOptions(e,t){
-const{ignoredPatterns:n,...a}=t,r=Object.keys(a);return r.length&&Log.warn(this.meta.id,"Unrecognized options",r),n?e.filter((({description:e})=>{if(!e)return!0;for(const t of n){if(t instanceof RegExp&&t.test(e))return!1;if("string"==typeof t&&e.includes(t))return!1}return!0})):e}static async audit(e,t){const n=t.options,a=await Bm.request(e,t),r=e.ConsoleMessages.filter((e=>"error"===e.level)).map((e=>{const t=a.find((t=>t.script.scriptId===e.scriptId));return{source:e.source,description:e.text,sourceLocation:Audit.makeSourceLocationFromConsoleMessage(e,t)}})),o=ErrorLogs.filterAccordingToOptions(r,n).sort(((e,t)=>(e.description||"").localeCompare(t.description||""))),i=[{key:"sourceLocation",valueType:"source-location",label:Nh(Ar.columnSource)},{key:"description",valueType:"code",label:Nh(Ar.columnDescription)}],s=Audit.makeTableDetails(i,o),c=o.length;return{score:Number(0===c),details:s}}}var Ph=Object.freeze({__proto__:null,default:ErrorLogs,UIStrings:Lh})
-;const Oh=makeComputedArtifact(class Screenshots{static async compute_(e){return e.traceEvents.filter((e=>"Screenshot"===e.name)).map((e=>({timestamp:e.ts,datauri:`data:image/jpeg;base64,${e.args.snapshot}`})))}},null);var Bh=Object.freeze({__proto__:null,default:class FinalScreenshot extends Audit{static get meta(){return{id:"final-screenshot",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:"Final Screenshot",description:"The last screenshot captured of the pageload.",requiredArtifacts:["traces","GatherContext"]}}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],a=await mo.request(n,t),r=await Oh.request(n,t),{timeOrigin:o}=a.timestamps,i=r[r.length-1];if(!i){if("timespan"===e.GatherContext.gatherMode)return{notApplicable:!0,score:1};throw new LighthouseError(LighthouseError.errors.NO_SCREENSHOTS)}return{score:1,details:{type:"screenshot",timing:Math.round((i.timestamp-o)/1e3),timestamp:i.timestamp,data:i.datauri}}}}})
-;const Uh=/^(block|fallback|optional|swap)$/,jh=/url\((.*?)\)/,zh=new RegExp(jh,"g"),qh={title:"All text remains visible during webfont loads",failureTitle:"Ensure text remains visible during webfont load",description:"Leverage the `font-display` CSS feature to ensure text is user-visible while webfonts are loading. [Learn more about `font-display`](https://developer.chrome.com/docs/lighthouse/performance/font-display/).",undeclaredFontOriginWarning:"{fontCountForOrigin, plural, =1 {Lighthouse was unable to automatically check the `font-display` value for the origin {fontOrigin}.} other {Lighthouse was unable to automatically check the `font-display` values for the origin {fontOrigin}.}}"},Wh=createIcuMessageFn("core/audits/font-display.js",qh);class FontDisplay extends Audit{static get meta(){return{id:"font-display",title:Wh(qh.title),failureTitle:Wh(qh.failureTitle),description:Wh(qh.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","CSSUsage","URL"]}}
-static findFontDisplayDeclarations(e,t){const n=new Set,a=new Set;for(const r of e.CSSUsage.stylesheets){const o=r.content.replace(/(\r|\n)+/g," ").match(/@font-face\s*{(.*?)}/g)||[];for(const i of o){const o=i.match(zh);if(!o)continue;const s=i.match(/font-display\s*:\s*(\w+)\s*(;|\})/)?.[1]||"",c=t.test(s)?n:a,l=o.map((e=>e.match(jh)[1].trim())).map((e=>/^('|").*\1$/.test(e)?e.substr(1,e.length-2):e));for(const t of l)try{const n=UrlUtils.isValid(r.header.sourceURL)?r.header.sourceURL:e.URL.finalDisplayedUrl,a=new URL(t,n);c.add(a.href)}catch(e){Qo.captureException(e,{tags:{audit:this.meta.id}})}}}return{passingURLs:n,failingURLs:a}}static getWarningsForFontUrls(e){const t=new Map;for(const n of e){const e=UrlUtils.getOrigin(n);if(!e)continue;const a=t.get(e)||0;t.set(e,a+1)}return[...t].map((([e,t])=>Wh(qh.undeclaredFontOriginWarning,{fontCountForOrigin:t,fontOrigin:e})))}static async audit(e,t){
-const n=e.devtoolsLogs[this.DEFAULT_PASS],a=await bo.request(n,t),{passingURLs:r,failingURLs:o}=FontDisplay.findFontDisplayDeclarations(e,Uh),i=[],s=a.filter((e=>"Font"===e.resourceType)).filter((e=>!/^data:/.test(e.url))).filter((e=>!/^blob:/.test(e.url))).filter((e=>!!o.has(e.url)||(r.has(e.url)||i.push(e.url),!1))).map((e=>{const t=Math.min(e.networkEndTime-e.networkRequestTime,3e3);return{url:e.url,wastedMs:t}})),c=[{key:"url",valueType:"url",label:Wh(Ar.columnURL)},{key:"wastedMs",valueType:"ms",label:Wh(Ar.columnWastedMs)}],l=Audit.makeTableDetails(c,s);return{score:Number(0===s.length),details:l,warnings:FontDisplay.getWarningsForFontUrls(i)}}}var $h=Object.freeze({__proto__:null,default:FontDisplay,UIStrings:qh});const Vh={title:"Displays images with correct aspect ratio",failureTitle:"Displays images with incorrect aspect ratio",
-description:"Image display dimensions should match natural aspect ratio. [Learn more about image aspect ratio](https://developer.chrome.com/docs/lighthouse/best-practices/image-aspect-ratio/).",columnDisplayed:"Aspect Ratio (Displayed)",columnActual:"Aspect Ratio (Actual)"},Hh=createIcuMessageFn("core/audits/image-aspect-ratio.js",Vh);class ImageAspectRatio extends Audit{static get meta(){return{id:"image-aspect-ratio",title:Hh(Vh.title),failureTitle:Hh(Vh.failureTitle),description:Hh(Vh.description),requiredArtifacts:["ImageElements"]}}static computeAspectRatios(e){const t=UrlUtils.elideDataURI(e.src),n=e.naturalDimensions.width/e.naturalDimensions.height,a=e.displayedWidth/e.displayedHeight,r=e.displayedWidth/n,o=Math.abs(r-e.displayedHeight)<2;return{url:t,node:Audit.makeNodeItem(e.node),displayedAspectRatio:`${e.displayedWidth} x ${e.displayedHeight}\n        (${a.toFixed(2)})`,
-actualAspectRatio:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}\n        (${n.toFixed(2)})`,doRatiosMatch:o}}static audit(e){const t=e.ImageElements,n=[];t.filter((e=>!e.isCss&&"image/svg+xml"!==UrlUtils.guessMimeType(e.src)&&e.naturalDimensions&&e.naturalDimensions.height>5&&e.naturalDimensions.width>5&&e.displayedWidth&&e.displayedHeight&&"fill"===e.computedStyles.objectFit)).forEach((e=>{const t=e,a=ImageAspectRatio.computeAspectRatios(t);a.doRatiosMatch||n.push(a)}));const a=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:Hh(Ar.columnURL)},{key:"displayedAspectRatio",valueType:"text",label:Hh(Vh.columnDisplayed)},{key:"actualAspectRatio",valueType:"text",label:Hh(Vh.columnActual)}];return{score:Number(0===n.length),details:Audit.makeTableDetails(a,n)}}}var Gh=Object.freeze({__proto__:null,default:ImageAspectRatio,UIStrings:Vh});const Yh={title:"Serves images with appropriate resolution",failureTitle:"Serves images with low resolution",
-description:"Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn how to provide responsive images](https://web.dev/serve-responsive-images/).",columnDisplayed:"Displayed size",columnActual:"Actual size",columnExpected:"Expected size"},Kh=createIcuMessageFn("core/audits/image-size-responsive.js",Yh);function isCandidate(e){return!(e.displayedWidth<=1||e.displayedHeight<=1)&&(!!(e.naturalDimensions&&e.naturalDimensions.width&&e.naturalDimensions.height)&&("image/svg+xml"!==UrlUtils.guessMimeType(e.src)&&(!e.isCss&&("fill"===e.computedStyles.objectFit&&(!["pixelated","crisp-edges"].includes(e.computedStyles.imageRendering)&&!/ \d+(\.\d+)?x/.test(e.srcset))))))}function imageHasNaturalDimensions(e){return!!e.naturalDimensions}function imageHasRightSize(e,t){const[n,a]=function allowedImageSize(e,t,n){let a=1;(e>64||t>64)&&(a=.75);const r=quantizeDpr(n),o=Math.ceil(a*r*e),i=Math.ceil(a*r*t);return[o,i]
-}(e.displayedWidth,e.displayedHeight,t);return e.naturalDimensions.width>=n&&e.naturalDimensions.height>=a}function getResult(e,t){const[n,a]=function expectedImageSize(e,t,n){const a=Math.ceil(quantizeDpr(n)*e),r=Math.ceil(quantizeDpr(n)*t);return[a,r]}(e.displayedWidth,e.displayedHeight,t);return{url:UrlUtils.elideDataURI(e.src),node:Audit.makeNodeItem(e.node),displayedSize:`${e.displayedWidth} x ${e.displayedHeight}`,actualSize:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}`,actualPixels:e.naturalDimensions.width*e.naturalDimensions.height,expectedSize:`${n} x ${a}`,expectedPixels:n*a}}function quantizeDpr(e){return e>=2?2:e>=1.5?1.5:1}var Jh=Object.freeze({__proto__:null,default:class ImageSizeResponsive extends Audit{static get meta(){return{id:"image-size-responsive",title:Kh(Yh.title),failureTitle:Kh(Yh.failureTitle),description:Kh(Yh.description),requiredArtifacts:["ImageElements","ViewportDimensions"]}}static audit(e){
-const t=e.ViewportDimensions.devicePixelRatio,n=Array.from(e.ImageElements).filter(isCandidate).filter(imageHasNaturalDimensions).filter((e=>!imageHasRightSize(e,t))).filter((t=>function isVisible(e,t){return(e.bottom-e.top)*(e.right-e.left)>0&&e.top<=t.innerHeight&&e.bottom>=0&&e.left<=t.innerWidth&&e.right>=0}(t.clientRect,e.ViewportDimensions))).filter((t=>function isSmallerThanViewport(e,t){return e.bottom-e.top<=t.innerHeight&&e.right-e.left<=t.innerWidth}(t.clientRect,e.ViewportDimensions))).map((e=>getResult(e,t))),a=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:Kh(Ar.columnURL)},{key:"displayedSize",valueType:"text",label:Kh(Yh.columnDisplayed)},{key:"actualSize",valueType:"text",label:Kh(Yh.columnActual)},{key:"expectedSize",valueType:"text",label:Kh(Yh.columnExpected)}],r=function sortResultsBySizeDelta(e){return e.sort(((e,t)=>t.expectedPixels-t.actualPixels-(e.expectedPixels-e.actualPixels)))}(function deduplicateResultsByUrl(e){
-e.sort(((e,t)=>e.url===t.url?0:e.url<t.url?-1:1));const t=[];for(const n of e){const e=t[t.length-1];e&&e.url===n.url?e.expectedPixels<n.expectedPixels&&(t[t.length-1]=n):t.push(n)}return t}(n));return{score:Number(0===n.length),details:Audit.makeTableDetails(a,r)}}},UIStrings:Yh});function doExist(e){return!(!e||!e.icons)&&0!==e.icons.value.length}function pngSizedAtLeast(e,t){const n=t.icons.value,a=[];return n.filter((e=>{const t=e.value.type.value;if(t)return"image/png"===t;const n=e.value.src.value;return n&&new URL(n).pathname.endsWith(".png")})).forEach((e=>{e.value.sizes.value&&a.push(...e.value.sizes.value)})),a.filter((e=>/\d+x\d+/.test(e))).filter((t=>{const n=t.split(/x/i),a=[parseFloat(n[0]),parseFloat(n[1])];return a[0]>=e&&a[1]>=e&&a[0]===a[1]}))}const Xh=["minimal-ui","fullscreen","standalone"];class ManifestValues{static get manifestChecks(){return[{id:"hasStartUrl",failureText:"Manifest does not contain a `start_url`",validate:e=>!!e.start_url.value},{
-id:"hasIconsAtLeast144px",failureText:"Manifest does not have a PNG icon of at least 144px",validate:e=>doExist(e)&&pngSizedAtLeast(144,e).length>0},{id:"hasIconsAtLeast512px",failureText:"Manifest does not have a PNG icon of at least 512px",validate:e=>doExist(e)&&pngSizedAtLeast(512,e).length>0},{id:"fetchesIcon",failureText:"Manifest icon failed to be fetched",validate:(e,t)=>{const n=["cannot-download-icon","no-icon-available"];return doExist(e)&&!t.some((e=>n.includes(e.errorId)))}},{id:"hasPWADisplayValue",failureText:"Manifest's `display` value is not one of: "+Xh.join(" | "),validate:e=>Xh.includes(e.display.value)},{id:"hasBackgroundColor",failureText:"Manifest does not have `background_color`",validate:e=>!!e.background_color.value},{id:"hasThemeColor",failureText:"Manifest does not have `theme_color`",validate:e=>!!e.theme_color.value},{id:"hasShortName",failureText:"Manifest does not have `short_name`",validate:e=>!!e.short_name.value},{id:"shortNameLength",
-failureText:"Manifest's `short_name` is too long (>12 characters) to be displayed on a homescreen without truncation",validate:e=>!!e.short_name.value&&e.short_name.value.length<=12},{id:"hasName",failureText:"Manifest does not have `name`",validate:e=>!!e.name.value},{id:"hasMaskableIcon",failureText:"Manifest does not have at least one icon that is maskable",validate:e=>doExist(e)&&function containsMaskableIcon(e){return e.icons.value.some((e=>e.value.purpose?.value&&e.value.purpose.value.includes("maskable")))}(e)}]}static async compute_({WebAppManifest:e,InstallabilityErrors:t}){if(null===e)return{isParseFailure:!0,parseFailureReason:"No manifest was fetched",allChecks:[]};const n=e.value;if(void 0===n)return{isParseFailure:!0,parseFailureReason:"Manifest failed to parse as valid JSON",allChecks:[]};return{isParseFailure:!1,allChecks:ManifestValues.manifestChecks.map((e=>({id:e.id,failureText:e.failureText,passing:e.validate(n,t.errors)})))}}}
-const Zh=makeComputedArtifact(ManifestValues,["InstallabilityErrors","WebAppManifest"]),Qh={title:"Web app manifest and service worker meet the installability requirements",failureTitle:"Web app manifest or service worker do not meet the installability requirements",description:"Service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. [Learn more about manifest installability requirements](https://developer.chrome.com/docs/lighthouse/pwa/installable-manifest/).",columnValue:"Failure reason",displayValue:"{itemCount, plural,\n    =1 {1 reason}\n    other {# reasons}\n    }",noErrorId:"Installability error id '{errorId}' is not recognized","not-in-main-frame":"Page is not loaded in the main frame",
-"not-from-secure-origin":"Page is not served from a secure origin","no-manifest":"Page has no manifest <link> URL","start-url-not-valid":"Manifest start URL is not valid","manifest-missing-name-or-short-name":"Manifest does not contain a 'name' or 'short_name' field","manifest-display-not-supported":"Manifest 'display' property must be one of 'standalone', 'fullscreen', or 'minimal-ui'","manifest-empty":"Manifest could not be fetched, is empty, or could not be parsed","no-matching-service-worker":"No matching service worker detected. You may need to reload the page, or check that the scope of the service worker for the current page encloses the scope and start URL from the manifest.","manifest-missing-suitable-icon":'Manifest does not contain a suitable icon - PNG, SVG or WebP format of at least {value0} px is required, the sizes attribute must be set, and the purpose attribute, if set, must include "any".',
-"no-acceptable-icon":'No supplied icon is at least {value0} px square in PNG, SVG or WebP format, with the purpose attribute unset or set to "any"',"cannot-download-icon":"Could not download a required icon from the manifest","no-icon-available":"Downloaded icon was empty or corrupted","platform-not-supported-on-android":"The specified application platform is not supported on Android","no-id-specified":"No Play store ID provided","ids-do-not-match":"The Play Store app URL and Play Store ID do not match","already-installed":"The app is already installed","url-not-supported-for-webapk":"A URL in the manifest contains a username, password, or port","in-incognito":"Page is loaded in an incognito window","not-offline-capable":"Page does not work offline","no-url-for-service-worker":"Could not check service worker without a 'start_url' field in the manifest","prefer-related-applications":"Manifest specifies prefer_related_applications: true",
-"prefer-related-applications-only-beta-stable":"prefer_related_applications is only supported on Chrome Beta and Stable channels on Android.","manifest-display-override-not-supported":"Manifest contains 'display_override' field, and the first supported display mode must be one of 'standalone', 'fullscreen', or 'minimal-ui'","manifest-location-changed":"Manifest URL changed while the manifest was being fetched.","warn-not-offline-capable":"Page does not work offline. The page will not be regarded as installable after Chrome 93, stable release August 2021.","protocol-timeout":"Lighthouse could not determine if there was a service worker. Please try with a newer version of Chrome.","pipeline-restarted":"PWA has been uninstalled and installability checks resetting.","scheme-not-supported-for-webapk":"The manifest URL scheme ({scheme}) is not supported on Android."},ef=createIcuMessageFn("core/audits/installable-manifest.js",Qh);class InstallableManifest extends Audit{static get meta(){
-return{id:"installable-manifest",title:ef(Qh.title),failureTitle:ef(Qh.failureTitle),description:ef(Qh.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static getInstallabilityErrors(e){const t=e.InstallabilityErrors.errors,n=[],a=[],r=/{([^}]+)}/g;for(const o of t){if("in-incognito"===o.errorId)continue;if("warn-not-offline-capable"===o.errorId){a.push(ef(Qh[o.errorId]));continue}if("pipeline-restarted"===o.errorId)continue;const t=Qh[o.errorId];if("scheme-not-supported-for-webapk"===o.errorId){const a=e.WebAppManifest?.url;if(!a)continue;const r=new URL(a).protocol;n.push(ef(t,{scheme:r}));continue}if(void 0===t){n.push(ef(Qh.noErrorId,{errorId:o.errorId}));continue}const i=t.match(r)||[],s=o.errorArguments?.length&&o.errorArguments[0].value;if(t&&o.errorArguments.length!==i.length){
-const e=JSON.stringify(o.errorArguments),t=o.errorArguments.length>i.length?`${o.errorId} has unexpected arguments ${e}`:`${o.errorId} does not have the expected number of arguments.`;n.push(t)}else t&&s?n.push(ef(t,{value0:s})):t&&n.push(ef(t))}return{i18nErrors:n,warnings:a}}static async audit(e,t){const{i18nErrors:n,warnings:a}=InstallableManifest.getInstallabilityErrors(e),r=e.WebAppManifest?e.WebAppManifest.url:null,o=[{key:"reason",valueType:"text",label:ef(Qh.columnValue)}],i=n.map((e=>({reason:e})));if(!i.length){const n=await Zh.request(e,t);n.isParseFailure&&i.push({reason:n.parseFailureReason})}const s={type:"debugdata",manifestUrl:r};return i.length>0?{score:0,warnings:a,numericValue:i.length,numericUnit:"element",displayValue:ef(Qh.displayValue,{itemCount:i.length}),details:{...Audit.makeTableDetails(o,i),debugData:s}}:{score:1,warnings:a,details:{...Audit.makeTableDetails(o,i),debugData:s}}}}var tf=Object.freeze({__proto__:null,default:InstallableManifest,UIStrings:Qh})
-;const nf={title:"Uses HTTPS",failureTitle:"Does not use HTTPS",description:"All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more about HTTPS](https://developer.chrome.com/docs/lighthouse/pwa/is-on-https/).",displayValue:"{itemCount, plural,\n    =1 {1 insecure request found}\n    other {# insecure requests found}\n    }",columnInsecureURL:"Insecure URL",columnResolution:"Request Resolution",allowed:"Allowed",blocked:"Blocked",warning:"Allowed with warning",upgraded:"Automatically upgraded to HTTPS"},af={
-MixedContentAutomaticallyUpgraded:nf.upgraded,MixedContentBlocked:nf.blocked,MixedContentWarning:nf.warning},rf=createIcuMessageFn("core/audits/is-on-https.js",nf);var of=Object.freeze({__proto__:null,default:class HTTPS extends Audit{static get meta(){return{id:"is-on-https",title:rf(nf.title),failureTitle:rf(nf.failureTitle),description:rf(nf.description),requiredArtifacts:["devtoolsLogs","InspectorIssues"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=(await bo.request(n,t)).filter((e=>!NetworkRequest.isSecureRequest(e))).map((e=>UrlUtils.elideDataURI(e.url))),r=Array.from(new Set(a)).map((e=>({url:e,resolution:void 0}))),o=[{key:"url",valueType:"url",label:rf(nf.columnInsecureURL)},{key:"resolution",valueType:"text",label:rf(nf.columnResolution)}];for(const t of e.InspectorIssues.mixedContentIssue){let e=r.find((e=>e.url===t.insecureURL));e||(e={url:t.insecureURL},r.push(e)),e.resolution=af[t.resolutionStatus]?rf(af[t.resolutionStatus]):t.resolutionStatus}
-for(const e of r)e.resolution||(e.resolution=rf(nf.allowed));let i;return r.length>0&&(i=rf(nf.displayValue,{itemCount:r.length})),{score:Number(0===r.length),displayValue:i,details:Audit.makeTableDetails(o,r)}}},UIStrings:nf});const sf=makeComputedArtifact(class LargestContentfulPaint$1 extends NavigationMetric{static computeSimulatedMetric(e,t){const n=NavigationMetric.getMetricComputationInput(e);return Nm.request(n,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.largestContentfulPaint)throw new LighthouseError(LighthouseError.errors.NO_LCP);return{timing:t.timings.largestContentfulPaint,timestamp:t.timestamps.largestContentfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const cf=makeComputedArtifact(class TimeToFirstByte extends NavigationMetric{static async computeSimulatedMetric(e,t){
-const n=await mc.request(e,t),a=await Ho.request(e.devtoolsLog,t),r=(await this.computeObservedMetric(e,t)).timing,o=a.serverResponseTimeByOrigin.get(n.parsedURL.securityOrigin);if(void 0===o)throw new Error("No response time for origin");let i=2;n.protocol.startsWith("h3")||(i+=1),"https"===n.parsedURL.scheme&&(i+=1);const s=e.settings.throttling.rttMs*i+o;return{timing:Math.max(r,s)}}static async computeObservedMetric(e,t){const n=await mc.request(e,t);if(!n.timing)throw new Error("missing timing for main resource");const{processedNavigation:a}=e,r=a.timestamps.timeOrigin,o=1e3*(1e3*n.timing.requestTime+n.timing.receiveHeadersStart);return{timing:(o-r)/1e3,timestamp:o}}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const lf=makeComputedArtifact(class LCPBreakdown{static async compute_(e,t){const n=await Lc.request(e.trace,t),a=n.timings.largestContentfulPaint;if(void 0===a)throw new LighthouseError(LighthouseError.errors.NO_LCP)
-;const r=n.timestamps.timeOrigin/1e3,{timing:o}=await cf.request(e,t),i=await Pm.request(e,t);if(!i)return{ttfb:o};const{timing:s}=await sf.request(e,t),c=s/a,l=(i.networkRequestTime-r)*c,u=Math.max(o,Math.min(l,s)),d=(i.networkEndTime-r)*c;return{ttfb:o,loadStart:u,loadEnd:Math.max(u,Math.min(d,s))}}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]),uf={title:"Largest Contentful Paint element",description:"This is the largest contentful element painted within the viewport. [Learn more about the Largest Contentful Paint element](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",columnPhase:"Phase",columnPercentOfLCP:"% of LCP",columnTiming:"Timing",itemTTFB:"TTFB",itemLoadDelay:"Load Delay",itemLoadTime:"Load Time",itemRenderDelay:"Render Delay"},df=createIcuMessageFn("core/audits/largest-contentful-paint-element.js",uf);var mf=Object.freeze({__proto__:null,default:class LargestContentfulPaintElement extends Audit{
-static get meta(){return{id:"largest-contentful-paint-element",title:df(uf.title),description:df(uf.description),scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","TraceElements","devtoolsLogs","GatherContext","settings","URL"]}}static async getOptionalLCPMetric(e,t){try{const{timing:n}=await sf.request(e,t);return n}catch{}}static makeElementTable(e){const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType));if(!t)return;const n=[{key:"node",valueType:"node",label:df(Ar.columnElement)}],a=[{node:Audit.makeNodeItem(t.node)}];return Audit.makeTableDetails(n,a)}static async makePhaseTable(e,t,n){const{ttfb:a,loadStart:r,loadEnd:o}=await lf.request(t,n);let i=0,s=0,c=e-a;r&&o&&(i=r-a,s=o-r,c=e-o);const l=[{phase:df(uf.itemTTFB),timing:a},{phase:df(uf.itemLoadDelay),timing:i},{phase:df(uf.itemLoadTime),timing:s},{phase:df(uf.itemRenderDelay),timing:c}].map((t=>{const n=`${(100*t.timing/e).toFixed(0)}%`;return{
-...t,percent:n}})),u=[{key:"phase",valueType:"text",label:df(uf.columnPhase)},{key:"percent",valueType:"text",label:df(uf.columnPercentOfLCP)},{key:"timing",valueType:"ms",label:df(uf.columnTiming)}];return Audit.makeTableDetails(u,l)}static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings,URL:e.URL},a=this.makeElementTable(e);if(!a)return{score:null,notApplicable:!0};const r=[a];let o;const i=await this.getOptionalLCPMetric(n,t);if(i){o=df(Ar.ms,{timeInMs:i});const e=await this.makePhaseTable(i,n,t);r.push(e)}return{score:1,displayValue:o,details:Audit.makeListDetails(r)}}},UIStrings:uf});
-/**
-   * @license Copyright 2020 Google Inc. All Rights Reserved.
-   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-   */const pf={title:"Avoid large layout shifts",description:"These DOM elements contribute most to the CLS of the page. [Learn how to improve CLS](https://web.dev/optimize-cls/)",columnContribution:"CLS Contribution"},gf=createIcuMessageFn("core/audits/layout-shift-elements.js",pf);var hf=Object.freeze({__proto__:null,default:class LayoutShiftElements extends Audit{static get meta(){return{id:"layout-shift-elements",title:gf(pf.title),description:gf(pf.description),scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces","TraceElements"]}}static async audit(e,t){const n=e.TraceElements.filter((e=>"layout-shift"===e.traceEventType)).map((e=>({node:Audit.makeNodeItem(e.node),score:e.score}))),a=[{key:"node",valueType:"node",label:gf(Ar.columnElement)},{key:"score",valueType:"numeric",granularity:.001,label:gf(pf.columnContribution)}],r=Audit.makeTableDetails(a,n);let o;n.length>0&&(o=gf(Ar.displayValueElementsFound,{nodeCount:n.length}))
-;const{cumulativeLayoutShift:i}=await Uc.request(e.traces[Audit.DEFAULT_PASS],t);return{score:1,metricSavings:{CLS:i},notApplicable:0===r.items.length,displayValue:o,details:r}}},UIStrings:pf});const ff={title:"Largest Contentful Paint image was not lazily loaded",failureTitle:"Largest Contentful Paint image was lazily loaded",description:"Above-the-fold images that are lazily loaded render later in the page lifecycle, which can delay the largest contentful paint. [Learn more about optimal lazy loading](https://web.dev/lcp-lazy-loading/)."},yf=createIcuMessageFn("core/audits/lcp-lazy-loaded.js",ff);var bf=Object.freeze({__proto__:null,default:class LargestContentfulPaintLazyLoaded extends Audit{static get meta(){return{id:"lcp-lazy-loaded",title:yf(ff.title),failureTitle:yf(ff.failureTitle),description:yf(ff.description),supportedModes:["navigation"],requiredArtifacts:["TraceElements","ViewportDimensions","ImageElements"]}}static isImageInViewport(e,t){
-return e.clientRect.top<t.innerHeight}static audit(e){const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType&&"image"===e.type)),n=t?e.ImageElements.find((e=>e.node.devtoolsNodePath===t.node.devtoolsNodePath)):void 0;if(!n||!this.isImageInViewport(n,e.ViewportDimensions))return{score:null,notApplicable:!0};const a=[{key:"node",valueType:"node",label:yf(Ar.columnElement)}],r=Audit.makeTableDetails(a,[{node:Audit.makeNodeItem(n.node)}]);return{score:"lazy"===n.loading?0:1,details:r}}},UIStrings:ff});const vf={startTime:0,endTime:0,duration:0},wf={title:"Avoid long main-thread tasks",description:"Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn how to avoid long main-thread tasks](https://web.dev/long-tasks-devtools/)",displayValue:"{itemCount, plural,\n  =1 {# long task found}\n  other {# long tasks found}\n  }"},Df=createIcuMessageFn("core/audits/long-tasks.js",wf);function insertUrl(e,t){
-const n=e.indexOf(t);return n>-1?n:e.push(t)-1}function roundTenths(e){return Math.round(10*e)/10}class LongTasks$2 extends Audit{static get meta(){return{id:"long-tasks",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:Df(wf.title),description:Df(wf.description),requiredArtifacts:["traces","devtoolsLogs","URL"]}}static getTimingBreakdown(e,t,n=new Map){const a=LongTasks$2.getTiming(e,t);let r=0;if(a.duration>0)for(const a of e.children){const{duration:e}=LongTasks$2.getTimingBreakdown(a,t,n);r+=e}const o=a.duration-r,i=n.get(e.group.id)||0;return n.set(e.group.id,i+o),{startTime:a.startTime,duration:a.duration,timeByTaskGroup:n}}static makeDebugData(e,t,n){const a=[],r=[];for(const o of e){const e=getAttributableURLForTask(o,t),{startTime:i,duration:s,timeByTaskGroup:c}=LongTasks$2.getTimingBreakdown(o,n),l=[...c].map((([e,t])=>[e,roundTenths(t)])).sort(((e,t)=>e[0].localeCompare(t[0])));r.push({urlIndex:insertUrl(a,e),startTime:roundTenths(i),duration:roundTenths(s),
-...Object.fromEntries(l)})}return{type:"debugdata",urls:a,tasks:r}}static getTiming(e,t){let n=e;t&&(n=t.get(e.event)||vf);const{duration:a,startTime:r}=n;return{duration:a,startTime:r}}static async audit(e,t){const n=t.settings||{},a=e.URL,r=e.traces[Audit.DEFAULT_PASS],o=await _m.request(r,t),i=e.devtoolsLogs[LongTasks$2.DEFAULT_PASS],s=await bo.request(i,t);let c;if("simulate"===n.throttlingMethod){c=new Map;const e={devtoolsLog:i,settings:t.settings},n=await fo.request({trace:r,devtoolsLog:i,URL:a},t),o=await Go.request(e,t),s=await o.simulate(n,{label:"long-tasks-diagnostic"});for(const[e,t]of s.nodeTimings.entries())"cpu"===e.type&&c.set(e.event,t)}const l=getJavaScriptURLs(s),u=o.map((e=>{const{duration:t}=LongTasks$2.getTiming(e,c);return{task:e,duration:t}})).filter((({task:e,duration:t})=>t>=50&&!e.unbounded&&!e.parent)).sort(((e,t)=>t.duration-e.duration)).map((({task:e})=>e)),d=u.map((e=>{const t=LongTasks$2.getTiming(e,c);return{url:getAttributableURLForTask(e,l),
-duration:t.duration,startTime:t.startTime}})).slice(0,20),m=[{key:"url",valueType:"url",label:Df(Ar.columnURL)},{key:"startTime",valueType:"ms",granularity:1,label:Df(Ar.columnStartTime)},{key:"duration",valueType:"ms",granularity:1,label:Df(Ar.columnDuration)}],p=Audit.makeTableDetails(m,d,{sortedBy:["duration"],skipSumming:["startTime"]});let h;return p.debugData=LongTasks$2.makeDebugData(u,l,c),d.length>0&&(h=Df(wf.displayValue,{itemCount:d.length})),{score:0===d.length?1:0,notApplicable:0===d.length,details:p,displayValue:h}}}var Ef=Object.freeze({__proto__:null,default:LongTasks$2,UIStrings:wf});var Tf=Object.freeze({__proto__:null,default:class MainThreadTasks extends Audit{static get meta(){return{id:"main-thread-tasks",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:"Tasks",description:"Lists the toplevel main thread tasks that executed during page load.",requiredArtifacts:["traces"]}}static async audit(e,t){
-const n=e.traces[Audit.DEFAULT_PASS],a=(await _m.request(n,t)).filter((e=>e.duration>5&&!e.parent)).map((e=>({duration:e.duration,startTime:e.startTime})));return{score:1,details:Audit.makeTableDetails([{key:"startTime",valueType:"ms",granularity:1,label:"Start Time"},{key:"duration",valueType:"ms",granularity:1,label:"End Time"}],a)}}}});const Cf={title:"Minimizes main-thread work",failureTitle:"Minimize main-thread work",description:"Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to minimize main-thread work](https://developer.chrome.com/docs/lighthouse/performance/mainthread-work-breakdown/)",columnCategory:"Category"},Sf=createIcuMessageFn("core/audits/mainthread-work-breakdown.js",Cf);class MainThreadWorkBreakdown extends Audit{static get meta(){return{id:"mainthread-work-breakdown",title:Sf(Cf.title),failureTitle:Sf(Cf.failureTitle),description:Sf(Cf.description),
-scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:2017,median:4e3}}static getExecutionTimingsByGroup(e){const t=new Map;for(const n of e){const e=t.get(n.group.id)||0;t.set(n.group.id,e+n.selfTime)}return t}static async audit(e,t){const n=t.settings||{},a=e.traces[MainThreadWorkBreakdown.DEFAULT_PASS],r=await _m.request(a,t),o="simulate"===n.throttlingMethod?n.throttling.cpuSlowdownMultiplier:1,i=MainThreadWorkBreakdown.getExecutionTimingsByGroup(r);let s=0;const c={},l=Array.from(i).map((([e,t])=>{const n=t*o;s+=n;const a=c[e]||0;return c[e]=a+n,{group:e,groupLabel:Cm[e].label,duration:n}})),u=[{key:"groupLabel",valueType:"text",label:Sf(Cf.columnCategory)},{key:"duration",valueType:"ms",granularity:1,label:Sf(Ar.columnTimeSpent)}];l.sort(((e,t)=>c[t.group]-c[e.group]));const d=MainThreadWorkBreakdown.makeTableDetails(u,l,{sortedBy:["duration"]});return{score:Audit.computeLogNormalScore({p10:t.options.p10,
-median:t.options.median},s),numericValue:s,numericUnit:"millisecond",displayValue:Sf(Ar.seconds,{timeInMs:s}),details:d}}}var _f=Object.freeze({__proto__:null,default:MainThreadWorkBreakdown,UIStrings:Cf});const Af={title:"Site works cross-browser",description:"To reach the most number of users, sites should work across every major browser. [Learn about cross-browser compatibility](https://developer.chrome.com/docs/lighthouse/pwa/pwa-cross-browser/)."},kf=createIcuMessageFn("core/audits/manual/pwa-cross-browser.js",Af);var xf=Object.freeze({__proto__:null,default:class PWACrossBrowser extends ManualAudit{static get meta(){return Object.assign({id:"pwa-cross-browser",title:kf(Af.title),description:kf(Af.description)},super.partialMeta)}},UIStrings:Af});const Ff={title:"Each page has a URL",
-description:"Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. [Learn more about providing deep links](https://developer.chrome.com/docs/lighthouse/pwa/pwa-each-page-has-url/)."},Rf=createIcuMessageFn("core/audits/manual/pwa-each-page-has-url.js",Ff);var If=Object.freeze({__proto__:null,default:class PWAEachPageHasURL extends ManualAudit{static get meta(){return Object.assign({id:"pwa-each-page-has-url",title:Rf(Ff.title),description:Rf(Ff.description)},super.partialMeta)}},UIStrings:Ff});const Mf={title:"Page transitions don't feel like they block on the network",description:"Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. [Learn more about page transitions](https://developer.chrome.com/docs/lighthouse/pwa/pwa-page-transitions/)."},Lf=createIcuMessageFn("core/audits/manual/pwa-page-transitions.js",Mf);var Nf=Object.freeze({
-__proto__:null,default:class PWAPageTransitions extends ManualAudit{static get meta(){return Object.assign({id:"pwa-page-transitions",title:Lf(Mf.title),description:Lf(Mf.description)},super.partialMeta)}},UIStrings:Mf});const Pf={title:"Manifest has a maskable icon",failureTitle:"Manifest doesn't have a maskable icon",description:"A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. [Learn about maskable manifest icons](https://developer.chrome.com/docs/lighthouse/pwa/maskable-icon-audit/)."},Of=createIcuMessageFn("core/audits/maskable-icon.js",Pf);var Bf=Object.freeze({__proto__:null,default:class MaskableIcon extends Audit{static get meta(){return{id:"maskable-icon",title:Of(Pf.title),failureTitle:Of(Pf.failureTitle),description:Of(Pf.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static async audit(e,t){const n=await Zh.request(e,t)
-;if(n.isParseFailure)return{score:0,explanation:n.parseFailureReason};return{score:n.allChecks.find((e=>"hasMaskableIcon"===e.id))?.passing?1:0}}},UIStrings:Pf}),Uf=getAugmentedNamespace(X),jf={exports:{}};!function(e){function JPEGEncoder(e){
-var t,n,a,r,o,i=Math.floor,s=new Array(64),c=new Array(64),l=new Array(64),u=new Array(64),d=new Array(65535),m=new Array(65535),p=new Array(64),h=new Array(64),f=[],y=0,b=7,v=new Array(64),w=new Array(64),D=new Array(64),E=new Array(256),T=new Array(2048),C=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],S=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],_=[0,1,2,3,4,5,6,7,8,9,10,11],A=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],k=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],x=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],F=[0,1,2,3,4,5,6,7,8,9,10,11],R=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],I=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250]
-;function computeHuffmanTbl(e,t){for(var n=0,a=0,r=new Array,o=1;o<=16;o++){for(var i=1;i<=e[o];i++)r[t[a]]=[],r[t[a]][0]=n,r[t[a]][1]=o,a++,n++;n*=2}return r}function writeBits(e){for(var t=e[0],n=e[1]-1;n>=0;)t&1<<n&&(y|=1<<b),n--,--b<0&&(255==y?(writeByte(255),writeByte(0)):writeByte(y),b=7,y=0)}function writeByte(e){f.push(e)}function writeWord(e){writeByte(e>>8&255),writeByte(255&e)}function processDU(e,t,n,a,r){for(var o,i=r[0],s=r[240],c=function fDCTQuant(e,t){var n,a,r,o,i,s,c,l,u,d,m=0;for(u=0;u<8;++u){n=e[m],a=e[m+1],r=e[m+2],o=e[m+3],i=e[m+4],s=e[m+5],c=e[m+6];var h=n+(l=e[m+7]),f=n-l,y=a+c,b=a-c,v=r+s,w=r-s,D=o+i,E=o-i,T=h+D,C=h-D,S=y+v,_=y-v;e[m]=T+S,e[m+4]=T-S;var A=.707106781*(_+C);e[m+2]=C+A,e[m+6]=C-A;var k=.382683433*((T=E+w)-(_=b+f)),x=.5411961*T+k,F=1.306562965*_+k,R=.707106781*(S=w+b),I=f+R,M=f-R;e[m+5]=M+x,e[m+3]=M-x,e[m+1]=I+F,e[m+7]=I-F,m+=8}for(m=0,u=0;u<8;++u){n=e[m],a=e[m+8],r=e[m+16],o=e[m+24],i=e[m+32],s=e[m+40],c=e[m+48]
-;var L=n+(l=e[m+56]),N=n-l,P=a+c,O=a-c,B=r+s,U=r-s,j=o+i,z=o-i,q=L+j,W=L-j,$=P+B,V=P-B;e[m]=q+$,e[m+32]=q-$;var H=.707106781*(V+W);e[m+16]=W+H,e[m+48]=W-H;var G=.382683433*((q=z+U)-(V=O+N)),Y=.5411961*q+G,K=1.306562965*V+G,J=.707106781*($=U+O),X=N+J,Z=N-J;e[m+40]=Z+Y,e[m+24]=Z-Y,e[m+8]=X+K,e[m+56]=X-K,m++}for(u=0;u<64;++u)d=e[u]*t[u],p[u]=d>0?d+.5|0:d-.5|0;return p}(e,t),l=0;l<64;++l)h[C[l]]=c[l];var u=h[0]-n;n=h[0],0==u?writeBits(a[0]):(writeBits(a[m[o=32767+u]]),writeBits(d[o]));for(var f=63;f>0&&0==h[f];f--);if(0==f)return writeBits(i),n;for(var y,b=1;b<=f;){for(var v=b;0==h[b]&&b<=f;++b);var w=b-v;if(w>=16){y=w>>4;for(var D=1;D<=y;++D)writeBits(s);w&=15}o=32767+h[b],writeBits(r[(w<<4)+m[o]]),writeBits(d[o]),b++}return 63!=f&&writeBits(i),n}function setQuality(e){if(e<=0&&(e=1),e>100&&(e=100),o!=e){(function initQuantTables(e){
-for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],n=0;n<64;n++){var a=i((t[n]*e+50)/100);a<1?a=1:a>255&&(a=255),s[C[n]]=a}for(var r=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],o=0;o<64;o++){var d=i((r[o]*e+50)/100);d<1?d=1:d>255&&(d=255),c[C[o]]=d}for(var m=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],p=0,h=0;h<8;h++)for(var f=0;f<8;f++)l[p]=1/(s[C[p]]*m[h]*m[f]*8),u[p]=1/(c[C[p]]*m[h]*m[f]*8),p++})(e<50?Math.floor(5e3/e):Math.floor(200-2*e)),o=e}}this.encode=function(e,o){(new Date).getTime(),o&&setQuality(o),f=new Array,y=0,b=7,writeWord(65496),function writeAPP0(){writeWord(65504),writeWord(16),writeByte(74),writeByte(70),writeByte(73),
-writeByte(70),writeByte(0),writeByte(1),writeByte(1),writeByte(0),writeWord(1),writeWord(1),writeByte(0),writeByte(0)}(),function writeCOM(e){void 0!==e&&e.constructor===Array&&e.forEach((e=>{if("string"==typeof e){writeWord(65534);var t,n=e.length;for(writeWord(n+2),t=0;t<n;t++)writeByte(e.charCodeAt(t))}}))}(e.comments),function writeAPP1(e){if(e){writeWord(65505),69===e[0]&&120===e[1]&&105===e[2]&&102===e[3]?writeWord(e.length+2):(writeWord(e.length+5+2),writeByte(69),writeByte(120),writeByte(105),writeByte(102),writeByte(0));for(var t=0;t<e.length;t++)writeByte(e[t])}}(e.exifBuffer),function writeDQT(){writeWord(65499),writeWord(132),writeByte(0);for(var e=0;e<64;e++)writeByte(s[e]);writeByte(1);for(var t=0;t<64;t++)writeByte(c[t])}(),function writeSOF0(e,t){writeWord(65472),writeWord(17),writeByte(8),writeWord(t),writeWord(e),writeByte(3),writeByte(1),writeByte(17),writeByte(0),writeByte(2),writeByte(17),writeByte(1),writeByte(3),writeByte(17),writeByte(1)}(e.width,e.height),
-function writeDHT(){writeWord(65476),writeWord(418),writeByte(0);for(var e=0;e<16;e++)writeByte(S[e+1]);for(var t=0;t<=11;t++)writeByte(_[t]);writeByte(16);for(var n=0;n<16;n++)writeByte(A[n+1]);for(var a=0;a<=161;a++)writeByte(k[a]);writeByte(1);for(var r=0;r<16;r++)writeByte(x[r+1]);for(var o=0;o<=11;o++)writeByte(F[o]);writeByte(17);for(var i=0;i<16;i++)writeByte(R[i+1]);for(var s=0;s<=161;s++)writeByte(I[s])}(),function writeSOS(){writeWord(65498),writeWord(12),writeByte(3),writeByte(1),writeByte(0),writeByte(2),writeByte(17),writeByte(3),writeByte(17),writeByte(0),writeByte(63),writeByte(0)}();var i=0,d=0,m=0;y=0,b=7,this.encode.displayName="_encode_";for(var p,h,E,C,M,L,N,P,O,B=e.data,U=e.width,j=e.height,z=4*U,q=0;q<j;){for(p=0;p<z;){for(L=M=z*q+p,N=-1,P=0,O=0;O<64;O++)L=M+(P=O>>3)*z+(N=4*(7&O)),q+P>=j&&(L-=z*(q+1+P-j)),p+N>=z&&(L-=p+N-z+4),h=B[L++],E=B[L++],C=B[L++],v[O]=(T[h]+T[E+256>>0]+T[C+512>>0]>>16)-128,w[O]=(T[h+768>>0]+T[E+1024>>0]+T[C+1280>>0]>>16)-128,
-D[O]=(T[h+1280>>0]+T[E+1536>>0]+T[C+1792>>0]>>16)-128;i=processDU(v,l,i,t,a),d=processDU(w,u,d,n,r),m=processDU(D,u,m,n,r),p+=32}q+=8}if(b>=0){var W=[];W[1]=b+1,W[0]=(1<<b+1)-1,writeBits(W)}return writeWord(65497),Buffer$1.from(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)E[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(S,_),n=computeHuffmanTbl(x,F),a=computeHuffmanTbl(A,k),r=computeHuffmanTbl(R,I)}(),function initCategoryNumber(){for(var e=1,t=2,n=1;n<=15;n++){for(var a=e;a<t;a++)m[32767+a]=n,d[32767+a]=[],d[32767+a][1]=n,d[32767+a][0]=a;for(var r=-(t-1);r<=-e;r++)m[32767+r]=n,d[32767+r]=[],d[32767+r][1]=n,d[32767+r][0]=t-1+r;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)T[e]=19595*e,T[e+256>>0]=38470*e,T[e+512>>0]=7471*e+32768,T[e+768>>0]=-11059*e,T[e+1024>>0]=-21709*e,T[e+1280>>0]=32768*e+8421375,T[e+1536>>0]=-27439*e,T[e+1792>>0]=-5329*e}(),setQuality(e),
-(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(jf);var zf,qf,Wf={exports:{}};zf=Wf,qf=function jpegImage(){var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,n=799,a=3406,r=2276,o=1567,i=3784,s=5793,c=2896;function constructor(){}function buildHuffmanTable(e,t){for(var n,a,r=0,o=[],i=16;i>0&&!e[i-1];)i--;o.push({children:[],index:0});var s,c=o[0];for(n=0;n<i;n++){for(a=0;a<e[n];a++){for((c=o.pop()).children[c.index]=t[r];c.index>0;){if(0===o.length)throw new Error("Could not recreate Huffman Table");c=o.pop()}for(c.index++,o.push(c);o.length<=n;)o.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s;r++}n+1<i&&(o.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s)}return o[0].children}
-function decodeScan(t,n,a,r,o,i,s,c,l,u){a.precision,a.samplesPerLine,a.scanLines;var d=a.mcusPerLine,m=a.progressive;a.maxH,a.maxV;var p=n,h=0,f=0;function readBit(){if(f>0)return f--,h>>f&1;if(255==(h=t[n++])){var e=t[n++];if(e)throw new Error("unexpected marker: "+(h<<8|e).toString(16))}return f=7,h>>>7}function decodeHuffman(e){for(var t,n=e;null!==(t=readBit());){if("number"==typeof(n=n[t]))return n;if("object"!=typeof n)throw new Error("invalid huffman sequence")}return null}function receive(e){for(var t=0;e>0;){var n=readBit();if(null===n)return;t=t<<1|n,e--}return t}function receiveAndExtend(e){var t=receive(e);return t>=1<<e-1?t:t+(-1<<e)+1}var y,b=0,v=0;function decodeMcu(e,t,n,a,r){var o=n%d,i=(n/d|0)*e.v+a,s=o*e.h+r;void 0===e.blocks[i]&&u.tolerantDecoding||t(e,e.blocks[i][s])}function decodeBlock(e,t,n){var a=n/e.blocksPerLine|0,r=n%e.blocksPerLine;void 0===e.blocks[a]&&u.tolerantDecoding||t(e,e.blocks[a][r])}var w,D,E,T,C,S,_=r.length
-;S=m?0===i?0===c?function decodeDCFirst(e,t){var n=decodeHuffman(e.huffmanTableDC),a=0===n?0:receiveAndExtend(n)<<l;t[0]=e.pred+=a}:function decodeDCSuccessive(e,t){t[0]|=readBit()<<l}:0===c?function decodeACFirst(t,n){if(b>0)b--;else for(var a=i,r=s;a<=r;){var o=decodeHuffman(t.huffmanTableAC),c=15&o,u=o>>4;if(0!==c)n[e[a+=u]]=receiveAndExtend(c)*(1<<l),a++;else{if(u<15){b=receive(u)+(1<<u)-1;break}a+=16}}}:function decodeACSuccessive(t,n){for(var a=i,r=s,o=0;a<=r;){var c=e[a],u=n[c]<0?-1:1;switch(v){case 0:var d=decodeHuffman(t.huffmanTableAC),m=15&d;if(o=d>>4,0===m)o<15?(b=receive(o)+(1<<o),v=4):(o=16,v=1);else{if(1!==m)throw new Error("invalid ACn encoding");y=receiveAndExtend(m),v=o?2:3}continue;case 1:case 2:n[c]?n[c]+=(readBit()<<l)*u:0==--o&&(v=2==v?3:0);break;case 3:n[c]?n[c]+=(readBit()<<l)*u:(n[c]=y<<l,v=0);break;case 4:n[c]&&(n[c]+=(readBit()<<l)*u)}a++}4===v&&0==--b&&(v=0)}:function decodeBaseline(t,n){var a=decodeHuffman(t.huffmanTableDC),r=0===a?0:receiveAndExtend(a)
-;n[0]=t.pred+=r;for(var o=1;o<64;){var i=decodeHuffman(t.huffmanTableAC),s=15&i,c=i>>4;if(0!==s)n[e[o+=c]]=receiveAndExtend(s),o++;else{if(c<15)break;o+=16}}};var A,k,x,F,R=0;for(k=1==_?r[0].blocksPerLine*r[0].blocksPerColumn:d*a.mcusPerColumn,o||(o=k);R<k;){for(D=0;D<_;D++)r[D].pred=0;if(b=0,1==_)for(w=r[0],C=0;C<o;C++)decodeBlock(w,S,R),R++;else for(C=0;C<o;C++){for(D=0;D<_;D++)for(x=(w=r[D]).h,F=w.v,E=0;E<F;E++)for(T=0;T<x;T++)decodeMcu(w,S,R,E,T);if(++R===k)break}if(R===k)do{if(255===t[n]&&0!==t[n+1])break;n+=1}while(n<t.length-2);if(f=0,(A=t[n]<<8|t[n+1])<65280)throw new Error("marker was not found");if(!(A>=65488&&A<=65495))break;n+=2}return n-p}function buildComponentData(e,l){var u,d,m=[],p=l.blocksPerLine,h=l.blocksPerColumn,f=p<<3,y=new Int32Array(64),b=new Uint8Array(64);function quantizeAndInverse(e,u,d){var m,p,h,f,y,b,v,w,D,E,T=l.quantizationTable,C=d;for(E=0;E<64;E++)C[E]=e[E]*T[E];for(E=0;E<8;++E){var S=8*E
-;0!=C[1+S]||0!=C[2+S]||0!=C[3+S]||0!=C[4+S]||0!=C[5+S]||0!=C[6+S]||0!=C[7+S]?(m=s*C[0+S]+128>>8,p=s*C[4+S]+128>>8,h=C[2+S],f=C[6+S],y=c*(C[1+S]-C[7+S])+128>>8,w=c*(C[1+S]+C[7+S])+128>>8,b=C[3+S]<<4,v=C[5+S]<<4,D=m-p+1>>1,m=m+p+1>>1,p=D,D=h*i+f*o+128>>8,h=h*o-f*i+128>>8,f=D,D=y-v+1>>1,y=y+v+1>>1,v=D,D=w+b+1>>1,b=w-b+1>>1,w=D,D=m-f+1>>1,m=m+f+1>>1,f=D,D=p-h+1>>1,p=p+h+1>>1,h=D,D=y*r+w*a+2048>>12,y=y*a-w*r+2048>>12,w=D,D=b*n+v*t+2048>>12,b=b*t-v*n+2048>>12,v=D,C[0+S]=m+w,C[7+S]=m-w,C[1+S]=p+v,C[6+S]=p-v,C[2+S]=h+b,C[5+S]=h-b,C[3+S]=f+y,C[4+S]=f-y):(D=s*C[0+S]+512>>10,C[0+S]=D,C[1+S]=D,C[2+S]=D,C[3+S]=D,C[4+S]=D,C[5+S]=D,C[6+S]=D,C[7+S]=D)}for(E=0;E<8;++E){var _=E;0!=C[8+_]||0!=C[16+_]||0!=C[24+_]||0!=C[32+_]||0!=C[40+_]||0!=C[48+_]||0!=C[56+_]?(m=s*C[0+_]+2048>>12,p=s*C[32+_]+2048>>12,h=C[16+_],f=C[48+_],y=c*(C[8+_]-C[56+_])+2048>>12,w=c*(C[8+_]+C[56+_])+2048>>12,b=C[24+_],v=C[40+_],D=m-p+1>>1,m=m+p+1>>1,p=D,D=h*i+f*o+2048>>12,h=h*o-f*i+2048>>12,f=D,D=y-v+1>>1,y=y+v+1>>1,v=D,D=w+b+1>>1,
-b=w-b+1>>1,w=D,D=m-f+1>>1,m=m+f+1>>1,f=D,D=p-h+1>>1,p=p+h+1>>1,h=D,D=y*r+w*a+2048>>12,y=y*a-w*r+2048>>12,w=D,D=b*n+v*t+2048>>12,b=b*t-v*n+2048>>12,v=D,C[0+_]=m+w,C[56+_]=m-w,C[8+_]=p+v,C[48+_]=p-v,C[16+_]=h+b,C[40+_]=h-b,C[24+_]=f+y,C[32+_]=f-y):(D=s*d[E+0]+8192>>14,C[0+_]=D,C[8+_]=D,C[16+_]=D,C[24+_]=D,C[32+_]=D,C[40+_]=D,C[48+_]=D,C[56+_]=D)}for(E=0;E<64;++E){var A=128+(C[E]+8>>4);u[E]=A<0?0:A>255?255:A}}requestMemoryAllocation(f*h*8);for(var v=0;v<h;v++){var w=v<<3;for(u=0;u<8;u++)m.push(new Uint8Array(f));for(var D=0;D<p;D++){quantizeAndInverse(l.blocks[v][D],b,y);var E=0,T=D<<3;for(d=0;d<8;d++){var C=m[w+d];for(u=0;u<8;u++)C[T+u]=b[E++]}}}return m}function clampTo8bit(e){return e<0?0:e>255?255:e}constructor.prototype={load:function load(e){var t=new XMLHttpRequest;t.open("GET",e,!0),t.responseType="arraybuffer",t.onload=function(){var e=new Uint8Array(t.response||t.mozResponseArrayBuffer);this.parse(e),this.onload&&this.onload()}.bind(this),t.send(null)},parse:function parse(t){
-var n=1e3*this.opts.maxResolutionInMP*1e3,a=0;function readUint16(){var e=t[a]<<8|t[a+1];return a+=2,e}function prepareComponents(e){var t,n,a=1,r=1;for(n in e.components)e.components.hasOwnProperty(n)&&(a<(t=e.components[n]).h&&(a=t.h),r<t.v&&(r=t.v));var o=Math.ceil(e.samplesPerLine/8/a),i=Math.ceil(e.scanLines/8/r);for(n in e.components)if(e.components.hasOwnProperty(n)){t=e.components[n];var s=Math.ceil(Math.ceil(e.samplesPerLine/8)*t.h/a),c=Math.ceil(Math.ceil(e.scanLines/8)*t.v/r),l=o*t.h,u=i*t.v,d=[];requestMemoryAllocation(u*l*256);for(var m=0;m<u;m++){for(var p=[],h=0;h<l;h++)p.push(new Int32Array(64));d.push(p)}t.blocksPerLine=s,t.blocksPerColumn=c,t.blocks=d}e.maxH=a,e.maxV=r,e.mcusPerLine=o,e.mcusPerColumn=i}t.length;var r,o,i,s,c=null,l=null,u=[],d=[],m=[],p=[],h=readUint16(),f=-1;if(this.comments=[],65496!=h)throw new Error("SOI not found");for(h=readUint16();65497!=h;){switch(h){case 65280:break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:
-case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var y=(i=void 0,s=void 0,i=readUint16(),s=t.subarray(a,a+i-2),a+=s.length,s);if(65534===h){var b=String.fromCharCode.apply(null,y);this.comments.push(b)}65504===h&&74===y[0]&&70===y[1]&&73===y[2]&&70===y[3]&&0===y[4]&&(c={version:{major:y[5],minor:y[6]},densityUnits:y[7],xDensity:y[8]<<8|y[9],yDensity:y[10]<<8|y[11],thumbWidth:y[12],thumbHeight:y[13],thumbData:y.subarray(14,14+3*y[12]*y[13])}),65505===h&&69===y[0]&&120===y[1]&&105===y[2]&&102===y[3]&&0===y[4]&&(this.exifBuffer=y.subarray(5,y.length)),65518===h&&65===y[0]&&100===y[1]&&111===y[2]&&98===y[3]&&101===y[4]&&0===y[5]&&(l={version:y[6],flags0:y[7]<<8|y[8],flags1:y[9]<<8|y[10],transformCode:y[11]});break;case 65499:for(var v=readUint16()+a-2;a<v;){var w=t[a++];requestMemoryAllocation(256);var D=new Int32Array(64);if(w>>4==0)for(W=0;W<64;W++)D[e[W]]=t[a++];else{
-if(w>>4!=1)throw new Error("DQT: invalid table spec");for(W=0;W<64;W++)D[e[W]]=readUint16()}u[15&w]=D}break;case 65472:case 65473:case 65474:readUint16(),(r={}).extended=65473===h,r.progressive=65474===h,r.precision=t[a++],r.scanLines=readUint16(),r.samplesPerLine=readUint16(),r.components={},r.componentsOrder=[];var E=r.scanLines*r.samplesPerLine;if(E>n){var T=Math.ceil((E-n)/1e6);throw new Error(`maxResolutionInMP limit exceeded by ${T}MP`)}var C,S=t[a++];for(z=0;z<S;z++){C=t[a];var _=t[a+1]>>4,A=15&t[a+1],k=t[a+2];if(_<=0||A<=0)throw new Error("Invalid sampling factor, expected values above 0");r.componentsOrder.push(C),r.components[C]={h:_,v:A,quantizationIdx:k},a+=3}prepareComponents(r),d.push(r);break;case 65476:var x=readUint16();for(z=2;z<x;){var F=t[a++],R=new Uint8Array(16),I=0;for(W=0;W<16;W++,a++)I+=R[W]=t[a];requestMemoryAllocation(16+I);var M=new Uint8Array(I);for(W=0;W<I;W++,a++)M[W]=t[a];z+=17+I,(F>>4==0?p:m)[15&F]=buildHuffmanTable(R,M)}break;case 65501:readUint16(),
-o=readUint16();break;case 65500:readUint16(),readUint16();break;case 65498:readUint16();var L=t[a++],N=[];for(z=0;z<L;z++){$=r.components[t[a++]];var P=t[a++];$.huffmanTableDC=p[P>>4],$.huffmanTableAC=m[15&P],N.push($)}var O=t[a++],B=t[a++],U=t[a++],j=decodeScan(t,a,r,N,o,O,B,U>>4,15&U,this.opts);a+=j;break;case 65535:255!==t[a]&&a--;break;default:if(255==t[a-3]&&t[a-2]>=192&&t[a-2]<=254){a-=3;break}if(224===h||225==h){if(-1!==f)throw new Error(`first unknown JPEG marker at offset ${f.toString(16)}, second unknown JPEG marker ${h.toString(16)} at offset ${(a-1).toString(16)}`);f=a-1;const e=readUint16();if(255===t[a+e-2]){a+=e-2;break}}throw new Error("unknown JPEG marker "+h.toString(16))}h=readUint16()}if(1!=d.length)throw new Error("only single frame JPEGs supported");for(var z=0;z<d.length;z++){var q=d[z].components;for(var W in q)q[W].quantizationTable=u[q[W].quantizationIdx],delete q[W].quantizationIdx}for(this.width=r.samplesPerLine,this.height=r.scanLines,this.jfif=c,
-this.adobe=l,this.components=[],z=0;z<r.componentsOrder.length;z++){var $=r.components[r.componentsOrder[z]];this.components.push({lines:buildComponentData(0,$),scaleX:$.h/r.maxH,scaleY:$.v/r.maxV})}},getData:function getData(e,t){var n,a,r,o,i,s,c,l,u,d,m,p,h,f,y,b,v,w,D,E,T,C=this.width/e,S=this.height/t,_=0,A=e*t*this.components.length;requestMemoryAllocation(A);var k=new Uint8Array(A);switch(this.components.length){case 1:for(n=this.components[0],d=0;d<t;d++)for(i=n.lines[0|d*n.scaleY*S],u=0;u<e;u++)m=i[0|u*n.scaleX*C],k[_++]=m;break;case 2:for(n=this.components[0],a=this.components[1],d=0;d<t;d++)for(i=n.lines[0|d*n.scaleY*S],s=a.lines[0|d*a.scaleY*S],u=0;u<e;u++)m=i[0|u*n.scaleX*C],k[_++]=m,m=s[0|u*a.scaleX*C],k[_++]=m;break;case 3:for(T=!0,this.adobe&&this.adobe.transformCode?T=!0:void 0!==this.opts.colorTransform&&(T=!!this.opts.colorTransform),n=this.components[0],a=this.components[1],r=this.components[2],d=0;d<t;d++)for(i=n.lines[0|d*n.scaleY*S],s=a.lines[0|d*a.scaleY*S],
-c=r.lines[0|d*r.scaleY*S],u=0;u<e;u++)T?(m=i[0|u*n.scaleX*C],p=s[0|u*a.scaleX*C],w=clampTo8bit(m+1.402*((h=c[0|u*r.scaleX*C])-128)),D=clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),E=clampTo8bit(m+1.772*(p-128))):(w=i[0|u*n.scaleX*C],D=s[0|u*a.scaleX*C],E=c[0|u*r.scaleX*C]),k[_++]=w,k[_++]=D,k[_++]=E;break;case 4:if(!this.adobe)throw new Error("Unsupported color mode (4 components)");for(T=!1,this.adobe&&this.adobe.transformCode?T=!0:void 0!==this.opts.colorTransform&&(T=!!this.opts.colorTransform),n=this.components[0],a=this.components[1],r=this.components[2],o=this.components[3],d=0;d<t;d++)for(i=n.lines[0|d*n.scaleY*S],s=a.lines[0|d*a.scaleY*S],c=r.lines[0|d*r.scaleY*S],l=o.lines[0|d*o.scaleY*S],u=0;u<e;u++)T?(m=i[0|u*n.scaleX*C],p=s[0|u*a.scaleX*C],h=c[0|u*r.scaleX*C],f=l[0|u*o.scaleX*C],y=255-clampTo8bit(m+1.402*(h-128)),b=255-clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),v=255-clampTo8bit(m+1.772*(p-128))):(y=i[0|u*n.scaleX*C],b=s[0|u*a.scaleX*C],v=c[0|u*r.scaleX*C],
-f=l[0|u*o.scaleX*C]),k[_++]=255-y,k[_++]=255-b,k[_++]=255-v,k[_++]=255-f;break;default:throw new Error("Unsupported color mode")}return k},copyToImageData:function copyToImageData(e,t){var n,a,r,o,i,s,c,l,u,d=e.width,m=e.height,p=e.data,h=this.getData(d,m),f=0,y=0;switch(this.components.length){case 1:for(a=0;a<m;a++)for(n=0;n<d;n++)r=h[f++],p[y++]=r,p[y++]=r,p[y++]=r,t&&(p[y++]=255);break;case 3:for(a=0;a<m;a++)for(n=0;n<d;n++)c=h[f++],l=h[f++],u=h[f++],p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;case 4:for(a=0;a<m;a++)for(n=0;n<d;n++)i=h[f++],s=h[f++],r=h[f++],c=255-clampTo8bit(i*(1-(o=h[f++])/255)+o),l=255-clampTo8bit(s*(1-o/255)+o),u=255-clampTo8bit(r*(1-o/255)+o),p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;default:throw new Error("Unsupported color mode")}}};var l=0,u=0;function requestMemoryAllocation(e=0){var t=l+e;if(t>u){var n=Math.ceil((t-u)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${n}MB`)}l=t}
-return constructor.resetMaxMemoryUsage=function(e){l=0,u=e},constructor.getBytesAllocated=function(){return l},constructor.requestMemoryAllocation=requestMemoryAllocation,constructor}(),zf.exports=function decode(e,t={}){var n={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512,...t},a=new Uint8Array(e),r=new qf;r.opts=n,qf.resetMaxMemoryUsage(1024*n.maxMemoryUsageInMB*1024),r.parse(a);var o=n.formatAsRGBA?4:3,i=r.width*r.height*o;try{qf.requestMemoryAllocation(i);var s={width:r.width,height:r.height,exifBuffer:r.exifBuffer,data:n.useTArray?new Uint8Array(i):Buffer$1.alloc(i)};r.comments.length>0&&(s.comments=r.comments)}catch(e){if(e instanceof RangeError)throw new Error("Could not allocate enough memory for the image. Required: "+i);if(e instanceof ReferenceError&&"Buffer is not defined"===e.message)throw new Error("Buffer is not globally defined in this environment. Consider setting useTArray to true");throw e}
-return r.copyToImageData(s,n.formatAsRGBA),s};var $f={encode:jf.exports,decode:Wf.exports};const Vf=Uf,Hf=$f;function getPixel(e,t,n,a,r){return r[4*(e+t*a)+n]}function isWhitePixel(e,t,n){return getPixel(e,t,0,n.width,n.data)>=249&&getPixel(e,t,1,n.width,n.data)>=249&&getPixel(e,t,2,n.width,n.data)>=249}function frame$1(e,t){let n=null,a=null,r=null,o=null,i=null,s=null;return{getHistogram:function(){if(n)return n;const e=this.getParsedImage();return n=function convertPixelsToHistogram(e){const createHistogramArray=function(){const e=[];for(let t=0;t<256;t++)e[t]=0;return e},t=e.width,n=e.height,a=[createHistogramArray(),createHistogramArray(),createHistogramArray()];for(let r=0;r<n;r++)for(let n=0;n<t;n++)if(!isWhitePixel(n,r,e))for(let o=0;o<a.length;o++){const i=getPixel(n,r,o,t,e.data);a[o][i]++}return a}(e),n},getTimeStamp:function(){return t},setProgress:function(e,t){a=e,r=Boolean(t)},setPerceptualProgress:function(e,t){o=e,i=Boolean(t)},getImage:function(){return e},
-getParsedImage:function(){return s||(s=Hf.decode(e)),s},getProgress:function(){return a},isProgressInterpolated:function(){return r},getPerceptualProgress:function(){return o},isPerceptualProgressInterpolated:function(){return i}}}var Gf,Yf={extractFramesFromTimeline:function extractFramesFromTimeline(e,t){let n;t=t||{},e="string"==typeof e?Vf.readFileSync(e,"utf-8"):e;try{n="string"==typeof e?JSON.parse(e):e}catch(e){throw new Error("Speedline: Invalid JSON"+e.message)}let a=n.traceEvents||n,r=Number.MAX_VALUE,o=-Number.MAX_VALUE;a.forEach((e=>{0!==e.ts&&(r=Math.min(r,e.ts),o=Math.max(o,e.ts))})),r=(t.timeOrigin||r)/1e3,o/=1e3;let i=null;const s=a.filter((e=>e.cat.includes("disabled-by-default-devtools.screenshot")&&e.ts>=1e3*r));s.sort(((e,t)=>e.ts-t.ts));const c=s.map((function(e){const t=e.args&&e.args.snapshot,n=e.ts/1e3;if(t===i)return null;i=t;return frame$1(Buffer$1.from(t,"base64"),n)})).filter(Boolean)
-;if(0===c.length)return Promise.reject(new Error("No screenshots found in trace"));const l=frame$1(function synthesizeWhiteFrame(e){const t=Hf.decode(e[0].getImage()),n=t.width,a=t.height,r=Buffer$1.alloc(n*a*4);let o=0;for(;o<r.length;)r[o++]=255,r[o++]=255,r[o++]=255,r[o++]=255;return Hf.encode({data:r,width:n,height:a}).data}(c),r);c.unshift(l);const u={startTs:r,endTs:o,frames:c};return Promise.resolve(u)},create:frame$1};
-/**
+"use strict";(()=>{var a7=Object.create;var Kc=Object.defineProperty;var o7=Object.getOwnPropertyDescriptor;var i7=Object.getOwnPropertyNames;var s7=Object.getPrototypeOf,c7=Object.prototype.hasOwnProperty;var s=(t,e)=>Kc(t,"name",{value:e,configurable:!0});var v=(t,e)=>()=>(t&&(e=t(t=0)),e);var L=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),S=(t,e)=>{for(var n in e)Kc(t,n,{get:e[n],enumerable:!0})},KS=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of i7(e))!c7.call(t,a)&&a!==n&&Kc(t,a,{get:()=>e[a],enumerable:!(r=o7(e,a))||r.enumerable});return t};var zt=(t,e,n)=>(n=t!=null?a7(s7(t)):{},KS(e||!t||!t.__esModule?Kc(n,"default",{value:t,enumerable:!0}):n,t)),u7=t=>KS(Kc({},"__esModule",{value:!0}),t);function JS(){throw new Error("setTimeout has not been defined")}function XS(){throw new Error("clearTimeout has not been defined")}function ZS(t){if(Pa===setTimeout)return setTimeout(t,0);if((Pa===JS||!Pa)&&setTimeout)return Pa=setTimeout,setTimeout(t,0);try{return Pa(t,0)}catch{try{return Pa.call(null,t,0)}catch{return Pa.call(this,t,0)}}}function l7(t){if(Oa===clearTimeout)return clearTimeout(t);if((Oa===XS||!Oa)&&clearTimeout)return Oa=clearTimeout,clearTimeout(t);try{return Oa(t)}catch{try{return Oa.call(null,t)}catch{return Oa.call(this,t)}}}function d7(){!Ui||!Oo||(Ui=!1,Oo.length?aa=Oo.concat(aa):Rm=-1,aa.length&&QS())}function QS(){if(!Ui){var t=ZS(d7);Ui=!0;for(var e=aa.length;e;){for(Oo=aa,aa=[];++Rm<e;)Oo&&Oo[Rm].run();Rm=-1,e=aa.length}Oo=null,Ui=!1,l7(t)}}function mn(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];aa.push(new ex(t,e)),aa.length===1&&!Ui&&ZS(QS)}function ex(t,e){this.fun=t,this.array=e}function Uo(){}function F7(t){throw new Error("process.binding is not supported")}function R7(){return"/"}function _7(t){throw new Error("process.chdir is not supported")}function k7(){return 0}function M7(t){var e=I7.call(Oi)*.001,n=Math.floor(e),r=Math.floor(e%1*1e9);return t&&(n=n-t[0],r=r-t[1],r<0&&(n--,r+=1e9)),[n,r]}function L7(){var t=new Date,e=t-N7;return e/1e3}var Pa,Oa,aa,Ui,Oo,Rm,m7,p7,f7,g7,h7,y7,v7,b7,w7,D7,E7,T7,S7,x7,C7,A7,Oi,I7,N7,pn,Ua=v(()=>{d();s(JS,"defaultSetTimout");s(XS,"defaultClearTimeout");Pa=JS,Oa=XS;typeof globalThis.setTimeout=="function"&&(Pa=setTimeout);typeof globalThis.clearTimeout=="function"&&(Oa=clearTimeout);s(ZS,"runTimeout");s(l7,"runClearTimeout");aa=[],Ui=!1,Rm=-1;s(d7,"cleanUpNextTick");s(QS,"drainQueue");s(mn,"nextTick");s(ex,"Item");ex.prototype.run=function(){this.fun.apply(null,this.array)};m7="browser",p7="browser",f7=!0,g7={},h7=[],y7="",v7={},b7={},w7={};s(Uo,"noop");D7=Uo,E7=Uo,T7=Uo,S7=Uo,x7=Uo,C7=Uo,A7=Uo;s(F7,"binding");s(R7,"cwd");s(_7,"chdir");s(k7,"umask");Oi=globalThis.performance||{},I7=Oi.now||Oi.mozNow||Oi.msNow||Oi.oNow||Oi.webkitNow||function(){return new Date().getTime()};s(M7,"hrtime");N7=new Date;s(L7,"uptime");pn={nextTick:mn,title:m7,browser:f7,env:g7,argv:h7,version:y7,versions:v7,on:D7,addListener:E7,once:T7,off:S7,removeListener:x7,removeAllListeners:C7,emit:A7,binding:F7,cwd:R7,chdir:_7,umask:k7,hrtime:M7,platform:p7,release:b7,config:w7,uptime:L7}});var d=v(()=>{"use strict";Ua();globalThis.process=pn});function ax(){zf=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)xr[e]=t[e],Xn[t.charCodeAt(e)]=e;Xn["-".charCodeAt(0)]=62,Xn["_".charCodeAt(0)]=63}function O7(t){zf||ax();var e,n,r,a,o,i,c=t.length;if(c%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o=t[c-2]==="="?2:t[c-1]==="="?1:0,i=new P7(c*3/4-o),r=o>0?c-4:c;var u=0;for(e=0,n=0;e<r;e+=4,n+=3)a=Xn[t.charCodeAt(e)]<<18|Xn[t.charCodeAt(e+1)]<<12|Xn[t.charCodeAt(e+2)]<<6|Xn[t.charCodeAt(e+3)],i[u++]=a>>16&255,i[u++]=a>>8&255,i[u++]=a&255;return o===2?(a=Xn[t.charCodeAt(e)]<<2|Xn[t.charCodeAt(e+1)]>>4,i[u++]=a&255):o===1&&(a=Xn[t.charCodeAt(e)]<<10|Xn[t.charCodeAt(e+1)]<<4|Xn[t.charCodeAt(e+2)]>>2,i[u++]=a>>8&255,i[u++]=a&255),i}function U7(t){return xr[t>>18&63]+xr[t>>12&63]+xr[t>>6&63]+xr[t&63]}function B7(t,e,n){for(var r,a=[],o=e;o<n;o+=3)r=(t[o]<<16)+(t[o+1]<<8)+t[o+2],a.push(U7(r));return a.join("")}function tx(t){zf||ax();for(var e,n=t.length,r=n%3,a="",o=[],i=16383,c=0,u=n-r;c<u;c+=i)o.push(B7(t,c,c+i>u?u:c+i));return r===1?(e=t[n-1],a+=xr[e>>2],a+=xr[e<<4&63],a+="=="):r===2&&(e=(t[n-2]<<8)+t[n-1],a+=xr[e>>10],a+=xr[e>>4&63],a+=xr[e<<2&63],a+="="),o.push(a),o.join("")}function Im(t,e,n,r,a){var o,i,c=a*8-r-1,u=(1<<c)-1,l=u>>1,m=-7,p=n?a-1:0,g=n?-1:1,f=t[e+p];for(p+=g,o=f&(1<<-m)-1,f>>=-m,m+=c;m>0;o=o*256+t[e+p],p+=g,m-=8);for(i=o&(1<<-m)-1,o>>=-m,m+=r;m>0;i=i*256+t[e+p],p+=g,m-=8);if(o===0)o=1-l;else{if(o===u)return i?NaN:(f?-1:1)*(1/0);i=i+Math.pow(2,r),o=o-l}return(f?-1:1)*i*Math.pow(2,o-r)}function ox(t,e,n,r,a,o){var i,c,u,l=o*8-a-1,m=(1<<l)-1,p=m>>1,g=a===23?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,y=r?1:-1,b=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(c=isNaN(e)?1:0,i=m):(i=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-i))<1&&(i--,u*=2),i+p>=1?e+=g/u:e+=g*Math.pow(2,1-p),e*u>=2&&(i++,u/=2),i+p>=m?(c=0,i=m):i+p>=1?(c=(e*u-1)*Math.pow(2,a),i=i+p):(c=e*Math.pow(2,p-1)*Math.pow(2,a),i=0));a>=8;t[n+f]=c&255,f+=y,c/=256,a-=8);for(i=i<<a|c,l+=a;l>0;t[n+f]=i&255,f+=y,i/=256,l-=8);t[n+f-y]|=b*128}function _m(){return H.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function oa(t,e){if(_m()<e)throw new RangeError("Invalid typed array length");return H.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=H.prototype):(t===null&&(t=new H(e)),t.length=e),t}function H(t,e,n){if(!H.TYPED_ARRAY_SUPPORT&&!(this instanceof H))return new H(t,e,n);if(typeof t=="number"){if(typeof e=="string")throw new Error("If encoding is specified then the first argument must be a string");return Hf(this,t)}return sx(this,t,e,n)}function sx(t,e,n,r){if(typeof e=="number")throw new TypeError('"value" argument must not be a number');return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer?G7(t,e,n,r):typeof e=="string"?H7(t,e,n):W7(t,e)}function cx(t){if(typeof t!="number")throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function z7(t,e,n,r){return cx(e),e<=0?oa(t,e):n!==void 0?typeof r=="string"?oa(t,e).fill(n,r):oa(t,e).fill(n):oa(t,e)}function Hf(t,e){if(cx(e),t=oa(t,e<0?0:Gf(e)|0),!H.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function H7(t,e,n){if((typeof n!="string"||n==="")&&(n="utf8"),!H.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=ux(e,n)|0;t=oa(t,r);var a=t.write(e,n);return a!==r&&(t=t.slice(0,a)),t}function qf(t,e){var n=e.length<0?0:Gf(e.length)|0;t=oa(t,n);for(var r=0;r<n;r+=1)t[r]=e[r]&255;return t}function G7(t,e,n,r){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");return n===void 0&&r===void 0?e=new Uint8Array(e):r===void 0?e=new Uint8Array(e,n):e=new Uint8Array(e,n,r),H.TYPED_ARRAY_SUPPORT?(t=e,t.__proto__=H.prototype):t=qf(t,e),t}function W7(t,e){if(Cr(e)){var n=Gf(e.length)|0;return t=oa(t,n),t.length===0||e.copy(t,0,0,n),t}if(e){if(typeof ArrayBuffer<"u"&&e.buffer instanceof ArrayBuffer||"length"in e)return typeof e.length!="number"||l9(e.length)?oa(t,0):qf(t,e);if(e.type==="Buffer"&&ix(e.data))return qf(t,e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function Gf(t){if(t>=_m())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+_m().toString(16)+" bytes");return t|0}function Cr(t){return!!(t!=null&&t._isBuffer)}function ux(t,e){if(Cr(t))return t.length;if(typeof ArrayBuffer<"u"&&typeof ArrayBuffer.isView=="function"&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;typeof t!="string"&&(t=""+t);var n=t.length;if(n===0)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return km(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return n*2;case"hex":return n>>>1;case"base64":return hx(t).length;default:if(r)return km(t).length;e=(""+e).toLowerCase(),r=!0}}function V7(t,e,n){var r=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((n===void 0||n>this.length)&&(n=this.length),n<=0)||(n>>>=0,e>>>=0,n<=e))return"";for(t||(t="utf8");;)switch(t){case"hex":return n9(this,e,n);case"utf8":case"utf-8":return mx(this,e,n);case"ascii":return e9(this,e,n);case"latin1":case"binary":return t9(this,e,n);case"base64":return Z7(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return r9(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function Bo(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function lx(t,e,n,r,a){if(t.length===0)return-1;if(typeof n=="string"?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=a?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(a)return-1;n=t.length-1}else if(n<0)if(a)n=0;else return-1;if(typeof e=="string"&&(e=H.from(e,r)),Cr(e))return e.length===0?-1:nx(t,e,n,r,a);if(typeof e=="number")return e=e&255,H.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf=="function"?a?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):nx(t,[e],n,r,a);throw new TypeError("val must be string, number or Buffer")}function nx(t,e,n,r,a){var o=1,i=t.length,c=e.length;if(r!==void 0&&(r=String(r).toLowerCase(),r==="ucs2"||r==="ucs-2"||r==="utf16le"||r==="utf-16le")){if(t.length<2||e.length<2)return-1;o=2,i/=2,c/=2,n/=2}function u(f,y){return o===1?f[y]:f.readUInt16BE(y*o)}s(u,"read");var l;if(a){var m=-1;for(l=n;l<i;l++)if(u(t,l)===u(e,m===-1?0:l-m)){if(m===-1&&(m=l),l-m+1===c)return m*o}else m!==-1&&(l-=l-m),m=-1}else for(n+c>i&&(n=i-c),l=n;l>=0;l--){for(var p=!0,g=0;g<c;g++)if(u(t,l+g)!==u(e,g)){p=!1;break}if(p)return l}return-1}function $7(t,e,n,r){n=Number(n)||0;var a=t.length-n;r?(r=Number(r),r>a&&(r=a)):r=a;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var i=0;i<r;++i){var c=parseInt(e.substr(i*2,2),16);if(isNaN(c))return i;t[n+i]=c}return i}function Y7(t,e,n,r){return Lm(km(e,t.length-n),t,n,r)}function dx(t,e,n,r){return Lm(c9(e),t,n,r)}function K7(t,e,n,r){return dx(t,e,n,r)}function J7(t,e,n,r){return Lm(hx(e),t,n,r)}function X7(t,e,n,r){return Lm(u9(e,t.length-n),t,n,r)}function Z7(t,e,n){return e===0&&n===t.length?tx(t):tx(t.slice(e,n))}function mx(t,e,n){n=Math.min(t.length,n);for(var r=[],a=e;a<n;){var o=t[a],i=null,c=o>239?4:o>223?3:o>191?2:1;if(a+c<=n){var u,l,m,p;switch(c){case 1:o<128&&(i=o);break;case 2:u=t[a+1],(u&192)===128&&(p=(o&31)<<6|u&63,p>127&&(i=p));break;case 3:u=t[a+1],l=t[a+2],(u&192)===128&&(l&192)===128&&(p=(o&15)<<12|(u&63)<<6|l&63,p>2047&&(p<55296||p>57343)&&(i=p));break;case 4:u=t[a+1],l=t[a+2],m=t[a+3],(u&192)===128&&(l&192)===128&&(m&192)===128&&(p=(o&15)<<18|(u&63)<<12|(l&63)<<6|m&63,p>65535&&p<1114112&&(i=p))}}i===null?(i=65533,c=1):i>65535&&(i-=65536,r.push(i>>>10&1023|55296),i=56320|i&1023),r.push(i),a+=c}return Q7(r)}function Q7(t){var e=t.length;if(e<=rx)return String.fromCharCode.apply(String,t);for(var n="",r=0;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=rx));return n}function e9(t,e,n){var r="";n=Math.min(t.length,n);for(var a=e;a<n;++a)r+=String.fromCharCode(t[a]&127);return r}function t9(t,e,n){var r="";n=Math.min(t.length,n);for(var a=e;a<n;++a)r+=String.fromCharCode(t[a]);return r}function n9(t,e,n){var r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);for(var a="",o=e;o<n;++o)a+=s9(t[o]);return a}function r9(t,e,n){for(var r=t.slice(e,n),a="",o=0;o<r.length;o+=2)a+=String.fromCharCode(r[o]+r[o+1]*256);return a}function rn(t,e,n){if(t%1!==0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function On(t,e,n,r,a,o){if(!Cr(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>a||e<o)throw new RangeError('"value" argument is out of bounds');if(n+r>t.length)throw new RangeError("Index out of range")}function Mm(t,e,n,r){e<0&&(e=65535+e+1);for(var a=0,o=Math.min(t.length-n,2);a<o;++a)t[n+a]=(e&255<<8*(r?a:1-a))>>>(r?a:1-a)*8}function Nm(t,e,n,r){e<0&&(e=4294967295+e+1);for(var a=0,o=Math.min(t.length-n,4);a<o;++a)t[n+a]=e>>>(r?a:3-a)*8&255}function px(t,e,n,r,a,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function fx(t,e,n,r,a){return a||px(t,e,n,4),ox(t,e,n,r,23,4),n+4}function gx(t,e,n,r,a){return a||px(t,e,n,8),ox(t,e,n,r,52,8),n+8}function o9(t){if(t=i9(t).replace(a9,""),t.length<2)return"";for(;t.length%4!==0;)t=t+"=";return t}function i9(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function s9(t){return t<16?"0"+t.toString(16):t.toString(16)}function km(t,e){e=e||1/0;for(var n,r=t.length,a=null,o=[],i=0;i<r;++i){if(n=t.charCodeAt(i),n>55295&&n<57344){if(!a){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}else if(i+1===r){(e-=3)>-1&&o.push(239,191,189);continue}a=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),a=n;continue}n=(a-55296<<10|n-56320)+65536}else a&&(e-=3)>-1&&o.push(239,191,189);if(a=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,n&63|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,n&63|128)}else if(n<1114112){if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,n&63|128)}else throw new Error("Invalid code point")}return o}function c9(t){for(var e=[],n=0;n<t.length;++n)e.push(t.charCodeAt(n)&255);return e}function u9(t,e){for(var n,r,a,o=[],i=0;i<t.length&&!((e-=2)<0);++i)n=t.charCodeAt(i),r=n>>8,a=n%256,o.push(a),o.push(r);return o}function hx(t){return O7(o9(t))}function Lm(t,e,n,r){for(var a=0;a<r&&!(a+n>=e.length||a>=t.length);++a)e[a+n]=t[a];return a}function l9(t){return t!==t}function d9(t){return t!=null&&(!!t._isBuffer||yx(t)||m9(t))}function yx(t){return!!t.constructor&&typeof t.constructor.isBuffer=="function"&&t.constructor.isBuffer(t)}function m9(t){return typeof t.readFloatLE=="function"&&typeof t.slice=="function"&&yx(t.slice(0,0))}var xr,Xn,P7,zf,j7,ix,q7,oce,rx,a9,Bi=v(()=>{d();xr=[],Xn=[],P7=typeof Uint8Array<"u"?Uint8Array:Array,zf=!1;s(ax,"init");s(O7,"toByteArray");s(U7,"tripletToBase64");s(B7,"encodeChunk");s(tx,"fromByteArray");s(Im,"read");s(ox,"write");j7={}.toString,ix=Array.isArray||function(t){return j7.call(t)=="[object Array]"};q7=50;H.TYPED_ARRAY_SUPPORT=globalThis.TYPED_ARRAY_SUPPORT!==void 0?globalThis.TYPED_ARRAY_SUPPORT:!0;oce=_m();s(_m,"kMaxLength");s(oa,"createBuffer");s(H,"Buffer");H.poolSize=8192;H._augment=function(t){return t.__proto__=H.prototype,t};s(sx,"from");H.from=function(t,e,n){return sx(null,t,e,n)};H.TYPED_ARRAY_SUPPORT&&(H.prototype.__proto__=Uint8Array.prototype,H.__proto__=Uint8Array,typeof Symbol<"u"&&Symbol.species&&H[Symbol.species]);s(cx,"assertSize");s(z7,"alloc");H.alloc=function(t,e,n){return z7(null,t,e,n)};s(Hf,"allocUnsafe");H.allocUnsafe=function(t){return Hf(null,t)};H.allocUnsafeSlow=function(t){return Hf(null,t)};s(H7,"fromString");s(qf,"fromArrayLike");s(G7,"fromArrayBuffer");s(W7,"fromObject");s(Gf,"checked");H.isBuffer=d9;s(Cr,"internalIsBuffer");H.compare=s(function(e,n){if(!Cr(e)||!Cr(n))throw new TypeError("Arguments must be Buffers");if(e===n)return 0;for(var r=e.length,a=n.length,o=0,i=Math.min(r,a);o<i;++o)if(e[o]!==n[o]){r=e[o],a=n[o];break}return r<a?-1:a<r?1:0},"compare");H.isEncoding=s(function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},"isEncoding");H.concat=s(function(e,n){if(!ix(e))throw new TypeError('"list" argument must be an Array of Buffers');if(e.length===0)return H.alloc(0);var r;if(n===void 0)for(n=0,r=0;r<e.length;++r)n+=e[r].length;var a=H.allocUnsafe(n),o=0;for(r=0;r<e.length;++r){var i=e[r];if(!Cr(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(a,o),o+=i.length}return a},"concat");s(ux,"byteLength");H.byteLength=ux;s(V7,"slowToString");H.prototype._isBuffer=!0;s(Bo,"swap");H.prototype.swap16=s(function(){var e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var n=0;n<e;n+=2)Bo(this,n,n+1);return this},"swap16");H.prototype.swap32=s(function(){var e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var n=0;n<e;n+=4)Bo(this,n,n+3),Bo(this,n+1,n+2);return this},"swap32");H.prototype.swap64=s(function(){var e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var n=0;n<e;n+=8)Bo(this,n,n+7),Bo(this,n+1,n+6),Bo(this,n+2,n+5),Bo(this,n+3,n+4);return this},"swap64");H.prototype.toString=s(function(){var e=this.length|0;return e===0?"":arguments.length===0?mx(this,0,e):V7.apply(this,arguments)},"toString");H.prototype.equals=s(function(e){if(!Cr(e))throw new TypeError("Argument must be a Buffer");return this===e?!0:H.compare(this,e)===0},"equals");H.prototype.inspect=s(function(){var e="",n=q7;return this.length>0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),"<Buffer "+e+">"},"inspect");H.prototype.compare=s(function(e,n,r,a,o){if(!Cr(e))throw new TypeError("Argument must be a Buffer");if(n===void 0&&(n=0),r===void 0&&(r=e?e.length:0),a===void 0&&(a=0),o===void 0&&(o=this.length),n<0||r>e.length||a<0||o>this.length)throw new RangeError("out of range index");if(a>=o&&n>=r)return 0;if(a>=o)return-1;if(n>=r)return 1;if(n>>>=0,r>>>=0,a>>>=0,o>>>=0,this===e)return 0;for(var i=o-a,c=r-n,u=Math.min(i,c),l=this.slice(a,o),m=e.slice(n,r),p=0;p<u;++p)if(l[p]!==m[p]){i=l[p],c=m[p];break}return i<c?-1:c<i?1:0},"compare");s(lx,"bidirectionalIndexOf");s(nx,"arrayIndexOf");H.prototype.includes=s(function(e,n,r){return this.indexOf(e,n,r)!==-1},"includes");H.prototype.indexOf=s(function(e,n,r){return lx(this,e,n,r,!0)},"indexOf");H.prototype.lastIndexOf=s(function(e,n,r){return lx(this,e,n,r,!1)},"lastIndexOf");s($7,"hexWrite");s(Y7,"utf8Write");s(dx,"asciiWrite");s(K7,"latin1Write");s(J7,"base64Write");s(X7,"ucs2Write");H.prototype.write=s(function(e,n,r,a){if(n===void 0)a="utf8",r=this.length,n=0;else if(r===void 0&&typeof n=="string")a=n,r=this.length,n=0;else if(isFinite(n))n=n|0,isFinite(r)?(r=r|0,a===void 0&&(a="utf8")):(a=r,r=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var o=this.length-n;if((r===void 0||r>o)&&(r=o),e.length>0&&(r<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");a||(a="utf8");for(var i=!1;;)switch(a){case"hex":return $7(this,e,n,r);case"utf8":case"utf-8":return Y7(this,e,n,r);case"ascii":return dx(this,e,n,r);case"latin1":case"binary":return K7(this,e,n,r);case"base64":return J7(this,e,n,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return X7(this,e,n,r);default:if(i)throw new TypeError("Unknown encoding: "+a);a=(""+a).toLowerCase(),i=!0}},"write");H.prototype.toJSON=s(function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},"toJSON");s(Z7,"base64Slice");s(mx,"utf8Slice");rx=4096;s(Q7,"decodeCodePointsArray");s(e9,"asciiSlice");s(t9,"latin1Slice");s(n9,"hexSlice");s(r9,"utf16leSlice");H.prototype.slice=s(function(e,n){var r=this.length;e=~~e,n=n===void 0?r:~~n,e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),n<0?(n+=r,n<0&&(n=0)):n>r&&(n=r),n<e&&(n=e);var a;if(H.TYPED_ARRAY_SUPPORT)a=this.subarray(e,n),a.__proto__=H.prototype;else{var o=n-e;a=new H(o,void 0);for(var i=0;i<o;++i)a[i]=this[i+e]}return a},"slice");s(rn,"checkOffset");H.prototype.readUIntLE=s(function(e,n,r){e=e|0,n=n|0,r||rn(e,n,this.length);for(var a=this[e],o=1,i=0;++i<n&&(o*=256);)a+=this[e+i]*o;return a},"readUIntLE");H.prototype.readUIntBE=s(function(e,n,r){e=e|0,n=n|0,r||rn(e,n,this.length);for(var a=this[e+--n],o=1;n>0&&(o*=256);)a+=this[e+--n]*o;return a},"readUIntBE");H.prototype.readUInt8=s(function(e,n){return n||rn(e,1,this.length),this[e]},"readUInt8");H.prototype.readUInt16LE=s(function(e,n){return n||rn(e,2,this.length),this[e]|this[e+1]<<8},"readUInt16LE");H.prototype.readUInt16BE=s(function(e,n){return n||rn(e,2,this.length),this[e]<<8|this[e+1]},"readUInt16BE");H.prototype.readUInt32LE=s(function(e,n){return n||rn(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216},"readUInt32LE");H.prototype.readUInt32BE=s(function(e,n){return n||rn(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])},"readUInt32BE");H.prototype.readIntLE=s(function(e,n,r){e=e|0,n=n|0,r||rn(e,n,this.length);for(var a=this[e],o=1,i=0;++i<n&&(o*=256);)a+=this[e+i]*o;return o*=128,a>=o&&(a-=Math.pow(2,8*n)),a},"readIntLE");H.prototype.readIntBE=s(function(e,n,r){e=e|0,n=n|0,r||rn(e,n,this.length);for(var a=n,o=1,i=this[e+--a];a>0&&(o*=256);)i+=this[e+--a]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*n)),i},"readIntBE");H.prototype.readInt8=s(function(e,n){return n||rn(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]},"readInt8");H.prototype.readInt16LE=s(function(e,n){n||rn(e,2,this.length);var r=this[e]|this[e+1]<<8;return r&32768?r|4294901760:r},"readInt16LE");H.prototype.readInt16BE=s(function(e,n){n||rn(e,2,this.length);var r=this[e+1]|this[e]<<8;return r&32768?r|4294901760:r},"readInt16BE");H.prototype.readInt32LE=s(function(e,n){return n||rn(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},"readInt32LE");H.prototype.readInt32BE=s(function(e,n){return n||rn(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},"readInt32BE");H.prototype.readFloatLE=s(function(e,n){return n||rn(e,4,this.length),Im(this,e,!0,23,4)},"readFloatLE");H.prototype.readFloatBE=s(function(e,n){return n||rn(e,4,this.length),Im(this,e,!1,23,4)},"readFloatBE");H.prototype.readDoubleLE=s(function(e,n){return n||rn(e,8,this.length),Im(this,e,!0,52,8)},"readDoubleLE");H.prototype.readDoubleBE=s(function(e,n){return n||rn(e,8,this.length),Im(this,e,!1,52,8)},"readDoubleBE");s(On,"checkInt");H.prototype.writeUIntLE=s(function(e,n,r,a){if(e=+e,n=n|0,r=r|0,!a){var o=Math.pow(2,8*r)-1;On(this,e,n,r,o,0)}var i=1,c=0;for(this[n]=e&255;++c<r&&(i*=256);)this[n+c]=e/i&255;return n+r},"writeUIntLE");H.prototype.writeUIntBE=s(function(e,n,r,a){if(e=+e,n=n|0,r=r|0,!a){var o=Math.pow(2,8*r)-1;On(this,e,n,r,o,0)}var i=r-1,c=1;for(this[n+i]=e&255;--i>=0&&(c*=256);)this[n+i]=e/c&255;return n+r},"writeUIntBE");H.prototype.writeUInt8=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,1,255,0),H.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[n]=e&255,n+1},"writeUInt8");s(Mm,"objectWriteUInt16");H.prototype.writeUInt16LE=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,2,65535,0),H.TYPED_ARRAY_SUPPORT?(this[n]=e&255,this[n+1]=e>>>8):Mm(this,e,n,!0),n+2},"writeUInt16LE");H.prototype.writeUInt16BE=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,2,65535,0),H.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=e&255):Mm(this,e,n,!1),n+2},"writeUInt16BE");s(Nm,"objectWriteUInt32");H.prototype.writeUInt32LE=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,4,4294967295,0),H.TYPED_ARRAY_SUPPORT?(this[n+3]=e>>>24,this[n+2]=e>>>16,this[n+1]=e>>>8,this[n]=e&255):Nm(this,e,n,!0),n+4},"writeUInt32LE");H.prototype.writeUInt32BE=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,4,4294967295,0),H.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=e&255):Nm(this,e,n,!1),n+4},"writeUInt32BE");H.prototype.writeIntLE=s(function(e,n,r,a){if(e=+e,n=n|0,!a){var o=Math.pow(2,8*r-1);On(this,e,n,r,o-1,-o)}var i=0,c=1,u=0;for(this[n]=e&255;++i<r&&(c*=256);)e<0&&u===0&&this[n+i-1]!==0&&(u=1),this[n+i]=(e/c>>0)-u&255;return n+r},"writeIntLE");H.prototype.writeIntBE=s(function(e,n,r,a){if(e=+e,n=n|0,!a){var o=Math.pow(2,8*r-1);On(this,e,n,r,o-1,-o)}var i=r-1,c=1,u=0;for(this[n+i]=e&255;--i>=0&&(c*=256);)e<0&&u===0&&this[n+i+1]!==0&&(u=1),this[n+i]=(e/c>>0)-u&255;return n+r},"writeIntBE");H.prototype.writeInt8=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,1,127,-128),H.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[n]=e&255,n+1},"writeInt8");H.prototype.writeInt16LE=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,2,32767,-32768),H.TYPED_ARRAY_SUPPORT?(this[n]=e&255,this[n+1]=e>>>8):Mm(this,e,n,!0),n+2},"writeInt16LE");H.prototype.writeInt16BE=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,2,32767,-32768),H.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=e&255):Mm(this,e,n,!1),n+2},"writeInt16BE");H.prototype.writeInt32LE=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,4,2147483647,-2147483648),H.TYPED_ARRAY_SUPPORT?(this[n]=e&255,this[n+1]=e>>>8,this[n+2]=e>>>16,this[n+3]=e>>>24):Nm(this,e,n,!0),n+4},"writeInt32LE");H.prototype.writeInt32BE=s(function(e,n,r){return e=+e,n=n|0,r||On(this,e,n,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),H.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=e&255):Nm(this,e,n,!1),n+4},"writeInt32BE");s(px,"checkIEEE754");s(fx,"writeFloat");H.prototype.writeFloatLE=s(function(e,n,r){return fx(this,e,n,!0,r)},"writeFloatLE");H.prototype.writeFloatBE=s(function(e,n,r){return fx(this,e,n,!1,r)},"writeFloatBE");s(gx,"writeDouble");H.prototype.writeDoubleLE=s(function(e,n,r){return gx(this,e,n,!0,r)},"writeDoubleLE");H.prototype.writeDoubleBE=s(function(e,n,r){return gx(this,e,n,!1,r)},"writeDoubleBE");H.prototype.copy=s(function(e,n,r,a){if(r||(r=0),!a&&a!==0&&(a=this.length),n>=e.length&&(n=e.length),n||(n=0),a>0&&a<r&&(a=r),a===r||e.length===0||this.length===0)return 0;if(n<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(a<0)throw new RangeError("sourceEnd out of bounds");a>this.length&&(a=this.length),e.length-n<a-r&&(a=e.length-n+r);var o=a-r,i;if(this===e&&r<n&&n<a)for(i=o-1;i>=0;--i)e[i+n]=this[i+r];else if(o<1e3||!H.TYPED_ARRAY_SUPPORT)for(i=0;i<o;++i)e[i+n]=this[i+r];else Uint8Array.prototype.set.call(e,this.subarray(r,r+o),n);return o},"copy");H.prototype.fill=s(function(e,n,r,a){if(typeof e=="string"){if(typeof n=="string"?(a=n,n=0,r=this.length):typeof r=="string"&&(a=r,r=this.length),e.length===1){var o=e.charCodeAt(0);o<256&&(e=o)}if(a!==void 0&&typeof a!="string")throw new TypeError("encoding must be a string");if(typeof a=="string"&&!H.isEncoding(a))throw new TypeError("Unknown encoding: "+a)}else typeof e=="number"&&(e=e&255);if(n<0||this.length<n||this.length<r)throw new RangeError("Out of range index");if(r<=n)return this;n=n>>>0,r=r===void 0?this.length:r>>>0,e||(e=0);var i;if(typeof e=="number")for(i=n;i<r;++i)this[i]=e;else{var c=Cr(e)?e:km(new H(e,a).toString()),u=c.length;for(i=0;i<r-n;++i)this[i+n]=c[i%u]}return this},"fill");a9=/[^+\/0-9A-Za-z-_]/g;s(o9,"base64clean");s(i9,"stringtrim");s(s9,"toHex");s(km,"utf8ToBytes");s(c9,"asciiToBytes");s(u9,"utf16leToBytes");s(hx,"base64ToBytes");s(Lm,"blitBuffer");s(l9,"isnan");s(d9,"isBuffer");s(yx,"isFastBuffer");s(m9,"isSlowBuffer")});function Ba(){}function Xe(){Xe.init.call(this)}function vx(t){return t._maxListeners===void 0?Xe.defaultMaxListeners:t._maxListeners}function p9(t,e,n){if(e)t.call(n);else for(var r=t.length,a=Jc(t,r),o=0;o<r;++o)a[o].call(n)}function f9(t,e,n,r){if(e)t.call(n,r);else for(var a=t.length,o=Jc(t,a),i=0;i<a;++i)o[i].call(n,r)}function g9(t,e,n,r,a){if(e)t.call(n,r,a);else for(var o=t.length,i=Jc(t,o),c=0;c<o;++c)i[c].call(n,r,a)}function h9(t,e,n,r,a,o){if(e)t.call(n,r,a,o);else for(var i=t.length,c=Jc(t,i),u=0;u<i;++u)c[u].call(n,r,a,o)}function y9(t,e,n,r){if(e)t.apply(n,r);else for(var a=t.length,o=Jc(t,a),i=0;i<a;++i)o[i].apply(n,r)}function bx(t,e,n,r){var a,o,i;if(typeof n!="function")throw new TypeError('"listener" argument must be a function');if(o=t._events,o?(o.newListener&&(t.emit("newListener",e,n.listener?n.listener:n),o=t._events),i=o[e]):(o=t._events=new Ba,t._eventsCount=0),!i)i=o[e]=n,++t._eventsCount;else if(typeof i=="function"?i=o[e]=r?[n,i]:[i,n]:r?i.unshift(n):i.push(n),!i.warned&&(a=vx(t),a&&a>0&&i.length>a)){i.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+e+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=t,c.type=e,c.count=i.length,v9(c)}return t}function v9(t){typeof console.warn=="function"?console.warn(t):console.log(t)}function wx(t,e,n){var r=!1;function a(){t.removeListener(e,a),r||(r=!0,n.apply(t,arguments))}return s(a,"g"),a.listener=n,a}function Dx(t){var e=this._events;if(e){var n=e[t];if(typeof n=="function")return 1;if(n)return n.length}return 0}function b9(t,e){for(var n=e,r=n+1,a=t.length;r<a;n+=1,r+=1)t[n]=t[r];t.pop()}function Jc(t,e){for(var n=new Array(e);e--;)n[e]=t[e];return n}function w9(t){for(var e=new Array(t.length),n=0;n<e.length;++n)e[n]=t[n].listener||t[n];return e}var Wf,Zn,ia=v(()=>{"use strict";d();s(Ba,"EventHandlers");Ba.prototype=Object.create(null);s(Xe,"EventEmitter");Zn=Xe;Xe.EventEmitter=Xe;Xe.usingDomains=!1;Xe.prototype.domain=void 0;Xe.prototype._events=void 0;Xe.prototype._maxListeners=void 0;Xe.defaultMaxListeners=10;Xe.init=function(){this.domain=null,Xe.usingDomains&&Wf.active&&!(this instanceof Wf.Domain)&&(this.domain=Wf.active),(!this._events||this._events===Object.getPrototypeOf(this)._events)&&(this._events=new Ba,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};Xe.prototype.setMaxListeners=s(function(e){if(typeof e!="number"||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},"setMaxListeners");s(vx,"$getMaxListeners");Xe.prototype.getMaxListeners=s(function(){return vx(this)},"getMaxListeners");s(p9,"emitNone");s(f9,"emitOne");s(g9,"emitTwo");s(h9,"emitThree");s(y9,"emitMany");Xe.prototype.emit=s(function(e){var n,r,a,o,i,c,u,l=!1,m=e==="error";if(c=this._events,c)m=m&&c.error==null;else if(!m)return!1;if(u=this.domain,m){if(n=arguments[1],u)n||(n=new Error('Uncaught, unspecified "error" event')),n.domainEmitter=this,n.domain=u,n.domainThrown=!1,u.emit("error",n);else{if(n instanceof Error)throw n;var p=new Error('Uncaught, unspecified "error" event. ('+n+")");throw p.context=n,p}return!1}if(r=c[e],!r)return!1;var g=typeof r=="function";switch(a=arguments.length,a){case 1:p9(r,g,this);break;case 2:f9(r,g,this,arguments[1]);break;case 3:g9(r,g,this,arguments[1],arguments[2]);break;case 4:h9(r,g,this,arguments[1],arguments[2],arguments[3]);break;default:for(o=new Array(a-1),i=1;i<a;i++)o[i-1]=arguments[i];y9(r,g,this,o)}return l&&u.exit(),!0},"emit");s(bx,"_addListener");s(v9,"emitWarning");Xe.prototype.addListener=s(function(e,n){return bx(this,e,n,!1)},"addListener");Xe.prototype.on=Xe.prototype.addListener;Xe.prototype.prependListener=s(function(e,n){return bx(this,e,n,!0)},"prependListener");s(wx,"_onceWrap");Xe.prototype.once=s(function(e,n){if(typeof n!="function")throw new TypeError('"listener" argument must be a function');return this.on(e,wx(this,e,n)),this},"once");Xe.prototype.prependOnceListener=s(function(e,n){if(typeof n!="function")throw new TypeError('"listener" argument must be a function');return this.prependListener(e,wx(this,e,n)),this},"prependOnceListener");Xe.prototype.removeListener=s(function(e,n){var r,a,o,i,c;if(typeof n!="function")throw new TypeError('"listener" argument must be a function');if(a=this._events,!a)return this;if(r=a[e],!r)return this;if(r===n||r.listener&&r.listener===n)--this._eventsCount===0?this._events=new Ba:(delete a[e],a.removeListener&&this.emit("removeListener",e,r.listener||n));else if(typeof r!="function"){for(o=-1,i=r.length;i-- >0;)if(r[i]===n||r[i].listener&&r[i].listener===n){c=r[i].listener,o=i;break}if(o<0)return this;if(r.length===1){if(r[0]=void 0,--this._eventsCount===0)return this._events=new Ba,this;delete a[e]}else b9(r,o);a.removeListener&&this.emit("removeListener",e,c||n)}return this},"removeListener");Xe.prototype.off=function(t,e){return this.removeListener(t,e)};Xe.prototype.removeAllListeners=s(function(e){var n,r;if(r=this._events,!r)return this;if(!r.removeListener)return arguments.length===0?(this._events=new Ba,this._eventsCount=0):r[e]&&(--this._eventsCount===0?this._events=new Ba:delete r[e]),this;if(arguments.length===0){for(var a=Object.keys(r),o=0,i;o<a.length;++o)i=a[o],i!=="removeListener"&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=new Ba,this._eventsCount=0,this}if(n=r[e],typeof n=="function")this.removeListener(e,n);else if(n)do this.removeListener(e,n[n.length-1]);while(n[0]);return this},"removeAllListeners");Xe.prototype.listeners=s(function(e){var n,r,a=this._events;return a?(n=a[e],n?typeof n=="function"?r=[n.listener||n]:r=w9(n):r=[]):r=[],r},"listeners");Xe.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):Dx.call(t,e)};Xe.prototype.listenerCount=Dx;s(Dx,"listenerCount");Xe.prototype.eventNames=s(function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]},"eventNames");s(b9,"spliceOne");s(Jc,"arrayClone");s(w9,"unwrapListeners")});var Tx=L((mce,Ex)=>{d();var ji=1e3,qi=ji*60,zi=qi*60,jo=zi*24,D9=jo*7,E9=jo*365.25;Ex.exports=function(t,e){e=e||{};var n=typeof t;if(n==="string"&&t.length>0)return T9(t);if(n==="number"&&isFinite(t))return e.long?x9(t):S9(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function T9(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*E9;case"weeks":case"week":case"w":return n*D9;case"days":case"day":case"d":return n*jo;case"hours":case"hour":case"hrs":case"hr":case"h":return n*zi;case"minutes":case"minute":case"mins":case"min":case"m":return n*qi;case"seconds":case"second":case"secs":case"sec":case"s":return n*ji;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}s(T9,"parse");function S9(t){var e=Math.abs(t);return e>=jo?Math.round(t/jo)+"d":e>=zi?Math.round(t/zi)+"h":e>=qi?Math.round(t/qi)+"m":e>=ji?Math.round(t/ji)+"s":t+"ms"}s(S9,"fmtShort");function x9(t){var e=Math.abs(t);return e>=jo?Pm(t,e,jo,"day"):e>=zi?Pm(t,e,zi,"hour"):e>=qi?Pm(t,e,qi,"minute"):e>=ji?Pm(t,e,ji,"second"):t+" ms"}s(x9,"fmtLong");function Pm(t,e,n,r){var a=e>=n*1.5;return Math.round(t/n)+" "+r+(a?"s":"")}s(Pm,"plural")});var xx=L((gce,Sx)=>{d();function C9(t){n.debug=n,n.default=n,n.coerce=u,n.disable=o,n.enable=a,n.enabled=i,n.humanize=Tx(),n.destroy=l,Object.keys(t).forEach(m=>{n[m]=t[m]}),n.names=[],n.skips=[],n.formatters={};function e(m){let p=0;for(let g=0;g<m.length;g++)p=(p<<5)-p+m.charCodeAt(g),p|=0;return n.colors[Math.abs(p)%n.colors.length]}s(e,"selectColor"),n.selectColor=e;function n(m){let p,g=null,f,y;function b(...D){if(!b.enabled)return;let T=b,A=Number(new Date),R=A-(p||A);T.diff=R,T.prev=p,T.curr=A,p=A,D[0]=n.coerce(D[0]),typeof D[0]!="string"&&D.unshift("%O");let F=0;D[0]=D[0].replace(/%([a-zA-Z%])/g,(V,z)=>{if(V==="%%")return"%";F++;let ne=n.formatters[z];if(typeof ne=="function"){let se=D[F];V=ne.call(T,se),D.splice(F,1),F--}return V}),n.formatArgs.call(T,D),(T.log||n.log).apply(T,D)}return s(b,"debug"),b.namespace=m,b.useColors=n.useColors(),b.color=n.selectColor(m),b.extend=r,b.destroy=n.destroy,Object.defineProperty(b,"enabled",{enumerable:!0,configurable:!1,get:()=>g!==null?g:(f!==n.namespaces&&(f=n.namespaces,y=n.enabled(m)),y),set:D=>{g=D}}),typeof n.init=="function"&&n.init(b),b}s(n,"createDebug");function r(m,p){let g=n(this.namespace+(typeof p>"u"?":":p)+m);return g.log=this.log,g}s(r,"extend");function a(m){n.save(m),n.namespaces=m,n.names=[],n.skips=[];let p,g=(typeof m=="string"?m:"").split(/[\s,]+/),f=g.length;for(p=0;p<f;p++)g[p]&&(m=g[p].replace(/\*/g,".*?"),m[0]==="-"?n.skips.push(new RegExp("^"+m.slice(1)+"$")):n.names.push(new RegExp("^"+m+"$")))}s(a,"enable");function o(){let m=[...n.names.map(c),...n.skips.map(c).map(p=>"-"+p)].join(",");return n.enable(""),m}s(o,"disable");function i(m){if(m[m.length-1]==="*")return!0;let p,g;for(p=0,g=n.skips.length;p<g;p++)if(n.skips[p].test(m))return!1;for(p=0,g=n.names.length;p<g;p++)if(n.names[p].test(m))return!0;return!1}s(i,"enabled");function c(m){return m.toString().substring(2,m.toString().length-2).replace(/\.\*\?$/,"*")}s(c,"toNamespace");function u(m){return m instanceof Error?m.stack||m.message:m}s(u,"coerce");function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return s(l,"destroy"),n.enable(n.load()),n}s(C9,"setup");Sx.exports=C9});var Cx=L((Gn,Om)=>{d();Gn.formatArgs=F9;Gn.save=R9;Gn.load=_9;Gn.useColors=A9;Gn.storage=k9();Gn.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Gn.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function A9(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}s(A9,"useColors");function F9(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+Om.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let n=0,r=0;t[0].replace(/%[a-zA-Z%]/g,a=>{a!=="%%"&&(n++,a==="%c"&&(r=n))}),t.splice(r,0,e)}s(F9,"formatArgs");Gn.log=console.debug||console.log||(()=>{});function R9(t){try{t?Gn.storage.setItem("debug",t):Gn.storage.removeItem("debug")}catch{}}s(R9,"save");function _9(){let t;try{t=Gn.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}s(_9,"load");function k9(){try{return localStorage}catch{}}s(k9,"localstorage");Om.exports=xx()(Gn);var{formatters:I9}=Om.exports;I9.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});function Um(t){if(!t)throw new Error("name must be non-empty")}function M9(t,e){for(var n=0,r=t.length,a;n<r;)a=n+r>>>1,t[a].startTime<e.startTime?n=a+1:r=a;t.splice(n,0,e)}var xn,Ax,qm,zm,Xc,Hm,Bm,jm,Fx=v(()=>{d();xn=typeof performance<"u"&&performance,Ax=xn&&xn.now?function(){return xn.now()}:function(){return Date.now()};s(Um,"throwIfEmpty");s(M9,"insertSorted");xn&&xn.mark&&xn.getEntriesByName&&xn.getEntriesByType&&xn.clearMeasures?(qm=s(function(t){Um(t),xn.mark("start "+t)},"mark"),zm=s(function(t){Um(t),xn.mark("end "+t),xn.measure(t,"start "+t,"end "+t);var e=xn.getEntriesByName(t);return e[e.length-1]},"stop"),Xc=s(function(){return xn.getEntriesByType("measure")},"getEntries"),Hm=s(function(){xn.clearMarks(),xn.clearMeasures()},"clear")):(Bm={},jm=[],qm=s(function(t){Um(t);var e=Ax();Bm["$"+t]=e},"mark"),zm=s(function(t){Um(t);var e=Ax(),n=Bm["$"+t];if(!n)throw new Error("no known mark: "+t);var r={startTime:n,name:t,duration:e-n,entryType:"measure"};return M9(jm,r),r},"stop"),Xc=s(function(){return jm},"getEntries"),Hm=s(function(){Bm={},jm=[]},"clear"))});var qa,ja,Hi,Gi,Vf,Rx,L9,_x,Wi,N,He=v(()=>{d();Ua();ia();qa=zt(Cx());Fx();ja=pn.platform==="win32",Hi=pn.browser,Gi={red:Hi?"crimson":1,yellow:Hi?"gold":3,cyan:Hi?"darkturquoise":6,green:Hi?"forestgreen":2,blue:Hi?"steelblue":4,magenta:Hi?"palevioletred":5};qa.default.colors=[Gi.cyan,Gi.green,Gi.blue,Gi.magenta];Vf=class extends Xe{static{s(this,"Emitter")}issueStatus(e,n){(e==="status"||e==="statusEnd")&&this.emit(e,[e,...n])}issueWarning(e,n){this.emit("warning",[e,...n])}},Rx={},L9=25,Wi=class t{static{s(this,"Log")}static _logToStdErr(e,n){t.loggerfn(e)(...n)}static loggerfn(e){e=`LH:${e}`;let n=Rx[e];return n||(n=(0,qa.default)(e),Rx[e]=n,e.endsWith("error")?n.color=Gi.red:e.endsWith("warn")&&(n.color=Gi.yellow)),n}static setLevel(e){switch(_x=e,e){case"silent":qa.default.enable("-LH:*");break;case"verbose":qa.default.enable("LH:*");break;case"warn":qa.default.enable("-LH:*, LH:*:warn, LH:*:error");break;case"error":qa.default.enable("-LH:*, LH:*:error");break;default:qa.default.enable("LH:*, -LH:*:verbose")}}static formatProtocol(e,n,r){let a=!pn||pn.browser?1/0:pn.stdout.columns,o=n.method||"?????",i=a-o.length-e.length-L9,c=n.params&&o!=="IO.read"?JSON.stringify(n.params).substr(0,i):"";t._logToStdErr(`${e}:${r||""}`,[o,c])}static isVerbose(){return _x==="verbose"}static time({msg:e,id:n,args:r=[]},a="log"){qm(n),t[a]("status",e,...r)}static timeEnd({msg:e,id:n,args:r=[]},a="verbose"){t[a]("statusEnd",e,...r),zm(n)}static log(e,...n){return t.events.issueStatus(e,n),t._logToStdErr(e,n)}static warn(e,...n){return t.events.issueWarning(e,n),t._logToStdErr(`${e}:warn`,n)}static error(e,...n){return t._logToStdErr(`${e}:error`,n)}static verbose(e,...n){return t.events.issueStatus(e,n),t._logToStdErr(`${e}:verbose`,n)}static greenify(e){return`${t.green}${e}${t.reset}`}static redify(e){return`${t.red}${e}${t.reset}`}static get green(){return"\x1B[32m"}static get red(){return"\x1B[31m"}static get yellow(){return"\x1B[33m"}static get purple(){return"\x1B[95m"}static get reset(){return"\x1B[0m"}static get bold(){return"\x1B[1m"}static get dim(){return"\x1B[2m"}static get tick(){return ja?"√":"✓"}static get cross(){return ja?"×":"✘"}static get whiteSmallSquare(){return ja?"·":"▫"}static get heavyHorizontal(){return ja?"─":"━"}static get heavyVertical(){return ja?"│ ":"┃ "}static get heavyUpAndRight(){return ja?"└":"┗"}static get heavyVerticalAndRight(){return ja?"├":"┣"}static get heavyDownAndHorizontal(){return ja?"┬":"┳"}static get doubleLightHorizontal(){return"──"}};Wi.events=new Vf;Wi.takeTimeEntries=()=>{let t=Xc();return Hm(),t};Wi.getTimeEntries=()=>Xc();N=Wi});var Yt=v(()=>{"use strict";d();});var $f,X,Ue=v(()=>{"use strict";d();Yt();$f=class{static{s(this,"BaseGatherer")}meta={supportedModes:[]};startInstrumentation(e){}startSensitiveInstrumentation(e){}stopSensitiveInstrumentation(e){}stopInstrumentation(e){}getArtifact(e){}},X=$f});var P9,O9,U9,B9,j9,q9,Kt,Ar=v(()=>{"use strict";d();He();P9=/^(chrome|https?):/,O9=16,U9="RunTask",B9="ThreadControllerImpl::RunTask",j9="ThreadControllerImpl::DoWork",q9="TaskQueueManager::ProcessTaskFromWorkQueue",Kt=class t{static{s(this,"TraceProcessor")}static get TIMESPAN_MARKER_ID(){return"__lighthouseTimespanStart__"}static createNoNavstartError(){return new Error("No navigationStart event found")}static createNoResourceSendRequestError(){return new Error("No ResourceSendRequest event found")}static createNoTracingStartedError(){return new Error("No tracingStartedInBrowser event found")}static createNoFirstContentfulPaintError(){return new Error("No FirstContentfulPaint event found")}static createNoLighthouseMarkerError(){return new Error("No Lighthouse timespan marker event found")}static _isNavigationStartOfInterest(e){return e.name!=="navigationStart"?!1:e.args.data?.documentLoaderURL===void 0?!0:e.args.data?.documentLoaderURL?P9.test(e.args.data.documentLoaderURL):!1}static _sortTimestampEventGroup(e,n,r,a){let o=s(p=>n[p],"lookupArrayIndexByTsIndex"),i=s(p=>a[o(p)],"lookupEventByTsIndex"),c=[],u=[],l=[];for(let p of e){let g=o(p),f=i(p);f.ph==="E"?c.push(g):f.ph==="X"||f.ph==="B"?u.push(g):l.push(g)}let m=new Map;for(let p of u){let g=a[p];if(g.ph==="X")m.set(p,g.dur);else{let f=Number.MAX_SAFE_INTEGER,y=0,b=r+e.length;for(let D=b;D<n.length;D++){let T=i(D);if(T.name===g.name&&T.pid===g.pid&&T.tid===g.tid)if(T.ph==="E"&&y===0){f=T.ts-g.ts;break}else T.ph==="E"?y--:T.ph==="B"&&y++}m.set(p,f)}}return u.sort((p,g)=>(m.get(g)||0)-(m.get(p)||0)||p-g),l.sort((p,g)=>p-g),[...c,...u,...l]}static filteredTraceSort(e,n){let r=[];for(let o=0;o<e.length;o++)n(e[o])&&r.push(o);r.sort((o,i)=>e[o].ts-e[i].ts);for(let o=0;o<r.length-1;o++){let i=e[r[o]].ts,c=[o];for(let l=o+1;l<r.length&&e[r[l]].ts===i;l++)c.push(l);if(c.length===1)continue;let u=t._sortTimestampEventGroup(c,r,o,e);r.splice(o,u.length,...u),o+=c.length-1}let a=[];for(let o=0;o<r.length;o++)a.push(e[r[o]]);return a}static assertHasToplevelEvents(e){if(!e.some(this.isScheduleableTask))throw new Error("Could not find any top level events")}static _riskPercentiles(e,n,r,a=0){let o=0;for(let g=0;g<e.length;g++)o+=e[g];o-=a;let i=n-o,c=0,u=i,l=[],m=-1,p=e.length+1;a>0&&p--;for(let g of r){let f=g*n;for(;u<f&&m<e.length-1;)i+=c,p-=c<0?-1:1,a>0&&a<e[m+1]?(c=-a,a=0):(m++,c=e[m]),u=i+Math.abs(c)*p;l.push({percentile:g,time:Math.max(0,(f-i)/p)+O9})}return l}static getRiskToResponsiveness(e,n,r,a=[.5,.75,.9,.99,1]){let o=r-n;a.sort((c,u)=>c-u);let i=this.getMainThreadTopLevelEventDurations(e,n,r);return this._riskPercentiles(i.durations,o,a,i.clippedLength)}static getMainThreadTopLevelEventDurations(e,n=0,r=1/0){let a=[],o=0;for(let i of e){if(i.end<n||i.start>r)continue;let c=i.duration,u=i.start;u<n&&(u=n,c=i.end-n),i.end>r&&(o=c-(r-u)),a.push(c)}return a.sort((i,c)=>i-c),{durations:a,clippedLength:o}}static getMainThreadTopLevelEvents(e,n=0,r=1/0){let a=[];for(let o of e.mainThreadEvents){if(!this.isScheduleableTask(o)||!o.dur)continue;let i=(o.ts-e.timeOriginEvt.ts)/1e3,c=(o.ts+o.dur-e.timeOriginEvt.ts)/1e3;i>r||c<n||a.push({start:i,end:c,duration:o.dur/1e3})}return a}static findMainFrameIds(e){let n=e.find(i=>i.name==="TracingStartedInBrowser");if(n?.args.data?.frames){let i=n.args.data.frames.find(l=>!l.parent),c=i?.frame,u=i?.processId;if(u&&c)return{startingPid:u,frameId:c}}let r=e.find(i=>i.name==="TracingStartedInPage");if(r?.args?.data){let i=r.args.data.page;if(i)return{startingPid:r.pid,frameId:i}}let a=e.find(i=>this._isNavigationStartOfInterest(i)&&i.args.data?.isLoadingMainFrame),o=e.find(i=>i.name==="ResourceSendRequest");if(a?.args?.data&&o&&o.pid===a.pid&&o.tid===a.tid){let i=a.args.frame;if(i)return{startingPid:a.pid,frameId:i}}throw this.createNoTracingStartedError()}static findMainFramePidTids(e,n){let r=n.filter(i=>(i.name==="FrameCommittedInBrowser"||i.name==="ProcessReadyInBrowser")&&i.args?.data?.frame===e.frameId&&i?.args?.data?.processId),a=r.length?r.map(i=>i?.args?.data?.processId):[e.startingPid],o=new Map;for(let i of new Set(a)){let c=n.filter(m=>m.cat==="__metadata"&&m.pid===i&&m.ph==="M"&&m.name==="thread_name"),u=c.find(m=>m.args.name==="CrRendererMain");u||(u=c.find(m=>m.args.name==="CrBrowserMain"));let l=u?.tid;if(!l)throw new Error("Unable to determine tid for renderer process");o.set(i,l)}return o}static isScheduleableTask(e){return e.name===U9||e.name===B9||e.name===j9||e.name===q9}static isLCPEvent(e){return e.name!=="largestContentfulPaint::Invalidate"&&e.name!=="largestContentfulPaint::Candidate"?!1:!!e.args?.frame}static isLCPCandidateEvent(e){return!!(e.name==="largestContentfulPaint::Candidate"&&e.args?.frame&&e.args.data&&e.args.data.size!==void 0)}static getFrameId(e){return e.args?.data?.frame||e.args.data?.frameID||e.args.frame}static computeValidLCPAllFrames(e,n){let r=e.filter(this.isLCPEvent).reverse(),a=new Map;for(let i of r){if(i.ts<=n.ts)break;let c=i.args.frame;a.has(c)||a.set(c,i)}let o;for(let i of a.values())this.isLCPCandidateEvent(i)&&(!o||i.args.data.size>o.args.data.size)&&(o=i);return{lcp:o,invalidated:!!(!o&&a.size)}}static resolveRootFrames(e){let n=new Map;for(let a of e)a.parent&&n.set(a.id,a.parent);let r=new Map;for(let a of e){let o=a.id;for(;n.has(o);)o=n.get(o);if(o===void 0)throw new Error("Unexpected undefined frameId");r.set(a.id,o)}return r}static processTrace(e,n){let{timeOriginDeterminationMethod:r="auto"}=n||{},a=this.filteredTraceSort(e.traceEvents,F=>F.cat.includes("blink.user_timing")||F.cat.includes("loading")||F.cat.includes("devtools.timeline")||F.cat==="__metadata"),o=this.findMainFrameIds(a),i=this.findMainFramePidTids(o,a),c=t.filteredTraceSort(e.traceEvents,F=>i.has(F.pid)),u=new Map,l=a.find(F=>F.name==="TracingStartedInBrowser")?.args?.data?.frames;if(l)for(let F of l)u.set(F.frame,{id:F.frame,url:F.url,parent:F.parent});a.filter(F=>!!(F.name==="FrameCommittedInBrowser"&&F.args.data?.frame&&F.args.data.url!==void 0)).forEach(F=>{u.set(F.args.data.frame,{id:F.args.data.frame,url:F.args.data.url,parent:F.args.data.parent})});let m=[...u.values()],p=this.resolveRootFrames(m),g=[...p.entries()].filter(([,F])=>F===o.frameId).map(([F])=>F);function f(F){return t.getFrameId(F)===o.frameId}s(f,"associatedToMainFrame");function y(F){let M=t.getFrameId(F);return M?g.includes(M):!1}s(y,"associatedToAllFrames");let b=a.filter(F=>f(F)),D=[];p.has(o.frameId)?D=a.filter(F=>y(F)):(N.warn("TraceProcessor","frameTreeEvents may be incomplete, make sure the trace has frame events"),p.set(o.frameId,o.frameId),D=b);let T=this.computeTimeOrigin({keyEvents:a,frameEvents:b,mainFrameInfo:o},r),A=c.filter(F=>F.tid===i.get(F.pid)),R=this.computeTraceEnd(e.traceEvents,T);return{frames:m,mainThreadEvents:A,frameEvents:b,frameTreeEvents:D,processEvents:c,mainFrameInfo:o,timeOriginEvt:T,timings:{timeOrigin:0,traceEnd:R.timing},timestamps:{timeOrigin:T.ts,traceEnd:R.timestamp},_keyEvents:a,_rendererPidToTid:i}}static processNavigation(e){let{frameEvents:n,frameTreeEvents:r,timeOriginEvt:a,timings:o,timestamps:i}=e,c=this.computeNavigationTimingsForFrame(n,{timeOriginEvt:a}),u=r.find(g=>g.name==="firstContentfulPaint"&&g.ts>a.ts);if(!u)throw this.createNoFirstContentfulPaintError();let l=this.computeValidLCPAllFrames(r,a).lcp,m=s(g=>(g-a.ts)/1e3,"getTiming"),p=s(g=>g===void 0?void 0:m(g),"maybeGetTiming");return{timings:{timeOrigin:o.timeOrigin,firstPaint:c.timings.firstPaint,firstContentfulPaint:c.timings.firstContentfulPaint,firstContentfulPaintAllFrames:m(u.ts),firstMeaningfulPaint:c.timings.firstMeaningfulPaint,largestContentfulPaint:c.timings.largestContentfulPaint,largestContentfulPaintAllFrames:p(l?.ts),load:c.timings.load,domContentLoaded:c.timings.domContentLoaded,traceEnd:o.traceEnd},timestamps:{timeOrigin:i.timeOrigin,firstPaint:c.timestamps.firstPaint,firstContentfulPaint:c.timestamps.firstContentfulPaint,firstContentfulPaintAllFrames:u.ts,firstMeaningfulPaint:c.timestamps.firstMeaningfulPaint,largestContentfulPaint:c.timestamps.largestContentfulPaint,largestContentfulPaintAllFrames:l?.ts,load:c.timestamps.load,domContentLoaded:c.timestamps.domContentLoaded,traceEnd:i.traceEnd},firstPaintEvt:c.firstPaintEvt,firstContentfulPaintEvt:c.firstContentfulPaintEvt,firstContentfulPaintAllFramesEvt:u,firstMeaningfulPaintEvt:c.firstMeaningfulPaintEvt,largestContentfulPaintEvt:c.largestContentfulPaintEvt,largestContentfulPaintAllFramesEvt:l,loadEvt:c.loadEvt,domContentLoadedEvt:c.domContentLoadedEvt,fmpFellBack:c.fmpFellBack,lcpInvalidated:c.lcpInvalidated}}static computeTraceEnd(e,n){let r=-1/0;for(let a of e)r=Math.max(a.ts+(a.dur||0),r);return{timestamp:r,timing:(r-n.ts)/1e3}}static computeTimeOrigin(e,n){let r=s(()=>e.frameEvents.filter(this._isNavigationStartOfInterest).pop(),"lastNavigationStart"),a=s(()=>e.keyEvents.find(i=>i.name==="clock_sync"&&i.args.sync_id===t.TIMESPAN_MARKER_ID),"lighthouseMarker");switch(n){case"firstResourceSendRequest":{let o=e.keyEvents.find(i=>i.name!=="ResourceSendRequest"?!1:(i.args.data||{}).frame===e.mainFrameInfo.frameId);if(!o)throw this.createNoResourceSendRequestError();return o}case"lastNavigationStart":{let o=r();if(!o)throw this.createNoNavstartError();return o}case"lighthouseMarker":{let o=a();if(!o)throw this.createNoLighthouseMarkerError();return o}case"auto":{let o=a()||r();if(!o)throw this.createNoNavstartError();return o}}}static computeNavigationTimingsForFrame(e,n){let{timeOriginEvt:r}=n,a=e.find(D=>D.name==="firstPaint"&&D.ts>r.ts),o=e.find(D=>D.name==="firstContentfulPaint"&&D.ts>r.ts);if(!o)throw this.createNoFirstContentfulPaintError();let i=e.find(D=>D.name==="firstMeaningfulPaint"&&D.ts>r.ts),c=!1;if(!i){let D="firstMeaningfulPaintCandidate";c=!0,N.verbose("TraceProcessor",`No firstMeaningfulPaint found, falling back to last ${D}`);let T=e.filter(A=>A.name===D).pop();T||N.verbose("TraceProcessor","No `firstMeaningfulPaintCandidate` events found in trace"),i=T}let u=this.computeValidLCPAllFrames(e,r),l=e.find(D=>D.name==="loadEventEnd"&&D.ts>r.ts),m=e.find(D=>D.name==="domContentLoadedEventEnd"&&D.ts>r.ts),p=s(D=>D?.ts,"getTimestamp"),g={timeOrigin:r.ts,firstPaint:p(a),firstContentfulPaint:o.ts,firstMeaningfulPaint:p(i),largestContentfulPaint:p(u.lcp),load:p(l),domContentLoaded:p(m)},f=s(D=>(D-r.ts)/1e3,"getTiming"),y=s(D=>D===void 0?void 0:f(D),"maybeGetTiming");return{timings:{timeOrigin:0,firstPaint:y(g.firstPaint),firstContentfulPaint:f(g.firstContentfulPaint),firstMeaningfulPaint:y(g.firstMeaningfulPaint),largestContentfulPaint:y(g.largestContentfulPaint),load:y(g.load),domContentLoaded:y(g.domContentLoaded)},timestamps:g,timeOriginEvt:r,firstPaintEvt:a,firstContentfulPaintEvt:o,firstMeaningfulPaintEvt:i,largestContentfulPaintEvt:u.lcp,loadEvt:l,domContentLoadedEvt:m,fmpFellBack:c,lcpInvalidated:u.invalidated}}}});var kx={};S(kx,{default:()=>sa});var Yf,sa,Vi=v(()=>{"use strict";d();Ue();Ar();Yf=class t extends X{static{s(this,"Trace")}_trace={traceEvents:[]};static getDefaultTraceCategories(){return["-*","disabled-by-default-lighthouse","loading","v8","v8.execute","blink.user_timing","blink.console","devtools.timeline","disabled-by-default-devtools.timeline","disabled-by-default-devtools.screenshot","disabled-by-default-devtools.timeline.stack","disabled-by-default-devtools.timeline.frame","latencyInfo"]}static async endTraceAndCollectEvents(e){let n=[],r=s(function(a){n.push(...a.value)},"dataListener");return e.on("Tracing.dataCollected",r),new Promise((a,o)=>{e.once("Tracing.tracingComplete",i=>{e.off("Tracing.dataCollected",r),a({traceEvents:n})}),e.sendCommand("Tracing.end").catch(o)})}static symbol=Symbol("Trace");meta={symbol:t.symbol,supportedModes:["timespan","navigation"]};async startSensitiveInstrumentation({driver:e,gatherMode:n,settings:r}){let a=t.getDefaultTraceCategories().concat(r.additionalTraceCategories||[]);await e.defaultSession.sendCommand("Page.enable"),await e.defaultSession.sendCommand("Tracing.start",{categories:a.join(","),options:"sampling-frequency=10000"}),n==="timespan"&&await e.defaultSession.sendCommand("Tracing.recordClockSyncMarker",{syncId:Kt.TIMESPAN_MARKER_ID})}async stopSensitiveInstrumentation({driver:e}){this._trace=await t.endTraceAndCollectEvents(e.defaultSession)}getArtifact(){return this._trace}},sa=Yf});var Ix={};S(Ix,{default:()=>Un});var Un,ca=v(()=>{d();Un={}});function Mx(t,e){for(var n=0,r=t.length-1;r>=0;r--){var a=t[r];a==="."?t.splice(r,1):a===".."?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function Kf(){for(var t="",e=!1,n=arguments.length-1;n>=-1&&!e;n--){var r=n>=0?arguments[n]:"/";if(typeof r!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!r)continue;t=r+"/"+t,e=r.charAt(0)==="/"}return t=Mx(Xf(t.split("/"),function(a){return!!a}),!e).join("/"),(e?"/":"")+t||"."}function Nx(t){var e=Lx(t),n=J9(t,-1)==="/";return t=Mx(Xf(t.split("/"),function(r){return!!r}),!e).join("/"),!t&&!e&&(t="."),t&&n&&(t+="/"),(e?"/":"")+t}function Lx(t){return t.charAt(0)==="/"}function H9(){var t=Array.prototype.slice.call(arguments,0);return Nx(Xf(t,function(e,n){if(typeof e!="string")throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function G9(t,e){t=Kf(t).substr(1),e=Kf(e).substr(1);function n(l){for(var m=0;m<l.length&&l[m]==="";m++);for(var p=l.length-1;p>=0&&l[p]==="";p--);return m>p?[]:l.slice(m,p-m+1)}s(n,"trim");for(var r=n(t.split("/")),a=n(e.split("/")),o=Math.min(r.length,a.length),i=o,c=0;c<o;c++)if(r[c]!==a[c]){i=c;break}for(var u=[],c=i;c<r.length;c++)u.push("..");return u=u.concat(a.slice(i)),u.join("/")}function $9(t){var e=Jf(t),n=e[0],r=e[1];return!n&&!r?".":(r&&(r=r.substr(0,r.length-1)),n+r)}function Y9(t,e){var n=Jf(t)[2];return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n}function K9(t){return Jf(t)[3]}function Xf(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r<t.length;r++)e(t[r],r,t)&&n.push(t[r]);return n}var z9,Jf,W9,V9,Ot,J9,qo=v(()=>{d();s(Mx,"normalizeArray");z9=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,Jf=s(function(t){return z9.exec(t).slice(1)},"splitPath");s(Kf,"resolve");s(Nx,"normalize");s(Lx,"isAbsolute");s(H9,"join");s(G9,"relative");W9="/",V9=":";s($9,"dirname");s(Y9,"basename");s(K9,"extname");Ot={extname:K9,basename:Y9,dirname:$9,sep:W9,delimiter:V9,relative:G9,join:H9,isAbsolute:Lx,normalize:Nx,resolve:Kf};s(Xf,"filter");J9="ab".substr(-1)==="b"?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}});var Ox=L((Gce,Px)=>{d();function X9(){this.__data__=[],this.size=0}s(X9,"listCacheClear");Px.exports=X9});var Zf=L(($ce,Ux)=>{d();function Z9(t,e){return t===e||t!==t&&e!==e}s(Z9,"eq");Ux.exports=Z9});var Zc=L((Jce,Bx)=>{d();var Q9=Zf();function ej(t,e){for(var n=t.length;n--;)if(Q9(t[n][0],e))return n;return-1}s(ej,"assocIndexOf");Bx.exports=ej});var qx=L((Qce,jx)=>{d();var tj=Zc(),nj=Array.prototype,rj=nj.splice;function aj(t){var e=this.__data__,n=tj(e,t);if(n<0)return!1;var r=e.length-1;return n==r?e.pop():rj.call(e,n,1),--this.size,!0}s(aj,"listCacheDelete");jx.exports=aj});var Hx=L((nue,zx)=>{d();var oj=Zc();function ij(t){var e=this.__data__,n=oj(e,t);return n<0?void 0:e[n][1]}s(ij,"listCacheGet");zx.exports=ij});var Wx=L((oue,Gx)=>{d();var sj=Zc();function cj(t){return sj(this.__data__,t)>-1}s(cj,"listCacheHas");Gx.exports=cj});var $x=L((cue,Vx)=>{d();var uj=Zc();function lj(t,e){var n=this.__data__,r=uj(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}s(lj,"listCacheSet");Vx.exports=lj});var Qc=L((due,Yx)=>{d();var dj=Ox(),mj=qx(),pj=Hx(),fj=Wx(),gj=$x();function $i(t){var e=-1,n=t==null?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s($i,"ListCache");$i.prototype.clear=dj;$i.prototype.delete=mj;$i.prototype.get=pj;$i.prototype.has=fj;$i.prototype.set=gj;Yx.exports=$i});var Jx=L((fue,Kx)=>{d();var hj=Qc();function yj(){this.__data__=new hj,this.size=0}s(yj,"stackClear");Kx.exports=yj});var Zx=L((yue,Xx)=>{d();function vj(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}s(vj,"stackDelete");Xx.exports=vj});var e2=L((wue,Qx)=>{d();function bj(t){return this.__data__.get(t)}s(bj,"stackGet");Qx.exports=bj});var n2=L((Tue,t2)=>{d();function wj(t){return this.__data__.has(t)}s(wj,"stackHas");t2.exports=wj});var Qf=L((Cue,r2)=>{d();var Dj=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis;r2.exports=Dj});var Fr=L((Fue,a2)=>{d();var Ej=Qf(),Tj=typeof self=="object"&&self&&self.Object===Object&&self,Sj=Ej||Tj||Function("return this")();a2.exports=Sj});var Gm=L((_ue,o2)=>{d();var xj=Fr(),Cj=xj.Symbol;o2.exports=Cj});var u2=L((Iue,c2)=>{d();var i2=Gm(),s2=Object.prototype,Aj=s2.hasOwnProperty,Fj=s2.toString,eu=i2?i2.toStringTag:void 0;function Rj(t){var e=Aj.call(t,eu),n=t[eu];try{t[eu]=void 0;var r=!0}catch{}var a=Fj.call(t);return r&&(e?t[eu]=n:delete t[eu]),a}s(Rj,"getRawTag");c2.exports=Rj});var d2=L((Lue,l2)=>{d();var _j=Object.prototype,kj=_j.toString;function Ij(t){return kj.call(t)}s(Ij,"objectToString");l2.exports=Ij});var tu=L((Uue,f2)=>{d();var m2=Gm(),Mj=u2(),Nj=d2(),Lj="[object Null]",Pj="[object Undefined]",p2=m2?m2.toStringTag:void 0;function Oj(t){return t==null?t===void 0?Pj:Lj:p2&&p2 in Object(t)?Mj(t):Nj(t)}s(Oj,"baseGetTag");f2.exports=Oj});var eg=L((que,g2)=>{d();function Uj(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}s(Uj,"isObject");g2.exports=Uj});var tg=L((Gue,h2)=>{d();var Bj=tu(),jj=eg(),qj="[object AsyncFunction]",zj="[object Function]",Hj="[object GeneratorFunction]",Gj="[object Proxy]";function Wj(t){if(!jj(t))return!1;var e=Bj(t);return e==zj||e==Hj||e==qj||e==Gj}s(Wj,"isFunction");h2.exports=Wj});var v2=L(($ue,y2)=>{d();var Vj=Fr(),$j=Vj["__core-js_shared__"];y2.exports=$j});var D2=L((Kue,w2)=>{d();var ng=v2(),b2=function(){var t=/[^.]+$/.exec(ng&&ng.keys&&ng.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function Yj(t){return!!b2&&b2 in t}s(Yj,"isMasked");w2.exports=Yj});var rg=L((Zue,E2)=>{d();var Kj=Function.prototype,Jj=Kj.toString;function Xj(t){if(t!=null){try{return Jj.call(t)}catch{}try{return t+""}catch{}}return""}s(Xj,"toSource");E2.exports=Xj});var S2=L((tle,T2)=>{d();var Zj=tg(),Qj=D2(),eq=eg(),tq=rg(),nq=/[\\^$.*+?()[\]{}|]/g,rq=/^\[object .+?Constructor\]$/,aq=Function.prototype,oq=Object.prototype,iq=aq.toString,sq=oq.hasOwnProperty,cq=RegExp("^"+iq.call(sq).replace(nq,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function uq(t){if(!eq(t)||Qj(t))return!1;var e=Zj(t)?cq:rq;return e.test(tq(t))}s(uq,"baseIsNative");T2.exports=uq});var C2=L((ale,x2)=>{d();function lq(t,e){return t?.[e]}s(lq,"getValue");x2.exports=lq});var zo=L((sle,A2)=>{d();var dq=S2(),mq=C2();function pq(t,e){var n=mq(t,e);return dq(n)?n:void 0}s(pq,"getNative");A2.exports=pq});var Wm=L((lle,F2)=>{d();var fq=zo(),gq=Fr(),hq=fq(gq,"Map");F2.exports=hq});var nu=L((mle,R2)=>{d();var yq=zo(),vq=yq(Object,"create");R2.exports=vq});var I2=L((fle,k2)=>{d();var _2=nu();function bq(){this.__data__=_2?_2(null):{},this.size=0}s(bq,"hashClear");k2.exports=bq});var N2=L((yle,M2)=>{d();function wq(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}s(wq,"hashDelete");M2.exports=wq});var P2=L((wle,L2)=>{d();var Dq=nu(),Eq="__lodash_hash_undefined__",Tq=Object.prototype,Sq=Tq.hasOwnProperty;function xq(t){var e=this.__data__;if(Dq){var n=e[t];return n===Eq?void 0:n}return Sq.call(e,t)?e[t]:void 0}s(xq,"hashGet");L2.exports=xq});var U2=L((Tle,O2)=>{d();var Cq=nu(),Aq=Object.prototype,Fq=Aq.hasOwnProperty;function Rq(t){var e=this.__data__;return Cq?e[t]!==void 0:Fq.call(e,t)}s(Rq,"hashHas");O2.exports=Rq});var j2=L((Cle,B2)=>{d();var _q=nu(),kq="__lodash_hash_undefined__";function Iq(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=_q&&e===void 0?kq:e,this}s(Iq,"hashSet");B2.exports=Iq});var z2=L((Rle,q2)=>{d();var Mq=I2(),Nq=N2(),Lq=P2(),Pq=U2(),Oq=j2();function Yi(t){var e=-1,n=t==null?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s(Yi,"Hash");Yi.prototype.clear=Mq;Yi.prototype.delete=Nq;Yi.prototype.get=Lq;Yi.prototype.has=Pq;Yi.prototype.set=Oq;q2.exports=Yi});var W2=L((Ile,G2)=>{d();var H2=z2(),Uq=Qc(),Bq=Wm();function jq(){this.size=0,this.__data__={hash:new H2,map:new(Bq||Uq),string:new H2}}s(jq,"mapCacheClear");G2.exports=jq});var $2=L((Lle,V2)=>{d();function qq(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}s(qq,"isKeyable");V2.exports=qq});var ru=L((Ule,Y2)=>{d();var zq=$2();function Hq(t,e){var n=t.__data__;return zq(e)?n[typeof e=="string"?"string":"hash"]:n.map}s(Hq,"getMapData");Y2.exports=Hq});var J2=L((qle,K2)=>{d();var Gq=ru();function Wq(t){var e=Gq(this,t).delete(t);return this.size-=e?1:0,e}s(Wq,"mapCacheDelete");K2.exports=Wq});var Z2=L((Gle,X2)=>{d();var Vq=ru();function $q(t){return Vq(this,t).get(t)}s($q,"mapCacheGet");X2.exports=$q});var eC=L(($le,Q2)=>{d();var Yq=ru();function Kq(t){return Yq(this,t).has(t)}s(Kq,"mapCacheHas");Q2.exports=Kq});var nC=L((Jle,tC)=>{d();var Jq=ru();function Xq(t,e){var n=Jq(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}s(Xq,"mapCacheSet");tC.exports=Xq});var ag=L((Qle,rC)=>{d();var Zq=W2(),Qq=J2(),ez=Z2(),tz=eC(),nz=nC();function Ki(t){var e=-1,n=t==null?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s(Ki,"MapCache");Ki.prototype.clear=Zq;Ki.prototype.delete=Qq;Ki.prototype.get=ez;Ki.prototype.has=tz;Ki.prototype.set=nz;rC.exports=Ki});var oC=L((nde,aC)=>{d();var rz=Qc(),az=Wm(),oz=ag(),iz=200;function sz(t,e){var n=this.__data__;if(n instanceof rz){var r=n.__data__;if(!az||r.length<iz-1)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new oz(r)}return n.set(t,e),this.size=n.size,this}s(sz,"stackSet");aC.exports=sz});var sC=L((ode,iC)=>{d();var cz=Qc(),uz=Jx(),lz=Zx(),dz=e2(),mz=n2(),pz=oC();function Ji(t){var e=this.__data__=new cz(t);this.size=e.size}s(Ji,"Stack");Ji.prototype.clear=uz;Ji.prototype.delete=lz;Ji.prototype.get=dz;Ji.prototype.has=mz;Ji.prototype.set=pz;iC.exports=Ji});var uC=L((cde,cC)=>{d();var fz="__lodash_hash_undefined__";function gz(t){return this.__data__.set(t,fz),this}s(gz,"setCacheAdd");cC.exports=gz});var dC=L((dde,lC)=>{d();function hz(t){return this.__data__.has(t)}s(hz,"setCacheHas");lC.exports=hz});var pC=L((fde,mC)=>{d();var yz=ag(),vz=uC(),bz=dC();function Vm(t){var e=-1,n=t==null?0:t.length;for(this.__data__=new yz;++e<n;)this.add(t[e])}s(Vm,"SetCache");Vm.prototype.add=Vm.prototype.push=vz;Vm.prototype.has=bz;mC.exports=Vm});var gC=L((yde,fC)=>{d();function wz(t,e){for(var n=-1,r=t==null?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}s(wz,"arraySome");fC.exports=wz});var yC=L((wde,hC)=>{d();function Dz(t,e){return t.has(e)}s(Dz,"cacheHas");hC.exports=Dz});var og=L((Tde,vC)=>{d();var Ez=pC(),Tz=gC(),Sz=yC(),xz=1,Cz=2;function Az(t,e,n,r,a,o){var i=n&xz,c=t.length,u=e.length;if(c!=u&&!(i&&u>c))return!1;var l=o.get(t),m=o.get(e);if(l&&m)return l==e&&m==t;var p=-1,g=!0,f=n&Cz?new Ez:void 0;for(o.set(t,e),o.set(e,t);++p<c;){var y=t[p],b=e[p];if(r)var D=i?r(b,y,p,e,t,o):r(y,b,p,t,e,o);if(D!==void 0){if(D)continue;g=!1;break}if(f){if(!Tz(e,function(T,A){if(!Sz(f,A)&&(y===T||a(y,T,n,r,o)))return f.push(A)})){g=!1;break}}else if(!(y===b||a(y,b,n,r,o))){g=!1;break}}return o.delete(t),o.delete(e),g}s(Az,"equalArrays");vC.exports=Az});var wC=L((Cde,bC)=>{d();var Fz=Fr(),Rz=Fz.Uint8Array;bC.exports=Rz});var EC=L((Fde,DC)=>{d();function _z(t){var e=-1,n=Array(t.size);return t.forEach(function(r,a){n[++e]=[a,r]}),n}s(_z,"mapToArray");DC.exports=_z});var SC=L((kde,TC)=>{d();function kz(t){var e=-1,n=Array(t.size);return t.forEach(function(r){n[++e]=r}),n}s(kz,"setToArray");TC.exports=kz});var RC=L((Nde,FC)=>{d();var xC=Gm(),CC=wC(),Iz=Zf(),Mz=og(),Nz=EC(),Lz=SC(),Pz=1,Oz=2,Uz="[object Boolean]",Bz="[object Date]",jz="[object Error]",qz="[object Map]",zz="[object Number]",Hz="[object RegExp]",Gz="[object Set]",Wz="[object String]",Vz="[object Symbol]",$z="[object ArrayBuffer]",Yz="[object DataView]",AC=xC?xC.prototype:void 0,ig=AC?AC.valueOf:void 0;function Kz(t,e,n,r,a,o,i){switch(n){case Yz:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case $z:return!(t.byteLength!=e.byteLength||!o(new CC(t),new CC(e)));case Uz:case Bz:case zz:return Iz(+t,+e);case jz:return t.name==e.name&&t.message==e.message;case Hz:case Wz:return t==e+"";case qz:var c=Nz;case Gz:var u=r&Pz;if(c||(c=Lz),t.size!=e.size&&!u)return!1;var l=i.get(t);if(l)return l==e;r|=Oz,i.set(t,e);var m=Mz(c(t),c(e),r,a,o,i);return i.delete(t),m;case Vz:if(ig)return ig.call(t)==ig.call(e)}return!1}s(Kz,"equalByTag");FC.exports=Kz});var kC=L((Ode,_C)=>{d();function Jz(t,e){for(var n=-1,r=e.length,a=t.length;++n<r;)t[a+n]=e[n];return t}s(Jz,"arrayPush");_C.exports=Jz});var $m=L((jde,IC)=>{d();var Xz=Array.isArray;IC.exports=Xz});var NC=L((zde,MC)=>{d();var Zz=kC(),Qz=$m();function eH(t,e,n){var r=e(t);return Qz(t)?r:Zz(r,n(t))}s(eH,"baseGetAllKeys");MC.exports=eH});var PC=L((Wde,LC)=>{d();function tH(t,e){for(var n=-1,r=t==null?0:t.length,a=0,o=[];++n<r;){var i=t[n];e(i,n,t)&&(o[a++]=i)}return o}s(tH,"arrayFilter");LC.exports=tH});var UC=L((Yde,OC)=>{d();function nH(){return[]}s(nH,"stubArray");OC.exports=nH});var qC=L((Xde,jC)=>{d();var rH=PC(),aH=UC(),oH=Object.prototype,iH=oH.propertyIsEnumerable,BC=Object.getOwnPropertySymbols,sH=BC?function(t){return t==null?[]:(t=Object(t),rH(BC(t),function(e){return iH.call(t,e)}))}:aH;jC.exports=sH});var HC=L((Qde,zC)=>{d();function cH(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}s(cH,"baseTimes");zC.exports=cH});var au=L((nme,GC)=>{d();function uH(t){return t!=null&&typeof t=="object"}s(uH,"isObjectLike");GC.exports=uH});var VC=L((ome,WC)=>{d();var lH=tu(),dH=au(),mH="[object Arguments]";function pH(t){return dH(t)&&lH(t)==mH}s(pH,"baseIsArguments");WC.exports=pH});var JC=L((cme,KC)=>{d();var $C=VC(),fH=au(),YC=Object.prototype,gH=YC.hasOwnProperty,hH=YC.propertyIsEnumerable,yH=$C(function(){return arguments}())?$C:function(t){return fH(t)&&gH.call(t,"callee")&&!hH.call(t,"callee")};KC.exports=yH});var ZC=L((lme,XC)=>{d();function vH(){return!1}s(vH,"stubFalse");XC.exports=vH});var sg=L((ou,Xi)=>{d();var bH=Fr(),wH=ZC(),tA=typeof ou=="object"&&ou&&!ou.nodeType&&ou,QC=tA&&typeof Xi=="object"&&Xi&&!Xi.nodeType&&Xi,DH=QC&&QC.exports===tA,eA=DH?bH.Buffer:void 0,EH=eA?eA.isBuffer:void 0,TH=EH||wH;Xi.exports=TH});var rA=L((fme,nA)=>{d();var SH=9007199254740991,xH=/^(?:0|[1-9]\d*)$/;function CH(t,e){var n=typeof t;return e=e??SH,!!e&&(n=="number"||n!="symbol"&&xH.test(t))&&t>-1&&t%1==0&&t<e}s(CH,"isIndex");nA.exports=CH});var cg=L((yme,aA)=>{d();var AH=9007199254740991;function FH(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=AH}s(FH,"isLength");aA.exports=FH});var iA=L((wme,oA)=>{d();var RH=tu(),_H=cg(),kH=au(),IH="[object Arguments]",MH="[object Array]",NH="[object Boolean]",LH="[object Date]",PH="[object Error]",OH="[object Function]",UH="[object Map]",BH="[object Number]",jH="[object Object]",qH="[object RegExp]",zH="[object Set]",HH="[object String]",GH="[object WeakMap]",WH="[object ArrayBuffer]",VH="[object DataView]",$H="[object Float32Array]",YH="[object Float64Array]",KH="[object Int8Array]",JH="[object Int16Array]",XH="[object Int32Array]",ZH="[object Uint8Array]",QH="[object Uint8ClampedArray]",eG="[object Uint16Array]",tG="[object Uint32Array]",Rt={};Rt[$H]=Rt[YH]=Rt[KH]=Rt[JH]=Rt[XH]=Rt[ZH]=Rt[QH]=Rt[eG]=Rt[tG]=!0;Rt[IH]=Rt[MH]=Rt[WH]=Rt[NH]=Rt[VH]=Rt[LH]=Rt[PH]=Rt[OH]=Rt[UH]=Rt[BH]=Rt[jH]=Rt[qH]=Rt[zH]=Rt[HH]=Rt[GH]=!1;function nG(t){return kH(t)&&_H(t.length)&&!!Rt[RH(t)]}s(nG,"baseIsTypedArray");oA.exports=nG});var cA=L((Tme,sA)=>{d();function rG(t){return function(e){return t(e)}}s(rG,"baseUnary");sA.exports=rG});var lA=L((iu,Zi)=>{d();var aG=Qf(),uA=typeof iu=="object"&&iu&&!iu.nodeType&&iu,su=uA&&typeof Zi=="object"&&Zi&&!Zi.nodeType&&Zi,oG=su&&su.exports===uA,ug=oG&&aG.process,iG=function(){try{var t=su&&su.require&&su.require("util").types;return t||ug&&ug.binding&&ug.binding("util")}catch{}}();Zi.exports=iG});var lg=L((Ame,pA)=>{d();var sG=iA(),cG=cA(),dA=lA(),mA=dA&&dA.isTypedArray,uG=mA?cG(mA):sG;pA.exports=uG});var gA=L((Rme,fA)=>{d();var lG=HC(),dG=JC(),mG=$m(),pG=sg(),fG=rA(),gG=lg(),hG=Object.prototype,yG=hG.hasOwnProperty;function vG(t,e){var n=mG(t),r=!n&&dG(t),a=!n&&!r&&pG(t),o=!n&&!r&&!a&&gG(t),i=n||r||a||o,c=i?lG(t.length,String):[],u=c.length;for(var l in t)(e||yG.call(t,l))&&!(i&&(l=="length"||a&&(l=="offset"||l=="parent")||o&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||fG(l,u)))&&c.push(l);return c}s(vG,"arrayLikeKeys");fA.exports=vG});var yA=L((Ime,hA)=>{d();var bG=Object.prototype;function wG(t){var e=t&&t.constructor,n=typeof e=="function"&&e.prototype||bG;return t===n}s(wG,"isPrototype");hA.exports=wG});var bA=L((Lme,vA)=>{d();function DG(t,e){return function(n){return t(e(n))}}s(DG,"overArg");vA.exports=DG});var DA=L((Ume,wA)=>{d();var EG=bA(),TG=EG(Object.keys,Object);wA.exports=TG});var TA=L((jme,EA)=>{d();var SG=yA(),xG=DA(),CG=Object.prototype,AG=CG.hasOwnProperty;function FG(t){if(!SG(t))return xG(t);var e=[];for(var n in Object(t))AG.call(t,n)&&n!="constructor"&&e.push(n);return e}s(FG,"baseKeys");EA.exports=FG});var xA=L((Hme,SA)=>{d();var RG=tg(),_G=cg();function kG(t){return t!=null&&_G(t.length)&&!RG(t)}s(kG,"isArrayLike");SA.exports=kG});var AA=L((Vme,CA)=>{d();var IG=gA(),MG=TA(),NG=xA();function LG(t){return NG(t)?IG(t):MG(t)}s(LG,"keys");CA.exports=LG});var RA=L((Kme,FA)=>{d();var PG=NC(),OG=qC(),UG=AA();function BG(t){return PG(t,UG,OG)}s(BG,"getAllKeys");FA.exports=BG});var IA=L((Zme,kA)=>{d();var _A=RA(),jG=1,qG=Object.prototype,zG=qG.hasOwnProperty;function HG(t,e,n,r,a,o){var i=n&jG,c=_A(t),u=c.length,l=_A(e),m=l.length;if(u!=m&&!i)return!1;for(var p=u;p--;){var g=c[p];if(!(i?g in e:zG.call(e,g)))return!1}var f=o.get(t),y=o.get(e);if(f&&y)return f==e&&y==t;var b=!0;o.set(t,e),o.set(e,t);for(var D=i;++p<u;){g=c[p];var T=t[g],A=e[g];if(r)var R=i?r(A,T,g,e,t,o):r(T,A,g,t,e,o);if(!(R===void 0?T===A||a(T,A,n,r,o):R)){b=!1;break}D||(D=g=="constructor")}if(b&&!D){var F=t.constructor,M=e.constructor;F!=M&&"constructor"in t&&"constructor"in e&&!(typeof F=="function"&&F instanceof F&&typeof M=="function"&&M instanceof M)&&(b=!1)}return o.delete(t),o.delete(e),b}s(HG,"equalObjects");kA.exports=HG});var NA=L((tpe,MA)=>{d();var GG=zo(),WG=Fr(),VG=GG(WG,"DataView");MA.exports=VG});var PA=L((rpe,LA)=>{d();var $G=zo(),YG=Fr(),KG=$G(YG,"Promise");LA.exports=KG});var UA=L((ope,OA)=>{d();var JG=zo(),XG=Fr(),ZG=JG(XG,"Set");OA.exports=ZG});var jA=L((spe,BA)=>{d();var QG=zo(),eW=Fr(),tW=QG(eW,"WeakMap");BA.exports=tW});var YA=L((upe,$A)=>{d();var dg=NA(),mg=Wm(),pg=PA(),fg=UA(),gg=jA(),VA=tu(),Qi=rg(),qA="[object Map]",nW="[object Object]",zA="[object Promise]",HA="[object Set]",GA="[object WeakMap]",WA="[object DataView]",rW=Qi(dg),aW=Qi(mg),oW=Qi(pg),iW=Qi(fg),sW=Qi(gg),Ho=VA;(dg&&Ho(new dg(new ArrayBuffer(1)))!=WA||mg&&Ho(new mg)!=qA||pg&&Ho(pg.resolve())!=zA||fg&&Ho(new fg)!=HA||gg&&Ho(new gg)!=GA)&&(Ho=s(function(t){var e=VA(t),n=e==nW?t.constructor:void 0,r=n?Qi(n):"";if(r)switch(r){case rW:return WA;case aW:return qA;case oW:return zA;case iW:return HA;case sW:return GA}return e},"getTag"));$A.exports=Ho});var nF=L((mpe,tF)=>{d();var hg=sC(),cW=og(),uW=RC(),lW=IA(),KA=YA(),JA=$m(),XA=sg(),dW=lg(),mW=1,ZA="[object Arguments]",QA="[object Array]",Ym="[object Object]",pW=Object.prototype,eF=pW.hasOwnProperty;function fW(t,e,n,r,a,o){var i=JA(t),c=JA(e),u=i?QA:KA(t),l=c?QA:KA(e);u=u==ZA?Ym:u,l=l==ZA?Ym:l;var m=u==Ym,p=l==Ym,g=u==l;if(g&&XA(t)){if(!XA(e))return!1;i=!0,m=!1}if(g&&!m)return o||(o=new hg),i||dW(t)?cW(t,e,n,r,a,o):uW(t,e,u,n,r,a,o);if(!(n&mW)){var f=m&&eF.call(t,"__wrapped__"),y=p&&eF.call(e,"__wrapped__");if(f||y){var b=f?t.value():t,D=y?e.value():e;return o||(o=new hg),a(b,D,n,r,o)}}return g?(o||(o=new hg),lW(t,e,n,r,a,o)):!1}s(fW,"baseIsEqualDeep");tF.exports=fW});var iF=L((gpe,oF)=>{d();var gW=nF(),rF=au();function aF(t,e,n,r,a){return t===e?!0:t==null||e==null||!rF(t)&&!rF(e)?t!==t&&e!==e:gW(t,e,n,r,aF,a)}s(aF,"baseIsEqual");oF.exports=aF});var cu=L((vpe,sF)=>{d();var hW=iF();function yW(t,e){return hW(t,e)}s(yW,"isEqual");sF.exports=yW});var cF,uF=v(()=>{"use strict";d();Ua();cF=!!pn.env.CI||pn.env.NODE_ENV==="test"});function DW(t){let e=Math.sign(t);t=Math.abs(t);let n=.254829592,r=-.284496736,a=1.421413741,o=-1.453152027,i=1.061405429,u=1/(1+.3275911*t),l=u*(n+u*(r+u*(a+u*(o+u*i))));return e*(1-l*Math.exp(-t*t))}function lF({median:t,p10:e},n){if(t<=0)throw new Error("median must be greater than zero");if(e<=0)throw new Error("p10 must be greater than zero");if(e>=t)throw new Error("p10 must be less than the median");if(n<=0)return 1;let r=.9061938024368232,a=Math.max(Number.MIN_VALUE,n/t),o=Math.log(a),i=Math.max(Number.MIN_VALUE,e/t),c=-Math.log(i),u=o*r/c,l=(1-DW(u))/2,m;return n<=e?m=Math.max(.9,Math.min(1,l)):n<=t?m=Math.max(bW,Math.min(vW,l)):m=Math.max(0,Math.min(wW,l)),m}function dF(t,e,n,r,a){let o=(r-e)/(n-t);return e+(a-t)*o}var vW,bW,wW,yg=v(()=>{"use strict";d();vW=.8999999999999999,bW=.5,wW=.49999999999999994;s(DW,"erf");s(lF,"getLogNormalScore");s(dF,"linearInterpolation")});var ua,TW,SW,xW,rt,Rr=v(()=>{"use strict";d();ua="…",TW=" ",SW={PASS:{label:"pass",minScore:.9},AVERAGE:{label:"average",minScore:.5},FAIL:{label:"fail"},ERROR:{label:"error"}},xW=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"],rt=class t{static{s(this,"Util")}static get RATINGS(){return SW}static get PASS_THRESHOLD(){return .9}static get MS_DISPLAY_VALUE(){return`%10d${TW}ms`}static getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error("Could not determine final displayed URL")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}static getFullPageScreenshot(e){return e.fullPageScreenshot?e.fullPageScreenshot:e.audits["full-page-screenshot"]?.details}static splitMarkdownCodeSpans(e){let n=[],r=e.split(/`(.*?)`/g);for(let a=0;a<r.length;a++){let o=r[a];if(!o)continue;let i=a%2!==0;n.push({isCode:i,text:o})}return n}static splitMarkdownLink(e){let n=[],r=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;r.length;){let[a,o,i]=r.splice(0,3);a&&n.push({isLink:!1,text:a}),o&&i&&n.push({isLink:!0,text:o,linkHref:i})}return n}static truncate(e,n,r="…"){if(e.length<=n)return e;let o=new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(e)[Symbol.iterator](),i=0;for(let c=0;c<=n-r.length;c++){let u=o.next();if(u.done)return e;i=u.value.index}for(let c=0;c<r.length;c++)if(o.next().done)return e;return e.slice(0,i)+r}static getURLDisplayName(e,n){n=n||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0};let r=n.numPathParts!==void 0?n.numPathParts:2,a=n.preserveQuery!==void 0?n.preserveQuery:!0,o=n.preserveHost||!1,i;if(e.protocol==="about:"||e.protocol==="data:")i=e.href;else{i=e.pathname;let u=i.split("/").filter(l=>l.length);r&&u.length>r&&(i=ua+u.slice(-1*r).join("/")),o&&(i=`${e.host}/${i.replace(/^\//,"")}`),a&&(i=`${i}${e.search}`)}let c=64;if(e.protocol!=="data:"&&(i=i.slice(0,200),i=i.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,`$1${ua}`),i=i.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,`$1${ua}`),i=i.replace(/(\d{3})\d{6,}/g,`$1${ua}`),i=i.replace(/\u2026+/g,ua),i.length>c&&i.includes("?")&&(i=i.replace(/\?([^=]*)(=)?.*/,`?$1$2${ua}`),i.length>c&&(i=i.replace(/\?.*/,`?${ua}`)))),i.length>c){let u=i.lastIndexOf(".");u>=0?i=i.slice(0,c-1-(i.length-u))+`${ua}${i.slice(u)}`:i=i.slice(0,c-1)+ua}return i}static getChromeExtensionOrigin(e){let n=new URL(e);return n.protocol+"//"+n.host}static parseURL(e){let n=new URL(e);return{file:t.getURLDisplayName(n),hostname:n.hostname,origin:n.protocol==="chrome-extension:"?t.getChromeExtensionOrigin(e):n.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){let n=e.split(".").slice(-2);return xW.includes(n[0])?`.${n.join(".")}`:`.${n[n.length-1]}`}static getRootDomain(e){let n=t.createOrReturnURL(e).hostname,a=t.getTld(n).split(".");return n.split(".").slice(-a.length).join(".")}static filterRelevantLines(e,n,r){if(n.length===0)return e.slice(0,r*2+1);let a=3,o=new Set;return n=n.sort((i,c)=>(i.lineNumber||0)-(c.lineNumber||0)),n.forEach(({lineNumber:i})=>{let c=i-r,u=i+r;for(;c<1;)c++,u++;o.has(c-a-1)&&(c-=a);for(let l=c;l<=u;l++){let m=l;o.add(m)}}),e.filter(i=>o.has(i.lineNumber))}}});var CW,AW,h,J=v(()=>{"use strict";d();Yt();uF();yg();Rr();CW="defaultPass",AW=s(t=>Math.round(t*100)/100,"clampTo2Decimals"),h=class t{static{s(this,"Audit")}static get DEFAULT_PASS(){return CW}static get SCORING_MODES(){return{NUMERIC:"numeric",BINARY:"binary",MANUAL:"manual",INFORMATIVE:"informative",NOT_APPLICABLE:"notApplicable",ERROR:"error"}}static get meta(){throw new Error("Audit meta information must be overridden.")}static get defaultOptions(){return{}}static audit(e,n){throw new Error("audit() method must be overridden")}static computeLogNormalScore(e,n){let r=lF(e,n);return r>.9&&(r+=.05*(r-.9)),Math.floor(r*100)/100}static assertHeadingKeysExist(e,n){if(n.length&&cF)for(let r of e){if(r.key===null)continue;let a=r.key;if(!n.some(o=>a in o))throw new Error(`"${r.key}" is missing from items`)}}static makeTableDetails(e,n,r={}){let{wastedBytes:a,wastedMs:o,sortedBy:i,skipSumming:c,isEntityGrouped:u}=r,l=a||o?{wastedBytes:a,wastedMs:o}:void 0;return n.length===0?{type:"table",headings:[],items:[],summary:l}:(t.assertHeadingKeysExist(e,n),{type:"table",headings:e,items:n,summary:l,sortedBy:i,skipSumming:c,isEntityGrouped:u})}static makeListDetails(e){return{type:"list",items:e}}static makeSnippetDetails({content:e,title:n,lineMessages:r,generalMessages:a,node:o,maxLineLength:i=200,maxLinesAroundMessage:c=20}){let u=t._makeSnippetLinesArray(e,i);return{type:"snippet",lines:rt.filterRelevantLines(u,r,c),title:n,lineMessages:r,generalMessages:a,lineCount:u.length,node:o}}static _makeSnippetLinesArray(e,n){return e.split(`
+`).map((r,a)=>{let o=a+1,i={content:rt.truncate(r,n),lineNumber:o};return r.length>n&&(i.truncated=!0),i})}static makeOpportunityDetails(e,n,r){t.assertHeadingKeysExist(e,n);let{overallSavingsMs:a,overallSavingsBytes:o,sortedBy:i,skipSumming:c,isEntityGrouped:u}=r;return{type:"opportunity",headings:n.length===0?[]:e,items:n,overallSavingsMs:a,overallSavingsBytes:o,sortedBy:i,skipSumming:c,isEntityGrouped:u}}static makeNodeItem(e){return{type:"node",lhId:e.lhId,path:e.devtoolsNodePath,selector:e.selector,boundingRect:e.boundingRect,snippet:e.snippet,nodeLabel:e.nodeLabel}}static _findOriginalLocation(e,n,r){let a=e?.map.findEntry(n,r);if(a)return{file:a.sourceURL||"",line:a.sourceLineNumber||0,column:a.sourceColumnNumber||0}}static makeSourceLocation(e,n,r,a){return{type:"source-location",url:e,urlProvider:"network",line:n,column:r,original:a&&this._findOriginalLocation(a,n,r)}}static makeSourceLocationFromConsoleMessage(e,n){if(!e.url)return;let r=e.lineNumber||0,a=e.columnNumber||0;return this.makeSourceLocation(e.url,r,a,n)}static _normalizeAuditScore(e,n,r){if(n!==t.SCORING_MODES.BINARY&&n!==t.SCORING_MODES.NUMERIC)return null;if(e===null||!Number.isFinite(e))throw new Error(`Invalid score for ${r}: ${e}`);if(e>1)throw new Error(`Audit score for ${r} is > 1`);if(e<0)throw new Error(`Audit score for ${r} is < 0`);return e=AW(e),e}static generateErrorAuditResult(e,n,r){return t.generateAuditResult(e,{score:null,errorMessage:n,errorStack:r})}static generateAuditResult(e,n){if(n.score===void 0)throw new Error("generateAuditResult requires a score");let r=e.meta.scoreDisplayMode||t.SCORING_MODES.BINARY;n.errorMessage!==void 0?r=t.SCORING_MODES.ERROR:n.notApplicable&&(r=t.SCORING_MODES.NOT_APPLICABLE);let a=t._normalizeAuditScore(n.score,r,e.meta.id),o=e.meta.title;e.meta.failureTitle&&a!==null&&a<rt.PASS_THRESHOLD&&(o=e.meta.failureTitle);let i="numericUnit"in n?n:void 0;return{id:e.meta.id,title:o,description:e.meta.description,score:a,scoreDisplayMode:r,numericValue:i?.numericValue,numericUnit:i?.numericUnit,displayValue:n.displayValue,explanation:n.explanation,errorMessage:n.errorMessage,errorStack:n.errorStack,warnings:n.warnings,details:n.details}}static makeMetricComputationDataInput(e,n){let r=e.traces[t.DEFAULT_PASS],a=e.devtoolsLogs[t.DEFAULT_PASS],o=e.GatherContext;return{trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL}}}});var FW,Km,mF=v(()=>{"use strict";d();J();FW=s(t=>Math.round(t*100)/100,"clampTo2Decimals"),Km=class t{static{s(this,"ReportScoring")}static arithmeticMean(e){if(e=e.filter(r=>r.weight>0),e.some(r=>r.score===null))return null;let n=e.reduce((r,a)=>{let o=a.score,i=a.weight;return{weight:r.weight+i,sum:r.sum+o*i}},{weight:0,sum:0});return FW(n.sum/n.weight||0)}static scoreAllCategories(e,n){let r={};for(let[a,o]of Object.entries(e)){let i=o.auditRefs.map(l=>{let m={...l},p=n[m.id];return(p.scoreDisplayMode===h.SCORING_MODES.NOT_APPLICABLE||p.scoreDisplayMode===h.SCORING_MODES.INFORMATIVE||p.scoreDisplayMode===h.SCORING_MODES.MANUAL)&&(m.weight=0),m}),c=i.map(l=>({score:n[l.id].score,weight:l.weight})),u=t.arithmeticMean(c);r[a]={...o,auditRefs:i,id:a,score:u}}return r}}});var pF,fF=v(()=>{d();pF=function(){"use strict";function t(r,a){function o(){this.constructor=r}s(o,"ctor"),o.prototype=a.prototype,r.prototype=new o}s(t,"peg$subclass");function e(r,a,o,i){this.message=r,this.expected=a,this.found=o,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,e)}s(e,"peg$SyntaxError"),t(e,Error),e.buildMessage=function(r,a){var o={literal:function(g){return'"'+c(g.text)+'"'},class:function(g){var f="",y;for(y=0;y<g.parts.length;y++)f+=g.parts[y]instanceof Array?u(g.parts[y][0])+"-"+u(g.parts[y][1]):u(g.parts[y]);return"["+(g.inverted?"^":"")+f+"]"},any:function(g){return"any character"},end:function(g){return"end of input"},other:function(g){return g.description}};function i(g){return g.charCodeAt(0).toString(16).toUpperCase()}s(i,"hex");function c(g){return g.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(f){return"\\x0"+i(f)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(f){return"\\x"+i(f)})}s(c,"literalEscape");function u(g){return g.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(f){return"\\x0"+i(f)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(f){return"\\x"+i(f)})}s(u,"classEscape");function l(g){return o[g.type](g)}s(l,"describeExpectation");function m(g){var f=new Array(g.length),y,b;for(y=0;y<g.length;y++)f[y]=l(g[y]);if(f.sort(),f.length>0){for(y=1,b=1;y<f.length;y++)f[y-1]!==f[y]&&(f[b]=f[y],b++);f.length=b}switch(f.length){case 1:return f[0];case 2:return f[0]+" or "+f[1];default:return f.slice(0,-1).join(", ")+", or "+f[f.length-1]}}s(m,"describeExpected");function p(g){return g?'"'+c(g)+'"':"end of input"}return s(p,"describeFound"),"Expected "+m(r)+" but "+p(a)+" found."};function n(r,a){a=a!==void 0?a:{};var o={},i={start:Vc},c=Vc,u=s(function(E){return{type:"messageFormatPattern",elements:E,location:Jn()}},"peg$c0"),l=s(function(E){return E.reduce(function(C,q){return C.concat(q)},[]).join("")},"peg$c1"),m=s(function(E){return{type:"messageTextElement",value:E,location:Jn()}},"peg$c2"),p=s(function(E){return E.join("")},"peg$c3"),g="{",f=qt("{",!1),y=",",b=qt(",",!1),D="}",T=qt("}",!1),A=s(function(E,C){return{type:"argumentElement",id:E,format:C&&C[2],location:Jn()}},"peg$c10"),R="number",F=qt("number",!1),M="date",V=qt("date",!1),z="time",ne=qt("time",!1),se=s(function(E,C){return{type:E+"Format",style:C&&C[2],location:Jn()}},"peg$c17"),Z="plural",de=qt("plural",!1),Le=s(function(E){return{type:E.type,ordinal:!1,offset:E.offset||0,options:E.options,location:Jn()}},"peg$c20"),pe="selectordinal",wt=qt("selectordinal",!1),ye=s(function(E){return{type:E.type,ordinal:!0,offset:E.offset||0,options:E.options,location:Jn()}},"peg$c23"),_e="select",mt=qt("select",!1),at=s(function(E){return{type:"selectFormat",options:E,location:Jn()}},"peg$c26"),Ge="=",Pt=qt("=",!1),et=s(function(E,C){return{type:"optionalFormatPattern",selector:E,value:C,location:Jn()}},"peg$c29"),We="offset:",Be=qt("offset:",!1),j=s(function(E){return E},"peg$c32"),fe=s(function(E,C){return{type:"pluralFormat",offset:E,options:C,location:Jn()}},"peg$c33"),ut=Gc("whitespace"),st=/^[ \t\n\r]/,Ve=na([" ","	",`
+`,"\r"],!1,!1),Je=Gc("optionalWhitespace"),qe=/^[0-9]/,ae=na([["0","9"]],!1,!1),ee=/^[0-9a-f]/i,ft=na([["0","9"],["a","f"]],!1,!0),Ce="0",ze=qt("0",!1),Ln=/^[1-9]/,zn=na([["1","9"]],!1,!1),P=s(function(E){return parseInt(E,10)},"peg$c46"),le="'",he=qt("'",!1),ge=/^[ \t\n\r,.+={}#]/,Ie=na([" ","	",`
+`,"\r",",",".","+","=","{","}","#"],!1,!1),Pe=Dm(),Qe=s(function(E){return E},"peg$c52"),Ze=s(function(E){return E},"peg$c53"),Ft=/^[^{}\\\0-\x1F\x7F \t\n\r]/,gt=na(["{","}","\\",["\0",""],""," ","	",`
+`,"\r"],!0,!1),K="\\\\",ce=qt("\\\\",!1),ke=s(function(){return"\\"},"peg$c58"),Dt="\\#",Oe=qt("\\#",!1),$e=s(function(){return"\\#"},"peg$c61"),ct="\\{",xe=qt("\\{",!1),tt=s(function(){return"{"},"peg$c64"),Vt="\\}",Et=qt("\\}",!1),Pn=s(function(){return"}"},"peg$c67"),Hn="\\u",ea=qt("\\u",!1),Na=s(function(E){return String.fromCharCode(parseInt(E,16))},"peg$c70"),_=0,nt=0,Er=[{line:1,column:1}],Sn=0,ta=[],ve=0,Tr;if("startRule"in a){if(!(a.startRule in i))throw new Error(`Can't start parsing from rule "`+a.startRule+'".');c=i[a.startRule]}function Ni(){return r.substring(nt,_)}s(Ni,"text");function Jn(){return ra(nt,_)}s(Jn,"location");function wm(E,C){throw C=C!==void 0?C:ra(nt,_),Wc([Gc(E)],r.substring(nt,_),C)}s(wm,"expected");function Of(E,C){throw C=C!==void 0?C:ra(nt,_),Li(E,C)}s(Of,"error");function qt(E,C){return{type:"literal",text:E,ignoreCase:C}}s(qt,"peg$literalExpectation");function na(E,C,q){return{type:"class",parts:E,inverted:C,ignoreCase:q}}s(na,"peg$classExpectation");function Dm(){return{type:"any"}}s(Dm,"peg$anyExpectation");function Em(){return{type:"end"}}s(Em,"peg$endExpectation");function Gc(E){return{type:"other",description:E}}s(Gc,"peg$otherExpectation");function La(E){var C=Er[E],q;if(C)return C;for(q=E-1;!Er[q];)q--;for(C=Er[q],C={line:C.line,column:C.column};q<E;)r.charCodeAt(q)===10?(C.line++,C.column=1):C.column++,q++;return Er[E]=C,C}s(La,"peg$computePosDetails");function ra(E,C){var q=La(E),Q=La(C);return{start:{offset:E,line:q.line,column:q.column},end:{offset:C,line:Q.line,column:Q.column}}}s(ra,"peg$computeLocation");function Me(E){_<Sn||(_>Sn&&(Sn=_,ta=[]),ta.push(E))}s(Me,"peg$fail");function Li(E,C){return new e(E,null,null,C)}s(Li,"peg$buildSimpleError");function Wc(E,C,q){return new e(e.buildMessage(E,C),E,C,q)}s(Wc,"peg$buildStructuredError");function Vc(){var E;return E=$c(),E}s(Vc,"peg$parsestart");function $c(){var E,C,q;for(E=_,C=[],q=Yc();q!==o;)C.push(q),q=Yc();return C!==o&&(nt=E,C=u(C)),E=C,E}s($c,"peg$parsemessageFormatPattern");function Yc(){var E;return E=Sm(),E===o&&(E=Pi()),E}s(Yc,"peg$parsemessageFormatElement");function Tm(){var E,C,q,Q,Ae,be;if(E=_,C=[],q=_,Q=$t(),Q!==o?(Ae=Fm(),Ae!==o?(be=$t(),be!==o?(Q=[Q,Ae,be],q=Q):(_=q,q=o)):(_=q,q=o)):(_=q,q=o),q!==o)for(;q!==o;)C.push(q),q=_,Q=$t(),Q!==o?(Ae=Fm(),Ae!==o?(be=$t(),be!==o?(Q=[Q,Ae,be],q=Q):(_=q,q=o)):(_=q,q=o)):(_=q,q=o);else C=o;return C!==o&&(nt=E,C=l(C)),E=C,E===o&&(E=_,C=Uf(),C!==o?E=r.substring(E,_):E=C),E}s(Tm,"peg$parsemessageText");function Sm(){var E,C;return E=_,C=Tm(),C!==o&&(nt=E,C=m(C)),E=C,E}s(Sm,"peg$parsemessageTextElement");function xm(){var E,C,q;if(E=Bf(),E===o){for(E=_,C=[],q=VS();q!==o;)C.push(q),q=VS();C!==o&&(nt=E,C=p(C)),E=C}return E}s(xm,"peg$parseargument");function Pi(){var E,C,q,Q,Ae,be,Tt,Sr,jf;return E=_,r.charCodeAt(_)===123?(C=g,_++):(C=o,ve===0&&Me(f)),C!==o?(q=$t(),q!==o?(Q=xm(),Q!==o?(Ae=$t(),Ae!==o?(be=_,r.charCodeAt(_)===44?(Tt=y,_++):(Tt=o,ve===0&&Me(b)),Tt!==o?(Sr=$t(),Sr!==o?(jf=JB(),jf!==o?(Tt=[Tt,Sr,jf],be=Tt):(_=be,be=o)):(_=be,be=o)):(_=be,be=o),be===o&&(be=null),be!==o?(Tt=$t(),Tt!==o?(r.charCodeAt(_)===125?(Sr=D,_++):(Sr=o,ve===0&&Me(T)),Sr!==o?(nt=E,C=A(Q,be),E=C):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o),E}s(Pi,"peg$parseargumentElement");function JB(){var E;return E=XB(),E===o&&(E=ZB(),E===o&&(E=QB(),E===o&&(E=e7()))),E}s(JB,"peg$parseelementFormat");function XB(){var E,C,q,Q,Ae,be,Tt;return E=_,r.substr(_,6)===R?(C=R,_+=6):(C=o,ve===0&&Me(F)),C===o&&(r.substr(_,4)===M?(C=M,_+=4):(C=o,ve===0&&Me(V)),C===o&&(r.substr(_,4)===z?(C=z,_+=4):(C=o,ve===0&&Me(ne)))),C!==o?(q=$t(),q!==o?(Q=_,r.charCodeAt(_)===44?(Ae=y,_++):(Ae=o,ve===0&&Me(b)),Ae!==o?(be=$t(),be!==o?(Tt=Fm(),Tt!==o?(Ae=[Ae,be,Tt],Q=Ae):(_=Q,Q=o)):(_=Q,Q=o)):(_=Q,Q=o),Q===o&&(Q=null),Q!==o?(nt=E,C=se(C,Q),E=C):(_=E,E=o)):(_=E,E=o)):(_=E,E=o),E}s(XB,"peg$parsesimpleFormat");function ZB(){var E,C,q,Q,Ae,be;return E=_,r.substr(_,6)===Z?(C=Z,_+=6):(C=o,ve===0&&Me(de)),C!==o?(q=$t(),q!==o?(r.charCodeAt(_)===44?(Q=y,_++):(Q=o,ve===0&&Me(b)),Q!==o?(Ae=$t(),Ae!==o?(be=GS(),be!==o?(nt=E,C=Le(be),E=C):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o),E}s(ZB,"peg$parsepluralFormat");function QB(){var E,C,q,Q,Ae,be;return E=_,r.substr(_,13)===pe?(C=pe,_+=13):(C=o,ve===0&&Me(wt)),C!==o?(q=$t(),q!==o?(r.charCodeAt(_)===44?(Q=y,_++):(Q=o,ve===0&&Me(b)),Q!==o?(Ae=$t(),Ae!==o?(be=GS(),be!==o?(nt=E,C=ye(be),E=C):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o),E}s(QB,"peg$parseselectOrdinalFormat");function e7(){var E,C,q,Q,Ae,be,Tt;if(E=_,r.substr(_,6)===_e?(C=_e,_+=6):(C=o,ve===0&&Me(mt)),C!==o)if(q=$t(),q!==o)if(r.charCodeAt(_)===44?(Q=y,_++):(Q=o,ve===0&&Me(b)),Q!==o)if(Ae=$t(),Ae!==o){if(be=[],Tt=Cm(),Tt!==o)for(;Tt!==o;)be.push(Tt),Tt=Cm();else be=o;be!==o?(nt=E,C=at(be),E=C):(_=E,E=o)}else _=E,E=o;else _=E,E=o;else _=E,E=o;else _=E,E=o;return E}s(e7,"peg$parseselectFormat");function t7(){var E,C,q,Q;return E=_,C=_,r.charCodeAt(_)===61?(q=Ge,_++):(q=o,ve===0&&Me(Pt)),q!==o?(Q=Bf(),Q!==o?(q=[q,Q],C=q):(_=C,C=o)):(_=C,C=o),C!==o?E=r.substring(E,_):E=C,E===o&&(E=Fm()),E}s(t7,"peg$parseselector");function Cm(){var E,C,q,Q,Ae,be,Tt;return E=_,C=$t(),C!==o?(q=t7(),q!==o?(Q=$t(),Q!==o?(r.charCodeAt(_)===123?(Ae=g,_++):(Ae=o,ve===0&&Me(f)),Ae!==o?(be=$c(),be!==o?(r.charCodeAt(_)===125?(Tt=D,_++):(Tt=o,ve===0&&Me(T)),Tt!==o?(nt=E,C=et(q,be),E=C):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o)):(_=E,E=o),E}s(Cm,"peg$parseoptionalFormatPattern");function n7(){var E,C,q,Q;return E=_,r.substr(_,7)===We?(C=We,_+=7):(C=o,ve===0&&Me(Be)),C!==o?(q=$t(),q!==o?(Q=Bf(),Q!==o?(nt=E,C=j(Q),E=C):(_=E,E=o)):(_=E,E=o)):(_=E,E=o),E}s(n7,"peg$parseoffset");function GS(){var E,C,q,Q,Ae;if(E=_,C=n7(),C===o&&(C=null),C!==o)if(q=$t(),q!==o){if(Q=[],Ae=Cm(),Ae!==o)for(;Ae!==o;)Q.push(Ae),Ae=Cm();else Q=o;Q!==o?(nt=E,C=fe(C,Q),E=C):(_=E,E=o)}else _=E,E=o;else _=E,E=o;return E}s(GS,"peg$parsepluralStyle");function Uf(){var E,C;if(ve++,E=[],st.test(r.charAt(_))?(C=r.charAt(_),_++):(C=o,ve===0&&Me(Ve)),C!==o)for(;C!==o;)E.push(C),st.test(r.charAt(_))?(C=r.charAt(_),_++):(C=o,ve===0&&Me(Ve));else E=o;return ve--,E===o&&(C=o,ve===0&&Me(ut)),E}s(Uf,"peg$parsews");function $t(){var E,C,q;for(ve++,E=_,C=[],q=Uf();q!==o;)C.push(q),q=Uf();return C!==o?E=r.substring(E,_):E=C,ve--,E===o&&(C=o,ve===0&&Me(Je)),E}s($t,"peg$parse_");function WS(){var E;return qe.test(r.charAt(_))?(E=r.charAt(_),_++):(E=o,ve===0&&Me(ae)),E}s(WS,"peg$parsedigit");function Am(){var E;return ee.test(r.charAt(_))?(E=r.charAt(_),_++):(E=o,ve===0&&Me(ft)),E}s(Am,"peg$parsehexDigit");function Bf(){var E,C,q,Q,Ae,be;if(E=_,r.charCodeAt(_)===48?(C=Ce,_++):(C=o,ve===0&&Me(ze)),C===o){if(C=_,q=_,Ln.test(r.charAt(_))?(Q=r.charAt(_),_++):(Q=o,ve===0&&Me(zn)),Q!==o){for(Ae=[],be=WS();be!==o;)Ae.push(be),be=WS();Ae!==o?(Q=[Q,Ae],q=Q):(_=q,q=o)}else _=q,q=o;q!==o?C=r.substring(C,_):C=q}return C!==o&&(nt=E,C=P(C)),E=C,E}s(Bf,"peg$parsenumber");function VS(){var E,C,q;return E=_,C=_,ve++,r.charCodeAt(_)===39?(q=le,_++):(q=o,ve===0&&Me(he)),q===o&&(ge.test(r.charAt(_))?(q=r.charAt(_),_++):(q=o,ve===0&&Me(Ie))),ve--,q===o?C=void 0:(_=C,C=o),C!==o?(r.length>_?(q=r.charAt(_),_++):(q=o,ve===0&&Me(Pe)),q!==o?(nt=E,C=Qe(q),E=C):(_=E,E=o)):(_=E,E=o),E===o&&(E=_,r.charCodeAt(_)===39?(C=le,_++):(C=o,ve===0&&Me(he)),C!==o?(q=r7(),q!==o?(nt=E,C=Ze(q),E=C):(_=E,E=o)):(_=E,E=o)),E}s(VS,"peg$parsequoteEscapedChar");function $S(){var E;return r.charCodeAt(_)===39?(E=le,_++):(E=o,ve===0&&Me(he)),E}s($S,"peg$parseapostrophe");function r7(){var E;return ge.test(r.charAt(_))?(E=r.charAt(_),_++):(E=o,ve===0&&Me(Ie)),E===o&&(E=$S()),E}s(r7,"peg$parseescape");function YS(){var E,C,q,Q,Ae,be,Tt,Sr;return E=_,r.charCodeAt(_)===39?(C=le,_++):(C=o,ve===0&&Me(he)),C!==o?(q=$S(),q!==o?(nt=E,C=Ze(q),E=C):(_=E,E=o)):(_=E,E=o),E===o&&(Ft.test(r.charAt(_))?(E=r.charAt(_),_++):(E=o,ve===0&&Me(gt)),E===o&&(E=_,r.substr(_,2)===K?(C=K,_+=2):(C=o,ve===0&&Me(ce)),C!==o&&(nt=E,C=ke()),E=C,E===o&&(E=_,r.substr(_,2)===Dt?(C=Dt,_+=2):(C=o,ve===0&&Me(Oe)),C!==o&&(nt=E,C=$e()),E=C,E===o&&(E=_,r.substr(_,2)===ct?(C=ct,_+=2):(C=o,ve===0&&Me(xe)),C!==o&&(nt=E,C=tt()),E=C,E===o&&(E=_,r.substr(_,2)===Vt?(C=Vt,_+=2):(C=o,ve===0&&Me(Et)),C!==o&&(nt=E,C=Pn()),E=C,E===o&&(E=_,r.substr(_,2)===Hn?(C=Hn,_+=2):(C=o,ve===0&&Me(ea)),C!==o?(q=_,Q=_,Ae=Am(),Ae!==o?(be=Am(),be!==o?(Tt=Am(),Tt!==o?(Sr=Am(),Sr!==o?(Ae=[Ae,be,Tt,Sr],Q=Ae):(_=Q,Q=o)):(_=Q,Q=o)):(_=Q,Q=o)):(_=Q,Q=o),Q!==o?q=r.substring(q,_):q=Q,q!==o?(nt=E,C=Na(q),E=C):(_=E,E=o)):(_=E,E=o))))))),E}s(YS,"peg$parsechar");function Fm(){var E,C,q;if(E=_,C=[],q=YS(),q!==o)for(;q!==o;)C.push(q),q=YS();else C=o;return C!==o&&(nt=E,C=p(C)),E=C,E}if(s(Fm,"peg$parsechars"),Tr=c(),Tr!==o&&_===r.length)return Tr;throw Tr!==o&&_<r.length&&Me(Em()),Wc(ta,Sn<r.length?r.charAt(Sn):null,Sn<r.length?ra(Sn,Sn+1):ra(Sn,Sn))}return s(n,"peg$parse"),{SyntaxError:e,parse:n}}()});function vF(t){return!!t.options}var gF,RW,hF,yF,_W,kW,IW,MW,bF=v(()=>{d();gF=function(){var t=s(function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,a){r.__proto__=a}||function(r,a){for(var o in a)a.hasOwnProperty(o)&&(r[o]=a[o])},t(e,n)},"extendStatics");return function(e,n){t(e,n);function r(){this.constructor=e}s(r,"__"),e.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),RW=function(){function t(e,n,r){this.locales=[],this.formats={number:{},date:{},time:{}},this.pluralNumberFormat=null,this.currentPlural=null,this.pluralStack=[],this.locales=e,this.formats=n,this.formatters=r}return s(t,"Compiler"),t.prototype.compile=function(e){return this.pluralStack=[],this.currentPlural=null,this.pluralNumberFormat=null,this.compileMessage(e)},t.prototype.compileMessage=function(e){var n=this;if(!(e&&e.type==="messageFormatPattern"))throw new Error('Message AST is not of type: "messageFormatPattern"');var r=e.elements,a=r.filter(function(o){return o.type==="messageTextElement"||o.type==="argumentElement"}).map(function(o){return o.type==="messageTextElement"?n.compileMessageText(o):n.compileArgument(o)});if(a.length!==r.length)throw new Error("Message element does not have a valid type");return a},t.prototype.compileMessageText=function(e){return this.currentPlural&&/(^|[^\\])#/g.test(e.value)?(this.pluralNumberFormat||(this.pluralNumberFormat=new Intl.NumberFormat(this.locales)),new IW(this.currentPlural.id,this.currentPlural.format.offset,this.pluralNumberFormat,e.value)):e.value.replace(/\\#/g,"#")},t.prototype.compileArgument=function(e){var n=e.format,r=e.id,a=this.formatters;if(!n)return new _W(r);var o=this,i=o.formats,c=o.locales;switch(n.type){case"numberFormat":return{id:r,format:a.getNumberFormat(c,i.number[n.style]).format};case"dateFormat":return{id:r,format:a.getDateTimeFormat(c,i.date[n.style]).format};case"timeFormat":return{id:r,format:a.getDateTimeFormat(c,i.time[n.style]).format};case"pluralFormat":return new kW(r,n.offset,this.compileOptions(e),a.getPluralRules(c,{type:n.ordinal?"ordinal":"cardinal"}));case"selectFormat":return new MW(r,this.compileOptions(e));default:throw new Error("Message element does not have a valid format type")}},t.prototype.compileOptions=function(e){var n=this,r=e.format,a=r.options;this.pluralStack.push(this.currentPlural),this.currentPlural=r.type==="pluralFormat"?e:null;var o=a.reduce(function(i,c){return i[c.selector]=n.compileMessage(c.value),i},{});return this.currentPlural=this.pluralStack.pop(),o},t}(),hF=RW,yF=function(){function t(e){this.id=e}return s(t,"Formatter"),t}(),_W=function(t){gF(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return s(e,"StringFormat"),e.prototype.format=function(n){return!n&&typeof n!="number"?"":typeof n=="string"?n:String(n)},e}(yF),kW=function(){function t(e,n,r,a){this.id=e,this.offset=n,this.options=r,this.pluralRules=a}return s(t,"PluralFormat"),t.prototype.getOption=function(e){var n=this.options,r=n["="+e]||n[this.pluralRules.select(e-this.offset)];return r||n.other},t}(),IW=function(t){gF(e,t);function e(n,r,a,o){var i=t.call(this,n)||this;return i.offset=r,i.numberFormat=a,i.string=o,i}return s(e,"PluralOffsetString"),e.prototype.format=function(n){var r=this.numberFormat.format(n-this.offset);return this.string.replace(/(^|[^\\])#/g,"$1"+r).replace(/\\#/g,"#")},e}(yF),MW=function(){function t(e,n){this.id=e,this.options=n}return s(t,"SelectFormat"),t.prototype.getOption=function(e){var n=this.options;return n[e]||n.other},t}();s(vF,"isSelectOrPluralFormat")});function LW(t){typeof t=="string"&&(t=[t]);try{return Intl.NumberFormat.supportedLocalesOf(t,{localeMatcher:"best fit"})[0]}catch{return DF.defaultLocale}}function wF(t,e){for(var n="",r=0,a=t;r<a.length;r++){var o=a[r];if(typeof o=="string"){n+=o;continue}var i=o.id;if(!(e&&i in e))throw new UW("A value must be provided for: "+i,i);var c=e[i];vF(o)?n+=wF(o.getOption(c),e):n+=o.format(c)}return n}function PW(t,e){return e?uu({},t||{},e||{},Object.keys(t).reduce(function(n,r){return n[r]=uu({},t[r],e[r]||{}),n},{})):t}function OW(t,e){return e?Object.keys(t).reduce(function(n,r){return n[r]=PW(t[r],e[r]),n},uu({},t)):t}function BW(){return{getNumberFormat:function(){for(var t,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return new((t=Intl.NumberFormat).bind.apply(t,[void 0].concat(e)))},getDateTimeFormat:function(){for(var t,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return new((t=Intl.DateTimeFormat).bind.apply(t,[void 0].concat(e)))},getPluralRules:function(){for(var t,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return new((t=Intl.PluralRules).bind.apply(t,[void 0].concat(e)))}}}var NW,uu,UW,DF,vg,bg=v(()=>{d();bF();NW=function(){var t=s(function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,a){r.__proto__=a}||function(r,a){for(var o in a)a.hasOwnProperty(o)&&(r[o]=a[o])},t(e,n)},"extendStatics");return function(e,n){t(e,n);function r(){this.constructor=e}s(r,"__"),e.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),uu=function(){return uu=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++){e=arguments[n];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])}return t},uu.apply(this,arguments)};s(LW,"resolveLocale");s(wF,"formatPatterns");s(PW,"mergeConfig");s(OW,"mergeConfigs");UW=function(t){NW(e,t);function e(n,r){var a=t.call(this,n)||this;return a.variableId=r,a}return s(e,"FormatError"),e}(Error);s(BW,"createDefaultFormatters");DF=function(){function t(e,n,r,a){var o=this;if(n===void 0&&(n=t.defaultLocale),this.format=function(u){try{return wF(o.pattern,u)}catch(l){throw l.variableId?new Error("The intl string context variable '"+l.variableId+"' was not provided to the string '"+o.message+"'"):l}},typeof e=="string"){if(!t.__parse)throw new TypeError("IntlMessageFormat.__parse must be set to process `message` of type `string`");this.ast=t.__parse(e)}else this.ast=e;if(this.message=e,!(this.ast&&this.ast.type==="messageFormatPattern"))throw new TypeError("A message must be provided as a String or AST.");var i=OW(t.formats,r);this.locale=LW(n||[]);var c=a&&a.formatters||BW();this.pattern=new hF(n,i,c).compile(this.ast)}return s(t,"IntlMessageFormat"),t.prototype.resolvedOptions=function(){return{locale:this.locale}},t.prototype.getAst=function(){return this.ast},t.defaultLocale="en",t.__parse=void 0,t.formats={number:{currency:{style:"currency"},percent:{style:"percent"}},date:{short:{month:"numeric",day:"numeric",year:"2-digit"},medium:{month:"short",day:"numeric",year:"numeric"},long:{month:"long",day:"numeric",year:"numeric"},full:{weekday:"long",month:"long",day:"numeric",year:"numeric"}},time:{short:{hour:"numeric",minute:"numeric"},medium:{hour:"numeric",minute:"numeric",second:"numeric"},long:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"},full:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"}}},t}(),vg=DF});var EF,TF=v(()=>{d();fF();bg();bg();vg.__parse=pF.parse;EF=vg});var Go,es=v(()=>{d();Go=s(()=>({resolve(){throw new Error("createRequire.resolve is not supported in bundled Lighthouse")}}),"createRequire")});var jW,qW,Wo,lu=v(()=>{d();jW=globalThis.URL,qW=s(t=>t,"fileURLToPath"),Wo={URL:jW,fileURLToPath:qW}});function SF(t){return Wo.fileURLToPath(t.url)}var Vo=v(()=>{"use strict";d();es();lu();qo();s(SF,"getModulePath")});function wg(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function xF(t){return typeof t=="object"&&t!==null}var CF=v(()=>{"use strict";d();s(wg,"isObjectOfUnknownValues");s(xF,"isObjectOrArrayOfUnknownValues")});var AF,FF=v(()=>{d();AF={}});function _F(t,e=new Map){for(let n of t)if(n.type==="argumentElement"&&(e.set(n.id,n),!(!n.format||n.format.type!=="pluralFormat")))for(let r of n.format.options)_F(r.value.elements,e);return e}function GW(t,e={},n){let a=[..._F(t.getAst().elements).values()],o={};for(let{id:i,format:c}of a){if(i&&!(i in e))throw new Error(`ICU Message "${n}" contains a value reference ("${i}") that wasn't provided`);let u=e[i];if(!c||c.type!=="numberFormat"){o[i]=u;continue}if(typeof u!="number")throw new Error(`ICU Message "${n}" contains a numeric reference ("${i}") but provided value was not a number`);c.style==="milliseconds"?o[i]=Math.round(u/10)*10:c.style==="seconds"&&i==="timeInMs"?o[i]=Math.round(u/100)/10:c.style==="bytes"?o[i]=u/1024:o[i]=u}for(let i of Object.keys(e))if(!(i in o)){if(i==="errorCode"){o.errorCode=e.errorCode;continue}throw new Error(`Provided value "${i}" does not match any placeholder in ICU message "${n}"`)}return o}function Eg(t,e,n){if(!t.includes("{")&&e===void 0)return t;let r=n==="en-XA"||n==="en-XL"?"de-DE":n,a=new EF(t,r,HW),o=GW(a,e,t);return a.format(o)}function WW(t,e){let r=IF(e)[t.i18nId];return r?Eg(r.message,t.values,e):t.formattedDefault}function kF(t){let e=IF(t),n=Object.keys(e).filter(a=>a.startsWith("report/renderer/report-utils.js")),r={};for(let a of n){let{filename:o,key:i}=$W(a);if(!o.endsWith("report-utils.js"))throw new Error(`Unexpected message: ${a}`);r[i]=e[a].message}return r}function ns(t){if(!wg(t))return!1;let{i18nId:e,values:n,formattedDefault:r}=t;if(typeof e!="string"||typeof r!="string")return!1;if(n!==void 0){if(!wg(n))return!1;for(let a of Object.values(n))if(typeof a!="string"&&typeof a!="number")return!1}return RF.test(e)}function $o(t,e){if(ns(t))return WW(t,e);if(typeof t=="string")return t;throw new Error("Attempted to format invalid icuMessage type")}function VW(t){let e="";for(let n of t)if(/^[a-z]+$/i.test(n))e.length&&(e+="."),e+=n;else{if(/]|"|'|\s/.test(n))throw new Error(`Cannot handle "${n}" in i18n`);e+=`[${n}]`}return e}function Tg(t,e){function n(a,o,i=[]){if(xF(a))for(let[c,u]of Object.entries(a)){let l=i.concat([c]);if(ns(u)){let m=$o(u,e),p=o[u.i18nId]||[],g=VW(l);p.push(u.values?{values:u.values,path:g}:g),a[c]=m,o[u.i18nId]=p}else n(u,o,l)}}s(n,"replaceInObject");let r={};return n(t,r),r}function IF(t){let e=Dg[t];if(!e){if(t===ts)return{};throw new Error(`Unsupported locale '${t}'`)}return e}function MF(){return zW}function NF(){return[...new Set([...Object.keys(Dg),ts])].sort()}function LF(t,e){Dg[t]=e}function $W(t){if(!RF.test(t))throw Error(`"${t}" does not appear to be a valid ICU message id`);let[e,n]=t.split(" | ");return{filename:e,key:n}}var Dg,ts,zW,RF,HW,la=v(()=>{"use strict";d();ca();TF();Vo();CF();FF();Dg=AF,ts="en-US",zW=["ar-XB.json","ar.json","bg.json","ca.json","cs.json","da.json","de.json","el.json","en-GB.json","en-US.ctc.json","en-US.json","en-XA.json","en-XL.ctc.json","en-XL.json","es-419.json","es.json","fi.json","fil.json","fr.json","he.json","hi.json","hr.json","hu.json","id.json","it.json","ja.json","ko.json","lt.json","lv.json","nl.json","no.json","pl.json","pt-PT.json","pt.json","ro.json","ru.json","sk.json","sl.json","sr-Latn.json","sr.json","sv.json","ta.json","te.json","th.json","tr.json","uk.json","vi.json","zh-HK.json","zh-TW.json","zh.json"].filter(t=>t.endsWith(".json")&&!t.endsWith(".ctc.json")).map(t=>t.replace(".json","")).sort(),RF=/ | [^\s]+$/,HW={number:{bytes:{maximumFractionDigits:0},milliseconds:{maximumFractionDigits:0},seconds:{minimumFractionDigits:1,maximumFractionDigits:1},extendedPercent:{maximumFractionDigits:2,style:"percent"}}};s(_F,"collectAllCustomElementsFromICU");s(GW,"_preformatValues");s(Eg,"formatMessage");s(WW,"_localizeIcuMessage");s(kF,"getRendererFormattedStrings");s(ns,"isIcuMessage");s($o,"getFormatted");s(VW,"_formatPathAsString");s(Tg,"replaceIcuMessages");s(IF,"_getLocaleMessages");s(MF,"getCanonicalLocales");s(NF,"getAvailableLocales");s(LF,"registerLocaleData");s($W,"getIcuMessageIdParts")});var OF=L((C1e,PF)=>{d();var YW='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><path fill="%230379c4" fill-rule="evenodd" d="m171.887 116.28-53.696 89.36h-9.728l9.617-58.227-30.2.047a4.852 4.852 0 0 1-4.855-4.855c0-1.152 1.07-3.102 1.07-3.102l53.52-89.254 9.9.043-9.86 58.317 30.413-.043a4.852 4.852 0 0 1 4.855 4.855c0 1.088-.427 2.044-1.033 2.854l.004.004zM128 0C57.306 0 0 57.3 0 128s57.306 128 128 128 128-57.306 128-128S198.7 0 128 0z"/></svg>',KW={"modern-image-formats":"Consider displaying all [`amp-img`](https://amp.dev/documentation/components/amp-img/?format=websites) components in WebP formats while specifying an appropriate fallback for other browsers. [Learn more](https://amp.dev/documentation/components/amp-img/#example:-specifying-a-fallback-image).","offscreen-images":"Ensure that you are using [`amp-img`](https://amp.dev/documentation/components/amp-img/?format=websites) for images to automatically lazy-load. [Learn more](https://amp.dev/documentation/guides-and-tutorials/develop/media_iframes_3p/?format=websites#images).","render-blocking-resources":"Use tools such as [AMP Optimizer](https://github.com/ampproject/amp-toolbox/tree/master/packages/optimizer) to [server-side render AMP layouts](https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/server-side-rendering/).","unminified-css":"Refer to the [AMP documentation](https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/style_pages/) to ensure all styles are supported.","efficient-animated-content":"For animated content, use [`amp-anim`](https://amp.dev/documentation/components/amp-anim/) to minimize CPU usage when the content is offscreen.","uses-responsive-images":"The [`amp-img`](https://amp.dev/documentation/components/amp-img/?format=websites) component supports the [`srcset`](https://web.dev/use-srcset-to-automatically-choose-the-right-image/) attribute to specify which image assets to use based on the screen size. [Learn more](https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/art_direction/)."};PF.exports={id:"amp",title:"AMP",icon:YW,UIStrings:KW}});var BF=L((F1e,UF)=>{d();var JW='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><path fill="%23dd0031" d="M125 30 31.9 63.2l14.2 123.1L125 230l78.9-43.7 14.2-123.1z"/><path fill="%23c3002f" d="M125 30v22.2-.1V230l78.9-43.7 14.2-123.1L125 30z"/><path fill="%23fff" d="M125 52.1 66.8 182.6h21.7l11.7-29.2h49.4l11.7 29.2H183L125 52.1zm17 83.3h-34l17-40.9 17 40.9z"/></svg>',XW={"total-byte-weight":"Apply [route-level code splitting](https://web.dev/route-level-code-splitting-in-angular/) to minimize the size of your JavaScript bundles. Also, consider precaching assets with the [Angular service worker](https://web.dev/precaching-with-the-angular-service-worker/).","unminified-warning":"If you are using Angular CLI, ensure that builds are generated in production mode. [Learn more](https://angular.io/guide/deployment#enable-runtime-production-mode).","unused-javascript":"If you are using Angular CLI, include source maps in your production build to inspect your bundles. [Learn more](https://angular.io/guide/deployment#inspect-the-bundles).","uses-responsive-images":"Consider using the `BreakpointObserver` utility in the Component Dev Kit (CDK) to manage image breakpoints. [Learn more](https://material.angular.io/cdk/layout/overview).","uses-rel-preload":"Preload routes ahead of time to speed up navigation. [Learn more](https://web.dev/route-preloading-in-angular/).","dom-size":"Consider virtual scrolling with the Component Dev Kit (CDK) if very large lists are being rendered. [Learn more](https://web.dev/virtualize-lists-with-angular-cdk/)."};UF.exports={id:"angular",title:"Angular",icon:JW,UIStrings:XW}});var qF=L((_1e,jF)=>{d();var ZW='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 186.525 243.713"><path fill="%23009cde" d="M131.64 51.91C114.491 34.769 98.13 18.429 93.26 0c-4.87 18.429-21.234 34.769-38.38 51.91C29.16 77.613 0 106.743 0 150.434a93.263 93.263 0 1 0 186.525 0c0-43.688-29.158-72.821-54.885-98.524m-92 120.256c-5.719-.194-26.824-36.571 12.329-75.303l25.909 28.3a2.215 2.215 0 0 1-.173 3.306c-6.183 6.34-32.534 32.765-35.81 41.902-.675 1.886-1.663 1.815-2.256 1.795m53.624 47.943a32.075 32.075 0 0 1-32.076-32.075 33.423 33.423 0 0 1 7.995-21.187c5.784-7.072 24.077-26.963 24.077-26.963s18.012 20.183 24.033 26.896a31.368 31.368 0 0 1 8.046 21.254 32.076 32.076 0 0 1-32.075 32.075m61.392-52.015c-.691 1.512-2.26 4.036-4.376 4.113-3.773.138-4.176-1.796-6.965-5.923-6.122-9.06-59.551-64.9-69.545-75.699-8.79-9.498-1.238-16.195 2.266-19.704 4.395-4.403 17.224-17.225 17.224-17.225s38.255 36.296 54.19 61.096 10.444 46.26 7.206 53.342"/></svg>',QW={"unused-css-rules":"Consider removing unused CSS rules and only attach the needed Drupal libraries to the relevant page or component in a page. See the [Drupal documentation link](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) for details. To identify attached libraries that are adding extraneous CSS, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the theme/module responsible from the URL of the stylesheet when CSS aggregation is disabled in your Drupal site. Look out for themes/modules that have many stylesheets in the list which have a lot of red in code coverage. A theme/module should only enqueue a stylesheet if it is actually used on the page.","unused-javascript":"Consider removing unused JavaScript assets and only attach the needed Drupal libraries to the relevant page or component in a page. See the [Drupal documentation link](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) for details. To identify attached libraries that are adding extraneous JavaScript, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the theme/module responsible from the URL of the script when JavaScript aggregation is disabled in your Drupal site. Look out for themes/modules that have many scripts in the list which have a lot of red in code coverage. A theme/module should only enqueue a script if it is actually used on the page.","modern-image-formats":"Consider configuring [WebP image formats with a Convert image style](https://www.drupal.org/docs/core-modules-and-themes/core-modules/image-module/working-with-images#styles) on your site.","offscreen-images":"Install [a Drupal module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) that can lazy load images. Such modules provide the ability to defer any offscreen images to improve performance.","total-byte-weight":"Consider using [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) to reduce the size of images loaded on your page. If you are using Views to show multiple content items on a page, consider implementing pagination to limit the number of content items shown on a given page.","render-blocking-resources":"Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript.","unminified-css":'Ensure you have enabled "Aggregate CSS files" in the "Administration » Configuration » Development" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support.',"unminified-javascript":'Ensure you have enabled "Aggregate JavaScript files" in the "Administration » Configuration » Development" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support.',"efficient-animated-content":"Consider uploading your GIF to a service which will make it available to embed as an HTML5 video.","uses-long-cache-ttl":'Set the "Browser and proxy cache maximum age" in the "Administration » Configuration » Development" page. Read about [Drupal cache and optimizing for performance](https://www.drupal.org/docs/7/managing-site-performance-and-scalability/caching-to-improve-performance/caching-overview#s-drupal-performance-resources).',"uses-optimized-images":"Consider using [a module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=optimize+images&solrsort=iss_project_release_usage+desc&op=Search) that automatically optimizes and reduces the size of images uploaded through the site while retaining quality. Also, ensure you are using the native [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) provided from Drupal (available in Drupal 8 and above) for all images rendered on the site.","uses-responsive-images":"Ensure that you are using the native [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) provided from Drupal (available in Drupal 8 and above). Use the Responsive Image Styles when rendering image fields through view modes, views, or images uploaded through the WYSIWYG editor.","server-response-time":"Themes, modules, and server specifications all contribute to server response time. Consider finding a more optimized theme, carefully selecting an optimization module, and/or upgrading your server. Your hosting servers should make use of PHP opcode caching, memory-caching to reduce database query times such as Redis or Memcached, as well as optimized application logic to prepare pages faster.","uses-rel-preconnect":"Preconnect or dns-prefetch resource hints can be added by installing and configuring [a module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=dns-prefetch&solrsort=iss_project_release_usage+desc&op=Search) that provides facilities for user agent resource hints.","font-display":"Specify `@font-display` when defining custom fonts in your theme."};jF.exports={id:"drupal",title:"Drupal",icon:ZW,UIStrings:QW}});var HF=L((I1e,zF)=>{d();var eV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 82 82"><path fill="%235FA624" fill-rule="evenodd" d="M81.37 48.117C85.301 25.821 70.413 4.56 48.117.63 25.821-3.3 4.56 11.586.63 33.883-3.3 56.178 11.586 77.44 33.883 81.37 56.18 85.301 77.44 70.412 81.37 48.117Zm-8.935-14.17c2.77 12.357-1.942 25.721-12.96 33.436-14.57 10.203-34.656 6.662-44.859-7.909a32.434 32.434 0 0 1-2.869-4.98l28.7-20.097a6.53 6.53 0 1 0-3.744-5.347L9.564 48.054c-2.768-12.359 1.943-25.724 12.96-33.439 14.572-10.203 34.656-6.662 44.86 7.91a32.349 32.349 0 0 1 2.868 4.98L41.554 47.6a6.53 6.53 0 1 0 3.746 5.35l27.136-19.003Z"/></svg>',tV={"unused-css-rules":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Remove Unused CSS` to help with this issue. It will identify the CSS classes that are actually used on each page of your site, and remove any others to keep the file size small.","modern-image-formats":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Next-Gen Formats` to convert images to WebP.","offscreen-images":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Lazy Load Images` to defer loading off-screen images until they are needed.","render-blocking-resources":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Critical CSS` and `Script Delay` to defer non-critical JS/CSS.","unminified-css":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Minify CSS` to automatically minify your CSS to reduce network payload sizes.","unminified-javascript":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Minify Javascript` to automatically minify your JS to reduce network payload sizes.","uses-long-cache-ttl":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Efficient Static Cache Policy` to set recommended values in the caching header for static assests.","uses-optimized-images":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Next-Gen Formats` to convert images to WebP.","uses-responsive-images":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Resize Images` to resize images to a device appropriate size, reducing network payload sizes.","server-response-time":"Use [Ezoic Cloud Caching](https://pubdash.ezoic.com/speed/caching) to cache your content across our world wide network, improving time to first byte.","uses-rel-preconnect":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Pre-Connect Origins` to automatically add `preconnect` resource hints to establish early connections to important third-party origins.","uses-rel-preload":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Preload Fonts` and `Preload Background Images` to add `preload` links to prioritize fetching resources that are currently requested later in page load.","font-display":"Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Optimize Fonts` to automatically leverage the `font-display` CSS feature to ensure text is user-visible while webfonts are loading."};zF.exports={id:"ezoic",title:"Ezoic",icon:eV,UIStrings:tV}});var WF=L((N1e,GF)=>{d();var nV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><circle cx="14" cy="14" r="14" fill="%23639"/><path fill="%23fff" d="M6.2 21.8C4.1 19.7 3 16.9 3 14.2L13.9 25c-2.8-.1-5.6-1.1-7.7-3.2zm10.2 2.9L3.3 11.6C4.4 6.7 8.8 3 14 3c3.7 0 6.9 1.8 8.9 4.5l-1.5 1.3C19.7 6.5 17 5 14 5c-3.9 0-7.2 2.5-8.5 6L17 22.5c2.9-1 5.1-3.5 5.8-6.5H18v-2h7c0 5.2-3.7 9.6-8.6 10.7z"/></svg>',rV={"unused-css-rules":"Use the `PurgeCSS` `Gatsby` plugin to remove unused rules from stylesheets. [Learn more](https://purgecss.com/plugins/gatsby.html).","modern-image-formats":"Use the `gatsby-plugin-image` component instead of `<img>` to automatically optimize image format. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image).","offscreen-images":"Use the `gatsby-plugin-image` component instead of `<img>` to automatically lazy-load images. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image).","render-blocking-resources":"Use the `Gatsby Script API` to defer loading of non-critical third-party scripts. [Learn more](https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-script/).","unused-javascript":"Use `Webpack Bundle Analyzer` to detect unused JavaScript code. [Learn more](https://www.gatsbyjs.com/plugins/gatsby-plugin-webpack-bundle-analyser-v2/)","uses-long-cache-ttl":"Configure caching for immutable assets. [Learn more](https://www.gatsbyjs.com/docs/how-to/previews-deploys-hosting/caching/).","uses-optimized-images":"Use the `gatsby-plugin-image` component instead of `<img>` to adjust image quality. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image).","uses-responsive-images":"Use the `gatsby-plugin-image` component to set appropriate `sizes`. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image).","prioritize-lcp-image":"Use the `gatsby-plugin-image` component and set the `loading` prop to `eager`. [Learn more](https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-plugin-image#shared-props)."};GF.exports={id:"gatsby",title:"Gatsby",icon:nV,UIStrings:rV}});var $F=L((P1e,VF)=>{"use strict";d();var aV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 258"><path fill="%23F9AE41" d="M255.7 35.6a33.7 33.7 0 0 0-67-4.8l-.4-.2c-27.6-12.4-50.8 9.6-50.8 9.6l-61.4 61.7 24.3 23.4 49.4-48.6c23-23 35.6-7.4 35.6-7.4 17.4 14.6.6 32 .6 32l24.9 24c20.3-22 21.5-41.1 15.3-56.3a33.7 33.7 0 0 0 29.5-33.4"/><path fill="%23EE4035" d="m226.5 190.5.2-.3c12.4-27.6-9.6-50.8-9.6-50.8L155.4 78l-23.3 24.3 48.5 49.4c23 23 7.5 35.6 7.5 35.6-14.7 17.4-32 .6-32 .6l-24 24.9c21.9 20.3 41 21.5 56.2 15.3a33.7 33.7 0 1 0 38.2-37.6"/><path fill="%234F91CD" d="m156 133-49.5 48.6c-23 23-35.6 7.4-35.6 7.4-17.4-14.6-.6-32-.6-32l-24.9-24c-20.3 22-21.4 41.1-15.3 56.3a33.7 33.7 0 1 0 37.6 38.2l.3.2c27.6 12.4 50.8-9.6 50.8-9.6l61.4-61.7-24.3-23.4"/><path fill="%237AC043" d="M75.7 106.6c-23-23-7.4-35.6-7.4-35.6 14.6-17.4 32-.6 32-.6l24-24.9c-22-20.3-41-21.5-56.3-15.3a33.7 33.7 0 1 0-38.2 37.6l-.2.3C17.2 95.7 39.2 119 39.2 119l61.7 61.4 23.4-24.3-48.6-49.4"/></svg>',oV={"unused-css-rules":"Consider reducing, or switching, the number of [Joomla extensions](https://extensions.joomla.org/) loading unused CSS in your page. To identify extensions that are adding extraneous CSS, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the theme/plugin responsible from the URL of the stylesheet. Look out for plugins that have many stylesheets in the list which have a lot of red in code coverage. A plugin should only enqueue a stylesheet if it is actually used on the page.","modern-image-formats":"Consider using a [plugin](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=webp) or service that will automatically convert your uploaded images to the optimal formats.","offscreen-images":"Install a [lazy-load Joomla plugin](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=lazy%20loading) that provides the ability to defer any offscreen images, or switch to a template that provides that functionality. Starting with Joomla 4.0, all new images will [automatically](https://github.com/joomla/joomla-cms/pull/30748) get the `loading` attribute from the core.","total-byte-weight":"Consider showing excerpts in your article categories (e.g. via the read more link), reducing the number of articles shown on a given page, breaking your long posts into multiple pages, or using a plugin to lazy-load comments.","render-blocking-resources":"There are a number of Joomla plugins that can help you [inline critical assets](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance) or [defer less important resources](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance). Beware that optimizations provided by these plugins may break features of your templates or plugins, so you will need to test these thoroughly.","unminified-css":"A number of [Joomla extensions](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance) can speed up your site by concatenating, minifying, and compressing your css styles. There are also templates that provide this functionality.","unminified-javascript":"A number of [Joomla extensions](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance) can speed up your site by concatenating, minifying, and compressing your scripts. There are also templates that provide this functionality.","efficient-animated-content":"Consider uploading your GIF to a service which will make it available to embed as an HTML5 video.","unused-javascript":"Consider reducing, or switching, the number of [Joomla extensions](https://extensions.joomla.org/) loading unused JavaScript in your page. To identify plugins that are adding extraneous JS, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the extension responsible from the URL of the script. Look out for extensions that have many scripts in the list which have a lot of red in code coverage. An extension should only enqueue a script if it is actually used on the page.","uses-long-cache-ttl":"Read about [Browser Caching in Joomla](https://docs.joomla.org/Cache).","uses-optimized-images":"Consider using an [image optimization plugin](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=performance) that compresses your images while retaining quality.","uses-text-compression":"You can enable text compression by enabling Gzip Page Compression in Joomla (System > Global configuration > Server).","uses-responsive-images":"Consider using a [responsive images plugin](https://extensions.joomla.org/instant-search/?jed_live%5Bquery%5D=responsive%20images) to use responsive images in your content.","server-response-time":"Templates, extensions, and server specifications all contribute to server response time. Consider finding a more optimized template, carefully selecting an optimization extension, and/or upgrading your server."};VF.exports={id:"joomla",title:"Joomla",icon:aV,UIStrings:oV}});var KF=L((U1e,YF)=>{d();var iV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="%23f26322" viewBox="0 0 1000 1000"><path d="M916.9 267.4v465.3l-111.3 67.4V331.4l-1.5-.9-303.9-189-304.6 189.2-1.2.8V799L83.1 732.6V267.4l.7-.4L500.3 10l416 257 .6.4zM560.7 468.5v383.3L500.3 890l-61-38.2V306.7l-136 84.3v476.6l197 122.5 196.4-122.5V391l-136-84.3v161.8z"/></svg>',sV={"modern-image-formats":"Consider searching the [Magento Marketplace](https://marketplace.magento.com/catalogsearch/result/?q=webp) for a variety of third-party extensions to leverage newer image formats.","offscreen-images":"Consider modifying your product and catalog templates to make use of the web platform's [lazy loading](https://web.dev/native-lazy-loading) feature.","disable-bundling":"Disable Magento's built-in [JavaScript bundling and minification](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/js-bundling.html), and consider using [baler](https://github.com/magento/baler/) instead.","unminified-css":`Enable the "Minify CSS Files" option in your store's Developer settings. [Learn more](https://devdocs.magento.com/guides/v2.3/performance-best-practices/configuration.html?itm_source=devdocs&itm_medium=search_page&itm_campaign=federated_search&itm_term=minify%20css%20files).`,"unminified-javascript":"Use [Terser](https://www.npmjs.com/package/terser) to minify all JavaScript assets from static content deployment, and disable the built-in minification feature.","unused-javascript":"Disable Magento's built-in [JavaScript bundling](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/js-bundling.html).","uses-optimized-images":"Consider searching the [Magento Marketplace](https://marketplace.magento.com/catalogsearch/result/?q=optimize%20image) for a variety of third party extensions to optimize images.","server-response-time":"Use Magento's [Varnish integration](https://devdocs.magento.com/guides/v2.3/config-guide/varnish/config-varnish.html).","uses-rel-preconnect":"Preconnect or dns-prefetch resource hints can be added by [modifying a themes's layout](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/layouts/xml-manage.html).","uses-rel-preload":"`<link rel=preload>` tags can be added by [modifying a themes's layout](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/layouts/xml-manage.html).","critical-request-chains":"If you are not bundling your JavaScript assets, consider using [baler](https://github.com/magento/baler).","font-display":"Specify `@font-display` when [defining custom fonts](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/css-topics/using-fonts.html)."};YF.exports={id:"magento",title:"Magento",icon:iV,UIStrings:sV}});var XF=L((j1e,JF)=>{d();var cV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 207 124"><path fill="%23000" d="M48.942 32.632h38.96v3.082h-35.39v23.193H85.79v3.082H52.513v25.464h35.794v3.081H48.942V32.632Zm42.45 0h4.139l18.343 25.464 18.749-25.464L158.124.287l-41.896 60.485 21.59 29.762h-4.302l-19.642-27.086L94.15 90.534h-4.22l21.751-29.762-20.29-28.14Zm47.967 3.082v-3.082h44.397v3.082h-20.453v54.82h-3.571v-54.82h-20.373ZM.203 32.632h4.464l61.557 91.671-25.439-33.769L3.936 37.011l-.162 53.523H.203zm183.194 53.891c.738 0 1.276-.563 1.276-1.29 0-.727-.538-1.29-1.276-1.29-.73 0-1.277.563-1.277 1.29 0 .727.547 1.29 1.277 1.29Zm3.509-3.393c0 2.146 1.555 3.549 3.822 3.549 2.414 0 3.874-1.446 3.874-3.956v-8.837h-1.946v8.828c0 1.394-.704 2.138-1.946 2.138-1.112 0-1.867-.692-1.893-1.722h-1.911Zm10.24-.113c.14 2.233 2.007 3.662 4.787 3.662 2.97 0 4.83-1.498 4.83-3.887 0-1.878-1.06-2.917-3.632-3.514l-1.38-.338c-1.634-.38-2.294-.891-2.294-1.783 0-1.125 1.025-1.86 2.563-1.86 1.459 0 2.466.718 2.649 1.869h1.893c-.113-2.103-1.971-3.583-4.516-3.583-2.737 0-4.56 1.48-4.56 3.704 0 1.835 1.033 2.926 3.3 3.454l1.616.39c1.659.389 2.388.96 2.388 1.912 0 1.108-1.146 1.913-2.71 1.913-1.676 0-2.84-.753-3.005-1.939h-1.928Z"/></svg>',uV={"unused-css-rules":"Consider setting up `PurgeCSS` in `Next.js` configuration to remove unused rules from stylesheets. [Learn more](https://purgecss.com/guides/next.html).","modern-image-formats":"Use the `next/image` component instead of `<img>` to automatically optimize image format. [Learn more](https://nextjs.org/docs/basic-features/image-optimization).","offscreen-images":"Use the `next/image` component instead of `<img>` to automatically lazy-load images. [Learn more](https://nextjs.org/docs/basic-features/image-optimization).","render-blocking-resources":"Use the `next/script` component to defer loading of non-critical third-party scripts. [Learn more](https://nextjs.org/docs/basic-features/script).","unused-javascript":"Use `Webpack Bundle Analyzer` to detect unused JavaScript code. [Learn more](https://github.com/vercel/next.js/tree/canary/packages/next-bundle-analyzer)","uses-long-cache-ttl":"Configure caching for immutable assets and `Server-side Rendered` (SSR) pages. [Learn more](https://nextjs.org/docs/going-to-production#caching).","uses-optimized-images":"Use the `next/image` component instead of `<img>` to adjust image quality. [Learn more](https://nextjs.org/docs/basic-features/image-optimization).","uses-text-compression":"Enable compression on your Next.js server. [Learn more](https://nextjs.org/docs/api-reference/next.config.js/compression).","uses-responsive-images":"Use the `next/image` component to set the appropriate `sizes`. [Learn more](https://nextjs.org/docs/api-reference/next/image#sizes).","user-timings":"Consider using `Next.js Analytics` to measure your app's real-world performance. [Learn more](https://nextjs.org/docs/advanced-features/measuring-performance).","prioritize-lcp-image":'Use the `next/image` component and set "priority" to true to preload LCP image. [Learn more](https://nextjs.org/docs/api-reference/next/image#priority).',"unsized-images":"Use the `next/image` component to make sure images are always sized appropriately. [Learn more](https://nextjs.org/docs/api-reference/next/image#width)."};JF.exports={id:"next.js",title:"Next.js",icon:cV,UIStrings:uV}});var QF=L((z1e,ZF)=>{d();var lV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="142" height="54"><g fill="none" fill-rule="evenodd"><g fill="%231B004E"><path d="M19.486 53.24h-3.891L4.682 39.247v13.936H0V32.946h5.444l9.475 12.398V32.946h4.567zM21.346 32.94h4.647v3.57h-4.647v-3.57Zm0 5.477h4.647V53.18h-4.647V38.417ZM40.569 53.183H36c-3.408 0-4.991-1.625-4.991-4.697v-6.22h-3.777V38.42h3.777v-5.474h4.598v5.474h4.958v3.846h-4.958v4.588c0 1.597.477 2.252 2.197 2.252h2.764v4.077ZM46.688 53.183h-4.57V38.42h4.57v2.308c.31-.686 1.351-2.336 4.425-2.336h3.13v4.56h-4.004c-2.593 0-3.55.967-3.55 3.019v7.212ZM70.612 45.802c0 4.56-3.409 7.75-8.01 7.75s-8.006-3.19-8.006-7.75c0-4.56 3.408-7.755 8.006-7.755 4.598 0 8.01 3.195 8.01 7.755Zm-4.599 0c0-2.14-1.35-3.733-3.408-3.733-2.057 0-3.44 1.594-3.44 3.733 0 2.139 1.41 3.733 3.44 3.733 2.03 0 3.408-1.598 3.408-3.733ZM72.47 32.946h11.7c4.543 0 7.192 2.28 7.192 6.526 0 4.247-2.649 6.577-7.191 6.577h-6.935v7.125h-4.765V32.946Zm4.766 4.218v4.676h6.485c1.832 0 2.736-.883 2.736-2.34 0-1.565-.904-2.336-2.736-2.336h-6.485ZM102.662 51.016c-.254.485-1.636 2.48-4.71 2.48-3.665 0-6.627-2.906-6.627-7.694 0-4.789 2.962-7.667 6.656-7.667 2.962 0 4.372 1.851 4.626 2.336v-2.05h4.567v14.762h-4.512v-2.167Zm-3.327-8.932c-2.03 0-3.384 1.594-3.384 3.733 0 2.14 1.354 3.733 3.384 3.733s3.327-1.597 3.327-3.733-1.298-3.733-3.327-3.733ZM119.184 43.578a2.98 2.98 0 0 0-2.749-1.494c-1.918 0-3.13 1.594-3.13 3.733 0 2.14 1.24 3.758 3.158 3.758 1.807 0 2.625-1.168 2.764-1.51h4.4c-.143 2.052-2.116 5.5-7.275 5.5-4.286 0-7.641-3.078-7.641-7.75 0-4.673 3.328-7.755 7.585-7.755 5.159 0 7.105 3.392 7.33 5.53l-4.442-.012ZM129.712 46.6v6.577h-4.567V32.194h4.567v11.998l5.838-5.784h5.751l-6.994 6.811 7.362 7.952h-5.921z"/></g><g fill="%2325F5CE"><path d="M49.159 4.65c12.832 0 23.235 10.41 23.235 23.251h4.648C77.042 12.491 64.558 0 49.159 0c-15.4 0-27.883 12.492-27.883 27.901h4.647c0-12.841 10.403-23.25 23.236-23.25Z"/><path d="M44.852 25.793a3.632 3.632 0 0 1 2.6-5.097L63.8 16.951 50.426 27.09a3.626 3.626 0 0 1-5.574-1.296Z"/></g></g></svg>',dV={"unused-css-rules":"Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page.","modern-image-formats":"Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP.","offscreen-images":"Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images).","render-blocking-resources":"Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times.","unminified-css":"Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times.","unminified-javascript":"Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times.","unused-javascript":"Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed.","uses-long-cache-ttl":"Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience.","uses-optimized-images":"Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting.","uses-text-compression":"Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser.","uses-responsive-images":"Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices.","server-response-time":"Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361).","dom-size":"Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance.","font-display":"Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."};ZF.exports={id:"nitropack",title:"NitroPack",icon:lV,UIStrings:dV}});var tR=L((G1e,eR)=>{d();var mV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 124 124"><path fill="%2380EEC0" fill-rule="evenodd" d="M55.75 27.155c-3.222-5.54-11.278-5.54-14.5 0L6.134 87.535C2.912 93.075 6.94 100 13.384 100h27.413c-2.753-2.407-3.773-6.57-1.69-10.142L65.704 44.27 55.75 27.155Z" clip-rule="evenodd"/><path fill="%2300DC82" d="M78 40.4c2.667-4.533 9.333-4.533 12 0l29.06 49.4c2.667 4.533-.666 10.199-5.999 10.199H54.938c-5.333 0-8.666-5.666-6-10.199L78 40.4Z"/></svg>',pV={"modern-image-formats":'Use the `nuxt/image` component and set `format="webp"`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#format).',"offscreen-images":'Use the `nuxt/image` component and set `loading="lazy"` for offscreen images. [Learn more](https://image.nuxtjs.org/components/nuxt-img#loading).',"uses-optimized-images":"Use the `nuxt/image` component and set the appropriate `quality`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#quality).","uses-responsive-images":"Use the `nuxt/image` component and set the appropriate `sizes`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#sizes).","prioritize-lcp-image":"Use the `nuxt/image` component and specify `preload` for LCP image. [Learn more](https://image.nuxtjs.org/components/nuxt-img#preload).","unsized-images":"Use the `nuxt/image` component and specify explicit `width` and `height`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#width--height)."};eR.exports={id:"nuxt",title:"Nuxt",icon:mV,UIStrings:pV}});var rR=L((V1e,nR)=>{d();var fV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 310 310"><path fill="none" d="M-1-1h802v602H-1z"/><path fill="%23de6c26" d="M135 6.9c-14.2 4.4-34.9 21.8-49.9 42C55.8 88.5 39.6 135.8 41.4 177c.8 20.2 4.9 35.5 14.4 54.5 13.6 27.4 40.8 55.1 65.5 66.9 14.1 6.7 13.4 6.9 14.1-2.8.3-4.4 1-32.4 1.6-62.1 2.7-137.3 4.4-176 8.2-191.3.6-2.3 1.4-4.2 1.9-4.2 1.2 0 3.6 9.1 4.9 18.3.5 4.3 1 17.7 1 29.8 0 12 .3 21.9.7 21.9.3 0 5.7-5 11.9-11 6.9-6.8 12-11 13.3-11 1.8 0 1.9.3 1 2.7-1.2 3.1-7.9 13.2-19.1 28.5L153 128l.1 31.2c.1 17.2.4 37.4.8 44.9l.6 13.7 11-12.6c14-16 35.1-37.1 39.5-39.6l3.3-1.9-.6 3.2c-2 9.8-9.5 20.7-37.4 54.3L154 240.8v31.1c0 18.3.4 31.1.9 31.1 2.8 0 19.3-6.4 26.8-10.5 13.8-7.3 23.8-15 38.3-29.5 15.7-15.7 24.4-27.4 33.4-45.2 20.5-40 21-80.3 1.6-119-17.8-35.6-54.6-72.1-87.8-86.9-11.7-5.3-24.6-7.3-32.2-5z"/></svg>',gV={"unused-css-rules":"Consider reviewing the [plugins](https://octobercms.com/plugins) loading unused CSS on the website. To identify plugins that add unnecessary CSS, run [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. Identify the theme/plugin responsible from the stylesheet URL. Look for plugins with many stylesheets with lots of red in code coverage. A plugin should only add a stylesheet if it is actually used on the web page.","modern-image-formats":"Consider using a [plugin](https://octobercms.com/plugins?search=image) or service that will automatically convert the uploaded images to the optimal formats. [WebP lossless images](https://developers.google.com/speed/webp) are 26% smaller in size compared to PNGs and 25-34% smaller than comparable JPEG images at the equivalent SSIM quality index. Another next-gen image format to consider is [AVIF](https://jakearchibald.com/2020/avif-has-landed/).","offscreen-images":"Consider installing an [image lazy loading plugin](https://octobercms.com/plugins?search=lazy) that provides the ability to defer any offscreen images, or switch to a theme that provides that functionality. Also consider using [the AMP plugin](https://octobercms.com/plugins?search=Accelerated+Mobile+Pages).","total-byte-weight":"Consider showing excerpts in the post lists (e.g. using a `show more` button), reducing the number of posts shown on a given web page, breaking long posts into multiple web pages, or using a plugin to lazy-load comments.","render-blocking-resources":"There are many plugins that help [inline critical assets](https://octobercms.com/plugins?search=css). These plugins may break other plugins, so you should test thoroughly.","unminified-css":"There are many [plugins](https://octobercms.com/plugins?search=css) that can speed up a website by concatenating, minifying and compressing the styles. Using a build process to do this minification up-front can speed up development.","unminified-javascript":"There are many [plugins](https://octobercms.com/plugins?search=javascript) that can speed up a website by concatenating, minifying and compressing the scripts. Using a build process to do this minification up-front can speed up development.","efficient-animated-content":"[Replace animated GIFs with video](https://web.dev/replace-gifs-with-videos/) for faster web page loads and consider using modern file formats such as [WebM](https://web.dev/replace-gifs-with-videos/#create-webm-videos) or [AV1](https://developers.google.com/web/updates/2018/09/chrome-70-media-updates#av1-decoder) to improve compression efficiency by greater than 30% over the current state-of-the-art video codec, VP9.","unused-javascript":"Consider reviewing the [plugins](https://octobercms.com/plugins?search=javascript) that load unused JavaScript in the web page. To identify plugins that add unnecessary JavaScript, run [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. Identify the theme/plugin responsible from the URL of the script. Look for plugins with many scripts with lots of red in code coverage. A plugin should only add a script if it is actually used on the web page.","uses-long-cache-ttl":"Read about [preventing unnecessary network requests with the HTTP Cache](https://web.dev/http-cache/#caching-checklist). There are many [plugins](https://octobercms.com/plugins?search=Caching) that can be used to speed up caching.","uses-optimized-images":"Consider using an [image optimization plugin](https://octobercms.com/plugins?search=image) to compresses images while retaining the quality.","uses-text-compression":"Enable text compression in the web server configuration.","uses-responsive-images":"Upload images directly in the media manager to ensure the required image sizes are available. Consider using the [resize filter](https://octobercms.com/docs/markup/filter-resize) or an [image resizing plugin](https://octobercms.com/plugins?search=image) to ensure the optimal image sizes are used.","server-response-time":"Themes, plugins and server specifications all contribute to the server response time. Consider finding a more optimized theme, carefully selecting an optimization plugin and/or upgrade the server. October CMS also allows developers to use [`Queues`](https://octobercms.com/docs/services/queues) to defer the processing of a time consuming task, such as sending an e-mail. This drastically speeds up web requests."};nR.exports={id:"octobercms",title:"October CMS",icon:fV,UIStrings:gV}});var oR=L((Y1e,aR)=>{d();var hV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="%2361DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>',yV={"unminified-css":"If your build system minifies CSS files automatically, ensure that you are deploying the production build of your application. You can check this with the React Developer Tools extension. [Learn more](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build).","unminified-javascript":"If your build system minifies JS files automatically, ensure that you are deploying the production build of your application. You can check this with the React Developer Tools extension. [Learn more](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build).","unused-javascript":"If you are not server-side rendering, [split your JavaScript bundles](https://web.dev/code-splitting-suspense/) with `React.lazy()`. Otherwise, code-split using a third-party library such as [loadable-components](https://www.smooth-code.com/open-source/loadable-components/docs/getting-started/).","server-response-time":"If you are server-side rendering any React components, consider using `renderToPipeableStream()` or `renderToStaticNodeStream()` to allow the client to receive and hydrate different parts of the markup instead of all at once. [Learn more](https://reactjs.org/docs/react-dom-server.html#renderToPipeableStream).",redirects:"If you are using React Router, minimize usage of the `<Redirect>` component for [route navigations](https://reacttraining.com/react-router/web/api/Redirect).","user-timings":"Use the React DevTools Profiler, which makes use of the Profiler API, to measure the rendering performance of your components. [Learn more.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)","dom-size":'Consider using a "windowing" library like `react-window` to minimize the number of DOM nodes created if you are rendering many repeated elements on the page. [Learn more](https://web.dev/virtualize-long-lists-react-window/). Also, minimize unnecessary re-renders using [`shouldComponentUpdate`](https://reactjs.org/docs/optimizing-performance.html#shouldcomponentupdate-in-action), [`PureComponent`](https://reactjs.org/docs/react-api.html#reactpurecomponent), or [`React.memo`](https://reactjs.org/docs/react-api.html#reactmemo) and [skip effects](https://reactjs.org/docs/hooks-effect.html#tip-optimizing-performance-by-skipping-effects) only until certain dependencies have changed if you are using the `Effect` hook to improve runtime performance.'};aR.exports={id:"react",title:"React",icon:hV,UIStrings:yV}});var sR=L((J1e,iR)=>{d();var vV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 71 28"><path fill-rule="evenodd" d="M0 .032s2.796-.356 4.66 1.31C5.81 2.37 6.145 4.008 6.145 4.008L9.952 18.96l3.165-12.239c.309-1.301.864-2.909 1.743-3.997 1.121-1.385 3.398-1.472 3.641-1.472.242 0 2.519.087 3.639 1.472.88 1.088 1.435 2.696 1.744 3.997l3.165 12.239 3.806-14.953s.336-1.638 1.486-2.666C34.205-.324 37 .032 37 .032l-7.289 27.945s-2.404.176-3.607-.446c-1.58-.816-2.332-1.447-3.289-5.249l-.099-.395c-.349-1.399-.883-3.59-1.424-5.813l-.162-.667-.162-.664c-.779-3.198-1.497-6.143-1.612-6.517-.108-.351-.236-1.187-.855-1.187-.607 0-.746.837-.857 1.187-.13.412-.99 3.955-1.856 7.514l-.162.667c-.512 2.107-1.01 4.151-1.341 5.48l-.1.395c-.956 3.802-1.708 4.433-3.288 5.249-1.204.622-3.608.446-3.608.446zM43.998 5v.995L44 5.994v16.628c-.014 3.413-.373 4.17-1.933 4.956-1.213.61-3.067.379-3.067.379V9.332c0-.935.315-1.548 1.477-2.098.693-.329 1.34-.58 2.012-.953C43.54 5.703 43.998 5 43.998 5zM46 .125s3.877-.673 5.797 1.107c1.228 1.14 2.602 3.19 2.602 3.19l3.38 4.965c.164.258.378.54.72.54.343 0 .558-.282.722-.54l3.38-4.965s1.374-2.05 2.602-3.19C67.123-.548 71 .125 71 .125l-9.186 13.923 9.161 13.881-.032.004c-.38.045-4.036.423-5.855-1.266-1.229-1.138-2.487-2.992-2.487-2.992l-3.38-4.964c-.164-.26-.379-.54-.721-.54-.343 0-.557.28-.721.54l-3.38 4.964s-1.19 1.854-2.418 2.992c-1.92 1.783-5.957 1.262-5.957 1.262l9.161-13.88zM43.96 0H44c0 1.91-.186 3.042-1.387 3.923-.384.28-1.048.71-1.826.992C39.719 5.304 39 6 39 6c0-3.476.53-4.734 1.95-5.48.865-.452 2.272-.514 2.82-.52z"></path></svg>',bV={"modern-image-formats":"Upload images using `Wix Media Manager` to ensure they are automatically served as WebP. Find [more ways to optimize](https://support.wix.com/en/article/site-performance-optimizing-your-media) your site's media.","render-blocking-resources":"When [adding third-party code](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) in the `Custom Code` tab of your site's dashboard, make sure it's deferred or loaded at the end of the code body. Where possible, use Wix’s [integrations](https://support.wix.com/en/article/about-marketing-integrations) to embed marketing tools on your site. ","efficient-animated-content":"Place videos inside `VideoBoxes`, customize them using `Video Masks` or add `Transparent Videos`. [Learn more](https://support.wix.com/en/article/wix-video-about-wix-video).","unused-javascript":"Review any third-party code you've added to your site in the `Custom Code` tab of your site's dashboard and only keep the services that are necessary to your site. [Find out more](https://support.wix.com/en/article/site-performance-removing-unused-javascript).","server-response-time":"Wix utilizes CDNs and caching to serve responses as fast as possible for most visitors. Consider [manually enabling caching](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) for your site, especially if using `Velo`."};iR.exports={id:"wix",title:"Wix",icon:vV,UIStrings:bV}});var uR=L((Z1e,cR)=>{d();var wV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.5 122.5"><g fill="%232f3439"><path d="M8.7 61.3c0 20.8 12.1 38.7 29.6 47.3l-25-68.7c-3 6.5-4.6 13.7-4.6 21.4zm88-2.7c0-6.5-2.3-11-4.3-14.5-2.7-4.3-5.2-8-5.2-12.3 0-4.8 3.7-9.3 8.9-9.3h.7a52.4 52.4 0 0 0-79.4 9.9h3.3c5.5 0 14-.6 14-.6 2.9-.2 3.2 4 .4 4.3 0 0-2.9.4-6 .5l19.1 57L59.7 59l-8.2-22.5c-2.8-.1-5.5-.5-5.5-.5-2.8-.1-2.5-4.5.3-4.3 0 0 8.7.7 13.9.7 5.5 0 14-.7 14-.7 2.8-.2 3.2 4 .3 4.3 0 0-2.8.4-6 .5l19 56.5 5.2-17.5c2.3-7.3 4-12.5 4-17z"/><path d="m62.2 65.9-15.8 45.8a52.6 52.6 0 0 0 32.3-.9l-.4-.7zM107.4 36a49.6 49.6 0 0 1-3.6 24.2l-16.1 46.5A52.5 52.5 0 0 0 107.4 36z"/><path d="M61.3 0a61.3 61.3 0 1 0 .1 122.7A61.3 61.3 0 0 0 61.3 0zm0 119.7a58.5 58.5 0 1 1 .1-117 58.5 58.5 0 0 1-.1 117z"/></g></svg>',DV={"unused-css-rules":"Consider reducing, or switching, the number of [WordPress plugins](https://wordpress.org/plugins/) loading unused CSS in your page. To identify plugins that are adding extraneous CSS, try running [code coverage](https://developer.chrome.com/docs/devtools/coverage/) in Chrome DevTools. You can identify the theme/plugin responsible from the URL of the stylesheet. Look out for plugins that have many stylesheets in the list which have a lot of red in code coverage. A plugin should only enqueue a stylesheet if it is actually used on the page.","modern-image-formats":"Consider using the [Performance Lab](https://wordpress.org/plugins/performance-lab/) plugin to automatically convert your uploaded JPEG images into WebP, wherever supported.","offscreen-images":"Install a [lazy-load WordPress plugin](https://wordpress.org/plugins/search/lazy+load/) that provides the ability to defer any offscreen images, or switch to a theme that provides that functionality. Also consider using [the AMP plugin](https://wordpress.org/plugins/amp/).","total-byte-weight":"Consider showing excerpts in your post lists (e.g. via the more tag), reducing the number of posts shown on a given page, breaking your long posts into multiple pages, or using a plugin to lazy-load comments.","render-blocking-resources":"There are a number of WordPress plugins that can help you [inline critical assets](https://wordpress.org/plugins/search/critical+css/) or [defer less important resources](https://wordpress.org/plugins/search/defer+css+javascript/). Beware that optimizations provided by these plugins may break features of your theme or plugins, so you will likely need to make code changes.","unminified-css":"A number of [WordPress plugins](https://wordpress.org/plugins/search/minify+css/) can speed up your site by concatenating, minifying, and compressing your styles. You may also want to use a build process to do this minification up-front if possible.","unminified-javascript":"A number of [WordPress plugins](https://wordpress.org/plugins/search/minify+javascript/) can speed up your site by concatenating, minifying, and compressing your scripts. You may also want to use a build process to do this minification up front if possible.","efficient-animated-content":"Consider uploading your GIF to a service which will make it available to embed as an HTML5 video.","unused-javascript":"Consider reducing, or switching, the number of [WordPress plugins](https://wordpress.org/plugins/) loading unused JavaScript in your page. To identify plugins that are adding extraneous JS, try running [code coverage](https://developer.chrome.com/docs/devtools/coverage/) in Chrome DevTools. You can identify the theme/plugin responsible from the URL of the script. Look out for plugins that have many scripts in the list which have a lot of red in code coverage. A plugin should only enqueue a script if it is actually used on the page.","uses-long-cache-ttl":"Read about [Browser Caching in WordPress](https://wordpress.org/support/article/optimization/#browser-caching).","uses-optimized-images":"Consider using an [image optimization WordPress plugin](https://wordpress.org/plugins/search/optimize+images/) that compresses your images while retaining quality.","uses-text-compression":"You can enable text compression in your web server configuration.","uses-responsive-images":"Upload images directly through the [media library](https://wordpress.org/support/article/media-library-screen/) to ensure that the required image sizes are available, and then insert them from the media library or use the image widget to ensure the optimal image sizes are used (including those for the responsive breakpoints). Avoid using `Full Size` images unless the dimensions are adequate for their usage. [Learn More](https://wordpress.org/support/article/inserting-images-into-posts-and-pages/).","server-response-time":"Themes, plugins, and server specifications all contribute to server response time. Consider finding a more optimized theme, carefully selecting an optimization plugin, and/or upgrading your server."};cR.exports={id:"wordpress",title:"WordPress",icon:wV,UIStrings:DV}});var dR=L((efe,lR)=>{d();var EV='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 294 524"><defs><linearGradient id="a" x1="36.742%" x2="37.116%" y1="100.518%" y2="-.001%"><stop offset="0%" stop-color="%23DD5F29"/><stop offset="26.042%" stop-color="%23F26B32"/><stop offset="100%" stop-color="%23FAC932"/></linearGradient><linearGradient id="b" x1="28.046%" x2="28.421%" y1="100.518%" y2="-.003%"><stop offset="0%" stop-color="%23DD5F29"/><stop offset="26.042%" stop-color="%23F26B32"/><stop offset="100%" stop-color="%23FAC932"/></linearGradient><linearGradient id="c" x1="38.215%" x2="38.589%" y1="100.518%" y2="0%"><stop offset="0%" stop-color="%23DD5F29"/><stop offset="26.042%" stop-color="%23F26B32"/><stop offset="100%" stop-color="%23FAC932"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path fill="url(%23a)" d="M218.617 270.615c-9.752 0-18.896-5.689-23.366-14.63l-7.72-17.27h-76.6l-7.722 17.27c-4.47 8.941-13.613 14.63-23.366 14.63H75.78l32.712 249.306c1.625 4.671 4.673 4.671 6.502 0l32.51-79.648 28.242 79.442c1.625 4.676 4.673 4.676 6.501 0L220.04 270.82l-1.423-.204Z" transform="translate(-1.58 -.2)"/><path fill="url(%23b)" d="M184.47 231.784h-70.3l-10.77 24.179c-3.657 7.314-10.768 12.597-18.489 14.02L109.7 423.791c1.625 2.844 4.673 2.844 6.501 0l31.697-48.155 29.055 47.951c1.829 2.845 4.673 2.845 6.502 0l28.039-154.012c-6.908-2.032-13.004-6.908-16.255-13.613l-10.768-24.18Z" transform="translate(-1.58 -.2)"/><path fill="url(%23c)" d="m195.259 255.988-46.123-103.014-45.92 103.014c-1.625 3.048-3.656 5.69-6.095 7.925l19.1 102.2c1.015 1.423 3.657 1.83 5.485 0l25.601-33.931 25.602 33.728c1.625 2.032 4.47 1.626 5.485 0l21.131-103.42c-1.625-2.032-3.047-4.064-4.266-6.502Z" transform="translate(-1.58 -.2)"/><path fill="%23F56F46" d="M.439 12.559c-1.422-4.877 1.422-8.33 6.299-8.33H47.17c2.845 0 5.486 2.437 6.299 4.876l29.665 116.83h1.422l53.437-121.3c1.016-2.032 3.048-3.86 5.892-3.86h6.299c3.047 0 5.08 1.625 5.892 3.86l53.437 121.3h1.423L240.6 9.105c.61-2.439 3.454-4.877 6.299-4.877h40.433c4.877 0 7.518 3.454 6.299 8.33l-65.221 231.63c-.61 2.845-3.454 4.876-6.298 4.876h-5.487c-2.438 0-4.876-1.625-5.892-3.86l-63.19-141.009h-1.015L83.744 245.203c-1.016 2.032-3.454 3.86-5.892 3.86h-5.486c-2.845 0-5.486-2.031-6.299-4.876L.44 12.559Z"/></g></svg>',TV={"unused-css-rules":"Enable [Remove Unused CSS](https://docs.wp-rocket.me/article/1529-remove-unused-css) in 'WP Rocket' to fix this issue. It reduces page size by removing all CSS and stylesheets that are not used while keeping only the used CSS for each page.","modern-image-formats":"Enable 'Imagify' from the Image Optimization tab in 'WP Rocket' to convert your images to WebP.","unused-javascript":"Enable [Delay JavaScript execution](https://docs.wp-rocket.me/article/1349-delay-javascript-execution) in 'WP Rocket' to fix this problem. It will improve the loading of your page by delaying the execution of scripts until user interaction. If your site has iframes, you can use WP Rocket's [LazyLoad for iframes and videos](https://docs.wp-rocket.me/article/1674-lazyload-for-iframes-and-videos) and [Replace YouTube iframe with preview image](https://docs.wp-rocket.me/article/1488-replace-youtube-iframe-with-preview-image) as well.","render-blocking-resources":"Enable [Remove Unused CSS](https://docs.wp-rocket.me/article/1529-remove-unused-css) and [Load JavaScript deferred](https://docs.wp-rocket.me/article/1265-load-javascript-deferred) in 'WP Rocket' to address this recommendation. These features will respectively optimize the CSS and JavaScript files so that they don't block the rendering of your page.","unminified-css":"Enable [Minify CSS files](https://docs.wp-rocket.me/article/1350-css-minify-combine) in 'WP Rocket' to fix this issue. Any spaces and comments in your site's CSS files will be removed to make the file size smaller and faster to download.","unminified-javascript":"Enable [Minify JavaScript files](https://docs.wp-rocket.me/article/1351-javascript-minify-combine) in 'WP Rocket' to fix this issue. Empty spaces and comments will be removed from JavaScript files to make their size smaller and faster to download.","uses-optimized-images":"Enable 'Imagify' from the Image Optimization tab in 'WP Rocket' and run Bulk Optimization to compress your images.","uses-rel-preconnect":`Use [Prefetch DNS Requests](https://docs.wp-rocket.me/article/1302-prefetch-dns-requests) in 'WP Rocket' to add "dns-prefetch" and speed up the connection with external domains. Also, 'WP Rocket' automatically adds "preconnect" to [Google Fonts domain](https://docs.wp-rocket.me/article/1312-optimize-google-fonts) and any CNAME(S) added via the [Enable CDN](https://docs.wp-rocket.me/article/42-using-wp-rocket-with-a-cdn) feature.`,"uses-rel-preload":"To fix this issue for fonts, enable [Remove Unused CSS](https://docs.wp-rocket.me/article/1529-remove-unused-css) in 'WP Rocket'. Your site's critical fonts will be preloaded with priority.","offscreen-images":"Enable [LazyLoad](https://docs.wp-rocket.me/article/1141-lazyload-for-images) in WP Rocket to fix this recommendation. This feature delays the loading of the images until the visitor scrolls down the page and actually needs to see them."};lR.exports={id:"wp-rocket",title:"WP Rocket",icon:EV,UIStrings:TV}});var pR=L((nfe,mR)=>{d();var SV=[OF(),BF(),qF(),HF(),WF(),$F(),KF(),XF(),QF(),tR(),rR(),oR(),sR(),uR(),dR()];mR.exports=SV});var gR=L((afe,fR)=>{d();fR.exports=s(function(e,n){if(typeof e=="string"&&n[e])return e;for(var r=[].concat(e||[]),a=0,o=r.length;a<o;++a)for(var i=r[a].split("-");i.length;){var c=i.join("-");if(n[c])return c;i.pop()}},"lookupClosestLocale")});var Jm,xV,Xm,rs=v(()=>{"use strict";d();ca();Vo();Jm="",xV=JSON.parse(`{
+  "name": "lighthouse",
+  "type": "module",
+  "version": "11.0.0",
+  "description": "Automated auditing, performance metrics, and best practices for the web.",
+  "main": "./core/index.js",
+  "bin": {
+    "lighthouse": "./cli/index.js",
+    "chrome-debug": "./core/scripts/manual-chrome-launcher.js",
+    "smokehouse": "./cli/test/smokehouse/frontends/smokehouse-bin.js"
+  },
+  "engines": {
+    "node": ">=18.16"
+  },
+  "scripts": {
+    "prepack": "yarn build-report --standalone --flow --esm && yarn build-types",
+    "postpack": "yarn clean-types",
+    "build-all": "npm-run-posix-or-windows build-all:task",
+    "build-all:task": "yarn build-report && yarn build-cdt-lib && yarn build-devtools && concurrently 'yarn build-extension' 'yarn build-lr' 'yarn build-viewer' 'yarn build-treemap' 'yarn build-smokehouse-bundle' && yarn build-pack",
+    "build-all:task:windows": "yarn build-report && yarn build-cdt-lib && yarn build-extension && yarn build-devtools && yarn build-lr && yarn build-viewer && yarn build-treemap && yarn build-smokehouse-bundle",
+    "build-cdt-lib": "node ./build/build-cdt-lib.js",
+    "build-extension": "yarn build-extension-chrome && yarn build-extension-firefox",
+    "build-extension-chrome": "node ./build/build-extension.js chrome",
+    "build-extension-firefox": "node ./build/build-extension.js firefox",
+    "build-devtools": "yarn reset-link && node ./build/build-bundle.js clients/devtools/devtools-entry.js dist/lighthouse-dt-bundle.js && node ./build/build-dt-report-resources.js",
+    "build-smokehouse-bundle": "node ./build/build-smokehouse-bundle.js",
+    "build-lr": "yarn reset-link && node --max-old-space-size=4096 ./build/build-lightrider-bundles.js",
+    "build-pack": "bash build/build-pack.sh",
+    "build-report": "node build/build-report-components.js && node build/build-report.js",
+    "build-sample-reports": "yarn build-report && node build/build-sample-reports.js",
+    "build-treemap": "node ./build/build-treemap.js",
+    "build-viewer": "node ./build/build-viewer.js",
+    "build-types": "yarn type-check && rsync -a .tmp/tsbuildinfo/ ./ --include='*.d.ts' --include='*.d.cts' --exclude='*.map' --exclude='*.tsbuildinfo'",
+    "reset-link": "(yarn unlink || true) && yarn link && yarn link lighthouse",
+    "c8": "bash core/scripts/c8.sh",
+    "clean": "rm -r dist proto/scripts/*.json proto/scripts/*_pb2.* proto/scripts/*_pb.* proto/scripts/__pycache__ proto/scripts/*.pyc *.report.html *.report.dom.html *.report.json *.devtoolslog.json *.trace.json shared/localization/locales/*.ctc.json || true",
+    "clean-types": "git clean -xfq '*.d.ts' '*.d.cts' -e 'node_modules/' -e 'dist/' -e '.tmp/' -e '**/types/'",
+    "lint": "[ \\"$CI\\" = true ] && eslint --quiet -f codeframe . || eslint .",
+    "smoke": "node cli/test/smokehouse/frontends/smokehouse-bin.js",
+    "debug": "node --inspect-brk ./cli/index.js",
+    "start": "yarn build-report --standalone && node ./cli/index.js",
+    "mocha": "node --loader=testdouble core/test/scripts/run-mocha-tests.js",
+    "test": "yarn diff:sample-json && yarn lint --quiet && yarn unit && yarn type-check",
+    "test-bundle": "yarn smoke --runner bundle",
+    "test-clients": "yarn mocha --testMatch clients/**/*-test.js && yarn mocha --testMatch clients/**/*-test-pptr.js",
+    "test-viewer": "yarn unit-viewer && yarn mocha --testMatch viewer/**/*-test-pptr.js --timeout 35000",
+    "test-treemap": "yarn unit-treemap && yarn mocha --testMatch treemap/**/*-test-pptr.js --timeout 35000",
+    "test-lantern": "bash core/scripts/test-lantern.sh",
+    "test-legacy-javascript": "bash core/scripts/test-legacy-javascript.sh",
+    "test-docs": "yarn --cwd docs/recipes/ test",
+    "test-proto": "yarn compile-proto && yarn build-proto-roundtrip",
+    "unit-core": "yarn mocha core",
+    "unit-cli": "yarn mocha --testMatch cli/**/*-test.js",
+    "unit-report": "yarn mocha --testMatch report/**/*-test.js",
+    "unit-treemap": "yarn mocha --testMatch treemap/**/*-test.js",
+    "unit-viewer": "yarn mocha --testMatch viewer/**/*-test.js",
+    "unit-flow": "bash flow-report/test/run-flow-report-tests.sh",
+    "unit": "yarn unit-flow && yarn mocha",
+    "unit:ci": "NODE_OPTIONS=--max-old-space-size=8192 npm run unit --forbid-only",
+    "core-unit": "yarn unit-core",
+    "cli-unit": "yarn unit-cli",
+    "viewer-unit": "yarn unit-viewer",
+    "watch": "yarn unit-core --watch",
+    "unit:cicoverage": "yarn c8 --all yarn unit:ci",
+    "coverage": "yarn unit:cicoverage && c8 report --reporter html",
+    "coverage:smoke": "yarn c8 yarn smoke -j=1 && c8 report --reporter html",
+    "devtools": "bash core/scripts/roll-to-devtools.sh",
+    "chrome": "node core/scripts/manual-chrome-launcher.js",
+    "fast": "node ./cli/index.js --preset=desktop --throttlingMethod=provided",
+    "deploy-treemap": "yarn build-treemap --deploy",
+    "deploy-viewer": "yarn build-viewer --deploy",
+    "vercel-build": "yarn build-sample-reports && yarn build-viewer && yarn build-treemap",
+    "dogfood-lhci": "./core/scripts/dogfood-lhci.sh",
+    "timing-trace": "node core/scripts/generate-timing-trace.js",
+    "changelog": "conventional-changelog --config ./build/changelog-generator/index.cjs --infile changelog.md --same-file",
+    "type-check": "tsc --build ./tsconfig-all.json",
+    "i18n:checks": "./core/scripts/i18n/assert-strings-collected.sh",
+    "i18n:collect-strings": "node core/scripts/i18n/collect-strings.js",
+    "update:lantern-baseline": "node core/scripts/lantern/update-baseline-lantern-values.js",
+    "update:sample-artifacts": "node core/scripts/update-report-fixtures.js",
+    "update:sample-json": "yarn i18n:collect-strings && node ./cli -A=./core/test/results/artifacts --config-path=./core/test/results/sample-config.js --output=json --output-path=./core/test/results/sample_v2.json && node core/scripts/cleanup-LHR-for-diff.js ./core/test/results/sample_v2.json --only-remove-timing && node ./core/scripts/update-flow-fixtures.js",
+    "update:flow-sample-json": "yarn i18n:collect-strings && node ./core/scripts/update-flow-fixtures.js",
+    "test-devtools": "bash core/test/devtools-tests/test-locally.sh",
+    "open-devtools": "bash core/scripts/open-devtools.sh",
+    "run-devtools": "node core/scripts/pptr-run-devtools.js",
+    "diff:sample-json": "yarn i18n:checks && bash core/scripts/assert-golden-lhr-unchanged.sh",
+    "diff:flow-sample-json": "yarn i18n:collect-strings && bash core/scripts/assert-baseline-flow-result-unchanged.sh",
+    "computeBenchmarkIndex": "./core/scripts/benchmark.js",
+    "save-latest-run": "./core/scripts/save-latest-run.sh",
+    "compile-proto": "protoc --python_out=./ ./proto/lighthouse-result.proto && mv ./proto/*_pb2.py ./proto/scripts || (echo \\"❌ Install protobuf = 3.20.x to compile the proto file.\\" && false)",
+    "build-proto-roundtrip": "mkdir -p .tmp && python3 proto/scripts/json_roundtrip_via_proto.py",
+    "static-server": "node cli/test/fixtures/static-server.js",
+    "serve-dist": "cd dist && python3 -m http.server 7878",
+    "serve-gh-pages": "cd dist/gh-pages && python3 -m http.server 7333",
+    "serve-treemap": "yarn serve-gh-pages",
+    "serve-viewer": "yarn serve-gh-pages",
+    "flow-report": "yarn build-report --flow && node ./core/scripts/build-test-flow-report.js"
+  },
+  "devDependencies": {
+    "@build-tracker/cli": "^1.0.0-beta.15",
+    "@esbuild-kit/esm-loader": "^2.1.1",
+    "@esbuild-plugins/node-modules-polyfill": "^0.1.4",
+    "@jest/fake-timers": "^28.1.0",
+    "@testing-library/preact": "^3.1.1",
+    "@testing-library/preact-hooks": "^1.1.0",
+    "@types/archiver": "^2.1.2",
+    "@types/chrome": "^0.0.154",
+    "@types/configstore": "^4.0.0",
+    "@types/cpy": "^5.1.0",
+    "@types/debug": "^4.1.7",
+    "@types/eslint": "^8.2.1",
+    "@types/estree": "^0.0.50",
+    "@types/gh-pages": "^2.0.0",
+    "@types/google.analytics": "0.0.39",
+    "@types/jpeg-js": "^0.3.7",
+    "@types/jsdom": "^16.2.13",
+    "@types/lodash": "^4.14.178",
+    "@types/mocha": "^9.0.0",
+    "@types/node": "*",
+    "@types/pako": "^1.0.1",
+    "@types/resize-observer-browser": "^0.1.1",
+    "@types/resolve": "^1.20.2",
+    "@types/semver": "^5.5.0",
+    "@types/tabulator-tables": "^4.9.1",
+    "@types/ws": "^7.0.0",
+    "@types/yargs": "^17.0.8",
+    "@types/yargs-parser": "^20.2.1",
+    "@typescript-eslint/eslint-plugin": "^5.48.0",
+    "@typescript-eslint/parser": "^5.48.0",
+    "acorn": "^8.5.0",
+    "angular": "^1.7.4",
+    "archiver": "^3.0.0",
+    "builtin-modules": "^3.3.0",
+    "c8": "^7.11.3",
+    "chalk": "^2.4.1",
+    "chrome-devtools-frontend": "1.0.1153166",
+    "concurrently": "^6.4.0",
+    "conventional-changelog-cli": "^2.1.1",
+    "cpy": "^8.1.2",
+    "cross-env": "^7.0.2",
+    "csv-validator": "^0.0.3",
+    "es-main": "^1.2.0",
+    "esbuild": "^0.18.11",
+    "eslint": "^8.4.1",
+    "eslint-config-google": "^0.14.0",
+    "eslint-formatter-codeframe": "^7.32.1",
+    "eslint-plugin-import": "^2.25.3",
+    "eslint-plugin-local-rules": "1.1.0",
+    "event-target-shim": "^6.0.2",
+    "expect": "^28.1.0",
+    "firebase": "^9.0.2",
+    "gh-pages": "^2.0.1",
+    "glob": "^7.1.3",
+    "idb-keyval": "2.2.0",
+    "intl-messageformat-parser": "^1.8.1",
+    "jest-mock": "^27.3.0",
+    "jest-snapshot": "^28.1.0",
+    "jsdom": "^12.2.0",
+    "lighthouse-plugin-publisher-ads": "1.5.7-beta",
+    "lighthouse-plugin-soft-navigation": "^1.0.1",
+    "magic-string": "^0.25.7",
+    "mime-types": "^2.1.30",
+    "mocha": "^10.0.0",
+    "node-fetch": "^2.6.1",
+    "npm-run-posix-or-windows": "^2.0.2",
+    "pako": "^2.0.3",
+    "preact": "^10.7.2",
+    "pretty-json-stringify": "^0.0.2",
+    "puppeteer": "^21.0.1",
+    "resolve": "^1.22.1",
+    "rollup": "^2.52.7",
+    "rollup-plugin-polyfill-node": "^0.12.0",
+    "tabulator-tables": "^4.9.3",
+    "terser": "^5.18.2",
+    "testdouble": "^3.18.0",
+    "typed-query-selector": "^2.6.1",
+    "typescript": "^5.0.4",
+    "wait-for-expect": "^3.0.2",
+    "webtreemap-cdt": "^3.2.1"
+  },
+  "dependencies": {
+    "@sentry/node": "^6.17.4",
+    "axe-core": "4.7.2",
+    "chrome-launcher": "^1.0.0",
+    "configstore": "^5.0.1",
+    "csp_evaluator": "1.1.1",
+    "devtools-protocol": "0.0.1155343",
+    "enquirer": "^2.3.6",
+    "http-link-header": "^1.1.1",
+    "intl-messageformat": "^4.4.0",
+    "jpeg-js": "^0.4.4",
+    "js-library-detector": "^6.7.0",
+    "lighthouse-logger": "^2.0.1",
+    "lighthouse-stack-packs": "1.12.0",
+    "lodash": "^4.17.21",
+    "lookup-closest-locale": "6.2.0",
+    "metaviewport-parser": "0.3.0",
+    "open": "^8.4.0",
+    "parse-cache-control": "1.0.1",
+    "ps-list": "^8.0.0",
+    "puppeteer-core": "^21.0.1",
+    "robots-parser": "^3.0.1",
+    "semver": "^5.3.0",
+    "speedline-core": "^1.4.3",
+    "third-party-web": "^0.23.3",
+    "ws": "^7.0.0",
+    "yargs": "^17.3.1",
+    "yargs-parser": "^21.0.0"
+  },
+  "resolutions": {
+    "puppeteer/**/devtools-protocol": "0.0.1155343",
+    "puppeteer-core/**/devtools-protocol": "0.0.1155343"
+  },
+  "repository": "GoogleChrome/lighthouse",
+  "keywords": [
+    "google",
+    "chrome",
+    "devtools"
+  ],
+  "author": "The Lighthouse Authors",
+  "license": "Apache-2.0",
+  "bugs": {
+    "url": "https://github.com/GoogleChrome/lighthouse/issues"
+  },
+  "homepage": "https://github.com/GoogleChrome/lighthouse#readme"
+}
+`),Xm=xV.version});function Zm(t,e){if(typeof Intl!="object")throw new Error("Lighthouse must be run in Node with `Intl` support. See https://nodejs.org/api/intl.html for help");let n=Intl.getCanonicalLocales(t),r=Intl.NumberFormat.supportedLocalesOf(n),a=e||NF(),o=Object.fromEntries(a.map(c=>[c,{}])),i=(0,hR.default)(r,o);return i||(Intl.NumberFormat.supportedLocalesOf("es").length===0&&N.warn("i18n","Requested locale not available in this version of node. The `full-icu` npm module can provide additional locales. For help, see https://github.com/GoogleChrome/lighthouse/blob/main/readme.md#how-do-i-get-localized-lighthouse-results-via-the-cli"),N.warn("i18n",`locale(s) '${t}' not available. Falling back to default '${ts}'`)),i||ts}function w(t,e){t.startsWith("file://")&&(t=Wo.fileURLToPath(t)),Ot.isAbsolute(t)&&(t=Ot.relative(Jm,t));let n={...x,...e};return s((a,o)=>{let i=Object.keys(n).find(m=>n[m]===a);if(!i)throw new Error(`Could not locate: ${a}`);return{i18nId:`${(i in e?t:Ot.relative(Jm,SF({url:"core/lib/i18n/i18n.js"}))).replace(/\\/g,"/")} | ${i}`,values:o,formattedDefault:Eg(a,o,ts)}},"getIcuMessageFn")}function _r(t){return typeof t=="string"||ns(t)}var hR,x,k=v(()=>{"use strict";d();qo();lu();hR=zt(gR(),1);He();la();rs();la();Vo();x={ms:"{timeInMs, number, milliseconds} ms",seconds:"{timeInMs, number, seconds} s",displayValueByteSavings:"Potential savings of {wastedBytes, number, bytes} KiB",displayValueMsSavings:"Potential savings of {wastedMs, number, milliseconds} ms",displayValueElementsFound:"{nodeCount, plural, =1 {1 element found} other {# elements found}}",columnURL:"URL",columnSize:"Size",columnResourceSize:"Resource Size",columnTransferSize:"Transfer Size",columnCacheTTL:"Cache TTL",columnWastedBytes:"Potential Savings",columnWastedMs:"Potential Savings",columnBlockingTime:"Main-Thread Blocking Time",columnTimeSpent:"Time Spent",columnLocation:"Location",columnResourceType:"Resource Type",columnRequests:"Requests",columnName:"Name",columnSource:"Source",columnOverBudget:"Over Budget",columnElement:"Element",columnStartTime:"Start Time",columnDuration:"Duration",columnFailingElem:"Failing Elements",columnDescription:"Description",totalResourceType:"Total",documentResourceType:"Document",scriptResourceType:"Script",stylesheetResourceType:"Stylesheet",imageResourceType:"Image",mediaResourceType:"Media",fontResourceType:"Font",otherResourceType:"Other",thirdPartyResourceType:"Third-party",otherResourcesLabel:"Other resources",firstContentfulPaintMetric:"First Contentful Paint",interactiveMetric:"Time to Interactive",firstMeaningfulPaintMetric:"First Meaningful Paint",totalBlockingTimeMetric:"Total Blocking Time",maxPotentialFIDMetric:"Max Potential First Input Delay",speedIndexMetric:"Speed Index",largestContentfulPaintMetric:"Largest Contentful Paint",cumulativeLayoutShiftMetric:"Cumulative Layout Shift",interactionToNextPaint:"Interaction to Next Paint",itemSeverityLow:"Low",itemSeverityMedium:"Medium",itemSeverityHigh:"High"};s(Zm,"lookupLocale");s(w,"createIcuMessageFn");s(_r,"isStringOrIcuMessage")});function vR(t){if(!t)return[];let e=[];for(let n of t){let r=xg.find(u=>u.requiredStacks.includes(`${n.detector}:${n.id}`));if(!r)continue;let a=yR.default.find(u=>u.id===r.packId);if(!a){N.warn("StackPacks",`'${r.packId}' stack pack was matched but is not found in stack-packs lib`);continue}let o=w(`node_modules/lighthouse-stack-packs/packs/${a.id}.js`,a.UIStrings),i={},c=a.UIStrings;for(let u in c)c[u]&&(i[u]=o(c[u]));e.push({id:a.id,title:a.title,iconDataURL:a.icon,descriptions:i})}return e.sort((n,r)=>{let a=xg.findIndex(i=>i.packId===n.id),o=xg.findIndex(i=>i.packId===r.id);return a-o})}var yR,xg,bR=v(()=>{"use strict";d();He();yR=zt(pR(),1);k();xg=[{packId:"gatsby",requiredStacks:["js:gatsby"]},{packId:"wordpress",requiredStacks:["js:wordpress"]},{packId:"wix",requiredStacks:["js:wix"]},{packId:"wp-rocket",requiredStacks:["js:wp-rocket"]},{packId:"ezoic",requiredStacks:["js:ezoic"]},{packId:"drupal",requiredStacks:["js:drupal"]},{packId:"nitropack",requiredStacks:["js:nitropack"]},{packId:"amp",requiredStacks:["js:amp"]},{packId:"magento",requiredStacks:["js:magento"]},{packId:"octobercms",requiredStacks:["js:octobercms"]},{packId:"joomla",requiredStacks:["js:joomla"]},{packId:"next.js",requiredStacks:["js:next"]},{packId:"nuxt",requiredStacks:["js:nuxt"]},{packId:"angular",requiredStacks:["js:@angular/core"]},{packId:"react",requiredStacks:["js:react"]}];s(vR,"getStackPacks")});var Cg,Ut,wR=v(()=>{d();typeof Object.create=="function"?Cg=s(function(e,n){e.super_=n,e.prototype=Object.create(n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},"inherits"):Cg=s(function(e,n){e.super_=n;var r=s(function(){},"TempCtor");r.prototype=n.prototype,e.prototype=new r,e.prototype.constructor=e},"inherits");Ut=Cg});function RV(t){if(!Lg(t)){for(var e=[],n=0;n<arguments.length;n++)e.push(Ha(arguments[n]));return e.join(" ")}for(var n=1,r=arguments,a=r.length,o=String(t).replace(FV,function(c){if(c==="%%")return"%";if(n>=a)return c;switch(c){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch{return"[Circular]"}default:return c}}),i=r[n];n<a;i=r[++n])Ng(i)||!du(i)?o+=" "+i:o+=" "+Ha(i);return o}function Mg(t,e){if(za(globalThis.process))return function(){return Mg(t,e).apply(this,arguments)};if(pn.noDeprecation===!0)return t;var n=!1;function r(){if(!n){if(pn.throwDeprecation)throw new Error(e);pn.traceDeprecation?console.trace(e):console.error(e),n=!0}return t.apply(this,arguments)}return s(r,"deprecated"),r}function ER(t){if(za(Ag)&&(Ag=pn.env.NODE_DEBUG||""),t=t.toUpperCase(),!Qm[t])if(new RegExp("\\b"+t+"\\b","i").test(Ag)){var e=0;Qm[t]=function(){var n=RV.apply(null,arguments);console.error("%s %d: %s",t,e,n)}}else Qm[t]=function(){};return Qm[t]}function Ha(t,e){var n={seen:[],stylize:kV};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),TR(e)?n.showHidden=e:e&&UV(n,e),za(n.showHidden)&&(n.showHidden=!1),za(n.depth)&&(n.depth=2),za(n.colors)&&(n.colors=!1),za(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=_V),ep(n,t,n.depth)}function _V(t,e){var n=Ha.styles[e];return n?"\x1B["+Ha.colors[n][0]+"m"+t+"\x1B["+Ha.colors[n][1]+"m":t}function kV(t,e){return t}function IV(t){var e={};return t.forEach(function(n,r){e[n]=!0}),e}function ep(t,e,n){if(t.customInspect&&e&&kg(e.inspect)&&e.inspect!==Ha&&!(e.constructor&&e.constructor.prototype===e)){var r=e.inspect(n,t);return Lg(r)||(r=ep(t,r,n)),r}var a=MV(t,e);if(a)return a;var o=Object.keys(e),i=IV(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(e)),_g(e)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return Fg(e);if(o.length===0){if(kg(e)){var c=e.name?": "+e.name:"";return t.stylize("[Function"+c+"]","special")}if(Rg(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(DR(e))return t.stylize(Date.prototype.toString.call(e),"date");if(_g(e))return Fg(e)}var u="",l=!1,m=["{","}"];if(PV(e)&&(l=!0,m=["[","]"]),kg(e)){var p=e.name?": "+e.name:"";u=" [Function"+p+"]"}if(Rg(e)&&(u=" "+RegExp.prototype.toString.call(e)),DR(e)&&(u=" "+Date.prototype.toUTCString.call(e)),_g(e)&&(u=" "+Fg(e)),o.length===0&&(!l||e.length==0))return m[0]+u+m[1];if(n<0)return Rg(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special");t.seen.push(e);var g;return l?g=NV(t,e,n,i,o):g=o.map(function(f){return Ig(t,e,n,i,f,l)}),t.seen.pop(),LV(g,u,m)}function MV(t,e){if(za(e))return t.stylize("undefined","undefined");if(Lg(e)){var n="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(n,"string")}if(OV(e))return t.stylize(""+e,"number");if(TR(e))return t.stylize(""+e,"boolean");if(Ng(e))return t.stylize("null","null")}function Fg(t){return"["+Error.prototype.toString.call(t)+"]"}function NV(t,e,n,r,a){for(var o=[],i=0,c=e.length;i<c;++i)SR(e,String(i))?o.push(Ig(t,e,n,r,String(i),!0)):o.push("");return a.forEach(function(u){u.match(/^\d+$/)||o.push(Ig(t,e,n,r,u,!0))}),o}function Ig(t,e,n,r,a,o){var i,c,u;if(u=Object.getOwnPropertyDescriptor(e,a)||{value:e[a]},u.get?u.set?c=t.stylize("[Getter/Setter]","special"):c=t.stylize("[Getter]","special"):u.set&&(c=t.stylize("[Setter]","special")),SR(r,a)||(i="["+a+"]"),c||(t.seen.indexOf(u.value)<0?(Ng(n)?c=ep(t,u.value,null):c=ep(t,u.value,n-1),c.indexOf(`
+`)>-1&&(o?c=c.split(`
+`).map(function(l){return"  "+l}).join(`
+`).substr(2):c=`
+`+c.split(`
+`).map(function(l){return"   "+l}).join(`
+`))):c=t.stylize("[Circular]","special")),za(i)){if(o&&a.match(/^\d+$/))return c;i=JSON.stringify(""+a),i.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(i=i.substr(1,i.length-2),i=t.stylize(i,"name")):(i=i.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),i=t.stylize(i,"string"))}return i+": "+c}function LV(t,e,n){var r=0,a=t.reduce(function(o,i){return r++,i.indexOf(`
+`)>=0&&r++,o+i.replace(/\u001b\[\d\d?m/g,"").length+1},0);return a>60?n[0]+(e===""?"":e+`
+ `)+" "+t.join(`,
+  `)+" "+n[1]:n[0]+e+" "+t.join(", ")+" "+n[1]}function PV(t){return Array.isArray(t)}function TR(t){return typeof t=="boolean"}function Ng(t){return t===null}function OV(t){return typeof t=="number"}function Lg(t){return typeof t=="string"}function za(t){return t===void 0}function Rg(t){return du(t)&&Pg(t)==="[object RegExp]"}function du(t){return typeof t=="object"&&t!==null}function DR(t){return du(t)&&Pg(t)==="[object Date]"}function _g(t){return du(t)&&(Pg(t)==="[object Error]"||t instanceof Error)}function kg(t){return typeof t=="function"}function Pg(t){return Object.prototype.toString.call(t)}function UV(t,e){if(!e||!du(e))return t;for(var n=Object.keys(e),r=n.length;r--;)t[n[r]]=e[n[r]];return t}function SR(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function BV(t){if(typeof t!="function")throw new TypeError('The "original" argument must be of type Function');if(Yo&&t[Yo]){var e=t[Yo];if(typeof e!="function")throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(e,Yo,{value:e,enumerable:!1,writable:!1,configurable:!0}),e}function e(){for(var n,r,a=new Promise(function(c,u){n=c,r=u}),o=[],i=0;i<arguments.length;i++)o.push(arguments[i]);o.push(function(c,u){c?r(c):n(u)});try{t.apply(this,o)}catch(c){r(c)}return a}return s(e,"fn"),Object.setPrototypeOf(e,Object.getPrototypeOf(t)),Yo&&Object.defineProperty(e,Yo,{value:e,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(e,AV(t))}var AV,FV,Qm,Ag,Yo,Ga=v(()=>{d();Ua();wR();AV=Object.getOwnPropertyDescriptors||s(function(e){for(var n=Object.keys(e),r={},a=0;a<n.length;a++)r[n[a]]=Object.getOwnPropertyDescriptor(e,n[a]);return r},"getOwnPropertyDescriptors"),FV=/%[sdj%]/g;s(RV,"format");s(Mg,"deprecate");Qm={};s(ER,"debuglog");s(Ha,"inspect");Ha.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};Ha.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};s(_V,"stylizeWithColor");s(kV,"stylizeNoColor");s(IV,"arrayToHash");s(ep,"formatValue");s(MV,"formatPrimitive");s(Fg,"formatError");s(NV,"formatArray");s(Ig,"formatProperty");s(LV,"reduceToSingleString");s(PV,"isArray");s(TR,"isBoolean");s(Ng,"isNull");s(OV,"isNumber");s(Lg,"isString");s(za,"isUndefined");s(Rg,"isRegExp");s(du,"isObject");s(DR,"isDate");s(_g,"isError");s(kg,"isFunction");s(Pg,"objectToString");s(UV,"_extend");s(SR,"hasOwnProperty");Yo=typeof Symbol<"u"?Symbol("util.promisify.custom"):void 0;s(BV,"promisify");BV.custom=Yo});function Ko(){this.head=null,this.tail=null,this.length=0}var xR,CR=v(()=>{d();Bi();xR=Ko;s(Ko,"BufferList");Ko.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length};Ko.prototype.unshift=function(t){var e={data:t,next:this.head};this.length===0&&(this.tail=e),this.head=e,++this.length};Ko.prototype.shift=function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}};Ko.prototype.clear=function(){this.head=this.tail=null,this.length=0};Ko.prototype.join=function(t){if(this.length===0)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n};Ko.prototype.concat=function(t){if(this.length===0)return H.alloc(0);if(this.length===1)return this.head.data;for(var e=H.allocUnsafe(t>>>0),n=this.head,r=0;n;)n.data.copy(e,r),r+=n.data.length,n=n.next;return e}});function qV(t){if(t&&!jV(t))throw new Error("Unknown encoding: "+t)}function as(t){switch(this.encoding=(t||"utf8").toLowerCase().replace(/[-_]/,""),qV(t),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=HV;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=GV;break;default:this.write=zV;return}this.charBuffer=new H(6),this.charReceived=0,this.charLength=0}function zV(t){return t.toString(this.encoding)}function HV(t){this.charReceived=t.length%2,this.charLength=this.charReceived?2:0}function GV(t){this.charReceived=t.length%3,this.charLength=this.charReceived?3:0}var jV,AR=v(()=>{d();Bi();jV=H.isEncoding||function(t){switch(t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};s(qV,"assertEncoding");s(as,"StringDecoder");as.prototype.write=function(t){for(var e="";this.charLength;){var n=t.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,n),this.charReceived+=n,this.charReceived<this.charLength)return"";t=t.slice(n,t.length),e=this.charBuffer.slice(0,this.charLength).toString(this.encoding);var a=e.charCodeAt(e.length-1);if(a>=55296&&a<=56319){this.charLength+=this.surrogateSize,e="";continue}if(this.charReceived=this.charLength=0,t.length===0)return e;break}this.detectIncompleteChar(t);var r=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,r),r-=this.charReceived),e+=t.toString(this.encoding,0,r);var r=e.length-1,a=e.charCodeAt(r);if(a>=55296&&a<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,r)}return e};as.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var n=t[t.length-e];if(e==1&&n>>5==6){this.charLength=2;break}if(e<=2&&n>>4==14){this.charLength=3;break}if(e<=3&&n>>3==30){this.charLength=4;break}}this.charReceived=e};as.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var n=this.charReceived,r=this.charBuffer,a=this.encoding;e+=r.slice(0,n).toString(a)}return e};s(zV,"passThroughWrite");s(HV,"utf16DetectIncompleteChar");s(GV,"base64DetectIncompleteChar")});function WV(t,e,n){if(typeof t.prependListener=="function")return t.prependListener(e,n);!t._events||!t._events[e]?t.on(e,n):Array.isArray(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]}function VV(t,e){return t.listeners(e).length}function kR(t,e){t=t||{},this.objectMode=!!t.objectMode,e instanceof fn&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var n=t.highWaterMark,r=this.objectMode?16:16*1024;this.highWaterMark=n||n===0?n:r,this.highWaterMark=~~this.highWaterMark,this.buffer=new xR,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(this.decoder=new as(t.encoding),this.encoding=t.encoding)}function _t(t){if(!(this instanceof _t))return new _t(t);this._readableState=new kR(t,this),this.readable=!0,t&&typeof t.read=="function"&&(this._read=t.read),Zn.call(this)}function IR(t,e,n,r,a){var o=KV(e,n);if(o)t.emit("error",o);else if(n===null)e.reading=!1,JV(t,e);else if(e.objectMode||n&&n.length>0)if(e.ended&&!a){var i=new Error("stream.push() after EOF");t.emit("error",i)}else if(e.endEmitted&&a){var c=new Error("stream.unshift() after end event");t.emit("error",c)}else{var u;e.decoder&&!a&&!r&&(n=e.decoder.write(n),u=!e.objectMode&&n.length===0),a||(e.reading=!1),u||(e.flowing&&e.length===0&&!e.sync?(t.emit("data",n),t.read(0)):(e.length+=e.objectMode?1:n.length,a?e.buffer.unshift(n):e.buffer.push(n),e.needReadable&&tp(t))),XV(t,e)}else a||(e.reading=!1);return $V(e)}function $V(t){return!t.ended&&(t.needReadable||t.length<t.highWaterMark||t.length===0)}function YV(t){return t>=FR?t=FR:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function RR(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=YV(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function KV(t,e){var n=null;return!Buffer.isBuffer(e)&&typeof e!="string"&&e!==null&&e!==void 0&&!t.objectMode&&(n=new TypeError("Invalid non-string/buffer chunk")),n}function JV(t,e){if(!e.ended){if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,tp(t)}}function tp(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(pt("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?mn(_R,t):_R(t))}function _R(t){pt("emit readable"),t.emit("readable"),Ug(t)}function XV(t,e){e.readingMore||(e.readingMore=!0,mn(ZV,t,e))}function ZV(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length<e.highWaterMark&&(pt("maybeReadMore read 0"),t.read(0),n!==e.length);)n=e.length;e.readingMore=!1}function QV(t){return function(){var e=t._readableState;pt("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,e.awaitDrain===0&&t.listeners("data").length&&(e.flowing=!0,Ug(t))}}function e$(t){pt("readable nexttick read 0"),t.read(0)}function t$(t,e){e.resumeScheduled||(e.resumeScheduled=!0,mn(n$,t,e))}function n$(t,e){e.reading||(pt("resume read 0"),t.read(0)),e.resumeScheduled=!1,e.awaitDrain=0,t.emit("resume"),Ug(t),e.flowing&&!e.reading&&t.read(0)}function Ug(t){var e=t._readableState;for(pt("flow",e.flowing);e.flowing&&t.read()!==null;);}function MR(t,e){if(e.length===0)return null;var n;return e.objectMode?n=e.buffer.shift():!t||t>=e.length?(e.decoder?n=e.buffer.join(""):e.buffer.length===1?n=e.buffer.head.data:n=e.buffer.concat(e.length),e.buffer.clear()):n=r$(t,e.buffer,e.decoder),n}function r$(t,e,n){var r;return t<e.head.data.length?(r=e.head.data.slice(0,t),e.head.data=e.head.data.slice(t)):t===e.head.data.length?r=e.shift():r=n?a$(t,e):o$(t,e),r}function a$(t,e){var n=e.head,r=1,a=n.data;for(t-=a.length;n=n.next;){var o=n.data,i=t>o.length?o.length:t;if(i===o.length?a+=o:a+=o.slice(0,t),t-=i,t===0){i===o.length?(++r,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(i));break}++r}return e.length-=r,a}function o$(t,e){var n=Buffer.allocUnsafe(t),r=e.head,a=1;for(r.data.copy(n),t-=r.data.length;r=r.next;){var o=r.data,i=t>o.length?o.length:t;if(o.copy(n,n.length-t,0,i),t-=i,t===0){i===o.length?(++a,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(i));break}++a}return e.length-=a,n}function Og(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,mn(i$,e,t))}function i$(t,e){!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function s$(t,e){for(var n=0,r=t.length;n<r;n++)e(t[n],n)}function NR(t,e){for(var n=0,r=t.length;n<r;n++)if(t[n]===e)return n;return-1}var pt,FR,Bg=v(()=>{"use strict";d();ia();Ga();CR();AR();mu();Ua();_t.ReadableState=kR;pt=ER("stream");Ut(_t,Zn);s(WV,"prependListener");s(VV,"listenerCount");s(kR,"ReadableState");s(_t,"Readable");_t.prototype.push=function(t,e){var n=this._readableState;return!n.objectMode&&typeof t=="string"&&(e=e||n.defaultEncoding,e!==n.encoding&&(t=Buffer.from(t,e),e="")),IR(this,n,t,e,!1)};_t.prototype.unshift=function(t){var e=this._readableState;return IR(this,e,t,"",!0)};_t.prototype.isPaused=function(){return this._readableState.flowing===!1};s(IR,"readableAddChunk");s($V,"needMoreData");_t.prototype.setEncoding=function(t){return this._readableState.decoder=new as(t),this._readableState.encoding=t,this};FR=8388608;s(YV,"computeNewHighWaterMark");s(RR,"howMuchToRead");_t.prototype.read=function(t){pt("read",t),t=parseInt(t,10);var e=this._readableState,n=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&(e.length>=e.highWaterMark||e.ended))return pt("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Og(this):tp(this),null;if(t=RR(t,e),t===0&&e.ended)return e.length===0&&Og(this),null;var r=e.needReadable;pt("need readable",r),(e.length===0||e.length-t<e.highWaterMark)&&(r=!0,pt("length less than watermark",r)),e.ended||e.reading?(r=!1,pt("reading or ended",r)):r&&(pt("do read"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=RR(n,e)));var a;return t>0?a=MR(t,e):a=null,a===null?(e.needReadable=!0,t=0):e.length-=t,e.length===0&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&Og(this)),a!==null&&this.emit("data",a),a};s(KV,"chunkInvalid");s(JV,"onEofChunk");s(tp,"emitReadable");s(_R,"emitReadable_");s(XV,"maybeReadMore");s(ZV,"maybeReadMore_");_t.prototype._read=function(t){this.emit("error",new Error("not implemented"))};_t.prototype.pipe=function(t,e){var n=this,r=this._readableState;switch(r.pipesCount){case 0:r.pipes=t;break;case 1:r.pipes=[r.pipes,t];break;default:r.pipes.push(t);break}r.pipesCount+=1,pt("pipe count=%d opts=%j",r.pipesCount,e);var a=!e||e.end!==!1,o=a?c:m;r.endEmitted?mn(o):n.once("end",o),t.on("unpipe",i);function i(T){pt("onunpipe"),T===n&&m()}s(i,"onunpipe");function c(){pt("onend"),t.end()}s(c,"onend");var u=QV(n);t.on("drain",u);var l=!1;function m(){pt("cleanup"),t.removeListener("close",y),t.removeListener("finish",b),t.removeListener("drain",u),t.removeListener("error",f),t.removeListener("unpipe",i),n.removeListener("end",c),n.removeListener("end",m),n.removeListener("data",g),l=!0,r.awaitDrain&&(!t._writableState||t._writableState.needDrain)&&u()}s(m,"cleanup");var p=!1;n.on("data",g);function g(T){pt("ondata"),p=!1;var A=t.write(T);A===!1&&!p&&((r.pipesCount===1&&r.pipes===t||r.pipesCount>1&&NR(r.pipes,t)!==-1)&&!l&&(pt("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,p=!0),n.pause())}s(g,"ondata");function f(T){pt("onerror",T),D(),t.removeListener("error",f),VV(t,"error")===0&&t.emit("error",T)}s(f,"onerror"),WV(t,"error",f);function y(){t.removeListener("finish",b),D()}s(y,"onclose"),t.once("close",y);function b(){pt("onfinish"),t.removeListener("close",y),D()}s(b,"onfinish"),t.once("finish",b);function D(){pt("unpipe"),n.unpipe(t)}return s(D,"unpipe"),t.emit("pipe",n),r.flowing||(pt("pipe resume"),n.resume()),t};s(QV,"pipeOnDrain");_t.prototype.unpipe=function(t){var e=this._readableState;if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this),this);if(!t){var n=e.pipes,r=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var a=0;a<r;a++)n[a].emit("unpipe",this);return this}var o=NR(e.pipes,t);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),t.emit("unpipe",this),this)};_t.prototype.on=function(t,e){var n=Zn.prototype.on.call(this,t,e);if(t==="data")this._readableState.flowing!==!1&&this.resume();else if(t==="readable"){var r=this._readableState;!r.endEmitted&&!r.readableListening&&(r.readableListening=r.needReadable=!0,r.emittedReadable=!1,r.reading?r.length&&tp(this,r):mn(e$,this))}return n};_t.prototype.addListener=_t.prototype.on;s(e$,"nReadingNextTick");_t.prototype.resume=function(){var t=this._readableState;return t.flowing||(pt("resume"),t.flowing=!0,t$(this,t)),this};s(t$,"resume");s(n$,"resume_");_t.prototype.pause=function(){return pt("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(pt("pause"),this._readableState.flowing=!1,this.emit("pause")),this};s(Ug,"flow");_t.prototype.wrap=function(t){var e=this._readableState,n=!1,r=this;t.on("end",function(){if(pt("wrapped end"),e.decoder&&!e.ended){var i=e.decoder.end();i&&i.length&&r.push(i)}r.push(null)}),t.on("data",function(i){if(pt("wrapped data"),e.decoder&&(i=e.decoder.write(i)),!(e.objectMode&&i==null)&&!(!e.objectMode&&(!i||!i.length))){var c=r.push(i);c||(n=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(i){return function(){return t[i].apply(t,arguments)}}(a));var o=["error","close","destroy","pause","resume"];return s$(o,function(i){t.on(i,r.emit.bind(r,i))}),r._read=function(i){pt("wrapped _read",i),n&&(n=!1,t.resume())},r};_t._fromList=MR;s(MR,"fromList");s(r$,"fromListPartial");s(a$,"copyFromBufferString");s(o$,"copyFromBuffer");s(Og,"endReadable");s(i$,"endReadableNT");s(s$,"forEach");s(NR,"indexOf")});function c$(){}function u$(t,e,n){this.chunk=t,this.encoding=e,this.callback=n,this.next=null}function qg(t,e){Object.defineProperty(this,"buffer",{get:Mg(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")}),t=t||{},this.objectMode=!!t.objectMode,e instanceof fn&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var n=t.highWaterMark,r=this.objectMode?16:16*1024;this.highWaterMark=n||n===0?n:r,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var a=t.decodeStrings===!1;this.decodeStrings=!a,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(o){h$(e,o)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new jR(this)}function an(t){if(!(this instanceof an)&&!(this instanceof fn))return new an(t);this._writableState=new qg(t,this),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev)),Xe.call(this)}function l$(t,e){var n=new Error("write after end");t.emit("error",n),mn(e,n)}function d$(t,e,n,r){var a=!0,o=!1;return n===null?o=new TypeError("May not write null values to stream"):!H.isBuffer(n)&&typeof n!="string"&&n!==void 0&&!e.objectMode&&(o=new TypeError("Invalid non-string/buffer chunk")),o&&(t.emit("error",o),mn(r,o),a=!1),a}function m$(t,e,n){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=H.from(e,n)),e}function p$(t,e,n,r,a){n=m$(e,n,r),H.isBuffer(n)&&(r="buffer");var o=e.objectMode?1:n.length;e.length+=o;var i=e.length<e.highWaterMark;if(i||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest=new u$(n,r,a),c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else jg(t,e,!1,o,n,r,a);return i}function jg(t,e,n,r,a,o,i){e.writelen=r,e.writecb=i,e.writing=!0,e.sync=!0,n?t._writev(a,e.onwrite):t._write(a,o,e.onwrite),e.sync=!1}function f$(t,e,n,r,a){--e.pendingcb,n?mn(a,r):a(r),t._writableState.errorEmitted=!0,t.emit("error",r)}function g$(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}function h$(t,e){var n=t._writableState,r=n.sync,a=n.writecb;if(g$(n),e)f$(t,n,r,e,a);else{var o=UR(n);!o&&!n.corked&&!n.bufferProcessing&&n.bufferedRequest&&OR(t,n),r?mn(LR,t,n,o,a):LR(t,n,o,a)}}function LR(t,e,n,r){n||y$(t,e),e.pendingcb--,r(),BR(t,e)}function y$(t,e){e.length===0&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}function OR(t,e){e.bufferProcessing=!0;var n=e.bufferedRequest;if(t._writev&&n&&n.next){var r=e.bufferedRequestCount,a=new Array(r),o=e.corkedRequestsFree;o.entry=n;for(var i=0;n;)a[i]=n,n=n.next,i+=1;jg(t,e,!0,e.length,a,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new jR(e)}else{for(;n;){var c=n.chunk,u=n.encoding,l=n.callback,m=e.objectMode?1:c.length;if(jg(t,e,!1,m,c,u,l),n=n.next,e.writing)break}n===null&&(e.lastBufferedRequest=null)}e.bufferedRequestCount=0,e.bufferedRequest=n,e.bufferProcessing=!1}function UR(t){return t.ending&&t.length===0&&t.bufferedRequest===null&&!t.finished&&!t.writing}function PR(t,e){e.prefinished||(e.prefinished=!0,t.emit("prefinish"))}function BR(t,e){var n=UR(e);return n&&(e.pendingcb===0?(PR(t,e),e.finished=!0,t.emit("finish")):PR(t,e)),n}function v$(t,e,n){e.ending=!0,BR(t,e),n&&(e.finished?mn(n):t.once("finish",n)),e.ended=!0,t.writable=!1}function jR(t){var e=this;this.next=null,this.entry=null,this.finish=function(n){var r=e.entry;for(e.entry=null;r;){var a=r.callback;t.pendingcb--,a(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}}var zg=v(()=>{d();Ga();Bi();ia();mu();Ua();an.WritableState=qg;Ut(an,Xe);s(c$,"nop");s(u$,"WriteReq");s(qg,"WritableState");qg.prototype.getBuffer=s(function(){for(var e=this.bufferedRequest,n=[];e;)n.push(e),e=e.next;return n},"writableStateGetBuffer");s(an,"Writable");an.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};s(l$,"writeAfterEnd");s(d$,"validChunk");an.prototype.write=function(t,e,n){var r=this._writableState,a=!1;return typeof e=="function"&&(n=e,e=null),H.isBuffer(t)?e="buffer":e||(e=r.defaultEncoding),typeof n!="function"&&(n=c$),r.ended?l$(this,n):d$(this,r,t,n)&&(r.pendingcb++,a=p$(this,r,t,e,n)),a};an.prototype.cork=function(){var t=this._writableState;t.corked++};an.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.finished&&!t.bufferProcessing&&t.bufferedRequest&&OR(this,t))};an.prototype.setDefaultEncoding=s(function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},"setDefaultEncoding");s(m$,"decodeChunk");s(p$,"writeOrBuffer");s(jg,"doWrite");s(f$,"onwriteError");s(g$,"onwriteStateUpdate");s(h$,"onwrite");s(LR,"afterWrite");s(y$,"onwriteDrain");s(OR,"clearBuffer");an.prototype._write=function(t,e,n){n(new Error("not implemented"))};an.prototype._writev=null;an.prototype.end=function(t,e,n){var r=this._writableState;typeof t=="function"?(n=t,t=null,e=null):typeof e=="function"&&(n=e,e=null),t!=null&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),!r.ending&&!r.finished&&v$(this,r,n)};s(UR,"needFinish");s(PR,"prefinish");s(BR,"finishMaybe");s(v$,"endWritable");s(jR,"CorkedRequest")});function fn(t){if(!(this instanceof fn))return new fn(t);_t.call(this,t),an.call(this,t),t&&t.readable===!1&&(this.readable=!1),t&&t.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,t&&t.allowHalfOpen===!1&&(this.allowHalfOpen=!1),this.once("end",b$)}function b$(){this.allowHalfOpen||this._writableState.ended||mn(w$,this)}function w$(t){t.end()}var qR,rp,np,mu=v(()=>{d();Ga();Ua();Bg();zg();Ut(fn,_t);qR=Object.keys(an.prototype);for(np=0;np<qR.length;np++)rp=qR[np],fn.prototype[rp]||(fn.prototype[rp]=an.prototype[rp]);s(fn,"Duplex");s(b$,"onend");s(w$,"onEndNT")});function D$(t){this.afterTransform=function(e,n){return E$(t,e,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function E$(t,e,n){var r=t._transformState;r.transforming=!1;var a=r.writecb;if(!a)return t.emit("error",new Error("no writecb in Transform class"));r.writechunk=null,r.writecb=null,n!=null&&t.push(n),a(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&t._read(o.highWaterMark)}function Cn(t){if(!(this instanceof Cn))return new Cn(t);fn.call(this,t),this._transformState=new D$(this);var e=this;this._readableState.needReadable=!0,this._readableState.sync=!1,t&&(typeof t.transform=="function"&&(this._transform=t.transform),typeof t.flush=="function"&&(this._flush=t.flush)),this.once("prefinish",function(){typeof this._flush=="function"?this._flush(function(n){zR(e,n)}):zR(e)})}function zR(t,e){if(e)return t.emit("error",e);var n=t._writableState,r=t._transformState;if(n.length)throw new Error("Calling transform done when ws.length != 0");if(r.transforming)throw new Error("Calling transform done when still transforming");return t.push(null)}var Hg=v(()=>{d();mu();Ga();Ut(Cn,fn);s(D$,"TransformState");s(E$,"afterTransform");s(Cn,"Transform");Cn.prototype.push=function(t,e){return this._transformState.needTransform=!1,fn.prototype.push.call(this,t,e)};Cn.prototype._transform=function(t,e,n){throw new Error("Not implemented")};Cn.prototype._write=function(t,e,n){var r=this._transformState;if(r.writecb=n,r.writechunk=t,r.writeencoding=e,!r.transforming){var a=this._readableState;(r.needTransform||a.needReadable||a.length<a.highWaterMark)&&this._read(a.highWaterMark)}};Cn.prototype._read=function(t){var e=this._transformState;e.writechunk!==null&&e.writecb&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};s(zR,"done")});function os(t){if(!(this instanceof os))return new os(t);Cn.call(this,t)}var HR=v(()=>{d();Hg();Ga();Ut(os,Cn);s(os,"PassThrough");os.prototype._transform=function(t,e,n){n(null,t)}});function kr(){Zn.call(this)}var Gg,Wg=v(()=>{d();ia();Ga();mu();Bg();zg();Hg();HR();Ut(kr,Zn);kr.Readable=_t;kr.Writable=an;kr.Duplex=fn;kr.Transform=Cn;kr.PassThrough=os;kr.Stream=kr;Gg=kr;s(kr,"Stream");kr.prototype.pipe=function(t,e){var n=this;function r(m){t.writable&&t.write(m)===!1&&n.pause&&n.pause()}s(r,"ondata"),n.on("data",r);function a(){n.readable&&n.resume&&n.resume()}s(a,"ondrain"),t.on("drain",a),!t._isStdio&&(!e||e.end!==!1)&&(n.on("end",i),n.on("close",c));var o=!1;function i(){o||(o=!0,t.end())}s(i,"onend");function c(){o||(o=!0,typeof t.destroy=="function"&&t.destroy())}s(c,"onclose");function u(m){if(l(),Zn.listenerCount(this,"error")===0)throw m}s(u,"onerror"),n.on("error",u),t.on("error",u);function l(){n.removeListener("data",r),t.removeListener("drain",a),n.removeListener("end",i),n.removeListener("close",c),n.removeListener("error",u),t.removeListener("error",u),n.removeListener("end",l),n.removeListener("close",l),t.removeListener("close",l)}return s(l,"cleanup"),n.on("end",l),n.on("close",l),t.on("close",l),t.emit("pipe",n),t}});var Fe,An=v(()=>{"use strict";d();Fe=class t{static{s(this,"BaseNode")}constructor(e){this._id=e,this._isMainDocument=!1,this._dependents=[],this._dependencies=[]}get id(){return this._id}get type(){throw new Error("Unimplemented")}get startTime(){throw new Error("Unimplemented")}get endTime(){throw new Error("Unimplemented")}setIsMainDocument(e){this._isMainDocument=e}isMainDocument(){return this._isMainDocument}getDependents(){return this._dependents.slice()}getNumberOfDependents(){return this._dependents.length}getDependencies(){return this._dependencies.slice()}getNumberOfDependencies(){return this._dependencies.length}getRootNode(){let e=this;for(;e._dependencies.length;)e=e._dependencies[0];return e}addDependent(e){e.addDependency(this)}addDependency(e){if(e===this)throw new Error("Cannot add dependency on itself");this._dependencies.includes(e)||(e._dependents.push(this),this._dependencies.push(e))}removeDependent(e){e.removeDependency(this)}removeDependency(e){if(!this._dependencies.includes(e))return;let n=e._dependents.indexOf(this);e._dependents.splice(n,1),this._dependencies.splice(this._dependencies.indexOf(e),1)}removeAllDependencies(){for(let e of this._dependencies.slice())this.removeDependency(e)}isDependentOn(e){let n=!1;return this.traverse(r=>{n||(n=r===e)},r=>n?[]:r.getDependencies()),n}cloneWithoutRelationships(){let e=new t(this.id);return e.setIsMainDocument(this._isMainDocument),e}cloneWithRelationships(e){let n=this.getRootNode(),r=new Map;n.traverse(o=>{if(!r.has(o.id)){if(e===void 0){r.set(o.id,o.cloneWithoutRelationships());return}e(o)&&o.traverse(i=>r.set(i.id,i.cloneWithoutRelationships()),i=>i._dependencies.filter(c=>!r.has(c.id)))}}),n.traverse(o=>{let i=r.get(o.id);if(i)for(let c of o._dependencies){let u=r.get(c.id);if(!u)throw new Error("Dependency somehow not cloned");i.addDependency(u)}});let a=r.get(this.id);if(!a)throw new Error("Cloned graph missing node");return a}traverse(e,n){for(let{node:r,traversalPath:a}of this.traverseGenerator(n))e(r,a)}*traverseGenerator(e){e||(e=s(a=>a.getDependents(),"getNextNodes"));let n=[[this]],r=new Set([this.id]);for(;n.length;){let a=n.shift(),o=a[0];yield{node:o,traversalPath:a};for(let i of e(o))r.has(i.id)||(r.add(i.id),n.push([i,...a]))}}static hasCycle(e,n="both"){if(n==="both")return t.hasCycle(e,"dependents")||t.hasCycle(e,"dependencies");let r=new Set,a=[],o=[e],i=new Map([[e,0]]);for(;o.length;){let c=o.pop();if(a.includes(c))return!0;if(r.has(c))continue;for(;a.length>i.get(c);)a.pop();r.add(c),a.push(c);let u=n==="dependents"?c._dependents:c._dependencies;for(let l of u)o.includes(l)||(o.push(l),i.set(l,a.length))}return!1}canDependOn(e){return e.startTime<=this.startTime}};Fe.TYPES={NETWORK:"network",CPU:"cpu"}});var is,Vg=v(()=>{"use strict";d();is=class t{static{s(this,"TcpConnection")}constructor(e,n,r=0,a=!0,o=!1){this._warmed=!1,this._ssl=a,this._h2=o,this._rtt=e,this._throughput=n,this._serverLatency=r,this._congestionWindow=10,this._h2OverflowBytesDownloaded=0}static maximumSaturatedConnections(e,n){let i=1e3/e*1460*8;return Math.floor(n/i)}_computeMaximumCongestionWindowInSegments(){let e=this._throughput/8,n=this._rtt/1e3,r=e*n;return Math.floor(r/1460)}setThroughput(e){this._throughput=e}setCongestionWindow(e){this._congestionWindow=e}setWarmed(e){this._warmed=e}isWarm(){return this._warmed}isH2(){return this._h2}get congestionWindow(){return this._congestionWindow}setH2OverflowBytesDownloaded(e){this._h2&&(this._h2OverflowBytesDownloaded=e)}clone(){return Object.assign(new t(this._rtt,this._throughput),this)}simulateDownloadUntil(e,n){let{timeAlreadyElapsed:r=0,maximumTimeToElapse:a=1/0,dnsResolutionTime:o=0}=n||{};this._warmed&&this._h2&&(e-=this._h2OverflowBytesDownloaded);let i=this._rtt,c=i/2,u=this._computeMaximumCongestionWindowInSegments(),l=c;this._warmed||(l=o+c+c+c+(this._ssl?i:0));let m=Math.ceil(l/i),p=l+this._serverLatency+c;this._warmed&&this._h2&&(p=0);let g=Math.max(p-r,0),f=a-g,y=Math.min(this._congestionWindow,u),b=0;g>0?b=y*1460:m=0;let D=0,T=e-b;for(;T>0&&D<=f;){m++,D+=i,y=Math.max(Math.min(u,y*2),1);let V=y*1460;b+=V,T-=V}let A=g+D,R=this._h2?Math.max(b-e,0):0,F=Math.max(Math.min(b,e),0),M;return this._warmed?this._h2?M={timeToFirstByte:p}:M={connectionTime:l,timeToFirstByte:p}:M={dnsResolutionTime:o,connectionTime:l-o,sslTime:this._ssl?i:void 0,timeToFirstByte:p},{roundTrips:m,timeElapsed:A,bytesDownloaded:F,extraBytesDownloaded:R,congestionWindow:y,connectionTiming:M}}}});var ot,T$,GR,WR,G,S$,Bt=v(()=>{"use strict";d();k();ot={didntCollectScreenshots:"Chrome didn't collect any screenshots during the page load. Please make sure there is content visible on the page, and then try re-running Lighthouse. ({errorCode})",badTraceRecording:"Something went wrong with recording the trace over your page load. Please run Lighthouse again. ({errorCode})",noFcp:"The page did not paint any content. Please ensure you keep the browser window in the foreground during the load and try again. ({errorCode})",noLcp:"The page did not display content that qualifies as a Largest Contentful Paint (LCP). Ensure the page has a valid LCP element and then try again. ({errorCode})",pageLoadTookTooLong:"Your page took too long to load. Please follow the opportunities in the report to reduce your page load time, and then try re-running Lighthouse. ({errorCode})",pageLoadFailed:"Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests.",pageLoadFailedWithStatusCode:"Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. (Status code: {statusCode})",pageLoadFailedWithDetails:"Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. (Details: {errorDetails})",pageLoadFailedInsecure:"The URL you have provided does not have a valid security certificate. {securityMessages}",pageLoadFailedInterstitial:"Chrome prevented page load with an interstitial. Make sure you are testing the correct URL and that the server is properly responding to all requests.",internalChromeError:"An internal Chrome error occurred. Please restart Chrome and try re-running Lighthouse.",requestContentTimeout:"Fetching resource content has exceeded the allotted time",notHtml:"The page provided is not HTML (served as MIME type {mimeType}).",urlInvalid:"The URL you have provided appears to be invalid.",protocolTimeout:"Waiting for DevTools protocol response has exceeded the allotted time. (Method: {protocolMethod})",dnsFailure:"DNS servers could not resolve the provided domain.",pageLoadFailedHung:"Lighthouse was unable to reliably load the URL you requested because the page stopped responding.",criTimeout:"Timeout waiting for initial Debugger Protocol connection.",missingRequiredArtifact:"Required {artifactName} gatherer did not run.",erroredRequiredArtifact:"Required {artifactName} gatherer encountered an error: {errorMessage}",oldChromeDoesNotSupportFeature:"This version of Chrome is too old to support '{featureName}'. Use a newer version to see full results."},T$=w("core/lib/lh-error.js",ot),GR="__LighthouseErrorSentinel",WR="__ErrorSentinel",G=class t extends Error{static{s(this,"LighthouseError")}constructor(e,n,r){super(e.code,r),this.name="LighthouseError",this.code=e.code,this.friendlyMessage=T$(e.message,{errorCode:this.code,...n}),this.lhrRuntimeError=!!e.lhrRuntimeError,n&&Object.assign(this,n),Error.captureStackTrace(this,t)}static fromProtocolMessage(e,n){let r=Object.values(t.errors).filter(i=>i.pattern).find(i=>i.pattern&&i.pattern.test(n.message));if(r)return new t(r);let a=`(${e}): ${n.message}`;n.data&&(a+=` (${n.data})`);let o=new Error(`Protocol error ${a}`);return Object.assign(o,{protocolMethod:e,protocolError:n.message})}static stringifyReplacer(e){if(e instanceof t){let{name:n,code:r,message:a,friendlyMessage:o,lhrRuntimeError:i,stack:c,cause:u,...l}=e;return{sentinel:GR,code:r,stack:c,cause:u,properties:l}}if(e instanceof Error){let{message:n,stack:r,cause:a}=e,o=e.code;return{sentinel:WR,message:n,code:o,stack:r,cause:a}}throw new Error("Invalid value for LighthouseError stringification")}static parseReviver(e,n){if(typeof n=="object"&&n!==null){if(n.sentinel===GR){let{code:r,stack:a,cause:o,properties:i}=n,c=t.errors[r],u=new t(c,i,{cause:o});return u.stack=a,u}if(n.sentinel===WR){let{message:r,code:a,stack:o,cause:i}=n,c=i?{cause:i}:void 0,u=new Error(r,c);return Object.assign(u,{code:a,stack:o}),u}}return n}},S$={NO_SPEEDLINE_FRAMES:{code:"NO_SPEEDLINE_FRAMES",message:ot.didntCollectScreenshots,lhrRuntimeError:!0},SPEEDINDEX_OF_ZERO:{code:"SPEEDINDEX_OF_ZERO",message:ot.didntCollectScreenshots,lhrRuntimeError:!0},NO_SCREENSHOTS:{code:"NO_SCREENSHOTS",message:ot.didntCollectScreenshots,lhrRuntimeError:!0},INVALID_SPEEDLINE:{code:"INVALID_SPEEDLINE",message:ot.didntCollectScreenshots,lhrRuntimeError:!0},NO_TRACING_STARTED:{code:"NO_TRACING_STARTED",message:ot.badTraceRecording,lhrRuntimeError:!0},NO_RESOURCE_REQUEST:{code:"NO_RESOURCE_REQUEST",message:ot.badTraceRecording,lhrRuntimeError:!0},NO_NAVSTART:{code:"NO_NAVSTART",message:ot.badTraceRecording,lhrRuntimeError:!0},NO_FCP:{code:"NO_FCP",message:ot.noFcp,lhrRuntimeError:!0},NO_DCL:{code:"NO_DCL",message:ot.badTraceRecording,lhrRuntimeError:!0},NO_FMP:{code:"NO_FMP",message:ot.badTraceRecording},NO_LCP:{code:"NO_LCP",message:ot.noLcp},NO_LCP_ALL_FRAMES:{code:"NO_LCP_ALL_FRAMES",message:ot.noLcp},UNSUPPORTED_OLD_CHROME:{code:"UNSUPPORTED_OLD_CHROME",message:ot.oldChromeDoesNotSupportFeature},NO_TTI_CPU_IDLE_PERIOD:{code:"NO_TTI_CPU_IDLE_PERIOD",message:ot.pageLoadTookTooLong},NO_TTI_NETWORK_IDLE_PERIOD:{code:"NO_TTI_NETWORK_IDLE_PERIOD",message:ot.pageLoadTookTooLong},NO_DOCUMENT_REQUEST:{code:"NO_DOCUMENT_REQUEST",message:ot.pageLoadFailed,lhrRuntimeError:!0},FAILED_DOCUMENT_REQUEST:{code:"FAILED_DOCUMENT_REQUEST",message:ot.pageLoadFailedWithDetails,lhrRuntimeError:!0},ERRORED_DOCUMENT_REQUEST:{code:"ERRORED_DOCUMENT_REQUEST",message:ot.pageLoadFailedWithStatusCode,lhrRuntimeError:!0},INSECURE_DOCUMENT_REQUEST:{code:"INSECURE_DOCUMENT_REQUEST",message:ot.pageLoadFailedInsecure,lhrRuntimeError:!0},CHROME_INTERSTITIAL_ERROR:{code:"CHROME_INTERSTITIAL_ERROR",message:ot.pageLoadFailedInterstitial,lhrRuntimeError:!0},PAGE_HUNG:{code:"PAGE_HUNG",message:ot.pageLoadFailedHung,lhrRuntimeError:!0},NOT_HTML:{code:"NOT_HTML",message:ot.notHtml,lhrRuntimeError:!0},TRACING_ALREADY_STARTED:{code:"TRACING_ALREADY_STARTED",message:ot.internalChromeError,pattern:/Tracing.*started/,lhrRuntimeError:!0},PARSING_PROBLEM:{code:"PARSING_PROBLEM",message:ot.internalChromeError,pattern:/Parsing problem/,lhrRuntimeError:!0},READ_FAILED:{code:"READ_FAILED",message:ot.internalChromeError,pattern:/Read failed/,lhrRuntimeError:!0},INVALID_URL:{code:"INVALID_URL",message:ot.urlInvalid},PROTOCOL_TIMEOUT:{code:"PROTOCOL_TIMEOUT",message:ot.protocolTimeout,lhrRuntimeError:!0},DNS_FAILURE:{code:"DNS_FAILURE",message:ot.dnsFailure,lhrRuntimeError:!0},CRI_TIMEOUT:{code:"CRI_TIMEOUT",message:ot.criTimeout,lhrRuntimeError:!0},MISSING_REQUIRED_ARTIFACT:{code:"MISSING_REQUIRED_ARTIFACT",message:ot.missingRequiredArtifact},ERRORED_REQUIRED_ARTIFACT:{code:"ERRORED_REQUIRED_ARTIFACT",message:ot.erroredRequiredArtifact}};G.errors=S$;G.NO_ERROR="NO_ERROR";G.UNKNOWN_ERROR="UNKNOWN_ERROR"});function R$(t){return!t||!t.startsWith("chrome://")?t:(t.endsWith("/")&&(t=t.replace(/\/$/,"")),t.replace(/^chrome:\/\/chrome\//,"chrome://"))}var x$,C$,A$,F$,ap,te,lt=v(()=>{"use strict";d();Rr();Bt();x$=["https:","http:","chrome:","chrome-extension:"],C$=["data","https","wss","blob","chrome","chrome-extension","about","filesystem"],A$=["localhost","127.0.0.1"],F$=["blob","data","intent","file","filesystem","chrome-extension"];s(R$,"rewriteChromeInternalUrl");ap=class{static{s(this,"UrlUtils")}static isValid(e){try{return new URL(e),!0}catch{return!1}}static hostsMatch(e,n){try{return new URL(e).host===new URL(n).host}catch{return!1}}static originsMatch(e,n){try{return new URL(e).origin===new URL(n).origin}catch{return!1}}static getOrigin(e){try{let n=new URL(e);return n.protocol==="chrome-extension:"?rt.getChromeExtensionOrigin(e):n.host&&n.origin||null}catch{return null}}static rootDomainsMatch(e,n){let r,a;try{r=rt.createOrReturnURL(e),a=rt.createOrReturnURL(n)}catch{return!1}if(!r.hostname||!a.hostname)return!1;let o=rt.getRootDomain(r),i=rt.getRootDomain(a);return o===i}static getURLDisplayName(e,n){return rt.getURLDisplayName(new URL(e),n)}static elideDataURI(e){try{return new URL(e).protocol==="data:"?rt.truncate(e,100):e}catch{return e}}static equalWithExcludedFragments(e,n){[e,n]=[e,n].map(R$);try{let r=new URL(e);r.hash="";let a=new URL(n);return a.hash="",r.href===a.href}catch{return!1}}static isProtocolAllowed(e){try{let n=new URL(e);return x$.includes(n.protocol)}catch{return!1}}static isLikeLocalhost(e){return A$.includes(e)||e.endsWith(".localhost")}static isSecureScheme(e){return C$.includes(e)}static isNonNetworkProtocol(e){let n=e.includes(":")?e.slice(0,e.indexOf(":")):e;return F$.includes(n)}static guessMimeType(e){let n;try{n=new URL(e)}catch{return}if(n.protocol==="data:"){let o=n.pathname.match(/^(image\/(png|jpeg|svg\+xml|webp|gif|avif))[;,]/);return o?o[1]:void 0}let r=n.pathname.toLowerCase().match(/\.(png|jpeg|jpg|svg|webp|gif|avif)$/);if(!r)return;let a=r[1];return a==="svg"?"image/svg+xml":a==="jpg"?"image/jpeg":`image/${a}`}static normalizeUrl(e){if(e&&this.isValid(e)&&this.isProtocolAllowed(e))return new URL(e).href;throw new G(G.errors.INVALID_URL)}};ap.INVALID_URL_DEBUG_STRING="Lighthouse was unable to determine the URL of some script executions. It's possible a Chrome extension or other eval'd code is the source.";te=ap});var VR,_$,k$,Qt,Jo=v(()=>{"use strict";d();lt();VR=14*1024,_$=.4,k$={Document:.9,XHR:.9,Fetch:.9},Qt=class t{static{s(this,"NetworkAnalyzer")}static get SUMMARY(){return"__SUMMARY__"}static groupByOrigin(e){let n=new Map;return e.forEach(r=>{let a=r.parsedURL.securityOrigin,o=n.get(a)||[];o.push(r),n.set(a,o)}),n}static getSummary(e){e.sort((r,a)=>r-a);let n;if(e.length===0)n=e[0];else if(e.length%2===0){let r=e[Math.floor((e.length-1)/2)],a=e[Math.floor((e.length-1)/2)+1];n=(r+a)/2}else n=e[Math.floor((e.length-1)/2)];return{min:e[0],max:e[e.length-1],avg:e.reduce((r,a)=>r+a,0)/e.length,median:n}}static summarize(e){let n=new Map,r=[];for(let[a,o]of e)n.set(a,t.getSummary(o)),r.push(...o);return n.set(t.SUMMARY,t.getSummary(r)),n}static _estimateValueByOrigin(e,n){let r=t.estimateIfConnectionWasReused(e),a=t.groupByOrigin(e),o=new Map;for(let[i,c]of a.entries()){let u=[];for(let l of c){let m=l.timing;if(!m)continue;let p=n({record:l,timing:m,connectionReused:r.get(l.requestId)});typeof p<"u"&&(u=u.concat(p))}u.length&&o.set(i,u)}return o}static _estimateRTTViaConnectionTiming(e){let{timing:n,connectionReused:r,record:a}=e;if(r)return;if(globalThis.isLightrider&&a.lrStatistics)return a.protocol.startsWith("h3")?a.lrStatistics.TCPMs:[a.lrStatistics.TCPMs/2,a.lrStatistics.TCPMs/2];let{connectStart:o,sslStart:i,sslEnd:c,connectEnd:u}=n;if(u>=0&&o>=0&&a.protocol.startsWith("h3"))return u-o;if(i>=0&&c>=0&&i!==o)return[u-i,i-o];if(o>=0&&u>=0)return u-o}static _estimateRTTViaDownloadTiming(e){let{timing:n,connectionReused:r,record:a}=e;if(r||a.transferSize<=VR||!Number.isFinite(n.receiveHeadersEnd)||n.receiveHeadersEnd<0)return;let i=a.networkEndTime-a.networkRequestTime-n.receiveHeadersEnd,c=Math.log2(a.transferSize/VR);if(!(c>5))return i/c}static _estimateRTTViaSendStartTiming(e){let{timing:n,connectionReused:r,record:a}=e;if(r||!Number.isFinite(n.sendStart)||n.sendStart<0)return;let o=1;return a.protocol.startsWith("h3")||(o+=1),a.parsedURL.scheme==="https"&&(o+=1),n.sendStart/o}static _estimateRTTViaHeadersEndTiming(e){let{timing:n,connectionReused:r,record:a}=e;if(!Number.isFinite(n.receiveHeadersEnd)||n.receiveHeadersEnd<0||!a.resourceType)return;let o=k$[a.resourceType]||_$,i=n.receiveHeadersEnd*o,c=1;return r||(c+=1,a.protocol.startsWith("h3")||(c+=1),a.parsedURL.scheme==="https"&&(c+=1)),Math.max((n.receiveHeadersEnd-i)/c,3)}static _estimateResponseTimeByOrigin(e,n){return t._estimateValueByOrigin(e,({record:r,timing:a})=>{if(globalThis.isLightrider&&r.lrStatistics)return r.lrStatistics.requestMs;if(!Number.isFinite(a.receiveHeadersEnd)||a.receiveHeadersEnd<0||!Number.isFinite(a.sendEnd)||a.sendEnd<0)return;let o=a.receiveHeadersEnd-a.sendEnd,i=r.parsedURL.securityOrigin,c=n.get(i)||n.get(t.SUMMARY)||0;return Math.max(o-c,0)})}static canTrustConnectionInformation(e){let n=new Map;for(let r of e){let a=n.get(r.connectionId)||!r.connectionReused;n.set(r.connectionId,a)}return n.size<=1?!1:Array.from(n.values()).every(r=>r)}static estimateIfConnectionWasReused(e,n){let{forceCoarseEstimates:r=!1}=n||{};if(!r&&t.canTrustConnectionInformation(e))return new Map(e.map(i=>[i.requestId,!!i.connectionReused]));let a=new Map,o=t.groupByOrigin(e);for(let[i,c]of o.entries()){let u=c.map(m=>m.networkEndTime).reduce((m,p)=>Math.min(m,p),1/0);for(let m of c)a.set(m.requestId,m.networkRequestTime>=u||m.protocol==="h2");let l=c.reduce((m,p)=>m.networkRequestTime>p.networkRequestTime?p:m);a.set(l.requestId,!1)}return a}static estimateRTTByOrigin(e,n){let{forceCoarseEstimates:r=!1,coarseEstimateMultiplier:a=.3,useDownloadEstimates:o=!0,useSendStartEstimates:i=!0,useHeadersEndEstimates:c=!0}=n||{},u=t.estimateIfConnectionWasReused(e),l=t.groupByOrigin(e),m=new Map;for(let[g,f]of l.entries()){let b=function(D,T=1){for(let A of f){let R=A.timing;if(!R)continue;let F=D({record:A,timing:R,connectionReused:u.get(A.requestId)});F!==void 0&&(Array.isArray(F)?y.push(...F.map(M=>M*T)):y.push(F*T))}};var p=b;s(b,"collectEstimates");let y=[];r||b(this._estimateRTTViaConnectionTiming),y.length||(o&&b(this._estimateRTTViaDownloadTiming,a),i&&b(this._estimateRTTViaSendStartTiming,a),c&&b(this._estimateRTTViaHeadersEndTiming,a)),y.length&&m.set(g,y)}if(!m.size)throw new Error("No timing information available");return t.summarize(m)}static estimateServerResponseTimeByOrigin(e,n){let r=(n||{}).rttByOrigin;if(!r){r=new Map;let o=t.estimateRTTByOrigin(e,n);for(let[i,c]of o.entries())r.set(i,c.min)}let a=t._estimateResponseTimeByOrigin(e,r);return t.summarize(a)}static estimateThroughput(e){let n=0,r=e.reduce((c,u)=>(u.parsedURL?.scheme==="data"||u.failed||!u.finished||u.statusCode>300||!u.transferSize||(n+=u.transferSize,c.push({time:u.responseHeadersEndTime/1e3,isStart:!0}),c.push({time:u.networkEndTime/1e3,isStart:!1})),c),[]).sort((c,u)=>c.time-u.time);if(!r.length)return 1/0;let a=0,o=0,i=0;return r.forEach(c=>{c.isStart?(a===0&&(o=c.time),a++):(a--,a===0&&(i+=c.time-o))}),n*8/i}static findResourceForUrl(e,n){return e.find(r=>n.startsWith(r.url)&&te.equalWithExcludedFragments(r.url,n))}static resolveRedirects(e){for(;e.redirectDestination;)e=e.redirectDestination;return e}}});var I$,M$,N$,op,$R=v(()=>{"use strict";d();Yt();Jo();Vg();I$=30,M$=["https","wss"],N$=6,op=class{static{s(this,"ConnectionPool")}constructor(e,n){this._options=n,this._records=e,this._connectionsByOrigin=new Map,this._connectionsByRecord=new Map,this._connectionsInUse=new Set,this._connectionReusedByRequestId=Qt.estimateIfConnectionWasReused(e,{forceCoarseEstimates:!0}),this._initializeConnections()}connectionsInUse(){return Array.from(this._connectionsInUse)}_initializeConnections(){let e=this._connectionReusedByRequestId,n=this._options.additionalRttByOrigin,r=this._options.serverResponseTimeByOrigin,a=Qt.groupByOrigin(this._records);for(let[o,i]of a.entries()){let c=[],u=n.get(o)||0,l=r.get(o)||I$;for(let p of i){if(e.get(p.requestId))continue;let g=M$.includes(p.parsedURL.scheme),f=p.protocol==="h2",y=new is(this._options.rtt+u,this._options.throughput,l,g,f);c.push(y)}if(!c.length)throw new Error(`Could not find a connection for origin: ${o}`);let m=c[0].isH2()?1:N$;for(;c.length<m;)c.push(c[0].clone());this._connectionsByOrigin.set(o,c)}}_findAvailableConnectionWithLargestCongestionWindow(e,n){let{ignoreConnectionReused:r,observedConnectionWasReused:a}=n,o=null;for(let i=0;i<e.length;i++){let c=e[i];if(!r&&c._warmed!==a||this._connectionsInUse.has(c))continue;let u=o?.congestionWindow||-1/0;c.congestionWindow>u&&(o=c)}return o}acquire(e,n={}){if(this._connectionsByRecord.has(e))throw new Error("Record already has a connection");let r=e.parsedURL.securityOrigin,a=!!this._connectionReusedByRequestId.get(e.requestId),o=this._connectionsByOrigin.get(r)||[],i=this._findAvailableConnectionWithLargestCongestionWindow(o,{ignoreConnectionReused:n.ignoreConnectionReused,observedConnectionWasReused:a});return i?(this._connectionsInUse.add(i),this._connectionsByRecord.set(e,i),i):null}acquireActiveConnectionFromRecord(e){let n=this._connectionsByRecord.get(e);if(!n)throw new Error("Could not find an active connection for record");return n}release(e){let n=this._connectionsByRecord.get(e);this._connectionsByRecord.delete(e),this._connectionsInUse.delete(n)}}});var L$,ss,YR=v(()=>{"use strict";d();Yt();L$=2,ss=class t{static{s(this,"DNSCache")}constructor({rtt:e}){this._rtt=e,this._resolvedDomainNames=new Map}getTimeUntilResolution(e,n){let{requestedAt:r=0,shouldUpdateCache:a=!1}=n||{},o=e.parsedURL.host,i=this._resolvedDomainNames.get(o),c=this._rtt*t.RTT_MULTIPLIER;if(i){let l=Math.max(i.resolvedAt-r,0);c=Math.min(l,c)}let u=r+c;return a&&this._updateCacheResolvedAtIfNeeded(e,u),c}_updateCacheResolvedAtIfNeeded(e,n){let r=e.parsedURL.host,a=this._resolvedDomainNames.get(r)||{resolvedAt:n};a.resolvedAt=Math.min(a.resolvedAt,n),this._resolvedDomainNames.set(r,a)}setResolvedAt(e,n){this._resolvedDomainNames.set(e,{resolvedAt:n})}};ss.RTT_MULTIPLIER=L$});var pu,KR=v(()=>{"use strict";d();An();pu=class{static{s(this,"SimulatorTimingMap")}constructor(){this._nodeTimings=new Map}getNodes(){return Array.from(this._nodeTimings.keys())}setReadyToStart(e,n){this._nodeTimings.set(e,n)}setInProgress(e,n){let r={...this.getQueued(e),startTime:n.startTime,timeElapsed:0};this._nodeTimings.set(e,e.type===Fe.TYPES.NETWORK?{...r,timeElapsedOvershoot:0,bytesDownloaded:0}:r)}setCompleted(e,n){let r={...this.getInProgress(e),endTime:n.endTime,connectionTiming:n.connectionTiming};this._nodeTimings.set(e,r)}setCpu(e,n){let r={...this.getCpuStarted(e),timeElapsed:n.timeElapsed};this._nodeTimings.set(e,r)}setCpuEstimated(e,n){let r={...this.getCpuStarted(e),estimatedTimeElapsed:n.estimatedTimeElapsed};this._nodeTimings.set(e,r)}setNetwork(e,n){let r={...this.getNetworkStarted(e),timeElapsed:n.timeElapsed,timeElapsedOvershoot:n.timeElapsedOvershoot,bytesDownloaded:n.bytesDownloaded};this._nodeTimings.set(e,r)}setNetworkEstimated(e,n){let r={...this.getNetworkStarted(e),estimatedTimeElapsed:n.estimatedTimeElapsed};this._nodeTimings.set(e,r)}getQueued(e){let n=this._nodeTimings.get(e);if(!n)throw new Error(`Node ${e.id} not yet queued`);return n}getCpuStarted(e){let n=this._nodeTimings.get(e);if(!n)throw new Error(`Node ${e.id} not yet queued`);if(!("startTime"in n))throw new Error(`Node ${e.id} not yet started`);if("bytesDownloaded"in n)throw new Error(`Node ${e.id} timing not valid`);return n}getNetworkStarted(e){let n=this._nodeTimings.get(e);if(!n)throw new Error(`Node ${e.id} not yet queued`);if(!("startTime"in n))throw new Error(`Node ${e.id} not yet started`);if(!("bytesDownloaded"in n))throw new Error(`Node ${e.id} timing not valid`);return n}getInProgress(e){let n=this._nodeTimings.get(e);if(!n)throw new Error(`Node ${e.id} not yet queued`);if(!("startTime"in n))throw new Error(`Node ${e.id} not yet started`);if(!("estimatedTimeElapsed"in n))throw new Error(`Node ${e.id} not yet in progress`);return n}getCompleted(e){let n=this._nodeTimings.get(e);if(!n)throw new Error(`Node ${e.id} not yet queued`);if(!("startTime"in n))throw new Error(`Node ${e.id} not yet started`);if(!("estimatedTimeElapsed"in n))throw new Error(`Node ${e.id} not yet in progress`);if(!("endTime"in n))throw new Error(`Node ${e.id} not yet completed`);return n}}});var Ir={};S(Ir,{defaultNavigationConfig:()=>fu,defaultSettings:()=>Qn,nonSimulatedPassConfigOverrides:()=>cs,screenEmulationMetrics:()=>ip,throttling:()=>Wn,userAgents:()=>Wa});var Wn,P$,O$,ip,U$,B$,Wa,Qn,fu,cs,Vn=v(()=>{"use strict";d();Wn={DEVTOOLS_RTT_ADJUSTMENT_FACTOR:3.75,DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR:.9,mobileSlow4G:{rttMs:150,throughputKbps:1638.4,requestLatencyMs:562.5,downloadThroughputKbps:1474.5600000000002,uploadThroughputKbps:675,cpuSlowdownMultiplier:4},mobileRegular3G:{rttMs:300,throughputKbps:700,requestLatencyMs:1125,downloadThroughputKbps:630,uploadThroughputKbps:630,cpuSlowdownMultiplier:4},desktopDense4G:{rttMs:40,throughputKbps:10240,cpuSlowdownMultiplier:1,requestLatencyMs:0,downloadThroughputKbps:0,uploadThroughputKbps:0}},P$={mobile:!0,width:412,height:823,deviceScaleFactor:1.75,disabled:!1},O$={mobile:!1,width:1350,height:940,deviceScaleFactor:1,disabled:!1},ip={mobile:P$,desktop:O$},U$="Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36",B$="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",Wa={mobile:U$,desktop:B$},Qn={output:"json",maxWaitForFcp:30*1e3,maxWaitForLoad:45*1e3,pauseAfterFcpMs:1e3,pauseAfterLoadMs:1e3,networkQuietThresholdMs:1e3,cpuQuietThresholdMs:1e3,formFactor:"mobile",throttling:Wn.mobileSlow4G,throttlingMethod:"simulate",screenEmulation:ip.mobile,emulatedUserAgent:Wa.mobile,auditMode:!1,gatherMode:!1,disableStorageReset:!1,debugNavigation:!1,channel:"node",usePassiveGathering:!1,disableFullPageScreenshot:!1,skipAboutBlank:!1,blankPage:"about:blank",budgets:null,locale:"en-US",blockedUrlPatterns:null,additionalTraceCategories:null,extraHeaders:null,precomputedLanternData:null,onlyAudits:null,onlyCategories:null,skipAudits:null},fu={id:"defaultPass",loadFailureMode:"fatal",disableThrottling:!1,disableStorageReset:!1,pauseAfterFcpMs:0,pauseAfterLoadMs:0,networkQuietThresholdMs:0,cpuQuietThresholdMs:0,blockedUrlPatterns:[],blankPage:"about:blank",artifacts:[]},cs={pauseAfterFcpMs:5250,pauseAfterLoadMs:5250,networkQuietThresholdMs:5250,cpuQuietThresholdMs:5250}});var $g,j$,q$,z$,er,H$,JR,gu,Yg=v(()=>{"use strict";d();Yt();An();Vg();$R();YR();KR();Vn();$g=Wn.mobileSlow4G,j$=10,q$=.5,z$=1e4,er={NotReadyToStart:0,ReadyToStart:1,InProgress:2,Complete:3},H$={VeryHigh:0,High:.25,Medium:.5,Low:1,VeryLow:2},JR=new Map,gu=class t{static{s(this,"Simulator")}constructor(e){if(this._options=Object.assign({rtt:$g.rttMs,throughput:$g.throughputKbps*1024,maximumConcurrentRequests:j$,cpuSlowdownMultiplier:$g.cpuSlowdownMultiplier,layoutTaskMultiplier:q$,additionalRttByOrigin:new Map,serverResponseTimeByOrigin:new Map},e),this._rtt=this._options.rtt,this._throughput=this._options.throughput,this._maximumConcurrentRequests=Math.max(Math.min(is.maximumSaturatedConnections(this._rtt,this._throughput),this._options.maximumConcurrentRequests),1),this._cpuSlowdownMultiplier=this._options.cpuSlowdownMultiplier,this._layoutTaskMultiplier=this._cpuSlowdownMultiplier*this._options.layoutTaskMultiplier,this._cachedNodeListByStartPosition=[],this._flexibleOrdering=!1,this._nodeTimings=new pu,this._numberInProgressByType=new Map,this._nodes={},this._dns=new ss({rtt:this._rtt}),this._connectionPool=null,!Number.isFinite(this._rtt))throw new Error(`Invalid rtt ${this._rtt}`);if(!Number.isFinite(this._throughput))throw new Error(`Invalid rtt ${this._throughput}`)}get rtt(){return this._rtt}_initializeConnectionPool(e){let n=[];e.getRootNode().traverse(r=>{r.type===Fe.TYPES.NETWORK&&n.push(r.record)}),this._connectionPool=new op(n,this._options)}_initializeAuxiliaryData(){this._nodeTimings=new pu,this._numberInProgressByType=new Map,this._nodes={},this._cachedNodeListByStartPosition=[];for(let e of Object.values(er))this._nodes[e]=new Set}_numberInProgress(e){return this._numberInProgressByType.get(e)||0}_markNodeAsReadyToStart(e,n){let r=t._computeNodeStartPosition(e),a=this._cachedNodeListByStartPosition.findIndex(i=>t._computeNodeStartPosition(i)>r),o=a===-1?this._cachedNodeListByStartPosition.length:a;this._cachedNodeListByStartPosition.splice(o,0,e),this._nodes[er.ReadyToStart].add(e),this._nodes[er.NotReadyToStart].delete(e),this._nodeTimings.setReadyToStart(e,{queuedTime:n})}_markNodeAsInProgress(e,n){let r=this._cachedNodeListByStartPosition.indexOf(e);this._cachedNodeListByStartPosition.splice(r,1),this._nodes[er.InProgress].add(e),this._nodes[er.ReadyToStart].delete(e),this._numberInProgressByType.set(e.type,this._numberInProgress(e.type)+1),this._nodeTimings.setInProgress(e,{startTime:n})}_markNodeAsComplete(e,n,r){this._nodes[er.Complete].add(e),this._nodes[er.InProgress].delete(e),this._numberInProgressByType.set(e.type,this._numberInProgress(e.type)-1),this._nodeTimings.setCompleted(e,{endTime:n,connectionTiming:r});for(let a of e.getDependents())a.getDependencies().some(i=>!this._nodes[er.Complete].has(i))||this._markNodeAsReadyToStart(a,n)}_acquireConnection(e){return this._connectionPool.acquire(e,{ignoreConnectionReused:this._flexibleOrdering})}_getNodesSortedByStartPosition(){return Array.from(this._cachedNodeListByStartPosition)}_startNodeIfPossible(e,n){if(e.type===Fe.TYPES.CPU){this._numberInProgress(e.type)===0&&this._markNodeAsInProgress(e,n);return}if(e.type!==Fe.TYPES.NETWORK)throw new Error("Unsupported");!e.isConnectionless&&(this._numberInProgress(e.type)>=this._maximumConcurrentRequests||!this._acquireConnection(e.record))||this._markNodeAsInProgress(e,n)}_updateNetworkCapacity(){let e=this._numberInProgress(Fe.TYPES.NETWORK);if(e!==0)for(let n of this._connectionPool.connectionsInUse())n.setThroughput(this._throughput/e)}_estimateTimeRemaining(e){if(e.type===Fe.TYPES.CPU)return this._estimateCPUTimeRemaining(e);if(e.type===Fe.TYPES.NETWORK)return this._estimateNetworkTimeRemaining(e);throw new Error("Unsupported")}_estimateCPUTimeRemaining(e){let n=this._nodeTimings.getCpuStarted(e),r=e.didPerformLayout()?this._layoutTaskMultiplier:this._cpuSlowdownMultiplier,o=Math.min(Math.round(e.event.dur/1e3*r),z$)-n.timeElapsed;return this._nodeTimings.setCpuEstimated(e,{estimatedTimeElapsed:o}),o}_estimateNetworkTimeRemaining(e){let n=e.record,r=this._nodeTimings.getNetworkStarted(e),a=0;if(e.fromDiskCache)a=8+20*((n.resourceSize||0)/1024/1024)-r.timeElapsed;else if(e.isNonNetworkProtocol)a=2+10*((n.resourceSize||0)/1024/1024)-r.timeElapsed;else{let i=this._connectionPool.acquireActiveConnectionFromRecord(n),c=this._dns.getTimeUntilResolution(n,{requestedAt:r.startTime,shouldUpdateCache:!0}),u=r.timeElapsed;a=i.simulateDownloadUntil(n.transferSize-r.bytesDownloaded,{timeAlreadyElapsed:u,dnsResolutionTime:c,maximumTimeToElapse:1/0}).timeElapsed}let o=a+r.timeElapsedOvershoot;return this._nodeTimings.setNetworkEstimated(e,{estimatedTimeElapsed:o}),o}_findNextNodeCompletionTime(){let e=1/0;for(let n of this._nodes[er.InProgress])e=Math.min(e,this._estimateTimeRemaining(n));return e}_updateProgressMadeInTimePeriod(e,n,r){let a=this._nodeTimings.getInProgress(e),o=a.estimatedTimeElapsed===n;if(e.type===Fe.TYPES.CPU||e.isConnectionless)return o?this._markNodeAsComplete(e,r):a.timeElapsed+=n;if(e.type!==Fe.TYPES.NETWORK)throw new Error("Unsupported");if(!("bytesDownloaded"in a))throw new Error("Invalid timing data");let i=e.record,c=this._connectionPool.acquireActiveConnectionFromRecord(i),u=this._dns.getTimeUntilResolution(i,{requestedAt:a.startTime,shouldUpdateCache:!0}),l=c.simulateDownloadUntil(i.transferSize-a.bytesDownloaded,{dnsResolutionTime:u,timeAlreadyElapsed:a.timeElapsed,maximumTimeToElapse:n-a.timeElapsedOvershoot});c.setCongestionWindow(l.congestionWindow),c.setH2OverflowBytesDownloaded(l.extraBytesDownloaded),o?(c.setWarmed(!0),this._connectionPool.release(i),this._markNodeAsComplete(e,r,l.connectionTiming)):(a.timeElapsed+=l.timeElapsed,a.timeElapsedOvershoot+=l.timeElapsed-n,a.bytesDownloaded+=l.bytesDownloaded)}_computeFinalNodeTimings(){let e=this._nodeTimings.getNodes().map(r=>[r,this._nodeTimings.getCompleted(r)]);e.sort((r,a)=>r[1].startTime-a[1].startTime);let n=e.map(([r,a])=>[r,{startTime:a.startTime,endTime:a.endTime,duration:a.endTime-a.startTime}]);return{nodeTimings:new Map(n),completeNodeTimings:new Map(e)}}getOptions(){return this._options}simulate(e,n){if(Fe.hasCycle(e))throw new Error("Cannot simulate graph with cycle");n=Object.assign({label:void 0,flexibleOrdering:!1},n),this._flexibleOrdering=!!n.flexibleOrdering,this._dns=new ss({rtt:this._rtt}),this._initializeConnectionPool(e),this._initializeAuxiliaryData();let r=this._nodes[er.NotReadyToStart],a=this._nodes[er.ReadyToStart],o=this._nodes[er.InProgress],i=e.getRootNode();i.traverse(p=>r.add(p));let c=0,u=0;for(this._markNodeAsReadyToStart(i,c);a.size||o.size;){for(let g of this._getNodesSortedByStartPosition())this._startNodeIfPossible(g,c);if(!o.size){if(this._flexibleOrdering)throw new Error("Failed to start a node");this._flexibleOrdering=!0;continue}this._updateNetworkCapacity();let p=this._findNextNodeCompletionTime();if(c+=p,!Number.isFinite(p)||u>1e5)throw new Error("Simulation failed, depth exceeded");u++;for(let g of o)this._updateProgressMadeInTimePeriod(g,p,c)}let{nodeTimings:l,completeNodeTimings:m}=this._computeFinalNodeTimings();return JR.set(n.label||"unlabeled",m),{timeInMs:c,nodeTimings:l}}computeWastedMsFromWastedBytes(e){let{throughput:n,observedThroughput:r}=this._options,a=n===0?r:n;if(a===0)return 0;let i=e*8/a*1e3;return Math.round(i/10)*10}static get ALL_NODE_TIMINGS(){return JR}static _computeNodeStartPosition(e){return e.type==="cpu"?e.startTime:e.startTime+(H$[e.record.priority]*1e3*1e3||0)}}});var XR=v(()=>{"use strict";d();});var ZR=v(()=>{"use strict";d();He();Ar();});var QR,sp,e_=v(()=>{"use strict";d();QR=zt(cu(),1);sp=class t{static{s(this,"ArbitraryEqualityMap")}constructor(){this._equalsFn=t.deepEquals,this._entries=[]}setEqualityFn(e){this._equalsFn=e}has(e){return this._findIndexOf(e)!==-1}get(e){return this._entries[this._findIndexOf(e)]?.value}set(e,n){let r=this._findIndexOf(e);r===-1&&(r=this._entries.length),this._entries[r]={key:e,value:n}}_findIndexOf(e){for(let n=0;n<this._entries.length;n++)if(this._equalsFn(e,this._entries[n].key))return n;return-1}static deepEquals(e,n){return(0,QR.default)(e,n)}}});function W(t,e){return Object.assign(t,{request:s((r,a)=>{let o=e?Object.fromEntries(e.map(g=>[g,r[g]])):r,i=a.computedCache,c=t.name,u=i.get(c)||new sp;i.set(c,u);let l=u.get(o);if(l)return l;let m={msg:`Computing artifact: ${c}`,id:`lh:computed:${c}`};N.time(m,"verbose");let p=t.compute_(o,a);return u.set(o,p),p.then(()=>N.timeEnd(m)).catch(()=>N.timeEnd(m)),p},"request")})}var we=v(()=>{"use strict";d();He();e_();s(W,"makeComputedArtifact")});var t_,n_,r_,a_,o_,i_,s_,cp,Y,St=v(()=>{"use strict";d();Yt();lt();t_="X-TCPMs",n_="X-SSLMs",r_="X-RequestMs",a_="X-ResponseMs",o_="X-TotalMs",i_="X-TotalFetchedSize",s_="X-ProtocolIsH2",cp={XHR:"XHR",Fetch:"Fetch",EventSource:"EventSource",Script:"Script",Stylesheet:"Stylesheet",Image:"Image",Media:"Media",Font:"Font",Document:"Document",TextTrack:"TextTrack",WebSocket:"WebSocket",Other:"Other",Manifest:"Manifest",SignedExchange:"SignedExchange",Ping:"Ping",Preflight:"Preflight",CSPViolationReport:"CSPViolationReport",Prefetch:"Prefetch"},Y=class t{static{s(this,"NetworkRequest")}constructor(){this.requestId="",this.connectionId="0",this.connectionReused=!1,this.url="",this.protocol="",this.isSecure=!1,this.isValid=!1,this.parsedURL={scheme:""},this.documentURL="",this.rendererStartTime=-1,this.networkRequestTime=-1,this.responseHeadersEndTime=-1,this.networkEndTime=-1,this.transferSize=0,this.resourceSize=0,this.fromDiskCache=!1,this.fromMemoryCache=!1,this.fromPrefetchCache=!1,this.lrStatistics=void 0,this.finished=!1,this.requestMethod="",this.statusCode=-1,this.redirectSource=void 0,this.redirectDestination=void 0,this.redirects=void 0,this.failed=!1,this.localizedFailDescription="",this.initiator={type:"other"},this.timing=void 0,this.resourceType=void 0,this.mimeType="",this.priority="Low",this.initiatorRequest=void 0,this.responseHeaders=[],this.responseHeadersText="",this.fetchedViaServiceWorker=!1,this.frameId="",this.sessionId=void 0,this.sessionTargetType=void 0,this.isLinkPreload=!1}hasErrorStatusCode(){return this.statusCode>=400}setInitiatorRequest(e){this.initiatorRequest=e}onRequestWillBeSent(e){this.requestId=e.requestId;let n;try{n=new URL(e.request.url)}catch{return}this.url=e.request.url,this.documentURL=e.documentURL,this.parsedURL={scheme:n.protocol.split(":")[0],host:n.hostname,securityOrigin:n.origin},this.isSecure=te.isSecureScheme(this.parsedURL.scheme),this.rendererStartTime=e.timestamp*1e3,this.networkRequestTime=this.rendererStartTime,this.requestMethod=e.request.method,this.initiator=e.initiator,this.resourceType=e.type&&cp[e.type],this.priority=e.request.initialPriority,this.frameId=e.frameId,this.isLinkPreload=e.initiator.type==="preload"||!!e.request.isLinkPreload,this.isValid=!0}onRequestServedFromCache(){this.fromMemoryCache=!0}onResponseReceived(e){this._onResponse(e.response,e.timestamp,e.type),this._updateProtocolForLightrider(),this.frameId=e.frameId}onDataReceived(e){this.resourceSize+=e.dataLength,e.encodedDataLength!==-1&&(this.transferSize+=e.encodedDataLength)}onLoadingFinished(e){this.finished||(this.finished=!0,this.networkEndTime=e.timestamp*1e3,e.encodedDataLength>=0&&(this.transferSize=e.encodedDataLength),this._updateResponseHeadersEndTimeIfNecessary(),this._backfillReceiveHeaderStartTiming(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onLoadingFailed(e){this.finished||(this.finished=!0,this.networkEndTime=e.timestamp*1e3,this.failed=!0,this.resourceType=e.type&&cp[e.type],this.localizedFailDescription=e.errorText,this._updateResponseHeadersEndTimeIfNecessary(),this._backfillReceiveHeaderStartTiming(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onResourceChangedPriority(e){this.priority=e.newPriority}onRedirectResponse(e){if(!e.redirectResponse)throw new Error("Missing redirectResponse data");this._onResponse(e.redirectResponse,e.timestamp,e.type),this.resourceType=void 0,this.finished=!0,this.networkEndTime=e.timestamp*1e3,this._updateResponseHeadersEndTimeIfNecessary(),this._backfillReceiveHeaderStartTiming()}setSession(e){this.sessionId=e}get isOutOfProcessIframe(){return this.sessionTargetType==="iframe"}_onResponse(e,n,r){this.url=e.url,this.connectionId=String(e.connectionId),this.connectionReused=e.connectionReused,e.protocol&&(this.protocol=e.protocol),this.responseHeadersEndTime=n*1e3,this.transferSize=e.encodedDataLength,typeof e.fromDiskCache=="boolean"&&(this.fromDiskCache=e.fromDiskCache),typeof e.fromPrefetchCache=="boolean"&&(this.fromPrefetchCache=e.fromPrefetchCache),this.statusCode=e.status,this.timing=e.timing,r&&(this.resourceType=cp[r]),this.mimeType=e.mimeType,this.responseHeadersText=e.headersText||"",this.responseHeaders=t._headersDictToHeadersArray(e.headers),this.fetchedViaServiceWorker=!!e.fromServiceWorker,this.fromMemoryCache&&(this.timing=void 0),this.timing&&this._recomputeTimesWithResourceTiming(this.timing)}_recomputeTimesWithResourceTiming(e){if(e.requestTime===0||e.receiveHeadersEnd===-1)return;this.networkRequestTime=e.requestTime*1e3;let n=this.networkRequestTime+e.receiveHeadersEnd,r=this.responseHeadersEndTime;this.responseHeadersEndTime=n,this.responseHeadersEndTime=Math.min(this.responseHeadersEndTime,r),this.responseHeadersEndTime=Math.max(this.responseHeadersEndTime,this.networkRequestTime),this.networkEndTime=Math.max(this.networkEndTime,this.responseHeadersEndTime)}_updateResponseHeadersEndTimeIfNecessary(){this.responseHeadersEndTime=Math.min(this.networkEndTime,this.responseHeadersEndTime)}_updateTransferSizeForLightrider(){if(!globalThis.isLightrider)return;let e=this.responseHeaders.find(r=>r.name===i_);if(!e)return;let n=parseFloat(e.value);isNaN(n)||(this.transferSize=n)}_updateProtocolForLightrider(){globalThis.isLightrider&&this.responseHeaders.some(e=>e.name===s_)&&(this.protocol="h2")}_backfillReceiveHeaderStartTiming(){!this.timing||this.timing.receiveHeadersStart!==void 0||(this.timing.receiveHeadersStart=this.timing.receiveHeadersEnd)}_updateTimingsForLightrider(){if(!globalThis.isLightrider)return;let e=this.responseHeaders.find(p=>p.name===o_);if(!e)return;let n=parseInt(e.value),r=this.responseHeaders.find(p=>p.name===t_),a=this.responseHeaders.find(p=>p.name===n_),o=this.responseHeaders.find(p=>p.name===r_),i=this.responseHeaders.find(p=>p.name===a_),c=r?Math.max(0,parseInt(r.value)):0,u=a?Math.max(0,parseInt(a.value)):0,l=o?Math.max(0,parseInt(o.value)):0,m=i?Math.max(0,parseInt(i.value)):0;if(!Number.isNaN(c+l+m+n)){if(c+l+m!==n){if(Math.abs(c+l+m-n)>=25)return;n=c+l+m}u>c||(this.lrStatistics={endTimeDeltaMs:this.networkEndTime-(this.networkRequestTime+n),TCPMs:c,requestMs:l,responseMs:m})}}static getRequestIdForBackend(e){return e.replace(/(:redirect)+$/,"")}static _headersDictToHeadersArray(e){let n=[];for(let r of Object.keys(e)){let a=e[r].split(`
+`);for(let o=0;o<a.length;++o)n.push({name:r,value:a[o]})}return n}static get TYPES(){return cp}static isNonNetworkRequest(e){return te.isNonNetworkProtocol(e.protocol)||te.isNonNetworkProtocol(e.parsedURL.scheme)}static isSecureRequest(e){return te.isSecureScheme(e.parsedURL.scheme)||te.isSecureScheme(e.protocol)||te.isLikeLocalhost(e.parsedURL.host)||t.isHstsRequest(e)}static isHstsRequest(e){let n=e.redirectDestination;return n?e.responseHeaders.find(o=>o.name==="Non-Authoritative-Reason")?.value==="HSTS"&&t.isSecureRequest(n):!1}static getResourceSizeOnNetwork(e){return Math.min(e.resourceSize||0,e.transferSize||1/0)}};Y.HEADER_TCP=t_;Y.HEADER_SSL=n_;Y.HEADER_REQ=r_;Y.HEADER_RES=a_;Y.HEADER_TOTAL=o_;Y.HEADER_FETCHED_SIZE=i_;Y.HEADER_PROTOCOL_IS_H2=s_});var hu,yu=v(()=>{"use strict";d();Yt();An();St();hu=class t extends Fe{static{s(this,"NetworkNode")}constructor(e){super(e.requestId),this._record=e}get type(){return Fe.TYPES.NETWORK}get startTime(){return this._record.networkRequestTime*1e3}get endTime(){return this._record.networkEndTime*1e3}get record(){return this._record}get initiatorType(){return this._record.initiator&&this._record.initiator.type}get fromDiskCache(){return!!this._record.fromDiskCache}get isNonNetworkProtocol(){return Y.isNonNetworkRequest(this._record)}get isConnectionless(){return this.fromDiskCache||this.isNonNetworkProtocol}hasRenderBlockingPriority(){let e=this._record.priority,n=this._record.resourceType===Y.TYPES.Script,r=this._record.resourceType===Y.TYPES.Document;return e==="VeryHigh"||e==="High"&&n||e==="High"&&r}cloneWithoutRelationships(){let e=new t(this._record);return e.setIsMainDocument(this._isMainDocument),e}}});var up,vu=v(()=>{"use strict";d();Yt();An();up=class t extends Fe{static{s(this,"CPUNode")}constructor(e,n=[]){let r=`${e.tid}.${e.ts}`;super(r),this._event=e,this._childEvents=n}get type(){return Fe.TYPES.CPU}get startTime(){return this._event.ts}get endTime(){return this._event.ts+this._event.dur}get event(){return this._event}get childEvents(){return this._childEvents}didPerformLayout(){return this._childEvents.some(e=>e.name==="Layout")}getEvaluateScriptURLs(){let e=new Set;for(let n of this._childEvents)n.name==="EvaluateScript"&&(!n.args.data||!n.args.data.url||e.add(n.args.data.url));return e}cloneWithoutRelationships(){return new t(this._event,this._childEvents)}}});var Kg,bu,Jg=v(()=>{"use strict";d();Bt();Ar();Kg=class extends Kt{static{s(this,"LHTraceProcessor")}static createNoNavstartError(){return new G(G.errors.NO_NAVSTART)}static createNoResourceSendRequestError(){return new G(G.errors.NO_RESOURCE_REQUEST)}static createNoTracingStartedError(){return new G(G.errors.NO_TRACING_STARTED)}static createNoFirstContentfulPaintError(){return new G(G.errors.NO_FCP)}},bu=Kg});var Xg,Ye,Jt=v(()=>{"use strict";d();we();Jg();Xg=class{static{s(this,"ProcessedTrace")}static async compute_(e){return bu.processTrace(e)}},Ye=W(Xg,null)});var Zg,c_,u_=v(()=>{"use strict";d();Jo();we();De();Jt();Zg=class{static{s(this,"DocumentUrls")}static async compute_(e,n){let r=await Ye.request(e.trace,n),a=await $.request(e.devtoolsLog,n),o=r.mainFrameInfo.frameId,i,c;for(let l of e.devtoolsLog)if(l.method==="Page.frameNavigated"&&l.params.frame.id===o){let{url:m}=l.params.frame;i||(i=m),c=m}if(!i||!c)throw new Error("No main frame navigations found");let u=Qt.findResourceForUrl(a,i);return u?.redirects?.length&&(i=u.redirects[0].url),{requestedUrl:i,mainDocumentUrl:c}}},c_=W(Zg,["devtoolsLog","trace"])});var G$,W$,Qg,kt,$n=v(()=>{"use strict";d();we();yu();vu();Ar();St();Jt();De();Jo();u_();G$=10,W$=/^video/,Qg=class t{static{s(this,"PageDependencyGraph")}static getNetworkInitiators(e){if(!e.initiator)return[];if(e.initiator.url)return[e.initiator.url];if(e.initiator.type==="script"){let n=new Set,r=e.initiator.stack;for(;r;){let a=r.callFrames||[];for(let o of a)o.url&&n.add(o.url);r=r.parent}return Array.from(n)}return[]}static getNetworkNodeOutput(e){let n=[],r=new Map,a=new Map,o=new Map;return e.forEach(i=>{if(W$.test(i.mimeType))return;for(;r.has(i.requestId);)i.requestId+=":duplicate";let c=new hu(i);n.push(c);let u=a.get(i.url)||[];if(u.push(c),r.set(i.requestId,c),a.set(i.url,u),i.frameId&&i.resourceType===Y.TYPES.Document&&i.documentURL===i.url){let l=o.has(i.frameId)?null:c;o.set(i.frameId,l)}}),{nodes:n,idToNodeMap:r,urlToNodeMap:a,frameIdToNodeMap:o}}static getCPUNodes({mainThreadEvents:e}){let n=[],r=0;for(Kt.assertHasToplevelEvents(e);r<e.length;){let a=e[r];if(r++,!Kt.isScheduleableTask(a)||!a.dur)continue;let o=[];for(let i=a.ts+a.dur;r<e.length&&e[r].ts<i;r++)o.push(e[r]);n.push(new up(a,o))}return n}static linkNetworkNodes(e,n){n.nodes.forEach(r=>{let a=r.record.initiatorRequest||e.record,o=n.idToNodeMap.get(a.requestId)||e,i=!o.isDependentOn(r)&&r.canDependOn(o),c=t.getNetworkInitiators(r.record);if(c.length?c.forEach(l=>{let m=n.urlToNodeMap.get(l)||[];m.length===1&&m[0].startTime<=r.startTime&&!m[0].isDependentOn(r)?r.addDependency(m[0]):i&&o.addDependent(r)}):i&&o.addDependent(r),r!==e&&r.getDependencies().length===0&&r.canDependOn(e)&&r.addDependency(e),!r.record.redirects)return;let u=[...r.record.redirects,r.record];for(let l=1;l<u.length;l++){let m=n.idToNodeMap.get(u[l-1].requestId),p=n.idToNodeMap.get(u[l].requestId);p&&m&&p.addDependency(m)}})}static linkCPUNodes(e,n,r){let a=new Set([Y.TYPES.XHR,Y.TYPES.Fetch,Y.TYPES.Script]);function o(f,y){let b=n.idToNodeMap.get(y);if(!b||b.startTime<=f.startTime)return;let{record:D}=b,T=D.resourceType||D.redirectDestination?.resourceType;a.has(T)&&f.addDependent(b)}s(o,"addDependentNetworkRequest");function i(f,y){if(!y)return;let b=n.frameIdToNodeMap.get(y);b&&(b.startTime>=f.startTime||f.addDependency(b))}s(i,"addDependencyOnFrame");function c(f,y){if(!y)return;let b=-100*1e3,D=n.urlToNodeMap.get(y)||[],T=null,A=1/0;for(let R of D){if(f.startTime<=R.startTime)return;let F=f.startTime-R.endTime;F>=b&&F<A&&(T=R,A=F)}T&&f.addDependency(T)}s(c,"addDependencyOnUrl");let u=new Map;for(let f of r){for(let y of f.childEvents){if(!y.args.data)continue;let b=y.args.data.url,D=(y.args.data.stackTrace||[]).map(T=>T.url).filter(Boolean);switch(y.name){case"TimerInstall":u.set(y.args.data.timerId,f),D.forEach(T=>c(f,T));break;case"TimerFire":{let T=u.get(y.args.data.timerId);if(!T||T.endTime>f.startTime)break;T.addDependent(f);break}case"InvalidateLayout":case"ScheduleStyleRecalculation":i(f,y.args.data.frame),D.forEach(T=>c(f,T));break;case"EvaluateScript":i(f,y.args.data.frame),c(f,b),D.forEach(T=>c(f,T));break;case"XHRReadyStateChange":if(y.args.data.readyState!==4)break;c(f,b),D.forEach(T=>c(f,T));break;case"FunctionCall":case"v8.compile":i(f,y.args.data.frame),c(f,b);break;case"ParseAuthorStyleSheet":i(f,y.args.data.frame),c(f,y.args.data.styleSheetUrl);break;case"ResourceSendRequest":i(f,y.args.data.frame),o(f,y.args.data.requestId),D.forEach(T=>c(f,T));break}}f.getNumberOfDependencies()===0&&f.canDependOn(e)&&f.addDependency(e)}let l=G$*1e3,m=!1,p=!1,g=!1;for(let f of r){let y=!1;!m&&f.childEvents.some(b=>b.name==="Layout")&&(y=m=!0),!p&&f.childEvents.some(b=>b.name==="Paint")&&(y=p=!0),!g&&f.childEvents.some(b=>b.name==="ParseHTML")&&(y=g=!0),!(y||f.event.dur>=l)&&(f.getNumberOfDependencies()===1||f.getNumberOfDependents()<=1)&&t._pruneNode(f)}}static _pruneNode(e){let n=e.getDependencies(),r=e.getDependents();for(let a of n){e.removeDependency(a);for(let o of r)a.addDependent(o)}for(let a of r)e.removeDependent(a)}static createGraph(e,n,r){let a=t.getNetworkNodeOutput(n),o=t.getCPUNodes(e),{requestedUrl:i,mainDocumentUrl:c}=r;if(!i)throw new Error("requestedUrl is required to get the root request");if(!c)throw new Error("mainDocumentUrl is required to get the main resource");let u=Qt.findResourceForUrl(n,i);if(!u)throw new Error("rootRequest not found");let l=a.idToNodeMap.get(u.requestId);if(!l)throw new Error("rootNode not found");let m=Qt.findResourceForUrl(n,c);if(!m)throw new Error("mainDocumentRequest not found");let p=a.idToNodeMap.get(m.requestId);if(!p)throw new Error("mainDocumentNode not found");if(t.linkNetworkNodes(l,a),t.linkCPUNodes(l,a,o),p.setIsMainDocument(!0),hu.hasCycle(l))throw new Error("Invalid dependency graph created, cycle detected");return l}static printGraph(e,n=100){function r(l,m,p=" "){return l+p.repeat(Math.max(m-l.length,0))}s(r,"padRight");let a=[];e.traverse(l=>a.push(l)),a.sort((l,m)=>l.startTime-m.startTime);let o=a[0].startTime,u=(a.reduce((l,m)=>Math.max(l,m.endTime),0)-o)/n;a.forEach(l=>{let m=Math.round((l.startTime-o)/u),p=Math.ceil((l.endTime-l.startTime)/u),g=r("",m)+r("",p,"="),f=l.record?l.record.url:l.type;console.log(r(g,n),`| ${f.slice(0,30)}`)})}static async compute_(e,n){let{trace:r,devtoolsLog:a}=e,[o,i]=await Promise.all([Ye.request(r,n),$.request(a,n)]),c=e.URL||await c_.request(e,n);return t.createGraph(o,i,c)}},kt=W(Qg,["devtoolsLog","trace","URL"])});var V$,us,eh=v(()=>{"use strict";d();ia();He();Yt();St();$n();V$=Xe,us=class t extends V${static{s(this,"NetworkRecorder")}constructor(){super(),this._records=[],this._recordsById=new Map}getRawRecords(){return Array.from(this._records)}onRequestStarted(e){this._records.push(e),this._recordsById.set(e.requestId,e),this.emit("requeststarted",e)}onRequestFinished(e){this.emit("requestfinished",e)}onRequestWillBeSent(e){let n=e.params,r=this._findRealRequestAndSetSession(n.requestId,e.targetType,e.sessionId);if(!r){let i=new Y;i.onRequestWillBeSent(n),i.sessionId=e.sessionId,i.sessionTargetType=e.targetType,this.onRequestStarted(i),N.verbose("network",`request will be sent to ${i.url}`);return}if(!n.redirectResponse)return;let a={...n,initiator:r.initiator,requestId:`${r.requestId}:redirect`},o=new Y;o.onRequestWillBeSent(a),r.onRedirectResponse(n),N.verbose("network",`${r.url} redirected to ${o.url}`),r.redirectDestination=o,o.redirectSource=r,this.onRequestStarted(o),this.onRequestFinished(r)}onRequestServedFromCache(e){let n=e.params,r=this._findRealRequestAndSetSession(n.requestId,e.targetType,e.sessionId);r&&(N.verbose("network",`${r.url} served from cache`),r.onRequestServedFromCache())}onResponseReceived(e){let n=e.params,r=this._findRealRequestAndSetSession(n.requestId,e.targetType,e.sessionId);r&&(N.verbose("network",`${r.url} response received`),r.onResponseReceived(n))}onDataReceived(e){let n=e.params,r=this._findRealRequestAndSetSession(n.requestId,e.targetType,e.sessionId);r&&(N.verbose("network",`${r.url} data received`),r.onDataReceived(n))}onLoadingFinished(e){let n=e.params,r=this._findRealRequestAndSetSession(n.requestId,e.targetType,e.sessionId);r&&(N.verbose("network",`${r.url} loading finished`),r.onLoadingFinished(n),this.onRequestFinished(r))}onLoadingFailed(e){let n=e.params,r=this._findRealRequestAndSetSession(n.requestId,e.targetType,e.sessionId);r&&(N.verbose("network",`${r.url} loading failed`),r.onLoadingFailed(n),this.onRequestFinished(r))}onResourceChangedPriority(e){let n=e.params,r=this._findRealRequestAndSetSession(n.requestId,e.targetType,e.sessionId);r&&r.onResourceChangedPriority(n)}dispatch(e){switch(e.method){case"Network.requestWillBeSent":return this.onRequestWillBeSent(e);case"Network.requestServedFromCache":return this.onRequestServedFromCache(e);case"Network.responseReceived":return this.onResponseReceived(e);case"Network.dataReceived":return this.onDataReceived(e);case"Network.loadingFinished":return this.onLoadingFinished(e);case"Network.loadingFailed":return this.onLoadingFailed(e);case"Network.resourceChangedPriority":return this.onResourceChangedPriority(e);default:return}}_findRealRequestAndSetSession(e,n,r){let a=this._recordsById.get(e);if(!(!a||!a.isValid)){for(;a.redirectDestination;)a=a.redirectDestination;return a.setSession(r),a.sessionTargetType=n,a}}static _chooseInitiatorRequest(e,n){if(e.redirectSource)return e.redirectSource;let r=kt.getNetworkInitiators(e)[0],a=n.get(r)||[];if(a=a.filter(o=>o.responseHeadersEndTime<=e.networkRequestTime&&o.finished&&!o.failed),a.length>1){let o=a.filter(i=>i.resourceType!==Y.TYPES.Other);o.length&&(a=o)}if(a.length>1){let o=a.filter(i=>i.frameId===e.frameId);o.length&&(a=o)}if(a.length>1&&e.initiator.type==="parser"){let o=a.filter(i=>i.resourceType===Y.TYPES.Document);o.length&&(a=o)}if(a.length>1){let o=a.filter(i=>i.isLinkPreload);if(o.length){let i=a.filter(u=>!u.isLinkPreload),c=i.every(u=>u.fromDiskCache||u.fromMemoryCache);i.length&&c&&(a=o)}}return a.length===1?a[0]:null}static recordsFromLogs(e){let n=new t;e.forEach(o=>n.dispatch(o));let r=n.getRawRecords().filter(o=>o.isValid),a=new Map;for(let o of r){let i=a.get(o.url)||[];i.push(o),a.set(o.url,i)}for(let o of r){let i=t._chooseInitiatorRequest(o,a);i&&o.setInitiatorRequest(i);let c=o;for(;c.redirectDestination;)c=c.redirectDestination;if(c===o||c.redirects)continue;let u=[];for(let l=c.redirectSource;l;l=l.redirectSource)u.unshift(l);c.redirects=u}return r}}});var th,$,De=v(()=>{"use strict";d();Yt();we();eh();th=class{static{s(this,"NetworkRecords")}static async compute_(e){return us.recordsFromLogs(e)}},$=W(th,null)});var nh,dr,Xo=v(()=>{"use strict";d();we();Jo();De();nh=class t{static{s(this,"NetworkAnalysis")}static computeRTTAndServerResponseTime(e){let n=new Map;for(let[c,u]of Qt.estimateRTTByOrigin(e).entries())n.set(c,u.min);let r=Math.min(...Array.from(n.values())),a=Qt.estimateServerResponseTimeByOrigin(e,{rttByOrigin:n}),o=new Map,i=new Map;for(let[c,u]of a.entries()){let l=n.get(c)||r;o.set(c,l-r),i.set(c,u.median)}return{rtt:r,additionalRttByOrigin:o,serverResponseTimeByOrigin:i}}static async compute_(e,n){let r=await $.request(e,n),a=Qt.estimateThroughput(r),o=t.computeRTTAndServerResponseTime(r);return{throughput:a,...o}}},dr=W(nh,null)});var rh,Ht,tr=v(()=>{"use strict";d();we();Vn();Yg();Xo();rh=class{static{s(this,"LoadSimulator")}static async compute_(e,n){let{throttlingMethod:r,throttling:a,precomputedLanternData:o}=e.settings,i=await dr.request(e.devtoolsLog,n),c={additionalRttByOrigin:i.additionalRttByOrigin,serverResponseTimeByOrigin:i.serverResponseTimeByOrigin,observedThroughput:i.throughput};switch(o&&(c.additionalRttByOrigin=new Map(Object.entries(o.additionalRttByOrigin)),c.serverResponseTimeByOrigin=new Map(Object.entries(o.serverResponseTimeByOrigin))),r){case"provided":c.rtt=i.rtt,c.throughput=i.throughput,c.cpuSlowdownMultiplier=1,c.layoutTaskMultiplier=1;break;case"devtools":a&&(c.rtt=a.requestLatencyMs/Wn.DEVTOOLS_RTT_ADJUSTMENT_FACTOR,c.throughput=a.downloadThroughputKbps*1024/Wn.DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR),c.cpuSlowdownMultiplier=1,c.layoutTaskMultiplier=1;break;case"simulate":a&&(c.rtt=a.rttMs,c.throughput=a.throughputKbps*1024,c.cpuSlowdownMultiplier=a.cpuSlowdownMultiplier);break;default:break}return new gu(c)}static convertAnalysisToSaveableLanternData(e){let n={additionalRttByOrigin:{},serverResponseTimeByOrigin:{}};for(let[r,a]of e.additionalRttByOrigin.entries())r.startsWith("http")&&(n.additionalRttByOrigin[r]=a);for(let[r,a]of e.serverResponseTimeByOrigin.entries())r.startsWith("http")&&(n.serverResponseTimeByOrigin[r]=a);return n}},Ht=W(rh,["devtoolsLog","settings"])});function l_(t){if(N.log("Reading artifacts from disk:",t),!Un.existsSync(t))throw new Error("No saved artifacts found at "+t);let e=Un.readFileSync(Ot.join(t,ah),"utf8"),n=JSON.parse(e,G.parseReviver),r=Un.readdirSync(t);return n.devtoolsLogs={},r.filter(a=>a.endsWith(dp)).forEach(a=>{let o=a.replace(dp,""),i=JSON.parse(Un.readFileSync(Ot.join(t,a),"utf8"));n.devtoolsLogs[o]=i,o==="defaultPass"&&(n.DevtoolsLog=i),o==="pageLoadError-defaultPass"&&(n.DevtoolsLogError=i)}),n.traces={},r.filter(a=>a.endsWith(lp)).forEach(a=>{let o=Un.readFileSync(Ot.join(t,a),{encoding:"utf-8"}),i=JSON.parse(o),c=a.replace(lp,"");n.traces[c]=Array.isArray(i)?{traceEvents:i}:i,c==="defaultPass"&&(n.Trace=n.traces[c]),c==="pageLoadError-defaultPass"&&(n.TraceError=n.traces[c])}),Array.isArray(n.Timing)&&n.Timing.forEach(a=>a.gather=!0),n}function $$(t,e){return e instanceof Error?G.stringifyReplacer(e):e}async function d_(t,e){let n={msg:"Saving artifacts",id:"lh:assetSaver:saveArtifacts"};N.time(n),Un.mkdirSync(e,{recursive:!0});let r=Un.readdirSync(e);for(let m of r)(m.endsWith(lp)||m.endsWith(dp)||m===ah)&&Un.unlinkSync(`${e}/${m}`);let{traces:a,devtoolsLogs:o,DevtoolsLog:i,Trace:c,...u}=t;if(a)for(let[m,p]of Object.entries(a))await K$(p,`${e}/${m}${lp}`);if(o)for(let[m,p]of Object.entries(o))await J$(p,`${e}/${m}${dp}`);let l=JSON.stringify(u,$$,2)+`
+`;Un.writeFileSync(`${e}/${ah}`,l,"utf8"),N.log("Artifacts saved to disk in folder:",e),N.timeEnd(n)}function m_(t,e){Un.writeFileSync(`${e}/lhr.report.json`,JSON.stringify(t,null,2))}function*p_(t){if(yield`[
+`,t.length>0){let n=t[Symbol.iterator](),r=n.next().value;yield`  ${JSON.stringify(r)}`;let a=500,o="";for(let i of n)o+=`,
+  ${JSON.stringify(i)}`,a--,a===0&&(yield o,a=500,o="");yield o}yield`
+]`}function*Y$(t){let{traceEvents:e,...n}=t;yield`{
+`,yield'"traceEvents": ',yield*p_(e);for(let[r,a]of Object.entries(n))yield`,
+"${r}": ${JSON.stringify(a,null,2)}`;yield`}
+`}async function K$(t,e){let n=Y$(t),r=Un.createWriteStream(e);return Gg.promises.pipeline(n,r)}function J$(t,e){let n=Un.createWriteStream(e);return Gg.promises.pipeline(function*(){yield*p_(t),yield`
+`},n)}var ah,lp,dp,f_=v(()=>{"use strict";d();ca();qo();Wg();lu();He();Yg();XR();ZR();Xo();tr();Bt();rs();ah="artifacts.json",lp=".trace.json",dp=".devtoolslog.json";s(l_,"loadArtifacts");s($$,"stringifyReplacer");s(d_,"saveArtifacts");s(m_,"saveLhr");s(p_,"arrayOfObjectsJsonGenerator");s(Y$,"traceJsonGenerator");s(K$,"saveTrace");s(J$,"saveDevtoolsLog")});var g_={};S(g_,{default:()=>Z$});var Z$,h_=v(()=>{d();Z$={}});async function nY(t){if(t.flags.enableErrorReporting&&ls._shouldSample())try{let e=await Promise.resolve().then(()=>(h_(),g_));e.init({...t.environmentData,dsn:Q$});let n={...t.flags.throttling,channel:t.flags.channel||"cli",url:t.url,formFactor:t.flags.formFactor,throttlingMethod:t.flags.throttlingMethod};e.setExtras(n),ls.captureMessage=(...a)=>e.captureMessage(...a),ls.captureBreadcrumb=(...a)=>e.addBreadcrumb(...a),ls.getContext=()=>n;let r=new Map;ls.captureException=async(a,o={})=>{if(!a||a.expected)return;let i=o.tags||{};if(i.audit){let u=`audit-${i.audit}-${a.message}`;if(r.has(u))return;r.set(u,!0)}if(i.gatherer){let u=`gatherer-${i.gatherer}-${a.message}`;if(r.has(u))return;r.set(u,!0)}let c=tY.find(u=>u.pattern.test(a.message));c&&c.rate<=Math.random()||(a.protocolMethod&&(o.fingerprint=["{{ default }}",a.protocolMethod,a.protocolError],o.tags=o.tags||{},o.tags.protocolMethod=a.protocolMethod),e.withScope(u=>{o.level&&u.setLevel(o.level),o.tags&&u.setTags(o.tags);let l;o.extra&&(l={...o.extra}),a.extra&&(l={...l,...a.extra}),l&&u.setExtras(l),e.captureException(a)}))}}catch{N.warn("sentry","Could not load Sentry, errors will not be reported.")}}var Q$,eY,tY,oh,ls,en,da=v(()=>{"use strict";d();He();Q$="https://a6bb0da87ee048cc9ae2a345fc09ab2e:63a7029f46f74265981b7e005e0f69f8@sentry.io/174697",eY=.01,tY=[],oh=s(()=>{},"noop"),ls={init:nY,captureMessage:oh,captureBreadcrumb:oh,getContext:oh,captureException:async()=>{},_shouldSample(){return eY>=Math.random()}};s(nY,"init");en=ls});var ds,y_=v(()=>{d();ds={}});var ms,mp=v(()=>{"use strict";d();y_();ms=class t{static{s(this,"ReportGenerator")}static replaceStrings(e,n){if(n.length===0)return e;let r=n[0],a=n.slice(1);return e.split(r.search).map(o=>t.replaceStrings(o,a)).join(r.replacement)}static sanitizeJson(e){return JSON.stringify(e).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}static generateReportHtml(e){let n=t.sanitizeJson(e),r=ds.REPORT_JAVASCRIPT.replace(/<\//g,"\\u003c/");return t.replaceStrings(ds.REPORT_TEMPLATE,[{search:"%%LIGHTHOUSE_JSON%%",replacement:n},{search:"%%LIGHTHOUSE_JAVASCRIPT%%",replacement:r}])}static generateFlowReportHtml(e){let n=t.sanitizeJson(e),r=ds.FLOW_REPORT_JAVASCRIPT.replace(/<\//g,"\\u003c/");return t.replaceStrings(ds.FLOW_REPORT_TEMPLATE,[{search:"%%LIGHTHOUSE_FLOW_JSON%%",replacement:n},{search:"%%LIGHTHOUSE_FLOW_JAVASCRIPT%%",replacement:r},{search:"/*%%LIGHTHOUSE_FLOW_CSS%%*/",replacement:ds.FLOW_REPORT_CSS}])}static generateReportCSV(e){let n=`\r
+`,r=",",a=s(u=>`"${u.replace(/"/g,'""')}"`,"escape"),o=s(u=>u.map(l=>l===null?"null":l.toString()).map(a),"rowFormatter"),i=[],c=["requestedUrl","finalDisplayedUrl","fetchTime","gatherMode"];i.push(o(c)),i.push(o(c.map(u=>e[u]??null))),i.push([]),i.push(["category","score"]);for(let u of Object.values(e.categories))i.push(o([u.id,u.score]));i.push([]),i.push(["category","audit","score","displayValue","description"]);for(let u of Object.values(e.categories))for(let l of u.auditRefs){let m=e.audits[l.id];m&&i.push(o([u.id,l.id,m.score,m.displayValue||"",m.description]))}return i.map(u=>u.join(r)).join(n)}static isFlowResult(e){return"steps"in e}static generateReport(e,n){let r=Array.isArray(n);typeof n=="string"&&(n=[n]);let a=n.map(o=>{if(o==="html")return t.isFlowResult(e)?t.generateFlowReportHtml(e):t.generateReportHtml(e);if(o==="csv"){if(t.isFlowResult(e))throw new Error("CSV output is not support for user flows");return t.generateReportCSV(e)}if(o==="json")return JSON.stringify(e,null,2);throw new Error("Invalid output mode: "+o)});return r?a:a[0]}}});var T_=L((xve,E_)=>{d();var v_=/:\/\/(\S*?)(:\d+)?(\/|$)/,b_=/([a-z0-9.-]+\.[a-z0-9]+|localhost)/i,rY=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,aY=/[^.]+\.([^.]+|(gov|com|co|ne)\.\w{2})$/i;function w_(t){return typeof t!="string"||t.length>1e4||t.startsWith("data:")?null:v_.test(t)?t.match(v_)[1]:b_.test(t)?t.match(b_)[0]:null}s(w_,"getDomainFromOriginOrURL");function ih(t){let e=w_(t);if(!e)return null;if(rY.test(e))return e;let n=e.match(aY);return n&&n[0]||e}s(ih,"getRootDomain");function oY(t,e){return t.length<=e.length?t:t.split(".").slice(1).join(".")}s(oY,"sliceSubdomainFromDomain");function D_(t,e,n,r){let a=w_(r),o=ih(a);if(!(!a||!o)){if(t.has(a))return t.get(a);for(let i=a;i.length>o.length;i=oY(i,o))if(e.has(i))return e.get(i);if(n.has(o))return n.get(o)}}s(D_,"getEntityInDataset");function iY(t,e,n,r){let a=D_(t,e,n,r),o=a&&a.products;if(o&&typeof r=="string"){for(let i of o)for(let c of i.urlPatterns)if(c instanceof RegExp&&c.test(r)||typeof c=="string"&&r.includes(c))return i}}s(iY,"getProductInDataset");function sY(t){return t.map(e=>{let n={company:e.name,categories:[e.category],...e},r=(e.products||[]).map(a=>({company:n.company,category:n.category,categories:[n.category],facades:[],...a,urlPatterns:(a.urlPatterns||[]).map(o=>o.startsWith("REGEXP:")?new RegExp(o.slice(7)):o)}));return n.products=r,n})}s(sY,"cloneEntities");function cY(t){let e=sY(t),n=new Map,r=new Map,a=new Map;for(let c of e){c.totalExecutionTime=Number(c.totalExecutionTime)||0,c.totalOccurrences=Number(c.totalOccurrences)||0,c.averageExecutionTime=c.totalExecutionTime/c.totalOccurrences;for(let u of c.domains){if(n.has(u)){let m=n.get(u);throw new Error(`Duplicate domain ${u} (${c.name} and ${m.name})`)}n.set(u,c);let l=ih(u);if(u.startsWith("*.")){let m=u.slice(2);m===l?r.set(l,c):a.set(m,c)}}}for(let[c,u]of r.entries())u||r.delete(c);let o=D_.bind(null,n,a,r),i=iY.bind(null,n,a,r);return{getEntity:o,getProduct:i,getRootDomain:ih,entities:e}}s(cY,"createAPIFromDataset");E_.exports={createAPIFromDataset:cY}});var S_=L((Fve,uY)=>{uY.exports=[{name:"Google/Doubleclick Ads",company:"Google",homepage:"https://marketingplatform.google.com/about/enterprise/",category:"ad",domains:["adservice.google.com","adservice.google.com.au","adservice.google.com.sg","adservice.google.com.br","adservice.google.com.ua","adservice.google.co.uk","adservice.google.co.jp","adservice.google.co.in","adservice.google.co.kr","adservice.google.co.id","adservice.google.co.nz","adservice.google.ie","adservice.google.se","adservice.google.de","adservice.google.ca","adservice.google.be","adservice.google.es","adservice.google.ch","adservice.google.fr","adservice.google.nl","*.googleadservices.com","*.googlesyndication.com","*.googletagservices.com","*.2mdn.net","*.doubleclick.net"]},{name:"Facebook",homepage:"https://www.facebook.com",category:"social",domains:["*.facebook.com","*.atlassbx.com","*.fbsbx.com","fbcdn-photos-e-a.akamaihd.net","*.facebook.net","*.fbcdn.net"],products:[{name:"Facebook Messenger Customer Chat",urlPatterns:["REGEXP:connect\\.facebook\\.net\\/.*\\/sdk\\/xfbml\\.customerchat\\.js"],facades:[{name:"React Live Chat Loader",repo:"https://github.com/calibreapp/react-live-chat-loader"}]}]},{name:"Instagram",homepage:"https://www.instagram.com",category:"social",domains:["*.cdninstagram.com","*.instagram.com"]},{name:"Google CDN",company:"Google",homepage:"https://developers.google.com/speed/libraries/",category:"cdn",domains:["ajax.googleapis.com","commondatastorage.googleapis.com","www.gstatic.com","ssl.gstatic.com"]},{name:"Google Maps",company:"Google",homepage:"https://www.google.com/maps",category:"utility",domains:["maps.google.com","maps-api-ssl.google.com","maps.googleapis.com","mts.googleapis.com","mt.googleapis.com","mt0.googleapis.com","mt1.googleapis.com","mt2.googleapis.com","mt3.googleapis.com","khm0.googleapis.com","khm1.googleapis.com","khms.googleapis.com","khms1.googleapis.com","khms2.googleapis.com","maps.gstatic.com"]},{name:"Other Google APIs/SDKs",company:"Google",homepage:"https://developers.google.com/apis-explorer/#p/",category:"utility",domains:["accounts.google.com","apis.google.com","calendar.google.com","clients2.google.com","cse.google.com","news.google.com","pay.google.com","payments.google.com","play.google.com","smartlock.google.com","www.google.com","www.google.de","www.google.co.jp","www.google.com.au","www.google.co.uk","www.google.ie","www.google.com.sg","www.google.co.in","www.google.com.br","www.google.ca","www.google.co.kr","www.google.co.nz","www.google.co.id","www.google.fr","www.google.be","www.google.com.ua","www.google.nl","www.google.ru","www.google.se","www.googleapis.com","imasdk.googleapis.com","storage.googleapis.com","translate.googleapis.com","translate.google.com","translate-pa.googleapis.com","lh3.googleusercontent.com","jnn-pa.googleapis.com","csi.gstatic.com"]},{name:"Firebase",homepage:"https://developers.google.com/apis-explorer/#p/",category:"utility",domains:["firebasestorage.googleapis.com","firestore.googleapis.com","firebaseinstallations.googleapis.com","firebase.googleapis.com","firebaseremoteconfig.googleapis.com"]},{name:"Google Analytics",company:"Google",homepage:"https://marketingplatform.google.com/about/analytics/",category:"analytics",domains:["*.google-analytics.com","*.urchin.com","analytics.google.com"]},{name:"Google Optimize",company:"Google",homepage:"https://marketingplatform.google.com/about/optimize/",category:"analytics",domains:["www.googleoptimize.com"]},{name:"Google AMP",company:"Google",homepage:"https://github.com/google/amp-client-id-library",category:"analytics",domains:["ampcid.google.com"]},{name:"Google Tag Manager",company:"Google",homepage:"https://marketingplatform.google.com/about/tag-manager/",category:"tag-manager",domains:["*.googletagmanager.com"]},{name:"Google Fonts",company:"Google",homepage:"https://fonts.google.com/",category:"cdn",domains:["fonts.googleapis.com","fonts.gstatic.com"]},{name:"Adobe TypeKit",company:"Adobe",homepage:"https://fonts.adobe.com/",category:"cdn",domains:["*.typekit.com","*.typekit.net"]},{name:"YouTube",homepage:"https://youtube.com",category:"video",domains:["*.youtube.com","*.ggpht.com","*.youtube-nocookie.com","*.ytimg.com"],products:[{name:"YouTube Embedded Player",urlPatterns:["youtube.com/embed/"],facades:[{name:"Lite YouTube",repo:"https://github.com/paulirish/lite-youtube-embed"},{name:"Ngx Lite Video",repo:"https://github.com/karim-mamdouh/ngx-lite-video"}]}]},{name:"Twitter",homepage:"https://twitter.com",category:"social",domains:["*.vine.co","*.twimg.com","*.twitpic.com","platform.twitter.com","syndication.twitter.com"]},{name:"AddThis",homepage:"https://www.addthis.com/",category:"social",domains:["*.addthis.com","*.addthiscdn.com","*.addthisedge.com"]},{name:"AddToAny",homepage:"https://www.addtoany.com/",category:"social",domains:["*.addtoany.com"]},{name:"Akamai",homepage:"https://www.akamai.com/",category:"cdn",domains:["23.62.3.183","*.akamaitechnologies.com","*.akamaitechnologies.fr","*.akamai.net","*.akamaiedge.net","*.akamaihd.net","*.akamaized.net","*.edgefcs.net","*.edgekey.net","edgesuite.net","*.srip.net"]},{name:"Blogger",homepage:"https://www.blogger.com/",category:"hosting",domains:["*.blogblog.com","*.blogger.com","*.blogspot.com","images-blogger-opensocial.googleusercontent.com"]},{name:"Gravatar",homepage:"https://en.gravatar.com/",category:"social",domains:["*.gravatar.com"]},{name:"Yandex Metrica",company:"Yandex",homepage:"https://metrica.yandex.com/about?",category:"analytics",domains:["mc.yandex.ru","mc.yandex.com","d31j93rd8oukbv.cloudfront.net"]},{name:"Hotjar",homepage:"https://www.hotjar.com/",category:"analytics",domains:["*.hotjar.com","*.hotjar.io"]},{name:"Baidu Analytics",homepage:"https://tongji.baidu.com/web/welcome/login",category:"analytics",domains:["hm.baidu.com","hmcdn.baidu.com"]},{name:"Insider",homepage:"",category:"analytics",domains:["*.useinsider.com"]},{name:"Adobe Experience Cloud",company:"Adobe",homepage:"",category:"analytics",domains:["*.2o7.net","du8783wkf05yr.cloudfront.net","*.hitbox.com","*.imageg.net","*.nedstat.com","*.omtrdc.net"]},{name:"Adobe Tag Manager",company:"Adobe",homepage:"https://www.adobe.com/experience-platform/",category:"tag-manager",domains:["*.adobedtm.com","*.demdex.net","*.everesttech.net","sstats.adobe.com","hbrt.adobe.com"]},{name:"jQuery CDN",homepage:"https://code.jquery.com/",category:"cdn",domains:["*.jquery.com"]},{name:"Cloudflare CDN",homepage:"https://cdnjs.com/",category:"cdn",domains:["cdnjs.cloudflare.com","amp.cloudflare.com"]},{name:"Cloudflare",homepage:"https://www.cloudflare.com/website-optimization/",category:"utility",domains:["ajax.cloudflare.com","*.nel.cloudflare.com","static.cloudflareinsights.com"]},{name:"WordPress",company:"Automattic",homepage:"https://wp.com/",category:"hosting",domains:["*.wordpress.com","s0.wp.com","s2.wp.com","*.w.org","c0.wp.com","s1.wp.com","i0.wp.com","i1.wp.com","i2.wp.com","widgets.wp.com"]},{name:"WordPress Site Stats",company:"Automattic",homepage:"https://wp.com/",category:"analytics",domains:["pixel.wp.com","stats.wp.com"]},{name:"Hatena Blog",homepage:"https://hatenablog.com/",category:"hosting",domains:["*.st-hatena.com","*.hatena.ne.jp"]},{name:"Shopify",homepage:"https://www.shopify.com/",category:"hosting",domains:["*.shopify.com","*.shopifyapps.com","*.shopifycdn.com","*.shopifysvc.com"]},{name:"Dealer",homepage:"https://www.dealer.com/",category:"hosting",domains:["*.dealer.com"]},{name:"PIXNET",homepage:"https://www.pixnet.net/",category:"social",domains:["*.pixfs.net","*.pixnet.net"]},{name:"Moat",homepage:"https://moat.com/",category:"ad",domains:["*.moatads.com","*.moatpixel.com"]},{name:"33 Across",homepage:"https://33across.com/",category:"ad",domains:["*.33across.com"]},{name:"OpenX",homepage:"https://www.openx.com/",category:"ad",domains:["*.deliverimp.com","*.openxadexchange.com","*.servedbyopenx.com","*.jump-time.net","*.openx.net"]},{name:"Amazon Ads",homepage:"https://ad.amazon.com/",category:"ad",domains:["*.amazon-adsystem.com"]},{name:"Rubicon Project",homepage:"https://rubiconproject.com/",category:"ad",domains:["*.rubiconproject.com","*.chango.com","*.fimserve.com"]},{name:"The Trade Desk",homepage:"https://www.thetradedesk.com/",category:"ad",domains:["*.adsrvr.org","d1eoo1tco6rr5e.cloudfront.net"]},{name:"Bidswitch",homepage:"https://www.bidswitch.com/",category:"ad",domains:["*.bidswitch.net"]},{name:"LiveRamp IdentityLink",homepage:"https://liveramp.com/discover-identitylink/",category:"analytics",domains:["*.circulate.com","*.rlcdn.com"]},{name:"Drawbridge",homepage:"https://www.drawbridge.com/",category:"ad",domains:["*.adsymptotic.com"]},{name:"AOL / Oath / Verizon Media",homepage:"https://www.oath.com/",category:"ad",domains:["*.advertising.com","*.aol.com","*.aolcdn.com","*.blogsmithmedia.com","*.oath.com","*.aol.net","*.tacoda.net","*.aol.co.uk"]},{name:"Xaxis",homepage:"https://www.xaxis.com/",category:"ad",domains:["*.247realmedia.com","*.mookie1.com","*.gmads.net"]},{name:"Freshdesk",company:"Freshworks",homepage:"https://freshdesk.com/",category:"customer-success",domains:["d36mpcpuzc4ztk.cloudfront.net"]},{name:"Help Scout",homepage:"https://www.helpscout.net/",category:"customer-success",domains:["djtflbt20bdde.cloudfront.net","*.helpscout.net"],products:[{name:"Help Scout Beacon",urlPatterns:["beacon-v2.helpscout.net"],facades:[{name:"React Live Chat Loader",repo:"https://github.com/calibreapp/react-live-chat-loader"}]}]},{name:"Alexa",homepage:"https://www.alexa.com/",category:"analytics",domains:["*.alexametrics.com","d31qbv1cthcecs.cloudfront.net"]},{name:"OneSignal",homepage:"https://onesignal.com/",category:"utility",domains:["*.onesignal.com"]},{name:"Lucky Orange",homepage:"https://www.luckyorange.com/",category:"analytics",domains:["*.luckyorange.com","d10lpsik1i8c69.cloudfront.net","*.luckyorange.net"]},{name:"Crazy Egg",homepage:"https://www.crazyegg.com/",category:"analytics",domains:["*.cetrk.com","*.crazyegg.com","*.hellobar.com","dnn506yrbagrg.cloudfront.net"]},{name:"Yandex Ads",company:"Yandex",homepage:"https://yandex.com/adv/",category:"ad",domains:["an.yandex.ru"]},{name:"Salesforce",homepage:"https://www.salesforce.com/products/marketing-cloud/",category:"analytics",domains:["*.krxd.net"]},{name:"Salesforce Commerce Cloud",homepage:"https://www.salesforce.com/products/commerce-cloud/overview/",category:"hosting",domains:["*.cquotient.com","*.demandware.net","demandware.edgesuite.net"]},{name:"Optimizely",homepage:"https://www.optimizely.com/",category:"analytics",domains:["*.optimizely.com"]},{name:"LiveChat",homepage:"https://www.livechat.com/",category:"customer-success",domains:["*.livechatinc.com","*.livechat.com","*.livechat-static.com"]},{name:"VK",homepage:"https://vk.com/",category:"social",domains:["*.vk.com"]},{name:"Tumblr",homepage:"https://tumblr.com/",category:"social",domains:["*.tumblr.com"]},{name:"Wistia",homepage:"https://wistia.com/",category:"video",domains:["*.wistia.com","embedwistia-a.akamaihd.net","*.wistia.net"]},{name:"Brightcove",homepage:"https://www.brightcove.com/en/",category:"video",domains:["*.brightcove.com","*.brightcove.net","*.zencdn.net"]},{name:"JSDelivr CDN",homepage:"https://www.jsdelivr.com/",category:"cdn",domains:["*.jsdelivr.net"]},{name:"Sumo",homepage:"https://sumo.com/",category:"marketing",domains:["*.sumo.com","*.sumome.com","sumo.b-cdn.net"]},{name:"Vimeo",homepage:"https://vimeo.com/",category:"video",domains:["*.vimeo.com","*.vimeocdn.com"],products:[{name:"Vimeo Embedded Player",urlPatterns:["player.vimeo.com/video/"],facades:[{name:"Lite Vimeo",repo:"https://github.com/slightlyoff/lite-vimeo"},{name:"Lite Vimeo Embed",repo:"https://github.com/luwes/lite-vimeo-embed"},{name:"Ngx Lite Video",repo:"https://github.com/karim-mamdouh/ngx-lite-video"}]}]},{name:"Disqus",homepage:"https://disqus.com/",category:"social",domains:["*.disqus.com","*.disquscdn.com"]},{name:"Yandex APIs",company:"Yandex",homepage:"https://yandex.ru/",category:"utility",domains:["api-maps.yandex.ru","money.yandex.ru"]},{name:"Yandex CDN",company:"Yandex",homepage:"https://yandex.ru/",category:"cdn",domains:["*.yandex.st","*.yastatic.net"]},{name:"Integral Ad Science",homepage:"https://integralads.com/uk/",category:"ad",domains:["*.adsafeprotected.com","*.iasds01.com"]},{name:"Tealium",homepage:"https://tealium.com/",category:"tag-manager",domains:["*.aniview.com","*.delvenetworks.com","*.limelight.com","*.tiqcdn.com","*.llnwd.net","*.tealiumiq.com"]},{name:"Pubmatic",homepage:"https://pubmatic.com/",category:"ad",domains:["*.pubmatic.com"]},{name:"Olark",homepage:"https://www.olark.com/",category:"customer-success",domains:["*.olark.com"]},{name:"Tawk.to",homepage:"https://www.tawk.to/",category:"customer-success",domains:["*.tawk.to"]},{name:"OptinMonster",homepage:"https://optinmonster.com/",category:"marketing",domains:["*.opmnstr.com","*.optmnstr.com","*.optmstr.com"]},{name:"ZenDesk",homepage:"https://zendesk.com/",category:"customer-success",domains:["*.zdassets.com","*.zendesk.com","*.zopim.com"]},{name:"Pusher",homepage:"https://pusher.com/",category:"utility",domains:["*.pusher.com","*.pusherapp.com"]},{name:"Drift",homepage:"https://www.drift.com/",category:"marketing",domains:["*.drift.com","*.driftt.com"],products:[{name:"Drift Live Chat",urlPatterns:["REGEXP:js\\.driftt\\.com\\/include\\/.*\\/.*\\.js"],facades:[{name:"React Live Chat Loader",repo:"https://github.com/calibreapp/react-live-chat-loader"}]}]},{name:"Sentry",homepage:"https://sentry.io/",category:"utility",domains:["*.getsentry.com","*.ravenjs.com","*.sentry-cdn.com","*.sentry.io"]},{name:"Amazon Web Services",homepage:"https://aws.amazon.com/s3/",category:"other",domains:["*.amazon.com","*.amazonaws.com","*.amazonwebapps.com","*.amazonwebservices.com","*.elasticbeanstalk.com","*.images-amazon.com","*.amazon.co.uk"]},{name:"Amazon Pay",homepage:"https://pay.amazon.com",category:"utility",domains:["payments.amazon.com","*.payments-amazon.com"]},{name:"Media.net",homepage:"https://www.media.net/",category:"ad",domains:["*.media.net","*.mnet-ad.net"]},{name:"Yahoo!",homepage:"https://www.yahoo.com/",category:"ad",domains:["*.bluelithium.com","*.hostingprod.com","*.lexity.com","*.yahoo.com","*.yahooapis.com","*.yimg.com","*.zenfs.com","*.yahoo.net"]},{name:"Adroll",homepage:"https://www.adroll.com/",category:"ad",domains:["*.adroll.com"]},{name:"Twitch",homepage:"https://twitch.tv/",category:"video",domains:["*.twitch.tv"]},{name:"Taboola",homepage:"https://www.taboola.com/",category:"ad",domains:["*.taboola.com","*.taboolasyndication.com"]},{name:"Sizmek",homepage:"https://www.sizmek.com/",category:"ad",domains:["*.serving-sys.com","*.peer39.net"]},{name:"Scorecard Research",homepage:"https://www.scorecardresearch.com/",category:"ad",domains:["*.scorecardresearch.com"]},{name:"Criteo",homepage:"https://www.criteo.com/",category:"ad",domains:["*.criteo.com","*.emailretargeting.com","*.criteo.net"]},{name:"Segment",homepage:"https://segment.com/",category:"analytics",domains:["*.segment.com","*.segment.io"]},{name:"ShareThis",homepage:"https://www.sharethis.com/",category:"social",domains:["*.sharethis.com"]},{name:"Distil Networks",homepage:"https://www.distilnetworks.com/",category:"utility",domains:["*.areyouahuman.com"]},{name:"Connexity",homepage:"https://connexity.com/",category:"analytics",domains:["*.connexity.net"]},{name:"Popads",homepage:"https://www.popads.net/",category:"ad",domains:["*.popads.net"]},{name:"CreateJS CDN",homepage:"https://code.createjs.com/",category:"cdn",domains:["*.createjs.com"]},{name:"Squarespace",homepage:"https://www.squarespace.com/",category:"hosting",domains:["*.squarespace.com"]},{name:"Media Math",homepage:"https://www.mediamath.com/",category:"ad",domains:["*.mathads.com","*.mathtag.com"]},{name:"Mixpanel",homepage:"https://mixpanel.com/",category:"analytics",domains:["*.mixpanel.com","*.mxpnl.com"]},{name:"FontAwesome CDN",homepage:"https://fontawesome.com/",category:"cdn",domains:["*.fontawesome.com"]},{name:"Hubspot",homepage:"https://hubspot.com/",category:"marketing",domains:["*.hs-scripts.com","*.hubspot.com","*.leadin.com","*.hs-analytics.net","*.hscollectedforms.net","*.hscta.net","*.hsforms.net","*.hsleadflows.net","*.hsstatic.net","*.hubspot.net","*.hsforms.com","*.hs-banner.com","*.hs-embed-reporting.com","*.hs-growth-metrics.com","*.hs-data.com","*.hsadspixel.net"]},{name:"Mailchimp",homepage:"https://mailchimp.com/",category:"marketing",domains:["*.chimpstatic.com","*.list-manage.com","*.mailchimp.com"]},{name:"MGID",homepage:"https://www.mgid.com/",category:"ad",domains:["*.mgid.com","*.dt07.net"]},{name:"Stripe",homepage:"https://stripe.com",category:"utility",domains:["*.stripe.com","*.stripecdn.com","*.stripe.network"]},{name:"PayPal",homepage:"https://paypal.com",category:"utility",domains:["*.paypal.com","*.paypalobjects.com"]},{name:"Market GID",homepage:"https://www.marketgid.com/",category:"ad",domains:["*.marketgid.com"]},{name:"Pinterest",homepage:"https://pinterest.com/",category:"social",domains:["*.pinimg.com","*.pinterest.com"]},{name:"New Relic",homepage:"https://newrelic.com/",category:"utility",domains:["*.newrelic.com","*.nr-data.net"]},{name:"AppDynamics",homepage:"https://www.appdynamics.com/",category:"utility",domains:["*.appdynamics.com","*.eum-appdynamics.com","d3tjaysgumg9lf.cloudfront.net"]},{name:"Parking Crew",homepage:"https://parkingcrew.net/",category:"other",domains:["d1lxhc4jvstzrp.cloudfront.net","*.parkingcrew.net"]},{name:"WordAds",company:"Automattic",homepage:"https://wordads.co/",category:"ad",domains:["*.pubmine.com"]},{name:"AppNexus",homepage:"https://www.appnexus.com/",category:"ad",domains:["*.adnxs.com","*.ctasnet.com","*.adrdgt.com"]},{name:"Histats",homepage:"https://www.histats.com/",category:"analytics",domains:["*.histats.com"]},{name:"DoubleVerify",homepage:"https://www.doubleverify.com/",category:"ad",domains:["*.doubleverify.com","*.dvtps.com","*.iqfp1.com"]},{name:"Mediavine",homepage:"https://www.mediavine.com/",category:"ad",domains:["*.mediavine.com"]},{name:"Wix",homepage:"https://www.wix.com/",category:"hosting",domains:["*.parastorage.com","*.wix.com","*.wixstatic.com","*.wixapps.net"]},{name:"Webflow",homepage:"https://webflow.com/",category:"hosting",domains:["*.uploads-ssl.webflow.com","*.assets-global.website-files.com","*.assets.website-files.com"]},{name:"Weebly",homepage:"https://www.weebly.com/",category:"hosting",domains:["*.editmysite.com"]},{name:"LinkedIn",homepage:"https://www.linkedin.com/",category:"social",domains:["*.bizographics.com","platform.linkedin.com","*.slideshare.com","*.slidesharecdn.com"]},{name:"LinkedIn Ads",category:"ad",domains:["*.licdn.com","*.ads.linkedin.com","ads.linkedin.com","www.linkedin.com"]},{name:"Vox Media",homepage:"https://www.voxmedia.com/",category:"content",domains:["*.vox-cdn.com","*.voxmedia.com"]},{name:"Hotmart",homepage:"https://www.hotmart.com/",category:"content",domains:["*.hotmart.com"]},{name:"SoundCloud",homepage:"https://www.soundcloud.com/",category:"content",domains:["*.sndcdn.com","*.soundcloud.com","*.stratus.sc"]},{name:"Spotify",homepage:"https://www.spotify.com/",category:"content",domains:["*.scdn.co","*.spotify.com"]},{name:"AMP",homepage:"https://amp.dev/",category:"content",domains:["*.ampproject.org"]},{name:"Beeketing",homepage:"https://beeketing.com/",category:"marketing",domains:["*.beeketing.com"]},{name:"Albacross",homepage:"https://albacross.com/",category:"marketing",domains:["*.albacross.com"]},{name:"TrafficJunky",homepage:"https://www.trafficjunky.com/",category:"ad",domains:["*.contentabc.com","*.trafficjunky.net"]},{name:"Bootstrap CDN",homepage:"https://www.bootstrapcdn.com/",category:"cdn",domains:["*.bootstrapcdn.com"]},{name:"Shareaholic",homepage:"https://www.shareaholic.com/",category:"social",domains:["*.shareaholic.com","dsms0mj1bbhn4.cloudfront.net"]},{name:"Snowplow",homepage:"https://snowplowanalytics.com/",category:"analytics",domains:["d32hwlnfiv2gyn.cloudfront.net"]},{name:"RD Station",homepage:"https://www.rdstation.com/en/",category:"marketing",domains:["d335luupugsy2.cloudfront.net"]},{name:"Jivochat",homepage:"https://www.jivochat.com/",category:"customer-success",domains:["*.jivosite.com"]},{name:"Listrak",homepage:"https://www.listrak.com/",category:"marketing",domains:["*.listrak.com","*.listrakbi.com"]},{name:"Ontame",homepage:"https://www.ontame.io",category:"analytics",domains:["*.ontame.io"]},{name:"Ipify",homepage:"https://www.ipify.org",category:"utility",domains:["*.ipify.org"]},{name:"Ensighten",homepage:"https://www.ensighten.com/",category:"tag-manager",domains:["*.ensighten.com"]},{name:"EpiServer",homepage:"https://www.episerver.com",category:"content",domains:["*.episerver.net"]},{name:"mPulse",homepage:"https://developer.akamai.com/akamai-mpulse",category:"analytics",domains:["*.akstat.io","*.go-mpulse.net","*.mpulse.net","*.mpstat.us"]},{name:"Pingdom RUM",homepage:"https://www.pingdom.com/product/performance-monitoring/",category:"analytics",domains:["*.pingdom.net"]},{name:"SpeedCurve LUX",company:"SpeedCurve",homepage:"https://speedcurve.com/features/lux/",category:"analytics",domains:["*.speedcurve.com"]},{name:"Radar",company:"Cedexis",homepage:"https://www.cedexis.com/radar/",category:"analytics",domains:["*.cedexis-test.com","*.cedexis.com","*.cmdolb.com","cedexis.leasewebcdn.com","*.cedexis-radar.net","*.cedexis.net","cedexis-test01.insnw.net","cedexisakamaitest.azureedge.net","cedexispub.cdnetworks.net","cs600.wac.alphacdn.net","cs600.wpc.edgecastdns.net","global2.cmdolb.com","img-cedexis.mncdn.com","a-cedexis.msedge.net","zn3vgszfh.fastestcdn.net"]},{name:"Byside",homepage:"https://byside.com",category:"analytics",domains:["*.byside.com"]},{name:"VWO",homepage:"https://vwo.com",category:"analytics",domains:["*.vwo.com","*.visualwebsiteoptimizer.com","d5phz18u4wuww.cloudfront.net","*.wingify.com"]},{name:"Bing Ads",homepage:"https://bingads.microsoft.com",category:"ad",domains:["*.bing.com","*.microsoft.com","*.msn.com","*.s-msft.com","*.s-msn.com","*.msads.net","*.msecnd.net"]},{name:"GoSquared",homepage:"https://www.gosquared.com",category:"analytics",domains:["*.gosquared.com","d1l6p2sc9645hc.cloudfront.net"]},{name:"Usabilla",homepage:"https://usabilla.com",category:"analytics",domains:["*.usabilla.com","d6tizftlrpuof.cloudfront.net"]},{name:"Fastly Insights",homepage:"https://insights.fastlylabs.com",category:"analytics",domains:["*.fastly-insights.com"]},{name:"Visual IQ",homepage:"https://www.visualiq.com",category:"analytics",domains:["*.myvisualiq.net"]},{name:"Snapchat",homepage:"https://www.snapchat.com",category:"analytics",domains:["*.snapchat.com","*.sc-static.net"]},{name:"Atlas Solutions",homepage:"https://atlassolutions.com",category:"analytics",domains:["*.atdmt.com"]},{name:"Quantcast",homepage:"https://www.quantcast.com",category:"analytics",domains:["*.brtstats.com","*.quantcount.com","*.quantserve.com","*.semantictec.com","*.ntv.io"]},{name:"Spiceworks",homepage:"https://www.spiceworks.com",category:"analytics",domains:["*.spiceworks.com"]},{name:"Marketo",homepage:"https://www.marketo.com",category:"analytics",domains:["*.marketo.com","*.mktoresp.com","*.marketo.net"]},{name:"Intercom",homepage:"https://www.intercom.com",category:"customer-success",domains:["*.intercomcdn.com","*.intercom.io"],products:[{name:"Intercom Widget",urlPatterns:["widget.intercom.io","js.intercomcdn.com/shim.latest.js"],facades:[{name:"React Live Chat Loader",repo:"https://github.com/calibreapp/react-live-chat-loader"},{name:"Intercom Facade",repo:"https://github.com/danielbachhuber/intercom-facade/"}]}]},{name:"Unpkg",homepage:"https://unpkg.com",category:"cdn",domains:["*.unpkg.com","*.npmcdn.com"]},{name:"ReadSpeaker",homepage:"https://www.readspeaker.com",category:"other",domains:["*.readspeaker.com"]},{name:"Browsealoud",homepage:"https://www.texthelp.com/en-gb/products/browsealoud/",category:"other",domains:["*.browsealoud.com","*.texthelp.com"]},{name:"15gifts",category:"customer-success",domains:["*.15gifts.com","*.primefuse.com"]},{name:"1xRUN",category:"utility",domains:["*.1xrun.com"]},{name:"2AdPro Media Solutions",category:"ad",domains:["*.2adpro.com"]},{name:"301 Digital Media",category:"content",domains:["*.301ads.com","*.301network.com"]},{name:"360 picnic platform",company:"MediaV",category:"ad",domains:["*.mediav.com"]},{name:"365 Media Group",category:"content",domains:["*.365dm.com"]},{name:"365 Tech Services",category:"hosting",domains:["*.365webservices.co.uk"]},{name:"3D Issue",category:"utility",domains:["*.3dissue.com","*.pressjack.com"]},{name:"47Line Technologies",category:"other",domains:["*.pejs.net"]},{name:"4finance",category:"utility",domains:["*.4finance.com"]},{name:"5miles",category:"content",domains:["*.5milesapp.com"]},{name:"77Tool",company:"77Agency",category:"analytics",domains:["*.77tracking.com"]},{name:"9xb",category:"ad",domains:["*.9xb.com"]},{name:"@UK",category:"hosting",domains:["*.uk-plc.net"]},{name:"A Perfect Pocket",category:"hosting",domains:["*.aperfectpocketdata.com"]},{name:"A-FIS PTE",category:"analytics",domains:["*.websta.me"]},{name:"AB Tasty",category:"analytics",domains:["*.abtasty.com","d1447tq2m68ekg.cloudfront.net"]},{name:"ABA RESEARCH",category:"analytics",domains:["*.abaresearch.uk","qmodal.azurewebsites.net"]},{name:"ADMIZED",category:"ad",domains:["*.admized.com"]},{name:"ADNOLOGIES",category:"ad",domains:["*.heias.com"]},{name:"ADventori",category:"ad",domains:["*.adventori.com"]},{name:"AI Media Group",category:"ad",domains:["*.aimediagroup.com"]},{name:"AIR.TV",category:"ad",domains:["*.air.tv"]},{name:"AKQA",category:"ad",domains:["*.srtk.net"]},{name:"AOL ad",company:"AOL",category:"ad",domains:["*.atwola.com"]},{name:"AOL On",company:"AOL",category:"content",domains:["*.5min.com"]},{name:"AOL Sponsored Listiings",company:"AOL",category:"ad",domains:["*.adsonar.com"]},{name:"APSIS Lead",company:"APSIS International AB",category:"ad",domains:["*.prospecteye.com"]},{name:"APSIS Profile Cloud",company:"APSIS",category:"analytics",domains:["*.innomdc.com"]},{name:"APSIS Forms",company:"APSIS",category:"other",domains:["*.apsisforms.com"]},{name:"ARENA",company:"Altitude",category:"ad",domains:["*.altitude-arena.com"]},{name:"ARM",category:"analytics",domains:["*.tag4arm.com"]},{name:"ASAPP",category:"other",domains:["*.asapp.com"]},{name:"ASP",category:"hosting",domains:["*.goshowoff.com"]},{name:"AT Internet",category:"analytics",domains:["*.ati-host.net"]},{name:"ATTRAQT",category:"utility",domains:["*.attraqt.com","*.locayta.com"]},{name:"AVANSER",category:"analytics",domains:["*.avanser.com.au"]},{name:"AVG",company:"AVG Technologies",category:"utility",domains:["*.avg.com"]},{name:"AWeber",category:"ad",domains:["*.aweber.com"]},{name:"AXS",category:"content",domains:["*.axs.com"]},{name:"Accentuate",company:"Accentuate Digital",category:"utlity",homepage:"https://www.accentuate.io/",domains:["*.accentuate.io"]},{name:"Accenture",category:"analytics",domains:["*.tmvtp.com"]},{name:"Accord Holdings",category:"ad",domains:["*.agcdn.com"]},{name:"Accordant Media",category:"ad",domains:["*.a3cloud.net"]},{name:"Account Kit",category:"other",domains:["*.accountkit.com"]},{name:"Accuen Media (Omnicom Media Group)",category:"content",domains:["*.p-td.com"]},{name:"Accuweather",category:"content",domains:["*.accuweather.com"]},{name:"Acquisio",category:"ad",domains:["*.acq.io"]},{name:"Act-On Software",category:"marketing",domains:["*.actonsoftware.com"]},{name:"ActBlue",category:"other",domains:["*.actblue.com"]},{name:"Active Agent",category:"ad",domains:["*.active-agent.com"]},{name:"ActiveCampaign",category:"ad",domains:["*.trackcmp.net","app-us1.com","*.app-us1.com"]},{name:"AcuityAds",category:"ad",domains:["*.acuityplatform.com"]},{name:"Acxiom",category:"ad",domains:["*.acxiom-online.com","*.acxiomapac.com","*.delivery.net"]},{name:"Ad4Screen",category:"ad",domains:["*.a4.tl"]},{name:"Ad6Media",category:"ad",domains:["*.ad6media.fr"]},{name:"AdCurve",category:"ad",domains:["*.shop2market.com"]},{name:"AdEasy",category:"ad",domains:["*.adeasy.ru"]},{name:"AdExtent",category:"ad",domains:["*.adextent.com"]},{name:"AdForge Edge",company:"AdForge",category:"ad",domains:["*.adforgeinc.com"]},{name:"AdGear",company:"Samsung Electronics",category:"ad",domains:["*.adgear.com","*.adgrx.com"]},{name:"AdInMedia",category:"ad",domains:["*.fastapi.net"]},{name:"AdJug",category:"ad",domains:["*.adjug.com"]},{name:"AdMatic",category:"ad",domains:["*.admatic.com.tr"]},{name:"AdMedia",category:"ad",domains:["*.admedia.com"]},{name:"AdRecover",category:"ad",domains:["*.adrecover.com"]},{name:"AdRiver",category:"ad",domains:["*.adriver.ru"]},{name:"AdSniper",category:"ad",domains:["*.adsniper.ru","*.sniperlog.ru"]},{name:"AdSpeed",category:"ad",domains:["*.adspeed.net"]},{name:"AdSpruce",category:"ad",domains:["*.adspruce.com"]},{name:"AdSupply",category:"ad",domains:["*.doublepimp.com"]},{name:"AdTheorent",category:"ad",domains:["*.adentifi.com"]},{name:"AdThink AudienceInsights",company:"AdThink Media",category:"analytics",domains:["*.audienceinsights.net"]},{name:"AdTrue",company:"FPT AdTrue",category:"ad",domains:["*.adtrue.com"]},{name:"AdYapper",category:"ad",domains:["*.adyapper.com"]},{name:"Adacado",category:"ad",domains:["*.adacado.com"]},{name:"Adap.tv",category:"ad",domains:["*.adap.tv"]},{name:"Adapt Services",category:"hosting",domains:["*.adcmps.com"]},{name:"Adaptive Web",category:"hosting",domains:["*.adaptive.co.uk"]},{name:"Adara Media",category:"ad",domains:["*.yieldoptimizer.com"]},{name:"Adblade",category:"ad",domains:["*.adblade.com"]},{name:"Adbrain",category:"ad",domains:["*.adbrn.com"]},{name:"AddEvent",category:"utility",domains:["*.addevent.com"]},{name:"AddShoppers",category:"social",domains:["*.addshoppers.com","d3rr3d0n31t48m.cloudfront.net","*.shop.pe"]},{name:"AddThisEvent",category:"hosting",domains:["*.addthisevent.com"]},{name:"Addoox MetaNetwork",company:"Addoox",category:"ad",domains:["*.metanetwork.net"]},{name:"Addvantage Media",category:"ad",domains:["*.addvantagemedia.com","*.simplytechnology.net"]},{name:"AD EBis",category:"analytics",homepage:"https://www.ebis.ne.jp/",domains:["*.ebis.ne.jp"]},{name:"Adecs",category:"customer-success",domains:["*.adecs.co.uk"]},{name:"Adelphic",category:"ad",domains:["*.ipredictive.com"]},{name:"Adestra",category:"ad",domains:["*.adestra.com","*.msgfocus.com"]},{name:"Adform",category:"ad",domains:["*.adform.net","*.adformdsp.net"]},{name:"Adkontekst",category:"ad",domains:["*.adkontekst.pl"]},{name:"Adlead",category:"ad",domains:["*.webelapp.com"]},{name:"Adledge",category:"utility",domains:["*.adledge.com"]},{name:"Adloox",category:"ad",domains:["*.adlooxtracking.com"]},{name:"Adlux",category:"ad",domains:["*.adlux.com"]},{name:"Admedo",category:"ad",domains:["*.a8723.com","*.adizio.com","*.admedo.com"]},{name:"Admeta",company:"Wideorbit",category:"ad",domains:["*.atemda.com"]},{name:"Admetrics",company:"Next Tuesday",category:"analytics",domains:["*.nt.vc"]},{name:"Admiral",category:"ad",domains:["*.unknowntray.com"]},{name:"Admitad",category:"ad",domains:["*.lenmit.com"]},{name:"Admixer for Publishers",company:"Admixer",category:"ad",domains:["*.admixer.net"]},{name:"Adnium",category:"ad",domains:["*.adnium.com"]},{name:"Adnostic",company:"Dennis Publishing",category:"ad",domains:["*.adnostic.co.uk"]},{name:"Adobe Marketing Cloud",company:"Adobe Systems",category:"ad",domains:["*.adobetag.com"]},{name:"Adobe Scene7",company:"Adobe Systems",category:"content",domains:["wwwimages.adobe.com","*.scene7.com","*.everestads.net","*.everestjs.net"]},{name:"Adobe Systems",category:"content",domains:["adobe.com","www.adobe.com"]},{name:"Adobe Business Catalyst",homepage:"https://www.businesscatalyst.com/",category:"hosting",domains:["*.businesscatalyst.com"]},{name:"Adocean",company:"Gemius",category:"ad",domains:["*.adocean.pl"]},{name:"Adometry",company:"Google",category:"ad",domains:["*.dmtry.com"]},{name:"Adomik",category:"analytics",domains:["*.adomik.com"]},{name:"Adotmob",category:"ad",domains:["*.adotmob.com"]},{name:"Adrian Quevedo",category:"hosting",domains:["*.adrianquevedo.com"]},{name:"Adroit Digital Solutions",category:"ad",domains:["*.imiclk.com","*.abmr.net"]},{name:"AdsNative",category:"ad",domains:["*.adsnative.com"]},{name:"AdsWizz",category:"ad",domains:["*.adswizz.com"]},{name:"Adscale",category:"ad",domains:["*.adscale.de"]},{name:"Adschoom",company:"JSWeb Production",category:"ad",domains:["*.adschoom.com"]},{name:"Adscience",category:"ad",domains:["*.adscience.nl"]},{name:"Adsiduous",category:"ad",domains:["*.adsiduous.com"]},{name:"Adsty",category:"ad",domains:["*.adx1.com"]},{name:"Adtech (AOL)",category:"ad",domains:["*.adtechus.com"]},{name:"Adtegrity",category:"ad",domains:["*.adtpix.com"]},{name:"Adthink",company:"Adthink Media",category:"ad",domains:["*.adxcore.com","*.dcoengine.com"]},{name:"AdultWebmasterEmpire.Com",category:"ad",domains:["*.awempire.com"]},{name:"Adunity",category:"ad",domains:["*.adunity.com"]},{name:"Advance Magazine Group",category:"content",domains:["*.condenastdigital.com","*.condenet.com","*.condenast.co.uk"]},{name:"Adverline Board",company:"Adverline",category:"ad",domains:["*.adverline.com","*.adnext.fr"]},{name:"AdvertServe",category:"ad",domains:["*.advertserve.com"]},{name:"Advolution",category:"utility",domains:["*.advolution.de"]},{name:"Adwise",category:"ad",domains:["*.adwise.bg"]},{name:"Adyen",category:"utility",domains:["*.adyen.com"]},{name:"Adyoulike",category:"ad",domains:["*.adyoulike.com","*.omnitagjs.com","*.adyoulike.net"]},{name:"Adzerk",category:"ad",domains:["*.adzerk.net"]},{name:"Adzip",company:"Adbox Digital",category:"ad",domains:["*.adzip.co"]},{name:"AerServ",category:"ad",domains:["*.aerserv.com"]},{name:"Affectv",category:"ad",domains:["*.affectv.com","*.affec.tv"]},{name:"Affiliate Window",company:"Digital Window",category:"ad",domains:["*.dwin1.com"]},{name:"Affiliatly",category:"ad",domains:["*.affiliatly.com"]},{name:"Affino",category:"ad",domains:["affino.com"]},{name:"Affirm",category:"utility",domains:["*.affirm.com"]},{name:"Afterpay",company:"Block",category:"utlity",homepage:"https://www.afterpay.com/",domains:["*.afterpay.com"]},{name:"Agenda Media",category:"ad",domains:["*.agendamedia.co.uk"]},{name:"Aggregate Knowledge",company:"Neustar",category:"ad",domains:["*.agkn.com"]},{name:"AgilOne",category:"marketing",domains:["*.agilone.com"]},{name:"Agility",category:"hosting",domains:["*.agilitycms.com"]},{name:"Ahalogy",category:"social",domains:["*.ahalogy.com"]},{name:"Aheadworks",category:"utility",domains:["*.aheadworks.com"]},{name:"AirPR",category:"analytics",domains:["*.airpr.com"]},{name:"Aira",category:"ad",domains:["*.aira.net"]},{name:"Airport Parking and Hotels",category:"content",domains:["*.aph.com"]},{name:"Akanoo",category:"analytics",domains:["*.akanoo.com"]},{name:"Alchemy",company:"AndBeyond.Media",category:"ad",domains:["*.andbeyond.media"]},{name:"AlephD",company:"AOL",category:"ad",domains:["*.alephd.com"]},{name:"AliveChat",company:"AYU Technology Solutions",category:"customer-success",domains:["*.websitealive.com","*.websitealive7.com"]},{name:"All Access",category:"other",domains:["*.allaccess.com.ph"]},{name:"Alliance for Audited Media",category:"ad",domains:["*.aamsitecertifier.com"]},{name:"Allyde",category:"marketing",domains:["*.mautic.com"]},{name:"AlphaSSL",category:"utility",domains:["*.alphassl.com"]},{name:"Altitude",category:"ad",domains:["*.altitudeplatform.com"]},{name:"Altocloud",category:"analytics",domains:["*.altocloud.com"]},{name:"Amadeus",category:"content",domains:["*.e-travel.com"]},{name:"Amazon CloudFront",company:"Amazon",category:"utility",domains:["cloudfront.net"]},{name:"Ambassador",category:"ad",domains:["*.getambassador.com"]},{name:"Ambient",company:"Ericcson",category:"other",domains:["*.adnetwork.vn","*.ambientplatform.vn"]},{name:"Amelia Communication",category:"hosting",domains:["*.sara.media"]},{name:"Amobee",category:"marketing",domains:["*.amgdgt.com","*.kontera.com"]},{name:"Amplience",category:"marketing",domains:["*.10cms.com","*.amplience.com","*.amplience.net","*.bigcontent.io","*.adis.ws"]},{name:"Amplitude Mobile Analytics",company:"Amplitude",category:"analytics",domains:["*.amplitude.com","d24n15hnbwhuhn.cloudfront.net"]},{name:"Anametrix",company:"Ensighten",category:"analytics",domains:["*.anametrix.com"]},{name:"Ancora Platform",company:"Ancora Media Solutions",category:"ad",domains:["*.ancoraplatform.com"]},{name:"Anedot",category:"other",domains:["*.anedot.com"]},{name:"AnimateJS",category:"utility",domains:["*.animatedjs.com"]},{name:"AnswerDash",category:"customer-success",domains:["*.answerdash.com"]},{name:"Answers",category:"analytics",domains:["*.answcdn.com","*.answers.com","*.dsply.com"]},{name:"Apester",category:"analytics",domains:["*.apester.com","*.qmerce.com"]},{name:"Apligraf SmartWeb",company:"Apligraf",category:"utility",domains:["*.apligraf.com.br"]},{name:"Appier",category:"ad",domains:["*.appier.net"]},{name:"Appsolute",category:"utility",homepage:"https://appsolute.us/",domains:["dropahint.love"]},{name:"Apptus eSales",company:"Apptus",category:"analytics",domains:["*.apptus.com"]},{name:"Arbor",company:"LiveRamp",category:"other",domains:["*.pippio.com"]},{name:"Ardent Creative",category:"hosting",domains:["*.ardentcreative.co.uk"]},{name:"Arnold Clark Automobiles",category:"content",domains:["*.arnoldclark.com"]},{name:"Atom Content Marketing",category:"content",domains:["*.atomvault.net"]},{name:"Atom Data",category:"other",domains:["*.atomdata.io"]},{name:"Attribution",category:"ad",domains:["*.attributionapp.com"]},{name:"Audience 360",company:"Datapoint Media",category:"ad",domains:["*.dpmsrv.com"]},{name:"Audience Science",category:"ad",domains:["*.revsci.net"]},{name:"AudienceSearch",company:"Intimate Merger",category:"ad",domains:["*.im-apps.net"]},{name:"Auditorius",category:"ad",domains:["*.audtd.com"]},{name:"Augur",category:"analytics",domains:["*.augur.io"]},{name:"Auto Link Maker",company:"Apple",category:"ad",domains:["*.apple.com"]},{name:"Autopilot",category:"ad",domains:["*.autopilothq.com"]},{name:"Avail",company:"RichRelevance",category:"ad",domains:["*.avail.net"]},{name:"AvantLink",category:"ad",domains:["*.avmws.com"]},{name:"Avco Systems",category:"utility",domains:["*.avcosystems.com"]},{name:"Avid Media",category:"customer-success",domains:["*.adspdbl.com","*.metadsp.co.uk"]},{name:"Avocet Systems",category:"ad",domains:["*.avocet.io","ads.avct.cloud"]},{name:"Avora",category:"analytics",domains:["*.truedash.com"]},{name:"Azure Traffic Manager",company:"Microsoft",category:"other",domains:["*.gateway.net","*.trafficmanager.net"]},{name:"Azure Web Services",company:"Microsoft",category:"cdn",domains:["*.azurewebsites.net","*.azureedge.net","*.msedge.net","*.windows.net"]},{name:"BAM",category:"analytics",domains:["*.bam-x.com"]},{name:"Baifendian Technology",category:"marketing",domains:["*.baifendian.com"]},{name:"Bankrate",category:"utility",domains:["*.bankrate.com"]},{name:"BannerFlow",company:"Nordic Factory Solutions",category:"ad",domains:["*.bannerflow.com"]},{name:"Barclaycard SmartPay",company:"Barclaycard",category:"utility",domains:["*.barclaycardsmartpay.com"]},{name:"Barilliance",category:"analytics",domains:["*.barilliance.net","dn3y71tq7jf07.cloudfront.net"]},{name:"Barnebys",category:"other",domains:["*.barnebys.com"]},{name:"Basis",company:"Basis Technologies",category:"ad",homepage:"https://basis.net/",domains:["*.basis.net"]},{name:"Batch Media",category:"ad",domains:["*.t4ft.de"]},{name:"Bauer Consumer Media",category:"content",domains:["*.bauercdn.com","*.greatmagazines.co.uk"]},{name:"Baynote",category:"analytics",domains:["*.baynote.net"]},{name:"Bazaarvoice",category:"analytics",domains:["*.bazaarvoice.com","*.feedmagnet.com"]},{name:"Beachfront Media",category:"ad",domains:["*.bfmio.com"]},{name:"BeamPulse",category:"analytics",domains:["*.beampulse.com"]},{name:"Beeswax",category:"ad",domains:["*.bidr.io"]},{name:"Beetailer",category:"social",domains:["*.beetailer.com"]},{name:"Best Of Media S.A.",category:"content",domains:["*.servebom.com"]},{name:"Bet365",category:"ad",domains:["*.bet365affiliates.com"]},{name:"Betfair",category:"other",domains:["*.cdnbf.net"]},{name:"Betgenius",company:"Genius Sports",category:"content",domains:["*.connextra.com"]},{name:"Better Banners",category:"ad",domains:["*.betterbannerscloud.com"]},{name:"Better Business Bureau",category:"analytics",domains:["*.bbb.org"]},{name:"Between Digital",category:"ad",domains:["*.betweendigital.com"]},{name:"BidTheatre",category:"ad",domains:["*.bidtheatre.com"]},{name:"Bidtellect",category:"ad",domains:["*.bttrack.com"]},{name:"Bigcommerce",category:"marketing",domains:["*.bigcommerce.com"]},{name:"BitGravity",company:"Tata Communications",category:"content",domains:["*.bitgravity.com"]},{name:"Bitly",category:"utility",domains:["*.bitly.com","*.lemde.fr","*.bit.ly"]},{name:"Bizible",category:"ad",domains:["*.bizible.com","*.bizibly.com"]},{name:"Bizrate",category:"analytics",domains:["*.bizrate.com"]},{name:"BlastCasta",category:"social",domains:["*.poweringnews.com"]},{name:"Blindado",category:"utility",domains:["*.siteblindado.com"]},{name:"Blis",category:"ad",domains:["*.blismedia.com"]},{name:"Blogg.se",category:"hosting",domains:["*.cdnme.se","*.publishme.se"]},{name:"BloomReach",category:"ad",domains:["*.brcdn.com","*.brsrvr.com","*.brsvr.com"]},{name:"Bloomberg",category:"content",domains:["*.gotraffic.net"]},{name:"Shop Logic",company:"BloomReach",category:"marketing",domains:["*.goshoplogic.com"]},{name:"Blue State Digital",category:"ad",domains:["*.bsd.net"]},{name:"Blue Triangle Technologies",category:"analytics",domains:["*.btttag.com"]},{name:"BlueCava",category:"ad",domains:["*.bluecava.com"]},{name:"BlueKai",company:"Oracle",category:"ad",domains:["*.bkrtx.com","*.bluekai.com"]},{name:"Bluecore",category:"analytics",domains:["*.bluecore.com"]},{name:"Bluegg",category:"hosting",domains:["d1va5oqn59yrvt.cloudfront.net"]},{name:"Bold Commerce",category:"utility",domains:["*.shappify-cdn.com","*.shappify.com","*.boldapps.net"]},{name:"BoldChat",company:"LogMeIn",category:"customer-success",domains:["*.boldchat.com"]},{name:"Bombora",category:"ad",domains:["*.mlno6.com"]},{name:"Bonnier",category:"content",domains:["*.bonniercorp.com"]},{name:"Bookatable",category:"content",domains:["*.bookatable.com","*.livebookings.com"]},{name:"Booking.com",category:"content",domains:["*.bstatic.com"]},{name:"Boomtrain",category:"ad",domains:["*.boomtrain.com","*.boomtrain.net"]},{name:"BoostSuite",category:"ad",domains:["*.poweredbyeden.com"]},{name:"Boostable",category:"ad",domains:["*.boostable.com"]},{name:"Bootstrap Chinese network",category:"cdn",domains:["*.bootcss.com"]},{name:"Booxscale",category:"ad",domains:["*.booxscale.com"]},{name:"Borderfree",company:"pitney bowes",category:"utility",domains:["*.borderfree.com","*.fiftyone.com"]},{name:"BowNow",category:"analytics",homepage:"https://bow-now.jp/",domains:["*.bownow.jp"]},{name:"Box",category:"hosting",domains:["*.box.com"]},{name:"Boxever",category:"analytics",domains:["*.boxever.com"]},{name:"Braintree Payments",company:"Paypal",category:"utility",domains:["*.braintreegateway.com"]},{name:"Branch Metrics",category:"ad",domains:["*.branch.io","*.app.link"]},{name:"Brand Finance",category:"other",domains:["*.brandirectory.com"]},{name:"Brand View",category:"analytics",domains:["*.brandview.com"]},{name:"Brandscreen",category:"ad",domains:["*.rtbidder.net"]},{name:"BridgeTrack",company:"Sapient",category:"ad",domains:["*.bridgetrack.com"]},{name:"BrightRoll",company:"Yahoo!",category:"ad",domains:["*.btrll.com"]},{name:"BrightTag / Signal",company:"Signal",homepage:"https://www.signal.co",category:"tag-manager",domains:["*.btstatic.com","*.thebrighttag.com"]},{name:"Brightcove ZenCoder",company:"Brightcove",category:"other",domains:["*.zencoder.net"]},{name:"Bronto Software",category:"marketing",domains:["*.bm23.com","*.bronto.com","*.brontops.com"]},{name:"Browser-Update.org",category:"other",domains:["*.browser-update.org"]},{name:"Buffer",category:"social",domains:["*.bufferapp.com"]},{name:"Bugsnag",category:"utility",domains:["*.bugsnag.com","d2wy8f7a9ursnm.cloudfront.net"]},{name:"Burst Media",category:"ad",domains:["*.burstnet.com","*.1rx.io"]},{name:"Burt",category:"analytics",domains:["*.richmetrics.com","*.burt.io"]},{name:"Business Message",category:"ad",domains:["*.message-business.com"]},{name:"Business Week",company:"Bloomberg",category:"social",domains:["*.bwbx.io"]},{name:"Buto",company:"Big Button",category:"ad",domains:["*.buto.tv"]},{name:"Button",category:"ad",domains:["*.btncdn.com"]},{name:"BuySellAds",category:"ad",domains:["*.buysellads.com","*.buysellads.net"]},{name:"BuySight (AOL)",category:"ad",domains:["*.pulsemgr.com"]},{name:"Buyapowa",category:"ad",domains:["*.co-buying.com"]},{name:"BuzzFeed",category:"social",domains:["*.buzzfed.com"]},{name:"C1X",category:"ad",domains:["*.c1exchange.com"]},{name:"C3 Metrics",category:"analytics",domains:["*.c3tag.com"]},{name:"CANDDi",company:"Campaign and Digital Intelligence",category:"ad",domains:["*.canddi.com"]},{name:"CCM benchmark Group",category:"social",domains:["*.ccm2.net"]},{name:"CD Networks",category:"utility",domains:["*.gccdn.net"]},{name:"CDN Planet",category:"analytics",domains:["*.cdnplanet.com"]},{name:"InAuth",category:"utility",homepage:"https://www.inauth.com/",domains:["*.cdn-net.com"]},{name:"CJ Affiliate",company:"Conversant",category:"ad",domains:["*.cj.com","*.dpbolvw.net"]},{name:"CJ Affiliate by Conversant",company:"Conversant",category:"ad",domains:["*.ftjcfx.com"]},{name:"CNBC",category:"content",domains:["*.cnbc.com"]},{name:"CNET Content Solutions",company:"CBS Interactive",category:"content",domains:["*.cnetcontent.com"]},{name:"CPEx",category:"content",domains:["*.cpex.cz"]},{name:"CPXi",category:"ad",domains:["*.cpxinteractive.com"]},{name:"CUBED Attribution",company:"CUBED",category:"ad",domains:["*.withcubed.com"]},{name:"Cachefly",category:"utility",domains:["*.cachefly.net"]},{name:"Calendly",category:"other",domains:["*.calendly.com"]},{name:"CallRail",category:"analytics",domains:["*.callrail.com"]},{name:"CallTrackingMetrics",category:"analytics",domains:["*.tctm.co"]},{name:"Canned Banners",category:"ad",domains:["*.cannedbanners.com"]},{name:"Canopy Labs",category:"analytics",domains:["*.canopylabs.com"]},{name:"Capita",category:"utility",domains:["*.crcom.co.uk"]},{name:"Captify Media",category:"ad",domains:["*.cpx.to"]},{name:"Captiify",category:"ad",domains:["*.captifymedia.com"]},{name:"Captivate Ai",category:"ad",domains:["*.captivate.ai"]},{name:"Captora",category:"marketing",domains:["*.captora.com"]},{name:"Carcloud",category:"other",domains:["*.carcloud.co.uk"]},{name:"Cardlytics",category:"ad",domains:["*.cardlytics.com"]},{name:"Cardosa Enterprises",category:"analytics",domains:["*.y-track.com"]},{name:"Caspian Media",category:"ad",domains:["*.caspianmedia.com"]},{name:"Cast",category:"utility",domains:["*.cast.rocks"]},{name:"Catch",category:"other",domains:["*.getcatch.com"]},{name:"Cavisson",category:"analytics",domains:["*.cavisson.com"]},{name:"Cedato",category:"ad",domains:["*.algovid.com","*.vdoserv.com"]},{name:"Celebrus Technologies",category:"analytics",domains:["*.celebrus.com"]},{name:"Celtra",category:"ad",domains:["*.celtra.com"]},{name:"Centro",category:"ad",domains:["*.brand-server.com"]},{name:"Ceros",category:"other",domains:["ceros.com","view.ceros.com"]},{name:"Ceros Analytics",company:"Ceros",category:"analytics",domains:["api.ceros.com"]},{name:"Certona",category:"analytics",domains:["*.certona.net"]},{name:"Certum",category:"utility",domains:["*.ocsp-certum.com","*.certum.pl"]},{name:"Cgrdirect",category:"other",domains:["*.cgrdirect.co.uk"]},{name:"Channel 5 Media",category:"ad",domains:["*.five.tv"]},{name:"Channel.me",category:"customer-success",domains:["*.channel.me"]},{name:"ChannelAdvisor",category:"ad",domains:["*.channeladvisor.com","*.searchmarketing.com"]},{name:"ChannelApe",company:"ChannelApe",category:"other",homepage:"https://www.channelape.com/",domains:["*.channelape.com"]},{name:"Chargeads Oscar",company:"Chargeads",category:"ad",domains:["*.chargeads.com"]},{name:"Charities Aid Foundation",category:"utility",domains:["*.cafonline.org"]},{name:"Chartbeat",category:"analytics",domains:["*.chartbeat.com","*.chartbeat.net"]},{name:"Cheapflights Media",company:"Momondo",category:"content",domains:["*.momondo.net"]},{name:"CheckM8",category:"ad",domains:["*.checkm8.com"]},{name:"CheckRate",company:"FreeStart",category:"utility",domains:["*.checkrate.co.uk"]},{name:"Checkfront",category:"other",domains:["*.checkfront.com","dcg3jth5savst.cloudfront.net"]},{name:"CheetahMail",company:"Experian",category:"ad",domains:["*.chtah.com"]},{name:"Chitika",category:"ad",domains:["*.chitika.net"]},{name:"ChoiceStream",category:"ad",domains:["*.choicestream.com"]},{name:"Cint",category:"social",domains:["*.cint.com"]},{name:"Civic",category:"hosting",domains:["*.civiccomputing.com"]},{name:"ClearRise",category:"customer-success",domains:["*.clearrise.com"]},{name:"Clearstream",category:"ad",domains:["*.clrstm.com"]},{name:"Clerk.io ApS",category:"analytics",domains:["*.clerk.io"]},{name:"CleverDATA",category:"ad",domains:["*.1dmp.io"]},{name:"CleverTap",category:"analytics",domains:["d2r1yp2w7bby2u.cloudfront.net"]},{name:"Click Density",category:"analytics",domains:["*.clickdensity.com"]},{name:"Click4Assistance",category:"customer-success",domains:["*.click4assistance.co.uk"]},{name:"ClickDesk",category:"customer-success",domains:["*.clickdesk.com","d1gwclp1pmzk26.cloudfront.net"]},{name:"ClickDimensions",category:"ad",domains:["*.clickdimensions.com"]},{name:"Clickadu (Winner Solutions)",category:"ad",domains:["*.clickadu.com"]},{name:"Clickagy Audience Lab",company:"Clickagy",category:"ad",domains:["*.clickagy.com"]},{name:"Clickio",category:"ad",domains:[]},{name:"Clicktale",category:"analytics",domains:["*.cdngc.net","*.clicktale.net"]},{name:"Clicktripz",category:"content",domains:["*.clicktripz.com"]},{name:"Clik.com Websites",category:"content",domains:["*.clikpic.com"]},{name:"Cloud Technologies",category:"ad",domains:["*.behavioralengine.com","*.behavioralmailing.com"]},{name:"Cloud-A",category:"other",domains:["*.bulkstorage.ca"]},{name:"Cloud.typography",company:"Hoefler &amp; Co",category:"cdn",domains:["*.typography.com"]},{name:"CloudSponge",category:"ad",domains:["*.cloudsponge.com"]},{name:"CloudVPS",category:"other",domains:["*.adoftheyear.com","*.objectstore.eu"]},{name:"Cloudinary",category:"content",domains:["*.cloudinary.com"]},{name:"Cloudqp",company:"Cloudwp",category:"other",domains:["*.cloudwp.io"]},{name:"Cludo",category:"utility",domains:["*.cludo.com"]},{name:"Cognesia",category:"marketing",domains:["*.intelli-direct.com"]},{name:"CogoCast",company:"Cogo Labs",category:"ad",domains:["*.cogocast.net"]},{name:"Colbenson",category:"utility",domains:["*.colbenson.com"]},{name:"Collective",category:"ad",domains:["*.collective-media.net"]},{name:"Com Laude",category:"other",domains:["*.gdimg.net"]},{name:"Comm100",category:"customer-success",domains:["*.comm100.com"]},{name:"CommerceHub",category:"marketing",domains:["*.mercent.com"]},{name:"Commission Factory",category:"ad",domains:["*.cfjump.com"]},{name:"Communicator",category:"ad",domains:["*.communicatorcorp.com","*.communicatoremail.com"]},{name:"Comodo",category:"utility",domains:["*.comodo.com","*.trust-provider.com","*.trustlogo.com","*.usertrust.com","*.comodo.net"]},{name:"Comodo Certificate Authority",company:"Comodo",category:"utility",domains:["crt.comodoca.com","*.comodoca4.com","ocsp.comodoca.com","ocsp.usertrust.com","crt.usertrust.com"]},{name:"Compete",company:"Millwood Brown Digital",category:"analytics",domains:["*.c-col.com","*.compete.com"]},{name:"Compuware",category:"analytics",domains:["*.axf8.net"]},{name:"Conductrics",category:"analytics",domains:["*.conductrics.com"]},{name:"Confirmit",category:"analytics",domains:["*.confirmit.com"]},{name:"Connatix",category:"ad",domains:["*.connatix.com"]},{name:"Connect Events",category:"hosting",domains:["*.connectevents.com.au"]},{name:"Constant Contact",category:"ad",domains:["*.ctctcdn.com"]},{name:"Constructor.io",category:"utility",domains:["*.cnstrc.com"]},{name:"Contabo",category:"hosting",domains:["185.2.100.179"]},{name:"Content Media Corporation",category:"content",domains:["*.contentmedia.eu"]},{name:"ContentSquare",category:"analytics",domains:["d1m6l9dfulcyw7.cloudfront.net","*.content-square.net","*.contentsquare.net"]},{name:"ContextWeb",category:"ad",domains:["*.contextweb.com"]},{name:"Continental Exchange Solutions",category:"utility",domains:["*.hifx.com"]},{name:"Converge-Digital",category:"ad",domains:["*.converge-digital.com"]},{name:"Conversant",category:"analytics",domains:["*.dotomi.com","*.dtmpub.com","*.emjcd.com","mediaplex.com","*.tqlkg.com","*.fastclick.net"]},{name:"Conversant Ad Server",company:"Conversant",category:"ad",domains:["adfarm.mediaplex.com","*.mediaplex.com"]},{name:"Conversant Tag Manager",company:"Conversant",category:"tag-manager",domains:["*.mplxtms.com"]},{name:"Conversio",category:"ad",domains:["*.conversio.com"]},{name:"Conversion Labs",category:"ad",domains:["*.net.pl"]},{name:"Conversion Logic",category:"ad",domains:["*.conversionlogic.net"]},{name:"Convert Insights",category:"analytics",domains:["*.convertexperiments.com"]},{name:"ConvertMedia",category:"ad",domains:["*.admailtiser.com","*.basebanner.com","*.cmbestsrv.com","*.vidfuture.com","*.zorosrv.com"]},{name:"Convertro",category:"ad",domains:["*.convertro.com"]},{name:"Conviva",category:"content",domains:["*.conviva.com"]},{name:"Cookie Reports",category:"utility",domains:["*.cookiereports.com"]},{name:"Cookie-Script.com",category:"utility",domains:["*.cookie-script.com"]},{name:"CookieQ",company:"Baycloud Systems",category:"utility",domains:["*.cookieq.com"]},{name:"CoolaData",category:"analytics",domains:["*.cooladata.com"]},{name:"CopperEgg",category:"analytics",domains:["*.copperegg.com","d2vig74li2resi.cloudfront.net"]},{name:"Council ad Network",category:"ad",domains:["*.counciladvertising.net"]},{name:"Covert Pics",category:"content",domains:["*.covet.pics"]},{name:"Cox Digital Solutions",category:"ad",domains:["*.afy11.net"]},{name:"Creafi Online Media",category:"ad",domains:["*.creafi-online-media.com"]},{name:"Creators",category:"content",domains:["*.creators.co"]},{name:"Crimson Hexagon Analytics",company:"Crimson Hexagon",category:"analytics",domains:["*.hexagon-analytics.com"]},{name:"Crimtan",category:"ad",domains:["*.ctnsnet.com"]},{name:"Cross Pixel Media",category:"ad",domains:["*.crsspxl.com"]},{name:"Crosswise",category:"ad",domains:["*.univide.com"]},{name:"Crowd Control",company:"Lotame",category:"ad",domains:["*.crwdcntrl.net"]},{name:"Crowd Ignite",category:"ad",domains:["*.crowdignite.com"]},{name:"CrowdTwist",category:"ad",domains:["*.crowdtwist.com"]},{name:"Crowdskout",category:"ad",domains:["*.crowdskout.com"]},{name:"Crowdynews",category:"social",domains:["*.breakingburner.com"]},{name:"Curalate",category:"marketing",domains:["*.curalate.com","d116tqlcqfmz3v.cloudfront.net"]},{name:"Customer Acquisition Cloud",company:"[24]7",category:"ad",domains:["*.campanja.com"]},{name:"Customer.io",category:"ad",domains:["*.customer.io"]},{name:"Custora",category:"analytics",domains:["*.custora.com"]},{name:"Cxense",category:"ad",domains:["*.cxense.com","*.cxpublic.com","*.emediate.dk","*.emediate.eu"]},{name:"CyberKnight",company:"Namogoo",category:"utility",domains:["*.namogoo.com"]},{name:"CyberSource (Visa)",category:"utility",domains:["*.authorize.net"]},{name:"Cybernet Quest",category:"analytics",domains:["*.cqcounter.com"]},{name:"D.A. Consortium",category:"ad",domains:["*.eff1.net"]},{name:"D4t4 Solutions",category:"analytics",domains:["*.u5e.com"]},{name:"DCSL Software",category:"hosting",domains:["*.dcslsoftware.com"]},{name:"DMG Media",category:"content",domains:["*.mol.im","*.and.co.uk","*.anm.co.uk","*.dailymail.co.uk"]},{name:"DTSCOUT",category:"ad",domains:["*.dtscout.com"]},{name:"Dailykarma",category:"utility",homepage:"https://www.dailykarma.com/",domains:["*.dailykarma.io"]},{name:"Dailymotion",category:"content",domains:["*.dailymotion.com","*.dmxleo.com","*.dm.gg","*.pxlad.io","*.dmcdn.net","*.sublimevideo.net"]},{name:"Dash Hudson",company:"Dash Hudson",category:"content",domains:["*.dashhudson.com"]},{name:"Datacamp",category:"utility",domains:["*.cdn77.org"]},{name:"Datalicious",category:"tag-manager",domains:["*.supert.ag","*.optimahub.com"]},{name:"Datalogix",category:"ad",domains:["*.nexac.com"]},{name:"Datawrapper",category:"utility",domains:["*.datawrapper.de","*.dwcdn.net"]},{name:"Dataxu",category:"marketing",domains:["*.w55c.net"]},{name:"DatoCMS",homepage:"https://www.datocms.com/",category:"content",domains:["*.datocms-assets.com"]},{name:"Datonics",category:"ad",domains:["*.pro-market.net"]},{name:"Dealtime",category:"content",domains:["*.dealtime.com"]},{name:"Debenhams Geo Location",company:"Debenhams",category:"utility",domains:["176.74.183.134"]},{name:"Decibel Insight",category:"analytics",domains:["*.decibelinsight.net"]},{name:"Deep Forest Media",company:"Rakuten",category:"ad",domains:["*.dpclk.com"]},{name:"DeepIntent",category:"ad",domains:["*.deepintent.com"]},{name:"Delicious Media",category:"social",domains:["*.delicious.com"]},{name:"Delineo",category:"ad",domains:["*.delineo.com"]},{name:"Delta Projects AB",category:"ad",domains:["*.de17a.com"]},{name:"Demand Media",category:"content",domains:["*.dmtracker.com"]},{name:"DemandBase",category:"marketing",domains:["*.demandbase.com"]},{name:"DemandJump",category:"analytics",domains:["*.demandjump.com"]},{name:"Dennis Publishing",category:"content",domains:["*.alphr.com"]},{name:"Devatics",category:"analytics",domains:["*.devatics.com","*.devatics.io"]},{name:"Developer Media",category:"ad",domains:["*.developermedia.com"]},{name:"DialogTech",category:"ad",domains:["*.dialogtech.com"]},{name:"DialogTech SourceTrak",company:"DialogTech",category:"ad",domains:["d31y97ze264gaa.cloudfront.net"]},{name:"DigiCert",category:"utility",domains:["*.digicert.com"]},{name:"Digioh",category:"ad",domains:["*.lightboxcdn.com"]},{name:"Digital Look",category:"content",domains:["*.digitallook.com"]},{name:"Digital Media Exchange",company:"NDN",category:"content",domains:["*.newsinc.com"]},{name:"Digital Millennium Copyright Act Services",category:"utility",domains:["*.dmca.com"]},{name:"Digital Ocean",category:"other",domains:["95.85.62.56"]},{name:"Digital Remedy",category:"ad",domains:["*.consumedmedia.com"]},{name:"Digital Window",category:"ad",domains:["*.awin1.com","*.zenaps.com"]},{name:"DigitalScirocco",category:"analytics",domains:["*.digitalscirocco.net"]},{name:"Digitial Point",category:"utility",domains:["*.dpstatic.com"]},{name:"Diligent (Adnetik)",category:"ad",domains:["*.wtp101.com"]},{name:"Directed Edge",category:"social",domains:["*.directededge.com"]},{name:"Distribute Travel",category:"ad",domains:["*.dtrck.net"]},{name:"District M",category:"ad",domains:["*.districtm.io"]},{name:"DistroScale",category:"ad",domains:["*.jsrdn.com"]},{name:"Divido",category:"utility",domains:["*.divido.com"]},{name:"Dow Jones",category:"content",domains:["*.dowjones.com","*.dowjoneson.com"]},{name:"Drifty Co",category:"utility",domains:["*.onicframework.com"]},{name:"Drip",company:"The Numa Group",category:"ad",domains:["*.getdrip.com"]},{name:"Dropbox",category:"utility",domains:["*.dropboxusercontent.com"]},{name:"Dyn Real User Monitoring",company:"Dyn",category:"analytics",domains:["*.jisusaiche.biz","*.dynapis.com","*.jisusaiche.com","*.dynapis.info"]},{name:"DynAdmic",category:"ad",domains:["*.dyntrk.com"]},{name:"Dynamic Converter",category:"utility",domains:["*.dynamicconverter.com"]},{name:"Dynamic Dummy Image Generator",company:"Open Source",category:"utility",domains:["*.dummyimage.com"]},{name:"Dynamic Logic",category:"ad",domains:["*.dl-rms.com","*.questionmarket.com"]},{name:"Dynamic Yield",category:"customer-success",domains:["*.dynamicyield.com"]},{name:"Dynatrace",category:"analytics",domains:["*.ruxit.com","js-cdn.dynatrace.com"]},{name:"ec-concier",homepage:"https://ec-concier.com/",category:"marketing",domains:["*.ec-concier.com"]},{name:"ECT News Network",category:"content",domains:["*.ectnews.com"]},{name:"ELITechGroup",category:"analytics",domains:["*.elitechnology.com"]},{name:"EMAP",category:"content",domains:["*.emap.com"]},{name:"EMedia Solutions",category:"ad",domains:["*.e-shots.eu"]},{name:"EQ works",category:"ad",domains:["*.eqads.com"]},{name:"ESV Digital",category:"analytics",domains:["*.esearchvision.com"]},{name:"Ebiquity",category:"analytics",domains:["*.ebiquitymedia.com"]},{name:"Eco Rebates",category:"ad",domains:["*.ecorebates.com"]},{name:"Ecwid",category:"hosting",domains:["*.ecwid.com","*.shopsettings.com","d3fi9i0jj23cau.cloudfront.net","d3j0zfs7paavns.cloudfront.net"]},{name:"Edge Web Fonts",company:"Adobe Systems",category:"cdn",domains:["*.edgefonts.net"]},{name:"Edition Digital",category:"ad",domains:["*.editiondigital.com"]},{name:"Edot Web Technologies",category:"hosting",domains:["*.edot.co.za"]},{name:"Effective Measure",category:"ad",domains:["*.effectivemeasure.net"]},{name:"Effiliation sa",category:"ad",domains:["*.effiliation.com"]},{name:"Ekm Systems",category:"analytics",domains:["*.ekmsecure.com","*.ekmpinpoint.co.uk"]},{name:"Elastera",category:"hosting",domains:["*.elastera.net"]},{name:"Elastic Ad",category:"ad",domains:["*.elasticad.net"]},{name:"Elastic Load Balancing",company:"Amazon Web Services",category:"hosting",domains:["*.105app.com"]},{name:"Elecard StreamEye",company:"Elecard",category:"other",domains:["*.streameye.net"]},{name:"Elevate",company:"Elevate Technology Solutions",category:"utility",domains:["*.elevaate.technology"]},{name:"Elicit",category:"utility",domains:["*.elicitapp.com"]},{name:"Elogia",category:"ad",domains:["*.elogia.net"]},{name:"Email Attitude",company:"1000mercis",category:"ad",domains:["*.email-attitude.com"]},{name:"EmailCenter",category:"ad",domains:["*.emailcenteruk.com"]},{name:"Embedly",category:"content",domains:["*.embedly.com","*.embed.ly"]},{name:"EmpathyBroker Site Search",company:"EmpathyBroker",category:"utility",domains:["*.empathybroker.com"]},{name:"Enfusen",category:"analytics",domains:["*.enfusen.com"]},{name:"Engadget",company:"Engadget (AOL)",category:"content",domains:["*.gdgt.com"]},{name:"Engagio",category:"marketing",domains:["*.engagio.com"]},{name:"Ensighten Manage",company:"Ensighten",category:"tag-manager",domains:["*.levexis.com"]},{name:"EntityLink",category:"other",domains:["*.entitytag.co.uk"]},{name:"Entrust Datacard",category:"utility",domains:["*.entrust.com","*.entrust.net"]},{name:"Equiniti",category:"utility",domains:["*.equiniti.com"]},{name:"Errorception",category:"utility",domains:["*.errorception.com"]},{name:"Esri ArcGIS",company:"Esri",category:"utility",domains:["*.arcgis.com","*.arcgisonline.com"]},{name:"Ethnio",category:"analytics",domains:["*.ethn.io"]},{name:"Eulerian Technologies",category:"ad",domains:["*.eolcdn.com"]},{name:"Euroland",category:"utility",domains:["*.euroland.com"]},{name:"European Interactive Digital ad Alli",category:"utility",domains:["*.edaa.eu"]},{name:"Eventbrite",category:"hosting",domains:["*.evbuc.com","*.eventbrite.co.uk"]},{name:"Everflow",category:"analytics",domains:["*.tp88trk.com"]},{name:"Evergage",category:"analytics",domains:["*.evergage.com","*.evgnet.com"]},{name:"Everquote",category:"content",domains:["*.evq1.com"]},{name:"Everyday Health",category:"ad",domains:["*.agoramedia.com"]},{name:"Evidon",category:"analytics",domains:["*.evidon.com"]},{name:"Evolve Media",category:"content",domains:["*.evolvemediallc.com"]},{name:"Exactag",category:"ad",domains:["*.exactag.com"]},{name:"ExoClick",category:"ad",domains:["*.exoclick.com"]},{name:"Expedia",category:"content",domains:["*.travel-assets.com","*.trvl-media.com","*.trvl-px.com","*.uciservice.com"]},{name:"Expedia Australia",company:"Expedia",category:"content",domains:["*.expedia.com.au"]},{name:"Expedia Canada",company:"Expedia",category:"content",domains:["*.expedia.ca"]},{name:"Expedia France",company:"Expedia",category:"content",domains:["*.expedia.fr"]},{name:"Expedia Germany",company:"Expedia",category:"content",domains:["*.expedia.de"]},{name:"Expedia Italy",company:"Expedia",category:"content",domains:["*.expedia.it"]},{name:"Expedia Japan",company:"Expedia",category:"content",domains:["*.expedia.co.jp"]},{name:"Expedia USA",company:"Expedia",category:"content",domains:["*.expedia.com"]},{name:"Expedia United Kingdom",company:"Expedia",category:"content",domains:["*.expedia.co.uk"]},{name:"Experian",category:"utility",domains:["*.audienceiq.com","*.experian.com","*.experianmarketingservices.digital"]},{name:"Experian Cross-Channel Marketing Platform",company:"Experian",category:"marketing",domains:["*.eccmp.com","*.ccmp.eu"]},{name:"Exponea",category:"analytics",domains:["*.exponea.com"]},{name:"Exponential Interactive",category:"ad",domains:["*.exponential.com"]},{name:"Extensis WebInk",category:"cdn",domains:["*.webink.com"]},{name:"Extole",category:"ad",domains:["*.extole.com","*.extole.io"]},{name:"Ey-Seren",category:"analytics",domains:["*.webabacus.com"]},{name:"EyeView",category:"ad",domains:["*.eyeviewads.com"]},{name:"Eyeota",category:"ad",domains:["*.eyeota.net"]},{name:"Ezakus Pretargeting",company:"Ezakus",category:"ad",domains:["*.ezakus.net"]},{name:"Ezoic",category:"analytics",domains:["*.ezoic.net"]},{name:"FLXone",company:"Teradata",category:"ad",domains:["*.pangolin.blue","*.flx1.com","d2hlpp31teaww3.cloudfront.net","*.flxpxl.com"]},{name:"Fairfax Media",category:"content",domains:["ads.fairfax.com.au","resources.fairfax.com.au"]},{name:"Fairfax Media Analtics",company:"Fairfax Media",category:"analytics",domains:["analytics.fairfax.com.au"]},{name:"Falk Technologies",category:"ad",domains:["*.angsrvr.com"]},{name:"Fanplayr",category:"analytics",domains:["*.fanplayr.com","d38nbbai6u794i.cloudfront.net"]},{name:"Fast Thinking",company:"NE Marketing",category:"marketing",domains:["*.fast-thinking.co.uk"]},{name:"Fastest Forward",category:"analytics",domains:["*.gaug.es"]},{name:"Fastly",category:"utility",domains:["*.fastly.net"]},{name:"Feedbackify",company:"InsideMetrics",category:"analytics",domains:["*.feedbackify.com"]},{name:"Feefo.com",company:"Feefo",category:"analytics",domains:["*.feefo.com"]},{name:"Fidelity Media",category:"ad",domains:["*.fidelity-media.com"]},{name:"Filestack",category:"content",domains:["*.filepicker.io"]},{name:"Finsbury Media",category:"ad",domains:["*.finsburymedia.com"]},{name:"Firepush",category:"utility",domains:["*.firepush.io"]},{name:"FirstImpression",category:"ad",domains:["*.firstimpression.io"]},{name:"Fit Analytics",category:"other",domains:["*.fitanalytics.com"]},{name:"Fits Me",category:"analytics",domains:["*.fits.me"]},{name:"Fivetran",category:"analytics",domains:["*.fivetran.com"]},{name:"FlexShopper",category:"utility",domains:["*.flexshopper.com"]},{name:"Flickr",category:"content",domains:["*.flickr.com","*.staticflickr.com"]},{name:"Flipboard",category:"social",domains:["*.flipboard.com"]},{name:"Flipdesk",category:"customer-success",homepage:"https://flipdesk.jp/",domains:["*.flipdesk.jp"]},{name:"Flipp",category:"analytics",domains:["*.wishabi.com","d2e0sxz09bo7k2.cloudfront.net","*.wishabi.net"]},{name:"Flite",category:"ad",domains:["*.flite.com"]},{name:"Flixmedia",category:"analytics",domains:["*.flix360.com","*.flixcar.com","*.flixfacts.com","*.flixsyndication.net","*.flixfacts.co.uk"]},{name:"Flockler",category:"ad",domains:["*.flockler.com"]},{name:"Flowplayer",category:"content",domains:["*.flowplayer.org"]},{name:"Flowzymes Ky",category:"cdn",domains:["*.jquerytools.org"]},{name:"Fomo",category:"ad",domains:["*.notifyapp.io"]},{name:"Fonecall",category:"analytics",domains:["*.web-call-analytics.com"]},{name:"Fontdeck",category:"cdn",domains:["*.fontdeck.com"]},{name:"Foodity Technologies",category:"ad",domains:["*.foodity.com"]},{name:"Force24",category:"ad",domains:["*.force24.co.uk"]},{name:"ForeSee",company:"Answers",category:"analytics",domains:["*.4seeresults.com","*.answerscloud.com","*.foresee.com","*.foreseeresults.com"]},{name:"Forensiq",category:"utility",domains:["*.fqtag.com"]},{name:"Fort Awesome",category:"cdn",domains:["*.fortawesome.com"]},{name:"Forter",category:"utility",domains:["*.forter.com"]},{name:"Forward Internet Group",category:"hosting",domains:["*.f3d.io"]},{name:"Forward3D",category:"ad",domains:["*.forward3d.com"]},{name:"Fospha",category:"analytics",domains:["*.fospha.com"]},{name:"Foursixty",category:"customer-success",domains:["*.foursixty.com"]},{name:"FoxyCart",category:"utility",domains:["*.foxycart.com"]},{name:"Fraudlogix",category:"utility",domains:["*.yabidos.com"]},{name:"FreakOut",category:"ad",domains:["*.fout.jp"]},{name:"Freespee",category:"customer-success",domains:["*.freespee.com"]},{name:"Freetobook",category:"content",domains:["*.freetobook.com"]},{name:"Fresh 8 Gaming",category:"ad",domains:["*.fresh8.co"]},{name:"Fresh Relevance",category:"analytics",domains:["*.freshrelevance.com","*.cloudfront.ne","d1y9qtn9cuc3xw.cloudfront.net","d81mfvml8p5ml.cloudfront.net","dkpklk99llpj0.cloudfront.net"]},{name:"Friendbuy",category:"ad",domains:["*.friendbuy.com","djnf6e5yyirys.cloudfront.net"]},{name:"Frienefit",category:"ad",domains:["*.frienefit.com"]},{name:"FuelX",category:"ad",domains:["*.fuelx.com"]},{name:"Full Circle Studies",category:"analytics",domains:["*.securestudies.com"]},{name:"FullStory",category:"analytics",domains:["*.fullstory.com"]},{name:"Fyber",category:"ad",domains:["*.fyber.com"]},{name:"G-Forces Web Management",category:"hosting",domains:["*.gforcesinternal.co.uk"]},{name:"G4 Native",company:"Gravity4",category:"ad",domains:["*.triggit.com"]},{name:"GET ME IN!  (TicketMaster)",category:"content",domains:["*.getmein.com"]},{name:"GIPHY",category:"content",domains:["*.giphy.com"]},{name:"GainCloud",company:"GainCloud Systems",category:"other",domains:["*.egaincloud.net"]},{name:"Gath Adams",category:"content",domains:["*.iwantthatflight.com.au"]},{name:"Gecko Tribe",category:"social",domains:["*.geckotribe.com"]},{name:"Gemius",category:"ad",domains:["*.gemius.pl"]},{name:"Genesis Media",category:"ad",domains:["*.bzgint.com","*.genesismedia.com","*.genesismediaus.com"]},{name:"Genie Ventures",category:"ad",domains:["*.genieventures.co.uk"]},{name:"Geniee",category:"ad",domains:["*.href.asia","*.genieessp.jp","*.genieesspv.jp","*.gssprt.jp"]},{name:"Geniuslink",category:"analytics",domains:["*.geni.us"]},{name:"GeoRiot",category:"other",domains:["*.georiot.com"]},{name:"GeoTrust",category:"utility",domains:["*.geotrust.com"]},{name:"Geoplugin",category:"utility",domains:["*.geoplugin.com","*.geoplugin.net"]},{name:"Georeferencer",company:"Klokan Technologies",category:"utility",domains:["*.georeferencer.com"]},{name:"GetIntent RTBSuite",company:"GetIntent",category:"ad",domains:["*.adhigh.net"]},{name:"GetResponse",category:"ad",domains:["*.getresponse.com"]},{name:"GetSiteControl",company:"GetWebCraft",category:"utility",domains:["*.getsitecontrol.com"]},{name:"GetSocial",category:"social",domains:["*.getsocial.io"]},{name:"Getty Images",category:"content",domains:["*.gettyimages.com","*.gettyimages.co.uk"]},{name:"Gfycat",company:"Gycat",category:"utility",domains:["*.gfycat.com"]},{name:"Ghostery Enterprise",company:"Ghostery",category:"marketing",domains:["*.betrad.com"]},{name:"Giant Media",category:"ad",domains:["*.videostat.com"]},{name:"Gigya",category:"analytics",domains:["*.gigya.com"]},{name:"GitHub",category:"utility",domains:["*.github.com","*.githubusercontent.com","*.github.io","*.rawgit.com"]},{name:"Gladly",company:"Gladly",homepage:"https://www.gladly.com/",category:"customer-success",domains:["*.gladly.com"]},{name:"Glassdoor",category:"content",domains:["*.glassdoor.com"]},{name:"Gleam",category:"marketing",domains:["*.gleam.io"]},{name:"Global Digital Markets",category:"ad",domains:["*.gdmdigital.com"]},{name:"Global-e",category:"hosting",domains:["*.global-e.com"]},{name:"GlobalSign",category:"utility",domains:["*.globalsign.com","*.globalsign.net"]},{name:"GlobalWebIndex",category:"analytics",domains:["*.globalwebindex.net"]},{name:"Globase International",category:"ad",domains:["*.globase.com"]},{name:"GoDataFeed",category:"other",domains:["*.godatafeed.com"]},{name:"Google APIs",company:"Google",category:"utility",domains:["googleapis.com"]},{name:"Google Ad Block Detection",company:"Google",category:"ad",domains:["*.0emn.com","*.0fmm.com"]},{name:"Google Analytics Experiments",company:"Google",category:"analytics",domains:["*.gexperiments1.com"]},{name:"Google DoubleClick Ad Exchange",company:"Google",category:"ad",domains:["*.admeld.com"]},{name:"Google IPV6 Metrics",company:"Google",category:"analytics",domains:["*.ipv6test.net"]},{name:"Google Plus",company:"Google",category:"social",domains:["plus.google.com"]},{name:"Google Trusted Stores",company:"Google",category:"utility",domains:["*.googlecommerce.com"]},{name:"Google Video",company:"Google",category:"content",domains:["*.googlevideo.com"]},{name:"Google reCAPTCHA",company:"Google",category:"utility",domains:["*.recaptcha.net"]},{name:"GovMetric",company:"ROL Solutions",category:"analytics",domains:["*.govmetric.com"]},{name:"Granify",category:"analytics",domains:["*.granify.com"]},{name:"Grapeshot",category:"ad",domains:["*.gscontxt.net","*.grapeshot.co.uk"]},{name:"Gravity (AOL)",category:"analytics",domains:["*.grvcdn.com"]},{name:"Groovy Gecko",category:"content",domains:["*.ggwebcast.com","*.groovygecko.net"]},{name:"GroupM",category:"ad",domains:["*.qservz.com"]},{name:"Guardian Media",category:"ad",domains:["*.theguardian.com","*.guardian.co.uk"]},{name:"GumGum",category:"ad",domains:["*.gumgum.com"]},{name:"Gumtree",category:"content",domains:["*.gumtree.com"]},{name:"H264 Codec",company:"Cisco",category:"other",domains:["*.openh264.org"]},{name:"HERE",category:"analytics",domains:["*.medio.com"]},{name:"HP Optimost",company:"Hewlett-Packard Development Company",category:"marketing",domains:["*.hp.com","d2uncb19xzxhzx.cloudfront.net"]},{name:"Has Offers",company:"TUNE",category:"ad",domains:["*.go2cloud.org"]},{name:"Hawk Search",category:"utility",domains:["*.hawksearch.com"]},{name:"Haymarket Media Group",category:"content",domains:["*.brandrepublic.com","*.hbpl.co.uk"]},{name:"Heap",category:"analytics",domains:["*.heapanalytics.com"]},{name:"Hearst Communications",category:"content",domains:["*.h-cdn.co","*.hearstdigital.com","*.hearstlabs.com","*.hearst.io","*.cdnds.net"]},{name:"Heatmap",category:"analytics",domains:["*.heatmap.it"]},{name:"Heroku",category:"other",domains:["*.herokuapp.com"]},{name:"Hexton",category:"utility",domains:["*.hextom.com"]},{name:"Hibernia Networks",category:"utility",domains:["*.hiberniacdn.com"]},{name:"High Impact Media",category:"ad",domains:["*.reactx.com"]},{name:"Highcharts",category:"utility",domains:["*.highcharts.com"]},{name:"Highwinds",category:"utility",domains:["*.hwcdn.net"]},{name:"HitsLink",category:"analytics",domains:["*.hitslink.com"]},{name:"Hola Networks",category:"other",domains:["*.h-cdn.com"]},{name:"Hootsuite",category:"analytics",domains:["*.hootsuite.com"]},{name:"HotUKDeals",category:"analytics",domains:["*.hotukdeals.com"]},{name:"HotWords",company:"Media Response Group",category:"ad",domains:["*.hotwords.com.br"]},{name:"HotelsCombined",category:"content",domains:["*.datahc.com"]},{name:"Hoverr",category:"ad",domains:["*.hoverr.media"]},{name:"Hull.js",category:"utility",domains:["*.hull.io","*.hullapp.io"]},{name:"Hupso Website Analyzer",company:"Hupso",category:"analytics",domains:["*.hupso.com"]},{name:"I-Behavior",company:"WPP",category:"ad",domains:["*.ib-ibi.com"]},{name:"i-mobile",company:"i-mobile",category:"ad",domains:["*.i-mobile.co.jp"]},{name:"IBM Digital Analytics",company:"IBM",category:"analytics",domains:["*.cmcore.com","coremetrics.com","data.coremetrics.com","data.de.coremetrics.com","libs.de.coremetrics.com","tmscdn.de.coremetrics.com","iocdn.coremetrics.com","libs.coremetrics.com","tmscdn.coremetrics.com","*.s81c.com","*.unica.com","*.coremetrics.eu"]},{name:"IBM Digital Data Exchange",company:"IBM",category:"tag-manager",domains:["tagmanager.coremetrics.com"]},{name:"IBM Tealeaf",company:"IBM",category:"analytics",domains:["*.ibmcloud.com"]},{name:"IBM Acoustic Campaign",company:"IBM",category:"analytics",domains:["www.sc.pages01.net","www.sc.pages02.net","www.sc.pages03.net","www.sc.pages04.net","www.sc.pages05.net","www.sc.pages06.net","www.sc.pages07.net","www.sc.pages08.net","www.sc.pages09.net","www.sc.pagesA.net"]},{name:"ICF Technology",category:"content",domains:["*.camads.net"]},{name:"IFDNRG",category:"hosting",domains:["*.ifdnrg.com"]},{name:"IMRG",category:"analytics",domains:["*.peermap.com","*.imrg.org"]},{name:"IPONWEB",category:"ad",domains:["*.company-target.com","*.liadm.com","*.iponweb.net","*.p161.net"]},{name:"IQ Mobile",category:"utility",domains:["*.iqm.cc"]},{name:"IS Group",category:"hosting",domains:["*.creative-serving.com"]},{name:"IT Dienstleistungen Tim Prinzkosky",category:"utility",domains:["*.flaticons.net"]},{name:"IXI Digital",company:"Equifax",category:"ad",domains:["*.ixiaa.com"]},{name:"IcoMoon",category:"cdn",domains:["d19ayerf5ehaab.cloudfront.net","d1azc1qln24ryf.cloudfront.net"]},{name:"IdenTrust",category:"utility",domains:["*.identrust.com"]},{name:"Ido",category:"customer-success",domains:["*.idio.co"]},{name:"Ignition One",category:"marketing",domains:["*.searchignite.com"]},{name:"ImageShack",category:"content",domains:["*.yfrog.com"]},{name:"Imagen Studio",category:"utility",domains:["*.telephonesky.com"]},{name:"Imagini Holdings",category:"ad",domains:["*.vdna-assets.com"]},{name:"Img Safe",category:"content",domains:["*.imgsafe.org"]},{name:"Imgur",category:"utility",domains:["*.imgur.com"]},{name:"Impact Radius",category:"ad",domains:["*.impactradius-event.com","*.impactradius-go.com","*.7eer.net","d3cxv97fi8q177.cloudfront.net","*.evyy.net","*.ojrq.net","utt.impactcdn.com","*.sjv.io"]},{name:"Improve Digital",category:"ad",domains:["*.360yield.com"]},{name:"Improvely",category:"analytics",domains:["*.iljmp.com"]},{name:"InMobi",category:"ad",domains:["*.inmobi.com"]},{name:"InSkin Media",category:"ad",domains:["*.inskinad.com","*.inskinmedia.com"]},{name:"Inbenta",category:"customer-success",domains:["*.inbenta.com"]},{name:"Incisive Media",category:"content",domains:["*.incisivemedia.com"]},{name:"Indeed",category:"content",domains:["*.indeed.com"]},{name:"Index Exchange",company:"WPP",category:"ad",domains:["*.casalemedia.com","*.indexww.com"]},{name:"Indoona",category:"other",domains:["*.indoona.com"]},{name:"Infectious Media",category:"ad",domains:["*.impdesk.com","*.impressiondesk.com","*.inmz.net"]},{name:"Inference Mobile",category:"ad",domains:["*.inferencemobile.com"]},{name:"Infinity Tracking",category:"analytics",domains:["*.infinity-tracking.net"]},{name:"Infoline",category:"analytics",domains:["*.ioam.de"]},{name:"Infolinks",category:"ad",domains:["*.infolinks.com"]},{name:"Infopark",category:"hosting",domains:["*.scrvt.com"]},{name:"Infusionsoft",category:"ad",domains:["*.infusionsoft.com"]},{name:"Ink",category:"ad",domains:["*.inktad.com"]},{name:"Inktel Contact Center Solutions",company:"Inktel",category:"customer-success",domains:["*.inktel.com"]},{name:"Inneractive",category:"ad",domains:["*.inner-active.mobi"]},{name:"Innovid",category:"ad",homepage:"https://www.innovid.com/",domains:["*.innovid.com"]},{name:"Insight Express",category:"analytics",domains:["*.insightexpressai.com"]},{name:"Insipio",category:"other",domains:["*.insipio.com"]},{name:"Inspectlet",category:"analytics",domains:["*.inspectlet.com"]},{name:"Instansive",category:"utility",domains:["*.instansive.com"]},{name:"Instart",homepage:"https://www.instart.com/",category:"utility",domains:["*.insnw.net"]},{name:"Instembedder",category:"content",domains:["*.instaembedder.com"]},{name:"Instinctive",category:"ad",domains:["*.instinctiveads.com"]},{name:"Intelligent Reach",category:"ad",domains:["*.ist-track.com"]},{name:"Intent HQ",category:"analytics",domains:["*.intenthq.com"]},{name:"Intent IQ",category:"ad",domains:["*.intentiq.com"]},{name:"Intercept Interactive",category:"ad",domains:["*.undertone.com"]},{name:"Interest Graph",company:"AOL",category:"ad",domains:["*.gravity.com"]},{name:"Internet Brands",category:"content",domains:["*.ibpxl.com"]},{name:"Interpublic Group",category:"ad",domains:["*.mbww.com"]},{name:"Interstate",category:"analytics",domains:["*.interstateanalytics.com"]},{name:"Interview",category:"analytics",domains:["*.efm.me"]},{name:"Intilery",category:"customer-success",domains:["*.intilery-analytics.com"]},{name:"Investis",category:"utility",domains:["*.investis.com"]},{name:"Investis Flife",category:"hosting",domains:["*.quartalflife.com"]},{name:"Invodo",category:"ad",domains:["*.invodo.com"]},{name:"iSite",category:"analytics",domains:["*.isitetv.com"]},{name:"Issue",category:"content",domains:["*.issue.by"]},{name:"J.D. Williams & Co",category:"content",domains:["*.drct2u.com"]},{name:"Janrain",category:"analytics",domains:["*.janrain.com","*.janrainbackplane.com","*.rpxnow.com","d3hmp0045zy3cs.cloudfront.net"]},{name:"Jellyfish",category:"ad",domains:["*.jellyfish.net"]},{name:"JetStream",category:"content",domains:["*.xlcdn.com"]},{name:"JingDong",category:"content",domains:["*.3.com","*.jd.com"]},{name:"Jivox",category:"ad",domains:["*.jivox.com"]},{name:"Jobvite",category:"content",domains:["*.jobvite.com"]},{name:"Johnston Press",category:"content",domains:["*.johnstonpress.co.uk","*.jpress.co.uk"]},{name:"Join the Dots (Research)",category:"social",domains:["*.jtdiscuss.com"]},{name:"JotForm",category:"utility",domains:["*.jotformpro.com"]},{name:"JuicyAds",category:"ad",domains:["*.juicyads.com"]},{name:"JustPremium",category:"ad",domains:["*.net.net"]},{name:"JustPremium Ads",company:"JustPremium",category:"ad",domains:["*.justpremium.com"]},{name:"JustUno",category:"ad",domains:["*.justuno.com","d2j3qa5nc37287.cloudfront.net"]},{name:"KINX (Korea Internet Neutral eXchange)",category:"other",domains:["*.kinxcdn.com"]},{name:"KISSmetrics",category:"analytics",domains:["*.kissmetrics.com","doug1izaerwt3.cloudfront.net","dsyszv14g9ymi.cloudfront.net"]},{name:"Kaizen Platform",category:"analytics",domains:["*.kaizenplatform.net"]},{name:"Kakao",category:"social",domains:["*.daum.net","*.daumcdn.net"]},{name:"Kaltura Video Platform",company:"Kaltura",category:"content",domains:["*.kaltura.com"]},{name:"Kameleoon",category:"analytics",domains:["*.kameleoon.com","*.kameleoon.eu"]},{name:"Kampyle",category:"analytics",domains:["*.kampyle.com"]},{name:"Kantar",category:"analytics",domains:["*.sesamestats.com"]},{name:"Kargo",category:"marketing",domains:["*.kargo.com"]},{name:"KARTE",company:"Plaid",homepage:"https://karte.io/",category:"marketing",domains:["*.karte.io"]},{name:"Kauli",category:"ad",domains:["*.kau.li"]},{name:"Keen",company:"Keen",homepage:"https://keen.io/",category:"analytics",domains:["*.keen.io","d26b395fwzu5fz.cloudfront.net"]},{name:"Kelkoo",category:"hosting",domains:["*.kelkoo.com"]},{name:"Kenshoo",category:"marketing",domains:["*.xg4ken.com"]},{name:"Key CDN",category:"utility",domains:["*.kxcdn.com"]},{name:"Keynote",company:"Dynatrace",category:"analytics",domains:["*.keynote.com"]},{name:"Keywee",category:"ad",domains:["*.keywee.co"]},{name:"Kiosked",category:"ad",domains:["*.kiosked.com"]},{name:"Klarna",category:"utility",domains:["*.klarna.com"]},{name:"Klaviyo",category:"ad",domains:["*.klaviyo.com"]},{name:"Klevu Search",company:"Klevu",category:"utility",domains:["*.klevu.com"]},{name:"Klick2Contact",category:"customer-success",domains:["*.klick2contact.com"]},{name:"Knight Lab",company:"Northwestern University",category:"utility",domains:["*.knightlab.com"]},{name:"Kodajo",category:"other",domains:["*.kodajo.com"]},{name:"Komoona",category:"ad",domains:["*.komoona.com"]},{name:"Korrelate",company:"JD Power",category:"analytics",domains:["*.korrelate.net"]},{name:"LKQD",category:"ad",domains:["*.lkqd.net"]},{name:"Layer0",category:"cdn",domains:["*.layer0.co"]},{name:"Layershift",category:"hosting",domains:["109.109.138.174"]},{name:"Lead Forensics",category:"ad",domains:["*.200summit.com","*.baw5tracker.com","*.business-path-55.com","*.bux1le001.com","*.central-core-7.com","*.direct-azr-78.com","*.explore-123.com","*.forensics1000.com","*.gldsta-02-or.com","*.green-bloc9.com","*.lansrv040.com","*.lead-123.com","*.leadforensics.com","*.mavic852.com","*.mon-com-net.com","*.peak-ip-54.com","*.snta0034.com","*.svr-prc-01.com","*.syntace-094.com","*.tghbn12.com","*.trail-web.com","*.web-01-gbl.com","*.web-cntr-07.com","*.trackdiscovery.net"]},{name:"Lead Intelligence",company:"Magnetise Solutions",category:"ad",domains:["*.leadintelligence.co.uk"]},{name:"LeadLander",category:"analytics",domains:["*.formalyzer.com","*.trackalyzer.com"]},{name:"Leaflet",category:"utility",domains:["*.leafletjs.com"]},{name:"LeasdBoxer",company:"LeadBoxer",category:"ad",domains:["*.leadboxer.com"]},{name:"LeaseWeb",homepage:"https://www.leaseweb.com/",category:"cdn",domains:["*.lswcdn.net","*.leasewebcdn.com"]},{name:"Leboncoin",category:"content",domains:["*.leboncoin.fr"]},{name:"Lengow",category:"hosting",domains:["*.lengow.com"]},{name:"Lessbuttons",category:"social",domains:["*.lessbuttons.com"]},{name:"Letter Press",category:"ad",domains:["*.getletterpress.com"]},{name:"Level 3 Communications",category:"utility",domains:["footprint.net"]},{name:"Level3",category:"other",domains:["secure.footprint.net"]},{name:"Lifestreet Media",category:"social",domains:["*.lfstmedia.com"]},{name:"LiftSuggest",category:"analytics",domains:["d2blwevgjs7yom.cloudfront.net"]},{name:"Ligatus",category:"ad",domains:["*.ligadx.com"]},{name:"LightStep",category:"analytics",domains:["*.lightstep.com"]},{name:"LightWidget",category:"utility",domains:["*.lightwidget.com"]},{name:"Likelihood",company:"LIkeihood",category:"hosting",domains:["*.likelihood.com"]},{name:"LikeShop",company:"Dash Hudson",category:"content",domains:["likeshop.me"]},{name:"LINE Corporation",category:"ad",domains:["*.line-scdn.net","*.line.me"]},{name:"Linkcious",category:"analytics",domains:["*.linkcious.com"]},{name:"Linking Mobile",category:"ad",domains:["*.linkingmobile.com"]},{name:"LittleData",category:"analytics",homepage:"https://www.littledata.io/",domains:["*.littledata.io"]},{name:"LiveBurst",category:"ad",domains:["*.liveburst.com"]},{name:"LiveClicker",category:"ad",domains:["*.liveclicker.net"]},{name:"LiveHelpNow",category:"customer-success",domains:["*.livehelpnow.net"]},{name:"LiveInternet",category:"analytics",domains:["*.yadro.ru"]},{name:"LiveJournal",category:"social",domains:["*.livejournal.com","*.livejournal.net"]},{name:"LivePerson",category:"customer-success",homepage:"https://www.liveperson.com/",domains:["*.liveperson.com","*.look.io","*.liveperson.net","*.lpsnmedia.net"]},{name:"LiveRail",company:"Facebook",category:"ad",domains:["*.liverail.com","*.lrcdn.net"]},{name:"LiveTex",category:"customer-success",domains:["*.livetex.ru"]},{name:"Livefyre",category:"content",domains:["*.fyre.co","*.livefyre.com"]},{name:"Living Map Company",category:"utility",domains:["*.livingmap.com"]},{name:"Local World",category:"content",domains:["*.thelocalpeople.co.uk"]},{name:"LockerDome",category:"analytics",domains:["*.lockerdome.com"]},{name:"Logentries",company:"Rapid",category:"utility",domains:["*.logentries.com"]},{name:"Logicalis",category:"analytics",domains:["*.trovus.co.uk"]},{name:"LoginRadius",company:"LoginRadius",homepage:"https://www.loginradius.com/",category:"ad",domains:["*.loginradius.com","*.lrcontent.com"]},{name:"LongTail Ad Solutions",category:"ad",domains:["*.jwpcdn.com","*.jwplatform.com","*.jwplayer.com","*.jwpltx.com","*.jwpsrv.com","*.longtailvideo.com"]},{name:"Loop Commerce",category:"other",domains:["*.loopassets.net"]},{name:"Loop11",category:"analytics",domains:["*.loop11.com"]},{name:"LoopMe",category:"ad",domains:["*.loopme.biz","*.loopme.com","*.vntsm.com","*.loopme.me"]},{name:"Looper",category:"content",domains:["*.looper.com"]},{name:"Loyalty Point",category:"ad",domains:["*.loyaltypoint.pl"]},{name:"LoyaltyLion",category:"ad",domains:["*.loyaltylion.com","*.loyaltylion.net","dg1f2pfrgjxdq.cloudfront.net"]},{name:"Luma Tag",category:"analytics",domains:["*.lumatag.co.uk"]},{name:"Lumesse",category:"content",domains:["*.recruitmentplatform.com"]},{name:"Luminate",category:"ad",domains:["*.luminate.com"]},{name:"Lynchpin Analytics",category:"analytics",domains:["*.lypn.net"]},{name:"Lyris",category:"ad",domains:["*.clicktracks.com"]},{name:"Lytics",category:"ad",domains:["*.lytics.io"]},{name:"MEC WebTrack",company:"MEC",category:"ad",domains:["*.e-webtrack.net"]},{name:"MECLABS Institute",category:"analytics",domains:["*.meclabs.com","*.meclabsdata.com"]},{name:"MLveda",category:"utility",domains:["*.mlveda.com"]},{name:"Macromill",company:"Macromill",category:"analytics",homepage:"https://group.macromill.com/",domains:["*.macromill.com"]},{name:"Macropod BugHerd",company:"Macropod",category:"utility",domains:["*.bugherd.com"]},{name:"Madison Logic",category:"marketing",domains:["*.ml314.com"]},{name:"Madmetrics",company:"Keyade",category:"analytics",domains:["*.keyade.com"]},{name:"Magnetic",category:"ad",domains:["*.domdex.com","d3ezl4ajpp2zy8.cloudfront.net"]},{name:"Magnetic Platform",company:"Magnetic",category:"ad",domains:["*.magnetic.is"]},{name:"MailMunch",category:"ad",domains:["*.mailmunch.co"]},{name:"MailPlus",category:"ad",domains:["*.mailplus.nl"]},{name:"Mapbox",category:"utility",domains:["*.mapbox.com"]},{name:"Maptive",category:"utility",domains:["*.maptive.com"]},{name:"Marcaria.com",category:"other",domains:["*.gooo.al"]},{name:"Marchex",category:"analytics",domains:["*.voicestar.com","*.marchex.io"]},{name:"Mark and Mini",category:"ad",domains:["*.markandmini.com"]},{name:"Marker",category:"utility",domains:["*.marker.io"]},{name:"Marketing Dashboards",company:"GroupM",category:"analytics",domains:["*.m-decision.com"]},{name:"Marketizator",category:"analytics",domains:["*.marketizator.com"]},{name:"Marketplace Web Service",company:"Amazon",category:"other",domains:["*.ssl-images-amazon.com"]},{name:"Mashable",category:"social",domains:["*.mshcdn.com"]},{name:"MatchWork",category:"utility",domains:["*.matchwork.com"]},{name:"MathJax",category:"utility",domains:["*.mathjax.org"]},{name:"Mather Economics",category:"analytics",domains:["*.matheranalytics.com"]},{name:"MaxCDN Enterprise",company:"MaxCDN",category:"utility",domains:["*.netdna-cdn.com","*.netdna-ssl.com"]},{name:"MaxMind",category:"utility",domains:["*.maxmind.com"]},{name:"MaxPoint Interactive",category:"ad",domains:["*.mxptint.net"]},{name:"Maxsi",category:"analytics",domains:["*.evisitanalyst.com"]},{name:"Maxymiser",category:"analytics",domains:["*.maxymiser.net, maxymiser.hs.llnwd.net"]},{name:"McAffee",category:"utility",domains:["*.mcafeesecure.com","*.scanalert.com"]},{name:"Measured",category:"analytics",domains:["*.measured.com"],homepage:"https://www.measured.com/"},{name:"Media IQ",category:"analytics",domains:["*.mediaiqdigital.com"]},{name:"Media Management Technologies",category:"ad",domains:["*.speedshiftmedia.com"]},{name:"Media Temple",category:"hosting",domains:["*.goodlayers2.com"]},{name:"Mediabong",category:"ad",domains:["*.mediabong.net"]},{name:"Mediahawk",category:"analytics",domains:["*.mediahawk.co.uk"]},{name:"Mediahub",category:"ad",domains:["*.hubverifyandoptimize.com","*.projectwatchtower.com"]},{name:"Mediasyndicator",category:"ad",domains:["*.creativesyndicator.com"]},{name:"Medium",category:"content",domains:["*.medium.com"]},{name:"Meetrics",category:"ad",domains:["*.de.com","*.meetrics.net","*.mxcdn.net"]},{name:"Mega",company:"Mega Information Technology",category:"other",domains:["*.mgcdn.com"]},{name:"Melt",category:"ad",domains:["*.meltdsp.com","*.mesp.com"]},{name:"Meltwater Group",category:"customer-success",domains:["*.meltwaternews.com"]},{name:"Meme",category:"ad",domains:["*.viewwonder.com"]},{name:"MentAd",category:"ad",domains:["*.mentad.com"]},{name:"Mention Me",category:"ad",domains:["*.mention-me.com"]},{name:"Merchant Equipment Store",category:"utility",domains:["*.merchantequip.com"]},{name:"Merchenta",category:"customer-success",domains:["*.merchenta.com"]},{name:"Merkle Digital Data Exchange",company:"Merkle",category:"ad",domains:["*.brilig.com"]},{name:"Merkle Paid Search",company:"Merkle",category:"ad",domains:["*.rkdms.com"]},{name:"Met Office",category:"content",domains:["*.metoffice.gov.uk"]},{name:"Meta Broadcast",category:"social",domains:["*.metabroadcast.com"]},{name:"Michael Associates",category:"ad",domains:["*.checktestsite.com"]},{name:"Michelin",category:"content",domains:["*.viamichelin.com"]},{name:"Microad",category:"ad",domains:["*.microad.jp"]},{name:"Microsoft Certificate Services",company:"Microsoft",category:"utility",domains:["*.msocsp.com"]},{name:"Microsoft Hosted Libs",company:"Microsoft",category:"cdn",domains:["*.aspnetcdn.com"]},{name:"Microsoft XBox Live",company:"Microsoft",category:"marketing",domains:["*.xboxlive.com"]},{name:"Mightypop",category:"ad",domains:["*.mightypop.ca"]},{name:"Mika Tuupola",category:"utility",domains:["*.appelsiini.net"]},{name:"Millennial Media",category:"ad",domains:["*.jumptap.com"]},{name:"Mirror Image Internet",category:"utility",domains:["*.miisolutions.net"]},{name:"Mobify",category:"utility",domains:["*.mobify.com","*.mobify.net"]},{name:"Mobile Nations",category:"social",domains:["*.mobilenations.com"]},{name:"Mobivate",category:"ad",domains:["*.mobivatebulksms.com"]},{name:"Momondo",category:"content",domains:["*.momondo.dk"]},{name:"Momondo Group",category:"content",domains:["*.momondogrouo.com","*.momondogroup.com"]},{name:"Monarch Ads",category:"ad",domains:["*.monarchads.com"]},{name:"Monetate",category:"analytics",domains:["*.monetate.net"]},{name:"MonetizeMore",category:"ad",domains:["*.m2.ai"]},{name:"Monitor",company:"Econda",category:"analytics",domains:["*.econda-monitor.de"]},{name:"Monkey Frog Media",category:"content",domains:["*.monkeyfrogmedia.com"]},{name:"Monotype",category:"cdn",domains:["*.fonts.com","*.fonts.net"]},{name:"Moore-Wilson",category:"ad",domains:["*.mwdev.co.uk"]},{name:"Moovweb",category:"utility",domains:["*.moovweb.net"]},{name:"Mopinion",category:"analytics",domains:["*.mopinion.com"]},{name:"MotionPoint",category:"other",domains:["*.convertlanguage.com"]},{name:"Mouse3K",category:"analytics",domains:["*.mouse3k.com"]},{name:"MouseStats",category:"analytics",domains:["*.mousestats.com"]},{name:"Mouseflow",category:"analytics",domains:["*.mouseflow.com"]},{name:"Movable Ink",category:"analytics",domains:["*.micpn.com"]},{name:"MovingIMAGE24",category:"content",domains:["*.edge-cdn.net"]},{name:"Moxielinks",category:"ad",domains:["*.moxielinks.com"]},{name:"Moz Recommended Companies",company:"Moz",category:"analytics",domains:["d2eeipcrcdle6.cloudfront.net"]},{name:"Mozilla",category:"utility",domains:["*.mozilla.org"]},{name:"Multiview",category:"content",domains:["*.multiview.com","*.track-mv.com"]},{name:"Mux",category:"analytics",domains:["*.litix.io"]},{name:"MyAds",company:"MyBuys",category:"analytics",domains:["*.veruta.com"]},{name:"MyBuys",category:"analytics",domains:["*.mybuys.com"]},{name:"MyFonts",category:"cdn",domains:["*.myfonts.net"]},{name:"MyRegistry",category:"other",domains:["*.myregistry.com"]},{name:"MySpace",company:"Specific Media",category:"social",domains:["*.myspace.com"]},{name:"Mynewsdesk",category:"utility",domains:["*.mynewsdesk.com"]},{name:"NAVIS",category:"content",domains:["*.navistechnologies.info"]},{name:"NCC Group Real User Monitoring",company:"NCC Group",category:"analytics",domains:["*.nccgroup-webperf.com"]},{name:"NEORY Marketing Cloud",company:"NEORY",category:"marketing",domains:["*.ad-srv.net"]},{name:"Nanigans",category:"ad",domains:["*.nanigans.com"]},{name:"Nano Interactive",category:"ad",domains:["*.audiencemanager.de"]},{name:"Nanorep",company:"Nanorep Technologies",category:"customer-success",domains:["*.nanorep.com"]},{name:"Narrative",category:"ad",domains:["*.narrative.io"]},{name:"Native Ads",category:"ad",domains:["*.nativeads.com"]},{name:"Nativo",category:"ad",domains:["*.postrelease.com"]},{name:"Navegg",category:"ad",domains:["*.navdmp.com"]},{name:"NaviStone",category:"ad",domains:["*.murdoog.com"]},{name:"Naytev",category:"analytics",domains:["*.naytev.com"]},{name:"Needle",category:"analytics",domains:["*.needle.com"]},{name:"Neiman Marcus",category:"content",domains:["*.ctscdn.com"]},{name:"Nend",category:"ad",domains:["*.nend.net"]},{name:"Neodata",category:"ad",domains:["*.neodatagroup.com"]},{name:"Net Applications",category:"analytics",domains:["*.hitsprocessor.com"]},{name:"Net Reviews",category:"analytics",domains:["*.avis-verifies.com"]},{name:"NetAffiliation",company:"Kwanco",category:"ad",domains:["*.metaffiliation.com"]},{name:"NetDirector",company:"G-Forces Web Management",category:"other",domains:["*.netdirector.co.uk"]},{name:"NetFlix",category:"content",domains:["*.nflxext.com","*.nflximg.net"]},{name:"Nielsen NetRatings SiteCensus",company:"The Nielsen Company",homepage:"http://www.nielsen-online.com/intlpage.html",category:"analytics",domains:["*.imrworldwide.com"]},{name:"NetSeer",category:"ad",domains:["*.netseer.com","*.ns-cdn.com"]},{name:"NetShelter",company:"Ziff Davis Tech",category:"ad",domains:["*.netshelter.net"]},{name:"Netmining",company:"Ignition One",category:"ad",domains:["*.netmng.com"]},{name:"Netop",category:"customer-success",domains:["*.netop.com"]},{name:"Network Solutions",category:"utility",domains:["*.netsolssl.com","*.networksolutions.com"]},{name:"Neustar AdAdvisor",company:"Neustar",category:"ad",domains:["*.adadvisor.net"]},{name:"New Approach Media",category:"ad",domains:["*.newapproachmedia.co.uk"]},{name:"NewShareCounts",category:"social",domains:["*.newsharecounts.com"]},{name:"News",category:"social",domains:["*.news.com.au","*.newsanalytics.com.au","*.newsapi.com.au","*.newscdn.com.au","*.newsdata.com.au","*.newsdiscover.com.au","*.news-static.com"]},{name:"Newsquest",category:"content",domains:["*.newsquestdigital.co.uk"]},{name:"Newzulu",category:"content",domains:["*.filemobile.com","*.projects.fm"]},{name:"Nexcess.Net",category:"hosting",domains:["*.nexcesscdn.net"]},{name:"Nexstar Media Group",category:"ad",domains:["*.yashi.com"]},{name:"NextPerf",company:"Rakuten Marketing",category:"ad",domains:["*.nxtck.com"]},{name:"Nine.com.au",company:"Nine Digital",category:"content",domains:["*.9msn.com.au"]},{name:"NitroSell",category:"hosting",domains:["*.nitrosell.com"]},{name:"Nochex",category:"utility",domains:["*.nochex.com"]},{name:"Northern &amp; Shell Media Group",category:"content",domains:["*.northernandshell.co.uk"]},{name:"Nosto",category:"analytics",domains:["*.nosto.com"]},{name:"Now Interact",category:"analytics",domains:["*.nowinteract.com"]},{name:"Numberly",company:"1000mercis",category:"ad",domains:["*.mmtro.com","*.nzaza.com"]},{name:"NyaConcepts",category:"analytics",domains:["*.xclusive.ly"]},{name:"O2",category:"other",domains:["*.o2.co.uk"]},{name:"GoDaddy",homepage:"https://www.godaddy.com/",category:"utility",domains:["*.godaddy.com","*.wsimg.com"]},{name:"ObjectPlanet",category:"analytics",domains:["*.easypolls.net"]},{name:"OhMyAd",category:"ad",domains:["*.ohmyad.co"]},{name:"Okas Concepts",category:"utility",domains:["*.okasconcepts.com"]},{name:"Okta",category:"analytics",domains:["*.okta.com"]},{name:"Olapic",category:"content",domains:["*.photorank.me"]},{name:"Ometria",category:"analytics",domains:["*.ometria.com"]},{name:"Omniconvert",category:"analytics",domains:["*.omniconvert.com","d2tgfbvjf3q6hn.cloudfront.net","d3vbj265bmdenw.cloudfront.net"]},{name:"Omniroot",company:"Verizon",category:"utility",domains:["*.omniroot.com"]},{name:"OnAudience",company:"Cloud Technologies",category:"ad",domains:["*.onaudience.com"]},{name:"OnScroll",category:"ad",domains:["*.onscroll.com"]},{name:"OnState",category:"ad",domains:["*.onstate.co.uk"]},{name:"OnYourMap",category:"utility",domains:["*.onyourmap.com"]},{name:"One by AOL",company:"AOL",category:"ad",domains:["*.adtechjp.com","*.adtech.de"]},{name:"One by AOL:Mobile",company:"AOL",category:"ad",domains:["*.nexage.com"]},{name:"OneAll",category:"analytics",domains:["*.oneall.com"]},{name:"OneSoon",category:"analytics",domains:["*.adalyser.com"]},{name:"OneTag",category:"ad",domains:["*.onetag-sys.com"]},{name:"Onet",category:"ad",domains:["*.onet.pl"]},{name:"Online Rewards",company:"Mastercard",category:"ad",domains:["*.loyaltygateway.com"]},{name:"Online republic",category:"content",domains:["*.imallcdn.net"]},{name:"Ooyala",category:"ad",domains:["*.ooyala.com"]},{name:"OpenTable",company:"Priceline Group",category:"content",domains:["*.opentable.com","*.opentable.co.uk","*.toptable.co.uk"]},{name:"OpenX Ad Exchange",company:"OpenX Technologies",category:"ad",domains:["*.liftdna.com"]},{name:"Opinion Stage",category:"analytics",domains:["*.opinionstage.com"]},{name:"OpinionBar",category:"analytics",domains:["*.opinionbar.com"]},{name:"Opta",company:"Perform Group",category:"content",domains:["*.opta.net"]},{name:"OptiMonk",category:"ad",domains:["*.optimonk.com"]},{name:"Optilead",category:"analytics",domains:["*.dyn-img.com","*.leadcall.co.uk","*.optilead.co.uk"]},{name:"Optimatic",category:"ad",domains:["*.optimatic.com"]},{name:"Optimise Media Group",category:"utility",domains:["*.omguk.com"]},{name:"Optimost",company:"OpenText",category:"ad",domains:["*.optimost.com"]},{name:"Optimove",company:"Mobius Solutions",category:"analytics",domains:["*.optimove.net"]},{name:"Optorb",category:"ad",domains:["*.optorb.com"]},{name:"Oracle",category:"marketing",domains:["*.custhelp.com","*.eloqua.com","*.en25.com","*.estara.com","*.instantservice.com"]},{name:"Oracle Recommendations On Demand",company:"Oracle",category:"analytics",domains:["*.atgsvcs.com"]},{name:"Oracle Responsys",company:"Oracle",category:"marketing",domains:["*.adrsp.net","*.responsys.net"]},{name:"Order Security-VOID",company:"Order Security",category:"analytics",domains:["*.order-security.com"]},{name:"Oriel",category:"ad",domains:["*.oriel.io"]},{name:"Outbrain",homepage:"https://www.outbrain.com/",category:"ad",domains:["*.outbrain.com","*.outbrainimg.com","*.visualrevenue.com"]},{name:"OverStream",company:"Coull",category:"ad",domains:["*.coull.com"]},{name:"Overdrive",category:"content",domains:["*.contentreserve.com"]},{name:"Overstock",category:"utility",domains:["*.ostkcdn.com"]},{name:"OwnerIQ",category:"ad",domains:["*.owneriq.net"]},{name:"OzCart",category:"utility",domains:["*.ozcart.com.au"]},{name:"Ozone Media",category:"ad",domains:["*.adadyn.com"]},{name:"Loqate",company:"Loqate",category:"other",domains:["*.pcapredict.com","*.postcodeanywhere.co.uk"]},{name:"PEER 1 Hosting",category:"hosting",domains:["*.peer1.com"]},{name:"PERFORM",category:"content",domains:["*.performgroup.com"]},{name:"PICnet",category:"hosting",domains:["*.nonprofitsoapbox.com"]},{name:"Pacnet",company:"Telstra",category:"other",domains:["*.cdndelivery.net"]},{name:"Pagefair",category:"ad",domains:["*.pagefair.com","*.pagefair.net"]},{name:"Pagely",category:"other",domains:["*.optnmstr.com"]},{name:"Pagesuite",category:"ad",domains:["*.pagesuite-professional.co.uk"]},{name:"Pardot",category:"marketing",domains:["*.pardot.com"]},{name:"Parse.ly",category:"analytics",domains:["*.parsely.com","d1z2jf7jlzjs58.cloudfront.net"]},{name:"Pay per Click",company:"Eysys",category:"ad",domains:["*.eysys.com"]},{name:"PayPal Ads",category:"ad",domains:["*.where.com"]},{name:"Peaks & Pies",category:"analytics",domains:["*.bunchbox.co"]},{name:"PebblePost",category:"ad",domains:["*.pbbl.co"]},{name:"Peerius",category:"analytics",domains:["*.peerius.com"]},{name:"Peermap",company:"IMRG",category:"analytics",domains:["peermapcontent.affino.com"]},{name:"Penske Media",category:"content",domains:["*.pmc.com"]},{name:"Penton",category:"utility",domains:["*.pisces-penton.com"]},{name:"Pepper",category:"ad",domains:["*.peppercorp.com"]},{name:"Perfect Audience",company:"Marin Software",category:"ad",domains:["*.prfct.co","*.marinsm.com","*.perfectaudience.com"]},{name:"Perfect Market",category:"ad",domains:["*.perfectmarket.com"]},{name:"Perfect Privacy",category:"other",domains:["*.suitesmart.com"]},{name:"Perform Group",category:"content",domains:["*.performfeeds.com","*.premiumtv.co.uk"]},{name:"Performio",category:"ad",domains:["*.performax.cz"]},{name:"PerimeterX Bot Defender",company:"PerimeterX",category:"utility",domains:["*.perimeterx.net","*.pxi.pub"]},{name:"Periscope",category:"content",domains:["*.periscope.tv"]},{name:"Permutive",category:"ad",domains:["*.permutive.com","d3alqb8vzo7fun.cloudfront.net"]},{name:"Petametrics",category:"analytics",domains:["*.petametrics.com"]},{name:"PhotoBucket",category:"content",domains:["*.photobucket.com"]},{name:"Picreel",category:"analytics",domains:["*.pcrl.co","*.picreel.com"]},{name:"Pictela (AOL)",category:"analytics",domains:["*.pictela.net"]},{name:"PistonHeads",category:"social",domains:["*.pistonheads.com"]},{name:"Piwik",category:"analytics",domains:["*.drtvtracker.com","*.piwikpro.com","*.raac33.net"]},{name:"Pixalate",category:"utility",domains:["*.adrta.com"]},{name:"Pixlee",category:"social",domains:["*.pixlee.com"]},{name:"Placed",category:"analytics",domains:["*.placed.com"]},{name:"Planning-inc",category:"analytics",domains:["*.planning-inc.co.uk"]},{name:"PlayAd Media Group",category:"ad",domains:["*.youplay.se"]},{name:"Playbuzz",category:"hosting",domains:["*.playbuzz.com"]},{name:"Pleenq",category:"ad",domains:["*.pleenq.com"]},{name:"Plentific",category:"content",domains:["*.plentific.com"]},{name:"PluginDetect",category:"other",domains:["dtlilztwypawv.cloudfront.net"]},{name:"Po.st",company:"RadiumOne",category:"utility",domains:["*.po.st"]},{name:"Pointpin",category:"utility",domains:["*.pointp.in"]},{name:"Pointroll (Garnett)",category:"ad",domains:["*.pointroll.com"]},{name:"Polar",homepage:"https://polar.me/",category:"ad",domains:["*.polarmobile.ca","*.mediaeverywhere.com","*.mediavoice.com","*.plrsrvcs.com","*.polarcdn-engine.com","*.polarcdn-meraxes.com","*.polarcdn-pentos.com","*.polarcdn-static.com","*.polarcdn-terrax.com","*.polarcdn.com","*.polarmobile.com","*.poweredbypolar.com","*.mediaconductor.me","*.polaracademy.me"]},{name:"PollDaddy (Automattic)",category:"ad",domains:["static.polldaddy.com","*.poll.fm"]},{name:"Polldaddy",company:"Automattic",category:"analytics",domains:["polldaddy.com","*.polldaddy.com"]},{name:"Polyfill service",company:"Polyfill.io",category:"other",domains:["*.polyfill.io"]},{name:"MegaPopAds",category:"ad",domains:["*.megapopads.com"]},{name:"Populis",category:"ad",domains:["*.populisengage.com"]},{name:"Postimage.org",category:"content",domains:["*.postimg.org"]},{name:"PowerFront",category:"hosting",domains:["*.inside-graph.com"]},{name:"PowerReviews",category:"analytics",domains:["*.powerreviews.com"]},{name:"Powerlinks.com",category:"ad",domains:["*.powerlinks.com"]},{name:"Press+",category:"ad",domains:["*.pipol.com","*.ppjol.com","*.ppjol.net"]},{name:"PressArea",category:"utility",domains:["*.pressarea.com"]},{name:"Pretio Interactive",category:"ad",domains:["*.pretio.in"]},{name:"Prezi",category:"utility",domains:["*.prezi.com"]},{name:"PriceGrabber",category:"content",domains:["*.pgcdn.com","*.pricegrabber.com"]},{name:"PriceRunner",category:"content",domains:["*.pricerunner.com"]},{name:"PrintFriendly",category:"utility",domains:["*.printfriendly.com"]},{name:"Privy",category:"ad",domains:["*.privy.com","*.privymktg.com"]},{name:"Proclivity Media",category:"analytics",domains:["*.pswec.com"]},{name:"Profitshare",category:"ad",domains:["*.profitshare.ro"]},{name:"Programattik",category:"ad",domains:["*.programattik.com"]},{name:"Proper Media",category:"content",domains:["*.proper.io"]},{name:"Property Week",category:"content",domains:["*.propertyweek.com"]},{name:"Provide Support",category:"customer-success",domains:["*.providesupport.com"]},{name:"Proweb Uk",category:"hosting",domains:["*.proweb.net"]},{name:"Proximic (ComScore)",category:"ad",domains:["*.proximic.com"]},{name:"Psyma",category:"ad",domains:["*.psyma.com"]},{name:"PubFactory",company:"Safari Books Online",category:"content",domains:["*.pubfactory.com"]},{name:"PubNation",category:"ad",domains:["*.pubnation.com"]},{name:"Publicidad.net",category:"ad",domains:["*.publicidad.tv"]},{name:"PublishThis",company:"Ultra Unlimited",category:"ad",domains:["*.publishthis.com"]},{name:"Pulse Insights",category:"analytics",domains:["*.pulseinsights.com"]},{name:"Pulsepoint",category:"marketing",domains:["*.displaymarketplace.com"]},{name:"Purch",category:"ad",domains:["*.bestofmedia.com","*.purch.com"]},{name:"Pure Chat",category:"customer-success",domains:["*.purechat.com"]},{name:"PushCrew",category:"ad",domains:["*.pushcrew.com"]},{name:"Q1Media",category:"ad",domains:["*.q1media.com","*.q1mediahydraplatform.com"]},{name:"Qbase Software Development",category:"hosting",domains:["*.smartwebportal.co.uk"]},{name:"Qeryz",category:"analytics",domains:["*.qeryz.com"]},{name:"Qode Interactive",category:"hosting",domains:["*.qodeinteractive.com"]},{name:"Qrius",category:"social",domains:["*.qrius.me"]},{name:"Qualaroo",category:"analytics",domains:["*.qualaroo.com"]},{name:"Qualtrics",category:"analytics",domains:["*.qualtrics.com"]},{name:"Qubit",company:"Qubit",category:"analytics",domains:["*.qubit.com","*.qutics.com","d3c3cq33003psk.cloudfront.net","*.goqubit.com","*.qubitproducts.com"]},{name:"Qubit Deliver",company:"Qubit",category:"analytics",domains:["d1m54pdnjzjnhe.cloudfront.net","d22rutvoghj3db.cloudfront.net","dd6zx4ibq538k.cloudfront.net"]},{name:"QuestionPro",category:"analytics",domains:["*.questionpro.com"]},{name:"Queue-it",category:"other",domains:["*.queue-it.net"]},{name:"QuinStreet",category:"ad",domains:["*.Quinstreet.com","*.b2btechleadform.com","*.qnsr.com","*.qsstats.com"]},{name:"QuoVadis",category:"utility",domains:["*.quovadisglobal.com"]},{name:"Qzzr",category:"analytics",domains:["*.movementventures.com","*.qzzr.com"]},{name:"RapidAPI",category:"utility",domains:["*.rapidapi.com"]},{name:"RCS Media Group",category:"ad",domains:["*.rcsadv.it"]},{name:"REVIVVE",category:"ad",domains:["*.revivve.com"]},{name:"RSSinclude",category:"social",domains:["*.rssinclude.com"]},{name:"RTB House AdPilot",company:"RTB House",category:"ad",domains:["*.erne.co","*.creativecdn.com"]},{name:"RTB Media",category:"ad",domains:["*.rtb-media.me"]},{name:"RUN",category:"ad",domains:["*.runadtag.com","*.rundsp.com"]},{name:"Rackspace",category:"hosting",domains:["*.rackcdn.com","*.rackspacecloud.com","*.raxcdn.com","*.websitetestlink.com"]},{name:"RadiumOne",category:"ad",domains:["*.gwallet.com","*.r1-cdn.net"]},{name:"Rakuten DC Storm",company:"Rakuten",category:"analytics",domains:["*.dc-storm.com","*.h4k5.com","*.stormiq.com"]},{name:"Rakuten LinkShare",company:"Rakuten",category:"ad",domains:["*.linksynergy.com"]},{name:"Rakuten Marketing",company:"Rakuten",category:"ad",domains:["*.rakuten-static.com","*.rmtag.com","tag.rmp.rakuten.com"]},{name:"Rakuten MediaForge",company:"Rakuten",category:"ad",domains:["*.mediaforge.com"]},{name:"Rambler",company:"Rambler & Co",category:"utility",domains:["*.rambler.ru"]},{name:"Ranker",category:"content",domains:["*.ranker.com","*.rnkr-static.com"]},{name:"Ravelin",category:"utility",domains:["*.ravelin.com"]},{name:"Raygun",category:"utility",domains:["*.raygun.io"]},{name:"ReCollect",category:"utility",domains:["*.recollect.net"]},{name:"ReSRC",category:"utility",domains:["*.resrc.it"]},{name:"ReTargeter",category:"ad",domains:["*.retargeter.com"]},{name:"Reach Group",category:"ad",domains:["*.redintelligence.net"]},{name:"ReachDynamics",category:"ad",domains:["*.rdcdn.com"]},{name:"ReachForce",category:"ad",domains:["*.reachforce.com"]},{name:"ReachLocal",category:"ad",domains:["*.rtrk.co.nz"]},{name:"ReachMee",category:"content",domains:["*.reachmee.com"]},{name:"Reactful",category:"analytics",domains:["*.reactful.com"]},{name:"Realtime",company:"internet business technologies",category:"utility",domains:["*.realtime.co"]},{name:"Realtime Media (Brian Communications)",category:"ad",domains:["*.rtm.com"]},{name:"Realtime Targeting",category:"ad",domains:["*.idtargeting.com"]},{name:"Realytics",category:"analytics",domains:["dcniko1cv0rz.cloudfront.net","*.realytics.net"]},{name:"RebelMouse",category:"ad",domains:["*.rebelmouse.com","*.rbl.ms"]},{name:"Receiptful",category:"utility",domains:["*.receiptful.com"]},{name:"Recite Me",category:"other",domains:["*.reciteme.com"]},{name:"RecoBell",category:"analytics",domains:["*.recobell.io"]},{name:"Recommend",category:"analytics",domains:["*.recommend.pro"]},{name:"Red Eye International",category:"ad",domains:["*.pajmc.com"]},{name:"Redfish Group",category:"ad",domains:["*.wmps.com"]},{name:"Reevoo",category:"analytics",domains:["*.reevoo.com"]},{name:"Refersion",category:"ad",domains:["*.refersion.com"]},{name:"Refined Ads",category:"ad",domains:["*.refinedads.com"]},{name:"Reflektion",category:"analytics",domains:["*.reflektion.com","d26opx5dl8t69i.cloudfront.net"]},{name:"Reflow",company:"Scenestealer",category:"ad",domains:["*.reflow.tv"]},{name:"Reklama",category:"ad",domains:["*.o2.pl","*.wp.pl"]},{name:"Relevad ReleStar",company:"Relevad",category:"ad",domains:["*.relestar.com"]},{name:"Remarketing Pixel",company:"Adsterra Network",category:"ad",domains:["*.datadbs.com","*.remarketingpixel.com"]},{name:"Remintrex",company:"SmartUp Venture",category:"ad",domains:["*.remintrex.com"]},{name:"Republer",category:"ad",domains:["*.republer.com"]},{name:"Research Now",category:"analytics",domains:["*.researchgnow.com","*.researchnow.com"]},{name:"Research Online",company:"Skills Development Scotland",category:"content",domains:["*.researchonline.org.uk"]},{name:"Resonance Insights",category:"analytics",domains:["*.res-x.com"]},{name:"Resonate Networks",category:"analytics",domains:["*.reson8.com"]},{name:"Response Team",category:"ad",domains:["*.i-transactads.com"]},{name:"ResponseTap",category:"analytics",domains:["*.adinsight.com","*.responsetap.com"]},{name:"ResponsiveVoice",category:"other",domains:["*.responsivevoice.org"]},{name:"Retention Science",category:"ad",domains:["*.retentionscience.com","d1stxfv94hrhia.cloudfront.net"]},{name:"Revcontent",category:"content",domains:["*.revcontent.com"]},{name:"Revee",category:"ad",domains:["*.revee.com"]},{name:"Revenue Conduit",category:"utility",domains:["*.revenueconduit.com"]},{name:"RevenueMantra",category:"ad",domains:["*.revenuemantra.com"]},{name:"Reviews.co.uk",category:"analytics",domains:["*.reviews.co.uk"]},{name:"Reviews.io",category:"analytics",domains:["*.reviews.io"]},{name:"Revolver Maps",category:"analytics",domains:["*.revolvermaps.com"]},{name:"Revv",category:"utility",domains:["*.revv.co"]},{name:"RichRelevance",category:"analytics",domains:["*.richrelevance.com"]},{name:"RightNow Service Cloud",company:"Oracle",category:"customer-success",domains:["*.rightnowtech.com","*.rnengage.com"]},{name:"Rightster",category:"ad",domains:["*.ads-creativesyndicator.com"]},{name:"Riskified",category:"utility",domains:["*.riskified.com"]},{name:"Rockerbox",category:"analytics",homepage:"https://www.rockerbox.com/",domains:["getrockerbox.com"]},{name:"Rocket Fuel",category:"ad",domains:["*.rfihub.com","*.ru4.com","*.rfihub.net","*.ad1x.com"]},{name:"Rollbar",category:"utility",domains:["*.rollbar.com","d37gvrvc0wt4s1.cloudfront.net"]},{name:"RomanCart",category:"utility",domains:["*.romancart.com"]},{name:"Rondavu",category:"ad",domains:["*.rondavu.com"]},{name:"Roomkey",category:"content",domains:["*.roomkey.com"]},{name:"Roost",category:"utility",domains:["*.goroost.com"]},{name:"Roxot",category:"ad",domains:["*.rxthdr.com"]},{name:"Roxr Software",category:"analytics",domains:["*.getclicky.com"]},{name:"Rtoaster",company:"Brainpad",homepage:"https://www.brainpad.co.jp/rtoaster/",category:"marketing",domains:["*.rtoaster.jp"]},{name:"Rubikloud.com",category:"analytics",domains:["*.rubikloud.com"]},{name:"Ruler Analytics",company:"Ruler",category:"analytics",domains:["*.nyltx.com","*.ruleranalytics.com"]},{name:"Runner",company:"Rambler & Co",category:"content",domains:["*.begun.ru"]},{name:"S4M",category:"ad",domains:["*.sam4m.com"]},{name:"SAP Hybris Marketing Convert",company:"SAP",category:"ad",domains:["*.seewhy.com"]},{name:"SAS Institute",category:"ad",domains:["*.aimatch.com","*.sas.com"]},{name:"SATORI",homepage:"https://satori.marketing/",category:"marketing",domains:["satori.segs.jp"]},{name:"SC ShopMania Net SRL",category:"content",domains:["*.shopmania.com"]},{name:"SDL Media Manager",company:"SDL",category:"other",domains:["*.sdlmedia.com"]},{name:"SFR",category:"other",domains:["*.sfr.fr"]},{name:"SLI Systems",category:"utility",domains:["*.resultslist.com","*.resultspage.com","*.sli-spark.com"]},{name:"SMARTASSISTANT",company:"Smart Information Systems",category:"customer-success",domains:["*.smartassistant.com"]},{name:"SMARTSTREAM.TV",category:"ad",domains:["*.smartstream.tv"]},{name:"SPX",company:"Smaato",category:"ad",domains:["*.smaato.net"]},{name:"Sabio",category:"customer-success",domains:["*.sabio.co.uk"]},{name:"Sailthru",category:"analytics",domains:["*.sail-horizon.com","*.sail-personalize.com","*.sail-track.com"]},{name:"Sailthru Sightlines",company:"Sailthru",category:"marketing",domains:["*.sailthru.com"]},{name:"Sajari Pty",category:"utility",domains:["*.sajari.com"]},{name:"SaleCycle",category:"ad",domains:["*.salecycle.com","d16fk4ms6rqz1v.cloudfront.net","d22j4fzzszoii2.cloudfront.net","d30ke5tqu2tkyx.cloudfront.net","dn1i8v75r669j.cloudfront.net"]},{name:"Salesforce Live Agent",company:"Salesforce.com",category:"customer-success",domains:["*.salesforceliveagent.com"]},{name:"Salesforce.com",category:"ad",domains:["*.force.com","*.salesforce.com"]},{name:"Samba TV",company:"Samba",category:"content",domains:["*.samba.tv"]},{name:"Samplicio.us",category:"analytics",domains:["*.samplicio.us"]},{name:"Say Media",category:"ad",domains:["*.saymedia.com"]},{name:"Scenario",category:"analytics",domains:["*.getscenario.com"]},{name:"Schuh (image shard)",company:"Schuh",category:"other",domains:["d2ob0iztsaxy5v.cloudfront.net"]},{name:"Science Rockstars",category:"analytics",domains:["*.persuasionapi.com"]},{name:"ScientiaMobile",category:"analytics",domains:["*.wurflcloud.com","*.wurfl.io"]},{name:"Scoota",category:"ad",domains:["*.rockabox.co","*.scoota.co","d31i2625d5nv27.cloudfront.net","dyjnzf8evxrp2.cloudfront.net"]},{name:"ScribbleLive",category:"ad",domains:["*.scribblelive.com"]},{name:"SearchForce",category:"ad",domains:["*.searchforce.net"]},{name:"SearchSpring",category:"utility",domains:["*.searchspring.net"]},{name:"Searchanise",category:"analytics",domains:["*.searchanise.com"]},{name:"Sears Holdings",category:"content",domains:["*.shld.net"]},{name:"Secomapp",category:"utility",domains:["*.secomapp.com"]},{name:"SecuredVisit",company:"4Cite Marketing",category:"ad",domains:["*.securedvisit.com"]},{name:"SecurityMetrics",category:"utility",domains:["*.securitymetrics.com"]},{name:"Segmento",category:"ad",domains:["*.rutarget.ru"]},{name:"Segmint",category:"analytics",domains:["*.segmint.net"]},{name:"Sekindo",category:"content",domains:["*.sekindo.com"]},{name:"Seldon",category:"analytics",domains:["*.rummblelabs.com"]},{name:"SelectMedia International",category:"content",domains:["*.selectmedia.asia"]},{name:"Selligent",category:"ad",domains:["*.emsecure.net","*.slgnt.eu","targetemsecure.blob.core.windows.net"]},{name:"Sellpoints",category:"analytics",domains:["*.sellpoints.com"]},{name:"Semantics3",category:"analytics",domains:["*.hits.io"]},{name:"Semasio",category:"analytics",domains:["*.semasio.net"]},{name:"Semcasting Site Visitor Attribution",company:"Semcasting",category:"ad",domains:["*.smartzonessva.com"]},{name:"Sentifi",category:"social",domains:["*.sentifi.com"]},{name:"ServMetric",category:"analytics",domains:["*.servmetric.com"]},{name:"ServiceSource International",category:"marketing",domains:["*.scoutanalytics.net"]},{name:"ServiceTick",category:"analytics",domains:["*.servicetick.com"]},{name:"Servo",company:"Xervo",category:"hosting",domains:["*.onmodulus.net"]},{name:"SessionCam",company:"ServiceTick",category:"analytics",domains:["*.sessioncam.com","d2oh4tlt9mrke9.cloudfront.net"]},{name:"Seznam",category:"utility",domains:["*.imedia.cz"]},{name:"Sharethrough",category:"ad",domains:["*.sharethrough.com"]},{name:"SharpSpring",category:"marketing",domains:["*.sharpspring.com","*.marketingautomation.services"]},{name:"ShopRunner",category:"content",domains:["*.shoprunner.com","*.s-9.us"]},{name:"ShopStorm",category:"utility",domains:["*.shopstorm.com"]},{name:"Shopatron",category:"hosting",domains:["*.shopatron.com"]},{name:"Shopgate",category:"utility",domains:["*.shopgate.com"]},{name:"ShopiMind",company:"ShopIMind",category:"ad",domains:["*.shopimind.com"]},{name:"Shopkeeper Tools",category:"utility",domains:["*.shopkeepertools.com"]},{name:"Sidecar",category:"other",domains:["*.getsidecar.com","d3v27wwd40f0xu.cloudfront.net"]},{name:"Sidereel",category:"analytics",domains:["*.sidereel.com"]},{name:"Sift Science",category:"utility",domains:["*.siftscience.com"]},{name:"Signal",category:"tag-manager",domains:["*.sitetagger.co.uk"]},{name:"Signyfyd",category:"utility",domains:["*.signifyd.com"]},{name:"Silktide",category:"hosting",domains:["*.silktide.com"]},{name:"Silverpop",company:"IBM",category:"ad",domains:["*.mkt912.com","*.mkt922.com","*.mkt932.com","*.mkt941.com","*.mkt51.net","*.mkt61.net","*.pages01.net","*.pages02.net","*.pages03.net","*.pages04.net","*.pages05.net"]},{name:"Simplaex",category:"marketing",domains:["*.simplaex.net"]},{name:"SimpleReach",category:"analytics",domains:["*.simplereach.com","d8rk54i4mohrb.cloudfront.net"]},{name:"Simplestream",category:"content",domains:["*.simplestream.com"]},{name:"Simpli.fi",category:"ad",domains:["*.simpli.fi"]},{name:"Simplicity Marketing",category:"ad",domains:["*.flashtalking.com"]},{name:"SinnerSchrader Deutschland",category:"ad",domains:["*.s2Betrieb.de"]},{name:"Sirv",category:"other",domains:["*.sirv.com"]},{name:"Site Meter",category:"analytics",domains:["*.sitemeter.com"]},{name:"Site24x7 Real User Monitoring",company:"Site24x7",category:"analytics",domains:["*.site24x7rum.com"]},{name:"SiteGainer",category:"analytics",domains:["*.sitegainer.com","d191y0yd6d0jy4.cloudfront.net"]},{name:"SiteScout",company:"Centro",category:"ad",domains:["*.pixel.ad","*.sitescout.com"]},{name:"Siteimprove",category:"utility",domains:["*.siteimprove.com","*.siteimproveanalytics.com"]},{name:"Six Degrees Group",category:"hosting",domains:["*.fstech.co.uk"]},{name:"Skimbit",category:"ad",domains:["*.redirectingat.com","*.skimresources.com","*.skimresources.net"]},{name:"Skimlinks",category:"ad",domains:["*.skimlinks.com"]},{name:"SkyGlue Technology",category:"analytics",domains:["*.skyglue.com"]},{name:"SkyScanner",category:"content",domains:["*.skyscanner.net"]},{name:"Skybet",company:"Bonne Terre t/a Sky Vegas (Sky)",category:"other",domains:["*.skybet.com"]},{name:"Skype",category:"other",domains:["*.skype.com"]},{name:"Slate Group",category:"content",domains:["*.cdnslate.com"]},{name:"SlimCut Media Outstream",company:"SlimCut Media",category:"ad",domains:["*.freeskreen.com"]},{name:"Smart Insight Tracking",company:"Emarsys",category:"analytics",domains:["*.scarabresearch.com"]},{name:"Smart AdServer",category:"ad",domains:["*.01net.com","*.sascdn.com","*.sasqos.com","*.smartadserver.com"]},{name:"SmartFocus",category:"analytics",domains:["*.emv2.com","*.emv3.com","*.predictiveintent.com","*.smartfocus.com","*.themessagecloud.com"]},{name:"Smarter Click",category:"ad",domains:["*.smct.co","*.smarterclick.co.uk"]},{name:"SmarterHQ",category:"analytics",domains:["*.smarterhq.io","d1n00d49gkbray.cloudfront.net","*.smarterremarketer.net"]},{name:"Smarttools",category:"customer-success",domains:["*.smartertrack.com"]},{name:"Smartzer",category:"ad",domains:["*.smartzer.com"]},{name:"Snack Media",category:"content",domains:["*.snack-media.com"]},{name:"Snacktools",category:"ad",domains:["*.bannersnack.com"]},{name:"SnapEngage",category:"customer-success",domains:["*.snapengage.com"]},{name:"SnapWidget",category:"content",domains:["*.snapwidget.com"]},{name:"Soasta",category:"analytics",domains:["*.lognormal.net"]},{name:"SociableLabs",category:"ad",domains:["*.sociablelabs.net","*.sociablelabs.com"]},{name:"Social Annex",category:"customer-success",domains:["*.socialannex.com"]},{name:"SocialShopWave",category:"social",domains:["*.socialshopwave.com"]},{name:"Socialphotos",category:"social",domains:["*.slpht.com"]},{name:"Sociomantic Labs",company:"DunnHumby",category:"ad",domains:["*.sociomantic.com"]},{name:"SodaHead",category:"analytics",domains:["*.sodahead.com"]},{name:"Softwebzone",category:"hosting",domains:["*.softwebzone.com"]},{name:"Sojern",category:"marketing",domains:["*.sojern.com"]},{name:"Sokrati",category:"marketing",domains:["*.sokrati.com"]},{name:"Sonobi",category:"ad",domains:["*.sonobi.com"]},{name:"Sooqr Search",company:"Sooqr",category:"utility",domains:["*.sooqr.com"]},{name:"Sophus3",category:"analytics",domains:["*.s3ae.com","*.sophus3.com"]},{name:"Sorenson Media",category:"content",domains:["*.sorensonmedia.com"]},{name:"Sortable",category:"ad",domains:["*.deployads.com"]},{name:"Sotic",category:"hosting",domains:["*.sotic.net","*.soticservers.net"]},{name:"Soundest",category:"ad",domains:["*.soundestlink.com","*.soundest.net"]},{name:"Sourcepoint",category:"ad",domains:["*.decenthat.com","*.fallingfalcon.com","*.summerhamster.com","d2lv4zbk7v5f93.cloudfront.net","d3qxwzhswv93jk.cloudfront.net"]},{name:"SourceKnowledge",homepage:"https://www.sourceknowledge.com",category:"ad",domains:["*.provenpixel.com"]},{name:"SpaceNet",category:"hosting",domains:["*.nmm.de"]},{name:"Sparkflow",company:"Intercept Interactive",category:"ad",domains:["*.sparkflow.net"]},{name:"Specific Media",category:"ad",domains:["*.specificmedia.com","*.adviva.net","*.specificclick.net"]},{name:"Spicy",company:"Data-Centric Alliance",category:"ad",domains:["*.sspicy.ru"]},{name:"Spoke",category:"customer-success",domains:["*.121d8.com"]},{name:"Spongecell",category:"ad",domains:["*.spongecell.com"]},{name:"Spot.IM",category:"social",domains:["*.spot.im","*.spotim.market"]},{name:"SpotXchange",category:"ad",domains:["*.spotxcdn.com","*.spotxchange.com","*.spotx.tv"]},{name:"SpringServer",category:"ad",domains:["*.springserve.com"]},{name:"Spylight",category:"other",domains:["*.spylight.com"]},{name:"SreamAMG",company:"StreamAMG",category:"other",domains:["*.streamamg.com"]},{name:"StackAdapt",category:"ad",domains:["*.stackadapt.com"]},{name:"StackExchange",category:"social",domains:["*.sstatic.net"]},{name:"Stackla PTY",category:"social",domains:["*.stackla.com"]},{name:"Stailamedia",category:"ad",domains:["*.stailamedia.com"]},{name:"Stamped.io",category:"analytics",domains:["*.stamped.io"]},{name:"Starfield Services Root Certificate Authority",company:"Starfield Technologies",category:"utility",domains:["*.starfieldtech.com","ss2.us","*.ss2.us"]},{name:"Starfield Technologies",category:"utility",domains:["*.websiteprotection.com"]},{name:"StatCounter",category:"analytics",domains:["*.statcounter.com"]},{name:"Statful",category:"analytics",domains:["*.statful.com"]},{name:"Steelhouse",category:"ad",domains:["*.steelhousemedia.com"]},{name:"Steepto",category:"ad",domains:["*.steepto.com"]},{name:"StellaService",category:"analytics",domains:["*.stellaservice.com"]},{name:"StickyADS.tv",category:"ad",domains:["*.stickyadstv.com"]},{name:"STINGRAY",company:"FlexOne",category:"ad",domains:["*.impact-ad.jp"]},{name:"Storify",company:"Adobe Systems",category:"social",domains:["*.storify.com"]},{name:"Storm Tag Manager",company:"Rakuten",category:"tag-manager",domains:["*.stormcontainertag.com"]},{name:"Storygize",category:"ad",domains:["*.storygize.net"]},{name:"Strands",category:"utility",domains:["*.strands.com"]},{name:"StreamRail",category:"ad",domains:["*.streamrail.com","*.streamrail.net"]},{name:"StrikeAd",category:"ad",domains:["*.strikead.com"]},{name:"Struq",company:"Quantcast",category:"ad",domains:["*.struq.com"]},{name:"Ströer Digital Media",category:"ad",domains:["*.stroeerdigitalmedia.de"]},{name:"StumbleUpon",category:"content",domains:["*.stumble-upon.com","*.stumbleupon.com"]},{name:"Sub2 Technologies",category:"analytics",domains:["*.sub2tech.com"]},{name:"SublimeSkinz",category:"ad",domains:["*.ayads.co"]},{name:"Sumo Logic",category:"utility",domains:["*.sumologic.com"]},{name:"Sunday Times Driving",category:"content",domains:["*.driving.co.uk"]},{name:"SundaySky",category:"ad",domains:["*.sundaysky.com","dds6m601du5ji.cloudfront.net"]},{name:"Sunrise Integration",category:"utility",domains:["*.sunriseintegration.com"]},{name:"Supertool Network Technology",category:"analytics",domains:["*.miaozhen.com"]},{name:"Survata",category:"analytics",domains:["*.survata.com"]},{name:"SurveyGizmo",category:"analytics",domains:["*.surveygizmo.eu"]},{name:"SurveyMonkey",category:"analytics",domains:["*.surveymonkey.com"]},{name:"Survicate",category:"analytics",domains:["*.survicate.com"]},{name:"Sweet Tooth",category:"ad",domains:["*.sweettooth.io"]},{name:"Swiftype",category:"utility",domains:["*.swiftype.com","*.swiftypecdn.com"]},{name:"Switch Concepts",category:"ad",domains:["*.switchadhub.com"]},{name:"SwitchAds",company:"Switch Concepts",category:"ad",domains:["*.switchads.com"]},{name:"Swogo",category:"analytics",domains:["*.xsellapp.com"]},{name:"Swoop",category:"ad",domains:["*.swoop.com"]},{name:"Symantec",category:"utility",domains:["*.norton.com","*.symantec.com","*.symcb.com","*.symcd.com"]},{name:"Syncapse",category:"social",domains:["*.clickable.net"]},{name:"Synergetic",category:"ad",domains:["*.synergetic.ag"]},{name:"Synthetix",category:"customer-success",domains:["*.syn-finity.com","*.synthetix-ec1.com","*.synthetix.com"]},{name:"Syte",category:"other",domains:["*.syteapi.com"]},{name:"TINT",category:"content",domains:["*.71n7.com","d33w9bm0n1egwm.cloudfront.net","d36hc0p18k1aoc.cloudfront.net","d3l7tj34e9fc43.cloudfront.net"]},{name:"TNS (Kantar Group)",category:"analytics",domains:["*.tns-counter.ru"]},{name:"TRUSTe",category:"utility",domains:["*.truste.com"]},{name:"TV Genius",company:"Ericcson Media Services",category:"content",domains:["*.tvgenius.net"]},{name:"TVSquared",category:"ad",domains:["*.tvsquared.com"]},{name:"TVTY",category:"ad",domains:["*.distribeo.com","*.ogigl.com"]},{name:"Tactics bvba",category:"hosting",domains:["*.influid.co"]},{name:"Tag Inspector",company:"InfoTrust",category:"analytics",domains:["d22xmn10vbouk4.cloudfront.net"]},{name:"TagCommander",category:"tag-manager",domains:["*.commander1.com","*.tagcommander.com"]},{name:"Tagboard",category:"social",domains:["*.tagboard.com"]},{name:"Taggstar",company:"Taggstar UK",category:"ad",domains:["*.taggstar.com"]},{name:"Tail Target",company:"Tail",category:"ad",domains:["*.tailtarget.com"]},{name:"Tailored",category:"other",domains:["d24qm7bu56swjs.cloudfront.net","dw3vahmen1rfy.cloudfront.net","*.tailored.to"]},{name:"Taleo Enterprise Cloud Service",company:"Oracle",category:"content",domains:["*.taleo.net"]},{name:"Talkable",category:"ad",domains:["*.talkable.com","d2jjzw81hqbuqv.cloudfront.net"]},{name:"TapSense",category:"ad",domains:["*.tapsense.com"]},{name:"Tapad",category:"ad",domains:["*.tapad.com"]},{name:"Teads",category:"ad",domains:["*.teads.tv"]},{name:"Team Internet Tonic",company:"Team Internet",category:"ad",domains:["*.dntrax.com"]},{name:"TechTarget",category:"content",domains:["*.techtarget.com","*.ttgtmedia.com"]},{name:"Technorati",company:"Synacor",category:"ad",domains:["*.technoratimedia.com"]},{name:"Teedhaze",category:"content",domains:["*.fuel451.com"]},{name:"Tell Apart",category:"analytics",domains:["*.tellapart.com","*.tellaparts.com"]},{name:"Tencent",category:"content",domains:["*.qq.com","*.ywxi.net"]},{name:"Thanx Media",category:"utility",domains:["*.hawksearch.info"]},{name:"Thawte",category:"utility",domains:["*.thawte.com"]},{name:"Thesis",category:"analytics",homepage:"https://www.thesistesting.com/",domains:["*.ttsep.com"]},{name:"The AA",category:"ad",domains:["*.adstheaa.com"]},{name:"The ADEX",category:"ad",domains:["*.theadex.com"]},{name:"The Best Day",category:"social",domains:["*.thebestday.com"]},{name:"The Filter",company:"Exabre",category:"analytics",domains:["*.thefilter.com"]},{name:"The Guardian",category:"analytics",domains:["*.ophan.co.uk"]},{name:"The Hut Group",category:"content",domains:["*.thcdn.com"]},{name:"The Numa Group",category:"other",domains:["*.hittail.com"]},{name:"The Publisher Desk",category:"ad",domains:["*.206ads.com","*.publisherdesk.com"]},{name:"The Sydney Morning Herald",company:"Fairfax Media",category:"content",domains:["*.smh.com.au"]},{name:"The Wall Street Jounal",category:"content",domains:["*.wsj.net"]},{name:"The Wall Street Journal",category:"content",domains:["*.marketwatch.com"]},{name:"TheFind",category:"content",domains:["*.thefind.com"]},{name:"Thinglink",category:"utility",domains:["*.thinglink.com"]},{name:"Thirdpresence",category:"ad",domains:["*.thirdpresence.com"]},{name:"ThreatMetrix",category:"utility",domains:["*.online-metrix.net"]},{name:"Throtle",homepage:"https://throtle.io/",category:"analytics",domains:["*.thrtle.com","*.v12group.com"]},{name:"TicketMaster",category:"content",domains:["*.t-x.io","*.tmcs.net"]},{name:"TikTok",company:"ByteDance Ltd",homepage:"https://www.tiktok.com/en/",category:"social",domains:["*.tiktok.com","*.ipstatp.com"]},{name:"Tidio Live Chat",company:"Tidio",homepage:"https://www.tidiochat.com/en/",category:"customer-success",domains:["*.tidiochat.com"]},{name:"Tiledesk Live Chat",company:"Tiledesk SRL",homepage:"https://www.tiledesk.com/",category:"customer-success",domains:["*.tiledesk.com"]},{name:"Time",category:"content",domains:["*.timeinc.net"]},{name:"Time2Perf",category:"ad",domains:["*.time2perf.com"]},{name:"TinyURL",category:"utility",domains:["*.tinyurl.com"]},{name:"Tivo",category:"analytics",domains:["*.rovicorp.com"]},{name:"Tom&Co",category:"hosting",domains:["*.tomandco.uk"]},{name:"Toms Native Ads",company:"Purch",category:"ad",domains:["*.natoms.com"]},{name:"ToneMedia",category:"ad",domains:["*.clickfuse.com"]},{name:"Tonic",company:"Team Internet",category:"ad",domains:["*.dntx.com"]},{name:"Touch Commerce",category:"customer-success",domains:["*.inq.com","*.touchcommerce.com"]},{name:"ToutApp",category:"ad",domains:["*.toutapp.com"]},{name:"TraceView",company:"Solarwinds",category:"analytics",domains:["*.tracelytics.com","d2gfdmu30u15x7.cloudfront.net"]},{name:"TrackJS",category:"analytics",domains:["*.trackjs.com","d2zah9y47r7bi2.cloudfront.net"]},{name:"Tradedoubler",category:"ad",domains:["*.pvnsolutions.com","*.tradedoubler.com"]},{name:"Tradelab",category:"ad",domains:["*.tradelab.fr"]},{name:"TrafficFactory",category:"ad",domains:["*.trafficfactory.biz"]},{name:"TrafficHunt",category:"ad",domains:["*.traffichunt.com"]},{name:"TrafficStars",category:"ad",domains:["*.trafficstars.com","*.tsyndicate.com"]},{name:"Transifex",category:"utility",domains:["*.transifex.com"]},{name:"Travelex",category:"utility",domains:["*.travelex.net","*.travelex.co.uk"]},{name:"Travelocity Canada",company:"Travelocity",category:"content",domains:["*.travelocity.ca"]},{name:"Travelocity USA",company:"Travelocity",category:"content",domains:["*.travelocity.com"]},{name:"Travelzoo",category:"content",domains:["*.travelzoo.com"]},{name:"Treasure Data",category:"analytics",domains:["*.treasuredata.com"]},{name:"Tremor Video",category:"ad",domains:["*.tremorhub.com","*.videohub.tv"]},{name:"Trialfire",category:"analytics",domains:["*.trialfire.com"]},{name:"Tribal Fusion",company:"Exponential Interactive",category:"ad",domains:["*.tribalfusion.com"]},{name:"Triblio",category:"marketing",domains:["*.tribl.io"]},{name:"Triggered Messaging",company:"Fresh Relevance",category:"ad",domains:["*.triggeredmessaging.com"]},{name:"Trinity Mirror",category:"content",domains:["*.mirror.co.uk"]},{name:"Trinity Mirror Digital Media",category:"social",domains:["*.tm-aws.com","*.icnetwork.co.uk"]},{name:"TripAdvisor",category:"content",domains:["*.jscache.com","*.tacdn.com","*.tamgrt.com","*.tripadvisor.com","*.viator.com","*.tripadvisor.co.uk"]},{name:"TripleLift",category:"ad",domains:["*.3lift.com"]},{name:"Tru Optik",category:"ad",domains:["*.truoptik.com"]},{name:"TruConversion",category:"analytics",domains:["*.truconversion.com"]},{name:"Trueffect",category:"marketing",domains:["*.adlegend.com"]},{name:"Truefit",category:"analytics",domains:["*.truefitcorp.com"]},{name:"Trust Guard",category:"utility",domains:["*.trust-guard.com"]},{name:"Trust Pilot",category:"analytics",domains:["*.trustpilot.com"]},{name:"Amazon Trust Services",company:"Amazon",category:"utility",domains:["*.amazontrust.com","o.ss2.us"]},{name:"Google Trust Services",company:"Google",category:"utility",domains:["*.pki.goog"]},{name:"Let's Encrypt",homepage:"https://letsencrypt.org/",category:"utility",domains:["*.letsencrypt.org"]},{name:"TrustX",category:"ad",domains:["*.trustx.org"]},{name:"Trusted Shops",category:"utility",domains:["*.trustedshops.com"]},{name:"Trustev",company:"TransUnion",category:"utility",domains:["*.trustev.com"]},{name:"Trustwave",category:"utility",domains:["*.trustwave.com"]},{name:"Tryzens TradeState",company:"Tryzens",category:"analytics",domains:["*.tryzens-analytics.com"]},{name:"TubeMogul",category:"ad",domains:["*.tubemogul.com"]},{name:"Turn",category:"ad",domains:["*.turn.com"]},{name:"Tutorialize",category:"customer-success",domains:["*.tutorialize.me"]},{name:"Twenga",category:"content",domains:["*.twenga.fr","*.c4tw.net","*.twenga.co.uk"]},{name:"Twitframe",company:"Superblock",category:"utility",domains:["*.twitframe.com"]},{name:"Twitter Online Conversion Tracking",company:"Twitter",category:"ad",domains:["*.ads-twitter.com","analytics.twitter.com"]},{name:"Twitter Short URL",company:"Twitter",category:"social",domains:["*.t.co"]},{name:"Twyn Group",category:"ad",domains:["*.twyn.com"]},{name:"Tynt",company:"33 Across",category:"ad",domains:["*.tynt.com"]},{name:"Typepad",category:"hosting",domains:["*.typepad.com"]},{name:"TyrbooBytes",category:"utility",domains:["*.turbobytes.net"]},{name:"UPS i-parcel",company:"UPS",category:"other",domains:["*.i-parcel.com"]},{name:"US Media Consulting",category:"ad",domains:["*.mediade.sk"]},{name:"Ubertags",category:"tag-manager",domains:["*.ubertags.com"]},{name:"Umbel",category:"analytics",domains:["*.umbel.com"]},{name:"Unanimis",company:"Switch",category:"ad",domains:["*.unanimis.co.uk"]},{name:"Unbounce",category:"ad",domains:["*.ubembed.com","*.unbounce.com","d2xxq4ijfwetlm.cloudfront.net","d9hhrg4mnvzow.cloudfront.net"]},{name:"Underdog Media",category:"ad",domains:["*.underdog.media","*.udmserve.net"]},{name:"Understand Digital",category:"ad",domains:["*.redirecting2.net"]},{name:"Undertone",company:"Perion",category:"ad",domains:["*.legolas-media.com"]},{name:"Unidays",category:"ad",domains:["*.myunidays.com","*.unidays.world"]},{name:"Uniqodo",category:"ad",domains:["*.uniqodo.com"]},{name:"Unite",category:"ad",domains:["*.uadx.com"]},{name:"United Card Services",category:"utility",domains:["*.ucs.su"]},{name:"United Internet",category:"hosting",domains:["*.uicdn.com"]},{name:"United Internet Media",category:"ad",domains:["*.ui-portal.de"]},{name:"United Internet Media AG",category:"hosting",domains:["*.tifbs.net","*.uicdn.net","*.uimserv.net"]},{name:"Unknown",category:"other",domains:[]},{name:"Unruly Media",category:"ad",domains:["*.unrulymedia.com"]},{name:"UpBuild",category:"ad",domains:["*.upbuild.io"]},{name:"UpSellit",category:"analytics",domains:["*.upsellit.com"]},{name:"Upland Software",category:"hosting",domains:["*.clickability.com"]},{name:"Airship",category:"marketing",domains:["*.urbanairship.com","*.aswpsdkus.com"]},{name:"UsabilityTools",category:"analytics",domains:["*.usabilitytools.com"]},{name:"Usablenet.net",category:"utility",domains:["*.usablenet.net"]},{name:"Use It Better",category:"analytics",domains:["*.useitbetter.com"]},{name:"User Replay",category:"analytics",domains:["*.userreplay.net"]},{name:"UserReport",category:"analytics",domains:["*.userreport.com"]},{name:"Userneeds",category:"analytics",domains:["*.userneeds.dk"]},{name:"Userzoom",category:"analytics",domains:["*.userzoom.com"]},{name:"V12 Retail Finance",category:"utility",domains:["*.v12finance.com"]},{name:"Vacaciones eDreams",category:"content",domains:["*.odistatic.net"]},{name:"Varick Media Management",category:"ad",domains:["*.vmmpxl.com"]},{name:"Vdopia Chocolate",company:"Vdopia",category:"ad",domains:["*.vdopia.com"]},{name:"Ve",company:"Ve",homepage:"https://www.ve.com/",category:"marketing",domains:["*.veinteractive.com","*.ve.com"]},{name:"Ve Interactive",company:"Ve",category:"ad",domains:["*.vepxl1.net","*.adgenie.co.uk"]},{name:"Vee24",category:"customer-success",domains:["*.vee24.com"]},{name:"Veeseo",category:"content",domains:["*.veeseo.com"]},{name:"Venatus Media",category:"marketing",domains:["*.alcvid.com","*.venatusmedia.com"]},{name:"Veoxa",category:"ad",domains:["*.veoxa.com"]},{name:"Vergic AB",category:"customer-success",domains:["*.psplugin.com"]},{name:"Vergic Engage Platform",company:"Vergic",category:"customer-success",domains:["*.vergic.com"]},{name:"Verisign (Symantec)",category:"utility",domains:["*.verisign.com"]},{name:"Verizon",category:"utility",domains:["*.public-trust.com"]},{name:"Verizon Digital Media CDN",homepage:"https://www.verizondigitalmedia.com/",category:"cdn",domains:["*.edgecastcdn.net","*.edgecastdns.net"]},{name:"Verizon Uplynk",company:"Verizon",category:"content",domains:["*.uplynk.com"]},{name:"Vero",company:"Semblance",category:"ad",domains:["*.getvero.com","d3qxef4rp70elm.cloudfront.net"]},{name:"VertaMedia",category:"ad",domains:["*.vertamedia.com"]},{name:"Vertical Mass",category:"ad",domains:["*.vmweb.net"]},{name:"Vestorly",category:"ad",domains:["*.oodalab.com"]},{name:"Vextras",category:"other",domains:["*.vextras.com"]},{name:"Viacom",category:"content",domains:["*.mtvnservices.com"]},{name:"Vibrant Media",category:"ad",domains:["*.intellitxt.com","*.picadmedia.com"]},{name:"VidPulse",category:"analytics",domains:["*.vidpulse.com"]},{name:"Video Media Groep",category:"ad",domains:["*.vmg.host","*.inpagevideo.nl"]},{name:"VideoHub",company:"Tremor Video",category:"ad",domains:["*.scanscout.com"]},{name:"Videology",category:"ad",domains:["*.tidaltv.com"]},{name:"Vidible",category:"ad",domains:["*.vidible.tv"]},{name:"VigLink",category:"ad",domains:["*.viglink.com"]},{name:"Vindico",company:"Viant",category:"ad",domains:["*.vindicosuite.com"]},{name:"Viocorp International",category:"content",domains:["*.vioapi.com"]},{name:"ViralNinjas",category:"ad",domains:["*.viralninjas.com"]},{name:"Virool",category:"ad",domains:["*.virool.com"]},{name:"Virtual Earth",company:"Microsoft",category:"utility",domains:["*.virtualearth.net"]},{name:"Visely",company:"Visely",category:"other",homepage:"https://visely.io/",domains:["*.visely.io"]},{name:"VisScore",category:"analytics",domains:["*.visscore.com","d2hkbi3gan6yg6.cloudfront.net"]},{name:"Visible Measures",category:"ad",domains:["*.visiblemeasures.com"]},{name:"Visual Studio",company:"Microsoft",category:"utility",domains:["*.visualstudio.com"]},{name:"VisualDNA",category:"ad",domains:["*.visualdna.com"]},{name:"VisualVisitor",category:"ad",domains:["*.id-visitors.com"]},{name:"Vivocha S.p.A",category:"customer-success",domains:["*.vivocha.com"]},{name:"Vizu (Nielsen)",category:"analytics",domains:["*.vizu.com"]},{name:"Vizury",category:"ad",domains:["*.vizury.com"]},{name:"VoiceFive",category:"analytics",domains:["*.voicefive.com"]},{name:"Volvelle",company:"Optomaton",category:"ad",domains:["*.volvelle.tech"]},{name:"VouchedFor",category:"analytics",domains:["*.vouchedfor.co.uk"]},{name:"WARPCACHE",category:"utility",domains:["*.warpcache.net"]},{name:"WISHLIST",company:"Shopapps",category:"social",domains:["*.shopapps.in"]},{name:"WP Engine",category:"hosting",domains:["*.wpengine.com"]},{name:"WalkMe",category:"customer-success",domains:["*.walkme.com"]},{name:"Watching That",category:"other",domains:["*.watchingthat.com"]},{name:"Wayfair",category:"analytics",domains:["*.wayfair.com"]},{name:"Web CEO",category:"other",domains:["*.websiteceo.com"]},{name:"Web Dissector",company:"Beijing Gridsum Technologies",category:"analytics",domains:["*.gridsumdissector.com","*.webdissector.com"]},{name:"Web Forensics",category:"analytics",domains:["*.webforensics.co.uk"]},{name:"Web Security and Performance",company:"NCC Group",category:"utility",domains:["*.nccgroup.trust"]},{name:"WebEngage",category:"customer-success",domains:["*.webengage.co","*.webengage.com","d23nd6ymopvz52.cloudfront.net","d3701cc9l7v9a6.cloudfront.net"]},{name:"WebInsight",company:"dotMailer",category:"analytics",domains:["*.trackedlink.net","*.trackedweb.net"]},{name:"WebPageOne Solutions",category:"other",domains:["*.webpageone.com"]},{name:"WebSpectator",category:"ad",domains:["*.webspectator.com"]},{name:"WebTuna",company:"Application Performance",category:"analytics",domains:["*.webtuna.com"]},{name:"WebVideoCore",company:"StreamingVideoProvider",category:"content",domains:["*.webvideocore.net"]},{name:"WebWombat",category:"utility",domains:["*.ic.com.au"]},{name:"Webcollage",category:"customer-success",domains:["*.webcollage.net"]},{name:"Webcore",category:"ad",domains:["*.onefeed.co.uk"]},{name:"Webkul",company:"Webkul Software",category:"utility",domains:["*.webkul.com"]},{name:"Webmarked",category:"utility",domains:["*.webmarked.net"]},{name:"Weborama",category:"ad",domains:["*.weborama.com","*.weborama.fr"]},{name:"WebpageFX",category:"ad",domains:["*.leadmanagerfx.com"]},{name:"Webphone",company:"IP WEB SERVICES",category:"customer-success",domains:["*.webphone.net"]},{name:"Webselect selectcommerce",company:"Webselect Internet",category:"hosting",domains:["*.webselect.net"]},{name:"Webthinking",category:"hosting",domains:["*.webthinking.co.uk"]},{name:"Webtrekk",category:"analytics",domains:["*.wbtrk.net","*.webtrekk-asia.net","*.webtrekk.net","*.wt-eu02.net","*.wt-safetag.com"]},{name:"Webtrends",category:"analytics",domains:["*.webtrends.com","*.webtrendslive.com","d1q62gfb8siqnm.cloudfront.net"]},{name:"Webtype",category:"cdn",domains:["*.webtype.com"]},{name:"White Ops",category:"utility",domains:["*.acexedge.com","*.tagsrvcs.com"]},{name:"Whitespace",category:"ad",domains:["*.whitespacers.com"]},{name:"WhosOn Live Chat Software",category:"customer-success",domains:["*.whoson.com"]},{name:"Wibbitz",category:"other",domains:["*.wibbitz.com"]},{name:"Wide Area Communications",category:"hosting",domains:["*.widearea.co.uk"]},{name:"WideOrbit",category:"marketing",domains:["*.admaym.com"]},{name:"William Reed",category:"content",domains:["*.wrbm.com"]},{name:"WillyFogg.com",category:"content",domains:["*.willyfogg.com"]},{name:"Windows",company:"Microsoft",category:"utility",domains:["*.windowsupdate.com"]},{name:"WisePops",category:"utility",domains:["*.wisepops.com"]},{name:"Wishlist King",company:"Appmate",category:"other",homepage:"https://appmate.io/",domains:["*.appmate.io"]},{name:"Wishpond Technologies",category:"marketing",domains:["*.wishpond.com","*.wishpond.net"]},{name:"WizRocket Technologies",category:"analytics",domains:["*.wzrkt.com"]},{name:"Woopra",category:"analytics",domains:["*.woopra.com"]},{name:"Woosmap",category:"utility",domains:["*.woosmap.com"]},{name:"WorkCast",category:"hosting",domains:["*.workcast.net"]},{name:"World News Media",category:"content",domains:["*.wnmedia.co.uk"]},{name:"Worldpay",category:"utility",domains:["*.worldpay.com"]},{name:"Wow Analytics",category:"analytics",domains:["*.wowanalytics.co.uk"]},{name:"Wowcher",category:"ad",domains:["*.wowcher.co.uk"]},{name:"Wufoo",category:"utility",domains:["*.wufoo.com"]},{name:"Wunderkind",category:"marketing",homepage:"https://www.wunderkind.co/",domains:["*.bounceexchange.com","*.bouncex.net","*.wknd.ai","*.cdnbasket.net","*.cdnwidget.com"]},{name:"Wyng",category:"ad",domains:["*.offerpop.com"]},{name:"XMLSHOP",category:"hosting",domains:["*.xmlshop.biz"]},{name:"XiTi",company:"AT Internet",category:"analytics",domains:["*.xiti.com","*.aticdn.net"],homepage:"https://www.atinternet.com/en/"},{name:"YUDU",category:"content",domains:["*.yudu.com"]},{name:"Yahoo! Ad Exchange",company:"Yahoo!",category:"ad",domains:["*.yieldmanager.com","*.browsiprod.com"]},{name:"Yahoo! JAPAN Ads",company:"Yahoo! JAPAN",category:"ad",homepage:"https://marketing.yahoo.co.jp/service/yahooads/",domains:["yads.c.yimg.jp","s.yimg.jp","b92.yahoo.co.jp"]},{name:"Yahoo! Tag Manager",company:"Yahoo! JAPAN",category:"tag-manager",homepage:"https://marketing.yahoo.co.jp/service/tagmanager/",domains:["*.yjtag.jp"]},{name:"Yahoo! Small Business",company:"Yahoo!",category:"hosting",domains:["*.aabacosmallbusiness.com"]},{name:"Yellow Robot",category:"ad",domains:["*.backinstock.org"]},{name:"YieldPartners",category:"ad",domains:["*.yieldpartners.com"]},{name:"Yieldbot",category:"ad",domains:["*.yldbt.com"]},{name:"Yieldify",category:"ad",domains:["*.yieldify.com","*.yieldifylabs.com","d33wq5gej88ld6.cloudfront.net","dwmvwp56lzq5t.cloudfront.net"]},{name:"Yieldlab",category:"ad",domains:["*.yieldlab.net"]},{name:"Yieldmo",category:"ad",domains:["*.yieldmo.com"]},{name:"Yieldr",category:"ad",domains:["*.254a.com"]},{name:"Yo",category:"utility",domains:["*.yopify.com"]},{name:"YoYo",category:"utility",domains:["*.goadservices.com"]},{name:"Yotpo",homepage:"https://www.yotpo.com/",category:"marketing",domains:["*.yotpo.com","*.swellrewards.com"]},{name:"Yottaa",category:"hosting",domains:["*.yottaa.com","*.yottaa.net"]},{name:"YourAmigo",category:"utility",domains:["*.youramigo.com"]},{name:"YuMe",category:"ad",domains:["*.yume.com","*.yumenetworks.com"]},{name:"Yummley",category:"other",domains:["*.yummly.com"]},{name:"ZEDO",category:"ad",domains:["*.zedo.com"]},{name:"Zafu",category:"analytics",domains:["*.zafu.com"]},{name:"Zaius",category:"ad",domains:["*.zaius.com"]},{name:"Zamplus ad",category:"ad",domains:["*.zampda.net"]},{name:"Zanox",category:"ad",domains:["*.zanox.com","*.zanox.ws"]},{name:"Zapper",category:"utility",domains:["*.zapper.com"]},{name:"Zarget",category:"analytics",domains:["*.zarget.com"]},{name:"Zemanta",category:"ad",domains:["*.zemanta.com"]},{name:"Zen Internet",category:"other",domains:["*.zyen.com"]},{name:"Zenovia Digital Exchange",category:"ad",domains:["*.rhythmxchange.com","*.zenoviaexchange.com"]},{name:"ZergNet",category:"content",domains:["*.zergnet.com"]},{name:"Zerogrey",category:"hosting",domains:["*.zerogrey.com"]},{name:"Ziff Davis Tech",category:"ad",domains:["*.adziff.com","*.zdbb.net"]},{name:"Zmags",category:"marketing",domains:["*.zmags.com"]},{name:"Zolando",category:"content",domains:["*.ztat.net"]},{name:"Zoover",category:"analytics",domains:["*.zoover.nl","*.zoover.co.uk"]},{name:"Zopim",category:"customer-success",domains:["*.zopim.io"]},{name:"[24]7",category:"customer-success",domains:["*.247-inc.net","*.247inc.net","d1af033869koo7.cloudfront.net"]},{name:"adKernel",category:"ad",domains:["*.adkernel.com"]},{name:"adMarketplace",company:"AMPexchange",category:"ad",domains:["*.ampxchange.com","*.admarketplace.net"]},{name:"addtocalendar",category:"utility",domains:["*.addtocalendar.com"]},{name:"adnanny",category:"ad",domains:["*.adserver01.de"]},{name:"affilinet",category:"ad",domains:["*.reussissonsensemble.fr","*.successfultogether.co.uk"]},{name:"audioBoom",category:"social",domains:["*.audioboom.com","*.audioboo.fm"]},{name:"bPay by Barclaycard",company:"Barclays Bank",category:"utility",domains:["*.bpay.co.uk"]},{name:"bRealTime",category:"ad",domains:["*.brealtime.com"]},{name:"bd4travel",category:"analytics",domains:["*.bd4travel.com"]},{name:"bizinformation-VOID",company:"bizinformation",category:"analytics",domains:["*.bizinformation.org"]},{name:"carrot",category:"social",domains:["*.sharebutton.co"]},{name:"cloudIQ",category:"analytics",domains:["*.cloud-iq.com"]},{name:"comScore",category:"analytics",domains:["*.adxpose.com","*.comscore.com","*.sitestat.com","*.zqtk.net"]},{name:"content.ad",category:"ad",domains:["*.content.ad"]},{name:"d3 Media",company:"d3 Technologies",category:"other",domains:["*.d3sv.net"]},{name:"dexiMEDIA",category:"ad",domains:["*.deximedia.com"]},{name:"dianomi",category:"ad",domains:["*.dianomi.com","*.dianomioffers.co.uk"]},{name:"donReach",category:"social",domains:["*.donreach.com"]},{name:"dotMailer",category:"ad",domains:["*.dmtrk.com","*.dotmailer.com","*.emlfiles.com"]},{name:"dotMailer Surveys",company:"dotMailer",category:"analytics",domains:["*.dotmailer-surveys.com"]},{name:"dstillery",category:"ad",domains:["*.dstillery.com","*.media6degrees.com"]},{name:"eBay",category:"ad",domains:["*.ebay.com","*.ebayimg.com","*.fetchback.com"]},{name:"eBay Enterprise",category:"hosting",domains:["*.csdata1.com","*.gsipartners.com"]},{name:"eBuzzing",company:"Teads Managed Services",category:"ad",domains:["*.ebz.io"]},{name:"eDigital Research",category:"customer-success",domains:["*.edigitalresearch.com","*.edigitalsurvey.com","*.edrcdn.com","*.ecustomeropinions.com"]},{name:"eGain",category:"analytics",domains:["*.analytics-egain.com","*.egain.com"]},{name:"eHost",category:"hosting",domains:["*.ehosts.net"]},{name:"eKomi",category:"analytics",domains:["*.ekomi.com","*.ekomi.de"]},{name:"eWAY",company:"Web Active Pty",category:"utility",domains:["*.eway.com.au"]},{name:"eXTReMe digital",category:"analytics",domains:["*.extreme-dm.com"]},{name:"eXelate",category:"ad",domains:["*.exelator.com"]},{name:"ecommercefeed.net",category:"marketing",domains:["*.ecommercefeed.net"]},{name:"engage:BDR",category:"ad",domains:["*.bnmla.com","*.ebdr3.com"]},{name:"epago",category:"ad",domains:["*.adaos-ads.net"]},{name:"epoq internet services",category:"analytics",domains:["*.epoq.de"]},{name:"etouches",category:"hosting",domains:["*.etouches.com"]},{name:"etracker",category:"analytics",domains:["*.etracker.com","*.etracker.de"]},{name:"everestads.com",category:"content",domains:["*.verestads.net"]},{name:"exebid.DCA",company:"Data-Centric Alliance",category:"ad",domains:["*.exe.bid"]},{name:"eyeReturn Marketing",category:"marketing",domains:["*.eyereturn.com"]},{name:"feedoptimise",category:"hosting",domains:["*.feedoptimise.com","d1w78njrm56n7g.cloudfront.net"]},{name:"fifty-five",category:"ad",domains:["*.55labs.com"]},{name:"fluct",category:"ad",domains:["*.adingo.jp"]},{name:"freegeoip.net",company:"(community-funded)",category:"utility",domains:["*.freegeoip.net"]},{name:"freewheel.tv",category:"content",domains:["*.fwmrm.net"]},{name:"gnatta",category:"customer-success",domains:["*.gnatta.com"]},{name:"home.pl",category:"hosting",domains:["*.nscontext.eu"]},{name:"hyfn",category:"ad",domains:["*.hyfn.com"]},{name:"iAdvize SAS",category:"customer-success",domains:["*.iadvize.com"]},{name:"iBillboard",category:"ad",domains:["*.ibillboard.com"]},{name:"iCrossing",category:"ad",domains:["*.ic-live.com"]},{name:"iFactory",company:"RDW Group",category:"hosting",domains:["*.ifactory.com"]},{name:"iGoDigital",category:"analytics",domains:["*.igodigital.com"]},{name:"iJento",company:"Fopsha",category:"ad",domains:["*.ijento.com"]},{name:"iPage",category:"hosting",domains:["*.ipage.com"]},{name:"iPerceptions",category:"customer-success",domains:["*.iperceptions.com"]},{name:"iTunes",company:"Apple",category:"content",domains:["*.mzstatic.com"]},{name:"imgix",company:"Zebrafish Labs",category:"utility",domains:["*.imgix.net"]},{name:"infogr.am",category:"utility",domains:["*.infogr.am","*.jifo.co"]},{name:"iotec",category:"analytics",domains:["*.dsp.io"]},{name:"iovation",category:"utility",domains:["*.iesnare.com"]},{name:"ipinfo.io",category:"utility",domains:["*.ipinfo.io"]},{name:"issuu",category:"content",domains:["*.issuu.com","*.isu.pub"]},{name:"iubenda",category:"utility",domains:["*.iubenda.com"]},{name:"j2 Cloud Services",category:"ad",domains:["*.campaigner.com"]},{name:"jsonip.com",category:"analytics",domains:["*.jsonip.com"]},{name:"linkpulse",category:"analytics",domains:["*.lp4.io"]},{name:"loGo_net",category:"analytics",domains:["*.logo-net.co.uk"]},{name:"mainADV",category:"ad",domains:["*.httptrack.com","*.solocpm.com"]},{name:"mbr targeting",category:"ad",domains:["*.m6r.eu"]},{name:"media.ventive",category:"ad",domains:["*.contentspread.net"]},{name:"metrigo",category:"ad",domains:["*.metrigo.com"]},{name:"minicabit.com",category:"content",domains:["*.minicabit.com"]},{name:"mobiManage",category:"hosting",domains:["*.mobimanage.com"]},{name:"moving-pictures",category:"other",domains:["*.moving-pictures.biz","*.v6-moving-pictures.com","*.vtstat.com","*.moving-pictures.de"]},{name:"my6sense",category:"ad",domains:["*.mynativeplatform.com"]},{name:"myThings",category:"ad",domains:["*.mythings.com","*.mythingsmedia.net"]},{name:"mymovies",category:"content",domains:["*.mymovies.net"]},{name:"nRelate-VOID",company:"nRelate",category:"content",domains:["*.nrelate.com"]},{name:"nToklo",category:"analytics",domains:["*.ntoklo.com"]},{name:"neXeps",category:"ad",domains:["*.nexeps.com"]},{name:"ninemsn Pty.",category:"utility",domains:["*.ninemsn.com.au"]},{name:"nugg.ad",category:"ad",domains:["*.nuggad.net"]},{name:"numero interactive",company:"numero",category:"ad",domains:["*.numerointeractive.com"]},{name:"optMD",company:"Optimax Media Delivery",category:"ad",domains:["*.optmd.com"]},{name:"otracking.com",category:"analytics",domains:["*.otracking.com"]},{name:"paysafecard",company:"Paysafe Group",category:"utility",domains:["*.paysafecard.com"]},{name:"piano",category:"ad",domains:["*.npttech.com","*.tinypass.com"]},{name:"piclike",category:"ad",domains:["*.piclike.us"]},{name:"placehold.it",category:"utility",domains:["*.placehold.it"]},{name:"plista",category:"ad",domains:["*.plista.com"]},{name:"prebid.org",category:"utility",domains:["*.prebid.org"]},{name:"reEmbed",category:"other",domains:["*.reembed.com"]},{name:"reddit",category:"social",domains:["*.reddit.com","*.redditstatic.com"]},{name:"rewardStyle.com",category:"ad",domains:["*.rewardstyle.com"]},{name:"rss2json",category:"utility",domains:["*.rss2json.com"]},{name:"sage Pay",company:"Sage Pay Europe",category:"utility",domains:["*.sagepay.com"]},{name:"section.io",category:"utility",domains:["*.squixa.net"]},{name:"smartclip",category:"ad",domains:["*.smartclip.net"]},{name:"sovrn",category:"ad",domains:["*.lijit.com"]},{name:"stackpile.io",company:"StackPile",category:"tag-manager",domains:["*.stackpile.io"]},{name:"template-help.com",category:"hosting",domains:["*.template-help.com"]},{name:"test",company:"test only",category:"other",domains:["*.testtesttest.com"]},{name:"trueAnthem",category:"social",domains:["*.tru.am"]},{name:"tweetmeme-VOID",company:"tweetmeme",category:"analytics",domains:["*.tweetmeme.com"]},{name:"uLogin",category:"other",domains:["*.ulogin.ru"]},{name:"uLogix",category:"ad",domains:["*.ulogix.ru"]},{name:"ucfunnel ucX",company:"ucfunnel",category:"ad",domains:["*.aralego.com"]},{name:"up-value",category:"ad",domains:["*.up-value.de"]},{name:"wywy",category:"ad",domains:["*.wywy.com","*.wywyuserservice.com"]},{name:"CDK Dealer Management",company:"CDK Global",homepage:"https://www.cdkglobal.com/us",category:"hosting",domains:["*.assets-cdk.com"]},{name:"fam",company:"Fing Co Ltd.",homepage:"http://admin.fam-ad.com/report/",category:"ad",domains:["*.fam-ad.com"]},{name:"zypmedia",category:"ad",domains:["*.extend.tv"]},{name:"codigo",homepage:"https://www.codigo.se",category:"analytics",domains:["*.codigo.se"]},{name:"Playground",homepage:"https://playground.xyz",category:"ad",domains:["*.playground.xyz"]},{name:"RAM",homepage:"https://www2.rampanel.com/",category:"analytics",domains:["*.rampanel.com"]},{name:"Adition",homepage:"https://www.adition.com",category:"ad",domains:["*.adition.com"]},{name:"Widespace",homepage:"https://www.widespace.com",category:"ad",domains:["*.widespace.com"]},{name:"Colpirio",homepage:"https://www.widespace.com",category:"analytics",domains:["*.colpirio.com"]},{name:"Brandmetrics",homepage:"https://www.brandmetrics.com",category:"analytics",domains:["*.brandmetrics.com"]},{name:"EasyAd",homepage:"https://web.easy-ads.com/",category:"ad",domains:["*.easy-ads.com"]},{name:"Glimr",homepage:"https://glimr.io/",category:"analytics",domains:["*.glimr.io"]},{name:"Webtreck",homepage:"https://www.webtrekk.com/en/home/",category:"analytics",domains:["*.wcfbc.net"]},{name:"DigiTrust",homepage:"http://www.digitru.st/",category:"analytics",domains:["*.digitru.st"]},{name:"Kantar Sifo",homepage:"https://www.kantarsifo.se",category:"analytics",domains:["*.research-int.se"]},{name:"Concert",homepage:"https://concert.io/",category:"ad",domains:["*.concert.io"]},{name:"Emerse",homepage:"https://www.emerse.com/",category:"ad",domains:["*.emerse.com"]},{name:"Iterate",homepage:"https://iteratehq.com/",category:"analytics",domains:["*.iteratehq.com"]},{name:"Cookiebot",homepage:"https://www.cookiebot.com/",category:"utility",domains:["*.cookiebot.com"]},{name:"Netlify",homepage:"https://www.netlify.com/",category:"utility",domains:["*.netlify.com","*.netlifyusercontent.com"]},{name:"Scroll",homepage:"https://scroll.com/",category:"utility",domains:["*.scroll.com"]},{name:"Consumable",homepage:"https://consumable.com/",category:"ad",domains:["*.serverbid.com"]},{name:"DMD Marketing",homepage:"https://www.dmdconnects.com/",category:"ad",domains:["*.medtargetsystem.com"]},{name:"Catchpoint",homepage:"https://www.catchpoint.com/",category:"analytics",domains:["*.3gl.net"]},{name:"Terminus",homepage:"https://terminus.com/",category:"ad",domains:["*.terminus.services"]},{name:"Acceptable Ads",homepage:"https://acceptableads.com/",category:"ad",domains:["*.aaxads.com","*.aaxdetect.com"]},{name:"ClearBrain",homepage:"https://www.clearbrain.com/",category:"analytics",domains:["*.clearbrain.com"]},{name:"Optanon",homepage:"https://www.cookielaw.org/",category:"consent-provider",domains:["*.onetrust.com","*.cookielaw.org"]},{name:"TrustArc",homepage:"https://www.trustarc.com/",category:"utility",domains:["*.trustarc.com"]},{name:"iSpot.tv",homepage:"https://www.ispot.tv/",category:"ad",domains:["*.ispot.tv"]},{name:"RevJet",homepage:"https://www.revjet.com/",category:"ad",domains:["*.revjet.com"]},{name:"atlasRTX",homepage:"https://www.atlasrtx.com/",category:"customer-success",domains:["*.atlasrtx.com"]},{name:"ContactAtOnce",homepage:"https://www.contactatonce.com/",category:"customer-success",domains:["*.contactatonce.com"]},{name:"Algolia",homepage:"https://www.algolia.com/",category:"utility",domains:["*.algolianet.com","*.algolia.net","*.algolia.io"]},{name:"EMX Digital",homepage:"https://emxdigital.com",category:"ad",domains:["*.emxdgt.com"]},{name:"Moxie",homepage:"https://www.gomoxie.com/",category:"utility",domains:["*.gomoxie.solutions"]},{name:"Scripps Network Digital",homepage:"https://www.scrippsnetworksdigital.com/",category:"ad",domains:["*.snidigital.com"]},{name:"TurnTo",homepage:"https://www.turntonetworks.com/",category:"utility",domains:["*.turnto.com"]},{name:"Quantum Metric",homepage:"https://www.quantummetric.com/",category:"analytics",domains:["*.quantummetric.com"]},{name:"Carbon Ads",homepage:"https://www.carbonads.net/",category:"ad",domains:["*.carbonads.net","*.carbonads.com"]},{name:"Ably",homepage:"https://www.ably.io/",category:"utility",domains:["*.ably.io"]},{name:"Sectigo",homepage:"https://sectigo.com/",category:"utility",domains:["*.sectigo.com"]},{name:"Specless",homepage:"https://gospecless.com/",category:"ad",domains:["*.specless.tech"]},{name:"Loggly",homepage:"https://www.loggly.com/",category:"analytics",domains:["*.loggly.com","d9jmv9u00p0mv.cloudfront.net"]},{name:"Intent Media",homepage:"https://intent.com/",category:"ad",domains:["*.intentmedia.net"]},{name:"Supership",homepage:"https://supership.jp/",category:"ad",domains:["*.socdm.com"]},{name:"F@N Communications",homepage:"https://www.fancs.com/",category:"ad",domains:["*.ladsp.com"]},{name:"Vidyard",homepage:"https://www.vidyard.com/",category:"utility",domains:["*.vidyard.com"]},{name:"RapidSSL",homepage:"https://www.rapidssl.com/",category:"utility",domains:["*.rapidssl.com"]},{name:"Coherent Path",homepage:"https://coherentpath.com/",category:"utility",domains:["*.coherentpath.com"]},{name:"Attentive",homepage:"https://attentivemobile.com/",category:"ad",domains:["*.attn.tv","*.attentivemobile.com"]},{name:"emetriq",homepage:"https://www.emetriq.com/",category:"ad",domains:["*.emetriq.de","*.xplosion.de"]},{name:"Bonzai",homepage:"https://www.bonzai.co/",category:"ad",domains:["*.bonzai.co"]},{name:"Freshchat",homepage:"https://www.freshworks.com/live-chat-software/",category:"customer-success",domains:["*.freshchat.com","*.freshworksapi.com"],products:[{name:"Freshdesk Messaging",urlPatterns:["wchat.freshchat.com"],facades:[{name:"Freshdesk Messaging (formerly Freshchat) Facade",repo:"https://github.com/coliff/freshdesk-messaging-facade/"}]}]},{name:"Contentful",homepage:"https://www.contentful.com/",category:"utility",domains:["*.contentful.com"]},{name:"PureCars",homepage:"https://www.purecars.com/",category:"marketing",domains:["*.purecars.com"]},{name:"Tray Commerce",homepage:"https://www.tray.com.br/",category:"marketing",domains:["*.tcdn.com.br"]},{name:"AdScore",homepage:"https://www.adscore.com/",category:"ad",domains:["*.adsco.re"]},{name:"WebsiteBuilder.com",homepage:"https://www.websitebuilder.com",category:"hosting",domains:["*.mywebsitebuilder.com"]},{name:"mParticle",homepage:"https://www.mparticle.com/",category:"utility",domains:["*.mparticle.com"]},{name:"Ada",homepage:"https://www.ada.support/",category:"customer-success",domains:["*.ada.support"]},{name:"Quora Ads",homepage:"https://www.quora.com/business/",category:"ad",domains:["*.quora.com"]},{name:"Auth0",homepage:"https://auth0.com/",category:"utility",domains:["*.auth0.com"]},{name:"Bridgewell DSP",homepage:"https://www.bridgewell.com/",category:"ad",domains:["*.scupio.com"]},{name:"Wicked Reports",homepage:"https://www.wickedreports.com/",category:"marketing",domains:["*.wickedreports.com"]},{name:"Jaywing",homepage:"https://jaywing.com/",category:"marketing",domains:["*.jaywing.com"]},{name:"Holimetrix",homepage:"https://u360.d-bi.fr/",category:"marketing",domains:["*.d-bi.fr"]},{name:"iZooto",homepage:"https://www.izooto.com",category:"marketing",domains:["*.izooto.com"]},{name:"Ordergroove",homepage:"https://www.ordergroove.com/",category:"marketing",domains:["*.ordergroove.com"]},{name:"PageSense",homepage:"https://www.zoho.com/pagesense/",category:"analytics",domains:["*.pagesense.io"]},{name:"Vizzit",homepage:"https://www.vizzit.se",category:"analytics",domains:["*.vizzit.se"]},{name:"Click Guardian",homepage:"https://www.clickguardian.co.uk/",category:"ad",domains:["*.clickguardian.app","*.clickguardian.co.uk"]},{name:"Smartsupp",company:"Smartsupp.com",homepage:"https://www.smartsupp.com",category:"customer-success",domains:["*.smartsuppchat.com","*.smartsupp.com","smartsupp-widget-161959.c.cdn77.org","*.smartsuppcdn.com"]},{name:"Smartlook",company:"Smartsupp.com",homepage:"https://www.smartlook.com/",category:"analytics",domains:["*.smartlook.com"]},{name:"Luigis Box",company:"Luigis Box",homepage:"https://www.luigisbox.com/",category:"utility",domains:["*.luigisbox.com"]},{name:"Targito",company:"VIVmail.cz",homepage:"https://www.targito.com",category:"marketing",domains:["*.targito.com"]},{name:"Foxentry",company:"AVANTRO",homepage:"https://foxentry.cz/",category:"utility",domains:["*.foxentry.cz"]},{name:"Pendo",homepage:"https://www.pendo.io",category:"analytics",domains:["*.pendo.io"]},{name:"Braze",homepage:"https://www.braze.com",category:"analytics",domains:["*.appboycdn.com"]},{name:"Usersnap",homepage:"https://usersnap.com",category:"customer-success",domains:["*.usersnap.com"]},{name:"Rewardful",homepage:"https://www.getrewardful.com",category:"analytics",domains:["*.wdfl.co"]},{name:"Launch Darkly",homepage:"https://launchdarkly.com",category:"utility",domains:["*.launchdarkly.com"]},{name:"Statuspage",company:"Atlassian",homepage:"https://www.statuspage.io",category:"utility",domains:["*.statuspage.io"]},{name:"HyperInzerce",homepage:"https://hyperinzerce.cz",category:"ad",domains:["*.hyperinzerce.cz"]},{name:"POWr",homepage:"https://www.powr.io",category:"utility",domains:["*.powr.io"]},{name:"Coral",company:"Coral",homepage:"https://coralproject.net",category:"content",domains:["*.coral.coralproject.net"]},{name:"Bolt",homepage:"https://www.bolt.com/",category:"utility",domains:["*.bolt.com"]},{name:"Judge.me",homepage:"https://judge.me/",category:"marketing",domains:["*.judge.me"]},{name:"Tilda",homepage:"https://tilda.cc/",category:"hosting",domains:["*.tildacdn.com"]},{name:"SalesLoft",homepage:"https://salesloft.com/",category:"marketing",domains:["*.salesloft.com"]},{name:"Accessibe Accessibility Overlay",company:"Accessibe",homepage:"https://accessibe.com/",category:"utility",domains:["*.accessibe.com","*.acsbapp.com","*.acsbap.com"]},{name:"Builder",homepage:"https://www.builder.io/",category:"hosting",domains:["*.builder.io"]},{name:"Pepperjam",homepage:"https://www.pepperjam.com/",category:"marketing",domains:["*.pepperjam.com","*.affiliatetechnology.com"]},{name:"Reach",homepage:"https://withreach.com/",category:"utility",domains:["*.gointerpay.net"]},{name:"Chameleon",homepage:"https://www.trychameleon.com/",category:"marketing",domains:["*.trychameleon.com"]},{name:"Matomo",company:"InnoCraft",homepage:"https://matomo.org/",category:"analytics",domains:["*.matomo.cloud"]},{name:"Segmanta",homepage:"https://segmanta.com/",category:"marketing",domains:["*.segmanta.com"]},{name:"Podsights",homepage:"https://podsights.com/",category:"marketing",domains:["*.pdst.fm","us-central1-adaptive-growth.cloudfunctions.net"]},{name:"Chatwoot",homepage:"https://www.chatwoot.com/",category:"customer-success",domains:["*.chatwoot.com"]},{name:"Crisp",homepage:"https://crisp.chat/",category:"customer-success",domains:["*.crisp.chat"]},{name:"Admiral CMP",homepage:"https://www.getadmiral.com",category:"consent-provider",domains:["admiral.mgr.consensu.org","*.admiral.mgr.consensu.org"]},{name:"Adnuntius CMP",homepage:"https://adnuntius.com",category:"consent-provider",domains:["adnuntiusconsent.mgr.consensu.org","*.adnuntiusconsent.mgr.consensu.org"]},{name:"Clickio CMP",homepage:"https://clickio.com",category:"consent-provider",domains:["clickio.mgr.consensu.org","*.clickio.mgr.consensu.org"]},{name:"AppConsent CMP",homepage:"https://appconsent.io/en",category:"consent-provider",domains:["appconsent.mgr.consensu.org","*.appconsent.mgr.consensu.org"]},{name:"DMG Media CMP",homepage:"https://www.dmgmedia.co.uk",category:"consent-provider",domains:["dmgmedia.mgr.consensu.org","*.dmgmedia.mgr.consensu.org"]},{name:"Axel Springer CMP",homepage:"https://www.axelspringer.com",category:"consent-provider",domains:["axelspringer.mgr.consensu.org","*.axelspringer.mgr.consensu.org"]},{name:"Bedrock CMP",homepage:"https://www.bedrockstreaming.com",category:"consent-provider",domains:["bedrock.mgr.consensu.org","*.bedrock.mgr.consensu.org"]},{name:"BMIND CMP",homepage:"https://www.bmind.es",category:"consent-provider",domains:["bmind.mgr.consensu.org","*.bmind.mgr.consensu.org"]},{name:"Borlabs CMP",homepage:"https://borlabs.io",category:"consent-provider",domains:["borlabs.mgr.consensu.org","*.borlabs.mgr.consensu.org"]},{name:"Civic CMP",homepage:"https://www.civicuk.com",category:"consent-provider",domains:["cookiecontrol.mgr.consensu.org","*.cookiecontrol.mgr.consensu.org"]},{name:"Commanders Act CMP",homepage:"https://www.commandersact.com",category:"consent-provider",domains:["commandersact.mgr.consensu.org","*.commandersact.mgr.consensu.org"]},{name:"Complianz CMP",homepage:"https://complianz.io/",category:"consent-provider",domains:["complianz.mgr.consensu.org","*.complianz.mgr.consensu.org"]},{name:"Consent Desk CMP",homepage:"https://www.consentdesk.com/",category:"consent-provider",domains:["consentdesk.mgr.consensu.org","*.consentdesk.mgr.consensu.org"]},{name:"Consent Manager CMP",homepage:"https://consentmanager.net",category:"consent-provider",domains:["consentmanager.mgr.consensu.org","*.consentmanager.mgr.consensu.org"]},{name:"Conversant CMP",homepage:"https://www.conversantmedia.eu/",category:"consent-provider",domains:["conversant.mgr.consensu.org","*.conversant.mgr.consensu.org"]},{name:"Cookie Information CMP",homepage:"https://www.cookieinformation.com/",category:"consent-provider",domains:["cookieinformation.mgr.consensu.org","*.cookieinformation.mgr.consensu.org"]},{name:"Cookiebot CMP",homepage:"https://www.cookiebot.com",category:"consent-provider",domains:["cookiebot.mgr.consensu.org","*.cookiebot.mgr.consensu.org"]},{name:"Truendo CMP",homepage:"https://truendo.com/",category:"consent-provider",domains:["truendo.mgr.consensu.org","*.truendo.mgr.consensu.org"]},{name:"Dentsu CMP",homepage:"https://www.dentsuaegisnetwork.de/",category:"consent-provider",domains:["dan.mgr.consensu.org","*.dan.mgr.consensu.org"]},{name:"Didomi CMP",homepage:"https://www.didomi.io/en/",category:"consent-provider",domains:["didomi.mgr.consensu.org","*.didomi.mgr.consensu.org"]},{name:"Ensighten CMP",homepage:"https://www.ensighten.com/",category:"consent-provider",domains:["ensighten.mgr.consensu.org","*.ensighten.mgr.consensu.org"]},{name:"Evidon CMP",homepage:"https://evidon.com",category:"consent-provider",domains:["evidon.mgr.consensu.org","*.evidon.mgr.consensu.org"]},{name:"Ezoic CMP",homepage:"https://www.ezoic.com/",category:"consent-provider",domains:["ezoic.mgr.consensu.org","*.ezoic.mgr.consensu.org"]},{name:"Gemius CMP",homepage:"https://www.gemius.com",category:"consent-provider",domains:["gemius.mgr.consensu.org","*.gemius.mgr.consensu.org"]},{name:"NitroPay CMP",homepage:"https://nitropay.com/",category:"consent-provider",domains:["nitropay.mgr.consensu.org","*.nitropay.mgr.consensu.org"]},{name:"Google FundingChoices",homepage:"https://fundingchoices.google.com/start/",category:"consent-provider",domains:["fundingchoices.mgr.consensu.org","*.fundingchoices.mgr.consensu.org","fundingchoicesmessages.google.com","*.fundingchoicesmessages.google.com"]},{name:"Gravito CMP",homepage:"https://www.gravito.net/",category:"consent-provider",domains:["gravito.mgr.consensu.org","*.gravito.mgr.consensu.org"]},{name:"ID Ward CMP",homepage:"https://id-ward.com/enterprise",category:"consent-provider",domains:["idward.mgr.consensu.org","*.idward.mgr.consensu.org"]},{name:"iubenda CMP",homepage:"https://www.iubenda.com",category:"consent-provider",domains:["iubenda.mgr.consensu.org","*.iubenda.mgr.consensu.org"]},{name:"Jump CMP",homepage:"https://jumpgroup.it/",category:"consent-provider",domains:["avacy.mgr.consensu.org","*.avacy.mgr.consensu.org"]},{name:"LiveRamp CMP",homepage:"https://liveramp.com/",category:"consent-provider",domains:["faktor.mgr.consensu.org","*.faktor.mgr.consensu.org"]},{name:"Madvertise CMP",homepage:"https://madvertise.com/en/",category:"consent-provider",domains:["madvertise.mgr.consensu.org","*.madvertise.mgr.consensu.org"]},{name:"Mairdumont Netletic CMP",homepage:"https://www.mairdumont-netletix.com/",category:"consent-provider",domains:["mdnxmp.mgr.consensu.org","*.mdnxmp.mgr.consensu.org"]},{name:"Marfeel CMP",homepage:"https://www.marfeel.com/",category:"consent-provider",domains:["marfeel.mgr.consensu.org","*.marfeel.mgr.consensu.org"]},{name:"Mediavine CMP",homepage:"https://www.mediavine.com/",category:"consent-provider",domains:["mediavine.mgr.consensu.org","*.mediavine.mgr.consensu.org"]},{name:"ConsentServe CMP",homepage:"https://www.consentserve.com/",category:"consent-provider",domains:["consentserve.mgr.consensu.org","*.consentserve.mgr.consensu.org"]},{name:"Next14 CMP",homepage:"https://www.next14.com/",category:"consent-provider",domains:["next14.mgr.consensu.org","*.next14.mgr.consensu.org"]},{name:"AdRoll CMP",homepage:"https://www.adroll.com/",category:"consent-provider",domains:["adroll.mgr.consensu.org","*.adroll.mgr.consensu.org"]},{name:"Ogury CMP",homepage:"https://www.ogury.com/",category:"consent-provider",domains:["ogury.mgr.consensu.org","*.ogury.mgr.consensu.org"]},{name:"OneTag CMP",homepage:"https://onetag.net",category:"consent-provider",domains:["onetag.mgr.consensu.org","*.onetag.mgr.consensu.org"]},{name:"OneTrust CMP",homepage:"https://onetrust.com",category:"consent-provider",domains:["onetrust.mgr.consensu.org","*.onetrust.mgr.consensu.org"]},{name:"optAd360 CMP",homepage:"https://www.optad360.com/",category:"consent-provider",domains:["optad360.mgr.consensu.org","*.optad360.mgr.consensu.org"]},{name:"Osano CMP",homepage:"https://www.osano.com",category:"consent-provider",domains:["osano.mgr.consensu.org","*.osano.mgr.consensu.org"]},{name:"Playwire CMP",homepage:"https://www.playwire.com",category:"consent-provider",domains:["playwire.mgr.consensu.org","*.playwire.mgr.consensu.org"]},{name:"Pulselive CMP",homepage:"https://www.pulselive.com",category:"consent-provider",domains:["pulselive.mgr.consensu.org","*.pulselive.mgr.consensu.org"]},{name:"Quantcast Choice",homepage:"https://quantcast.com",category:"consent-provider",domains:["quantcast.mgr.consensu.org","*.quantcast.mgr.consensu.org"]},{name:"RCS Pubblicita CMP",homepage:"http://www.rcspubblicita.it/site/home.html",category:"consent-provider",domains:["rcsmediagroup.mgr.consensu.org","*.rcsmediagroup.mgr.consensu.org"]},{name:"Rich Audience CMP",homepage:"https://richaudience.com",category:"consent-provider",domains:["richaudience.mgr.consensu.org","*.richaudience.mgr.consensu.org"]},{name:"Ringier Axel Springer CMP",homepage:"https://www.ringieraxelspringer.pl/en/home/",category:"consent-provider",domains:["rasp.mgr.consensu.org","*.rasp.mgr.consensu.org"]},{name:"Secure Privacy CMP",homepage:"https://secureprivacy.ai/",category:"consent-provider",domains:["secureprivacy.mgr.consensu.org","*.secureprivacy.mgr.consensu.org"]},{name:"Securiti CMP",homepage:"https://securiti.ai/",category:"consent-provider",domains:["securiti.mgr.consensu.org","*.securiti.mgr.consensu.org"]},{name:"Seznam.cz CMP",homepage:"https://www.seznam.cz/",category:"consent-provider",domains:["seznam.mgr.consensu.org","*.seznam.mgr.consensu.org"]},{name:"ShareThis CMP",homepage:"https://sharethis.com",category:"consent-provider",domains:["sharethis.mgr.consensu.org","*.sharethis.mgr.consensu.org"]},{name:"ShinyStat CMP",homepage:"https://www.shinystat.com",category:"consent-provider",domains:["shinystat.mgr.consensu.org","*.shinystat.mgr.consensu.org"]},{name:"Sibbo CMP",homepage:"https://sibboventures.com/en/",category:"consent-provider",domains:["sibboventures.mgr.consensu.org","*.sibboventures.mgr.consensu.org"]},{name:"Singlespot CMP",homepage:"https://www.singlespot.com/en",category:"consent-provider",domains:["singlespot.mgr.consensu.org","*.singlespot.mgr.consensu.org"]},{name:"Sirdata CMP",homepage:"https://www.sirdata.com",category:"consent-provider",domains:["sddan.mgr.consensu.org","*.sddan.mgr.consensu.org"]},{name:"Snigel CMP",homepage:"https://snigel.com",category:"consent-provider",domains:["snigelweb.mgr.consensu.org","*.snigelweb.mgr.consensu.org"]},{name:"Sourcepoint CMP",homepage:"https://sourcepoint.com",category:"consent-provider",domains:["sourcepoint.mgr.consensu.org","*.sourcepoint.mgr.consensu.org"]},{name:"Pubtech CMP",homepage:"https://www.pubtech.ai/",category:"consent-provider",domains:["pubtech.mgr.consensu.org","*.pubtech.mgr.consensu.org"]},{name:"AdMetrics Pro CMP",homepage:"https://admetricspro.com",category:"consent-provider",domains:["cmp.mgr.consensu.org","*.cmp.mgr.consensu.org"]},{name:"Traffective CMP",homepage:"https://traffective.com",category:"consent-provider",domains:["traffective.mgr.consensu.org","*.traffective.mgr.consensu.org"]},{name:"UniConsent CMP",homepage:"https://uniconsent.com",category:"consent-provider",domains:["uniconsent.mgr.consensu.org","*.uniconsent.mgr.consensu.org"]},{name:"TrustArc CMP",homepage:"https://trustarc.com/",category:"consent-provider",domains:["trustarc.mgr.consensu.org","*.trustarc.mgr.consensu.org"]},{name:"Usercentrics CMP",homepage:"https://usercentrics.com",category:"consent-provider",domains:["usercentrics.mgr.consensu.org","*.usercentrics.mgr.consensu.org","*.usercentrics.eu","*.services.usercentrics.eu"]},{name:"WebAds CMP",homepage:"https://www.webads.nl/",category:"consent-provider",domains:["webads.mgr.consensu.org","*.webads.mgr.consensu.org"]},{name:"Trustcommander",company:"Commandersact",homepage:"https://www.commandersact.com",category:"consent-provider",domains:["*.trustcommander.net"]},{name:"Hubvisor",homepage:"https://www.hubvisor.io",category:"ad",domains:["*.hubvisor.io"]},{name:"Castle",homepage:"https://castle.io",category:"utility",domains:["*.castle.io","d2t77mnxyo7adj.cloudfront.net"]},{name:"Wigzo",homepage:"https://www.wigzo.com/",category:"marketing",domains:["*.wigzo.com","*.wigzopush.com"]},{name:"Convertful",homepage:"https://convertful.com/",category:"marketing",domains:["*.convertful.com"]},{name:"OpenLink",company:"MediaWallah",homepage:"https://www.mediawallah.com/",category:"ad",domains:["*.mediawallahscript.com"]},{name:"TPMN",company:"TPMN",homepage:"http://tpmn.io/",category:"ad",domains:["*.tpmn.co.kr"]},{name:"HERO",company:"Klarna",homepage:"https://www.usehero.com/",category:"customer-success",domains:["*.usehero.com"]},{name:"Zync",company:"Zeta Global",homepage:"https://zetaglobal.com/",category:"marketing",domains:["*.rezync.com"]},{name:"AdFuel Video",company:"AdFuel",homepage:"https://goadfuel.com/",category:"ad",domains:["*.videoplayerhub.com"]},{name:"Prefix Box AI Search",company:"Prefix Box",homepage:"https://www.prefixbox.com/",category:"utility",domains:["*.prefixbox.com"]},{name:"SpeedSize Service Worker",company:"SpeedSize",homepage:"https://speedsize.com/",category:"utility",domains:["di6367dava8ow.cloudfront.net","d2d22nphq0yz8t.cloudfront.net"]},{name:"Vonage Video API",company:"Vonage",homepage:"https://www.vonage.com/communications-apis/video/",category:"video",domains:["*.opentok.com"]},{name:"Checkout.com",company:"Checkout.com",homepage:"https://www.checkout.com",category:"utility",domains:["*.checkout.com"]},{name:"Noibu",company:"Noibu",homepage:"https://www.noibu.com",category:"utility",domains:["*.noibu.com"]},{name:"Clarity",company:"Microsoft",homepage:"https://clarity.microsoft.com/",category:"utility",domains:["*.clarity.ms"]},{name:"goinstore",company:"Emplifi",homepage:"https://goinstore.com/",category:"customer-success",domains:["*.goinstore.com"]},{name:"SegmentStream",company:"SegmentStream",homepage:"https://segmentstream.com/",category:"marketing",domains:["*.segmentstream.com"]},{name:"Amazon Associates",company:"Amazon",homepage:"https://affiliate-program.amazon.co.uk/",category:"marketing",domains:["*.associates-amazon.com"]},{name:"DotMetrics",company:"Ipsos",homepage:"https://www.dotmetrics.net/",category:"analytics",domains:["*.dotmetrics.net"]},{name:"Truffle Bid",company:"Truffle",homepage:"https://truffle.bid/",category:"ad",domains:["*.truffle.bid"]},{name:"Hybrid",company:"Hybrid",homepage:"https://hybrid.ai/",category:"ad",domains:["*.hybrid.ai"]},{name:"AdMan Media",company:"AdMan",homepage:"https://admanmedia.com/",category:"video",domains:["*.admanmedia.com"]},{name:"ID5 Identity Cloud",company:"ID5",homepage:"https://id5.io/",category:"ad",domains:["id5-sync.com","*.id5-sync.com"]},{name:"Audience Rate",company:"Audience Rate Limited",homepage:"https://www.audiencerate.com/",category:"ad",domains:["*.audrte.com"]},{name:"Seedtag",company:"Seedtag Advertising",homepage:"https://www.seedtag.com/",category:"ad",domains:["*.seedtag.com"]},{name:"IVI",company:"IVI Technologies",homepage:"http://ivitechnologies.com/",category:"ad",domains:["*.ivitrack.com"]},{name:"Sportradar",company:"Sportradar",homepage:"https://www.sportradar.com/",category:"ad",domains:["*.sportradarserving.com"]},{name:"ZEOTAP",company:"ZEOTAP",homepage:"https://zeotap.com/",category:"ad",domains:["*.zeotap.com"]},{name:"Web Content Assessor",company:"TMT Digital",homepage:"https://mediatrust.com/",category:"ad",domains:["*.webcontentassessor.com"]},{name:"Genie",company:"Media Force",homepage:"https://hellogenie.com/",category:"ad",domains:["*.mfadsrvr.com"]},{name:"mediarithmics",company:"mediarithmics",homepage:"https://www.mediarithmics.com/",category:"ad",domains:["*.mediarithmics.com"]},{name:"Ozone Project",company:"The Ozone Project",homepage:"https://www.ozoneproject.com/",category:"ad",domains:["*.the-ozone-project.com"]},{name:"FiftyAurora",company:"Fifty",homepage:"https://fifty.io/",category:"ad",domains:["*.fiftyt.com"]},{name:"smadex",company:"entravision",homepage:"https://smadex.com/",category:"ad",domains:["*.smadex.com"]},{name:"AWX",company:"Trinity Mirror",category:"ad",domains:["*.tm-awx.com"]},{name:"XPO",company:"Knorex",category:"ad",homepage:"https://www.knorex.com/",domains:["*.brand-display.com"]},{name:"Viafoura",company:"Viafoura",category:"ad",homepage:"https://viafoura.com/",domains:["*.viafoura.co","*.viafoura.net"]},{name:"Adnami",company:"Adnami",category:"ad",homepage:"https://www.adnami.io/",domains:["*.adnami.io"]},{name:"LiveRamp Privacy Manager",company:"LiveRamp",category:"ad",homepage:"https://liveramp.com/privacy-legal-compliance/",domains:["*.privacymanager.io"]},{name:"Onfocus",company:"Onfocus SAS",category:"ad",domains:["*.4dex.io"]},{name:"viewTag",company:"Advanced Store",category:"ad",domains:["*.ad4m.at"]},{name:"MRP Prelytics",company:"Market Resource Partners",category:"ad",homepage:"https://www.mrpfd.com/",domains:["*.mrpdata.net"]},{name:"iPROM",company:"iPROM",category:"ad",homepage:"https://iprom.eu/",domains:["*.iprom.net"]},{name:"Plausible",company:"Plausible",homepage:"https://plausible.io/",category:"analytics",domains:["*.plausible.io"]},{name:"Micro Analytics",company:"Micro Analytics",homepage:"https://microanalytics.io/",category:"analytics",domains:["padmin.microanalytics.io","www.microanalytics.io","dev.microanalytics.io","status.microanalytics.io"]},{name:"Scale8",company:"Scale8",homepage:"https://scale8.com/",category:"analytics",domains:["www.scale8.com","api-dev.scale8.com","cdn.scale8.com","ui.scale8.com"]},{name:"Cabin",company:"Cabin",homepage:"https://withcabin.com/",category:"analytics",domains:["*.withcabin.com"]},{name:"Appcues",company:"Appcues",homepage:"https://www.appcues.com/",category:"analytics",domains:["*.appcues.com"]},{name:"Fathom Analytics",company:"Fathom",homepage:"https://usefathom.com/",category:"analytics",domains:["*.usefathom.com"]}]});var C_=L((Rve,x_)=>{d();var{createAPIFromDataset:lY}=T_(),dY=S_();x_.exports=lY(dY)});var F_=L((kve,A_)=>{d();A_.exports=C_()});function R_(t){return sh.default.getEntity(t)}function mY(t){return sh.default.getProduct(t)}function __(t,e){let n=R_(t);return!(!n||n===e)}function pY(t,e){return!__(t,e)}var sh,Va,pp=v(()=>{"use strict";d();sh=zt(F_(),1);s(R_,"getEntity");s(mY,"getProduct");s(__,"isThirdParty");s(pY,"isFirstParty");Va={getEntity:R_,getProduct:mY,isThirdParty:__,isFirstParty:pY}});var ch,gn,ma=v(()=>{"use strict";d();we();De();Rr();lt();pp();ch=class t{static{s(this,"EntityClassification")}static makeupChromeExtensionEntity_(e,n,r){let a=rt.getChromeExtensionOrigin(n),o=new URL(a).host,i=r||o,c=e.get(a);if(c)return c;let u={name:i,company:i,category:"Chrome Extension",homepage:"https://chromewebstore.google.com/detail/"+o,categories:[],domains:[],averageExecutionTime:0,totalExecutionTime:0,totalOccurrences:0};return e.set(a,u),u}static _makeUpAnEntity(e,n){if(!te.isValid(n))return;let r=rt.createOrReturnURL(n);if(r.protocol==="chrome-extension:")return t.makeupChromeExtensionEntity_(e,n);if(!r.protocol.startsWith("http"))return;let a=rt.getRootDomain(n);if(!a)return;if(e.has(a))return e.get(a);let o={name:a,company:a,category:"",categories:[],domains:[a],averageExecutionTime:0,totalExecutionTime:0,totalOccurrences:0,isUnrecognized:!0};return e.set(a,o),o}static _preloadChromeExtensionsToCache(e,n){for(let r of n.values()){if(r.method!=="Runtime.executionContextCreated")continue;let a=r.params.context.origin;a.startsWith("chrome-extension:")&&(e.has(a)||t.makeupChromeExtensionEntity_(e,a,r.params.context.name))}}static async compute_(e,n){let r=await $.request(e.devtoolsLog,n),a=new Map,o=new Map,i=new Map;t._preloadChromeExtensionsToCache(a,e.devtoolsLog);for(let m of r){let{url:p}=m;if(o.has(p))continue;let g=Va.getEntity(p)||t._makeUpAnEntity(a,p);if(!g)continue;let f=i.get(g)||new Set;f.add(p),i.set(g,f),o.set(p,g)}let c=e.URL.mainDocumentUrl||e.URL.finalDisplayedUrl,u=Va.getEntity(c)||t._makeUpAnEntity(a,c);function l(m){return o.get(m)===u}return s(l,"isFirstParty"),{entityByUrl:o,urlsByEntity:i,firstParty:u,isFirstParty:l}}},gn=W(ch,["URL","devtoolsLog"])});var uh,cn,$a=v(()=>{"use strict";d();ca();qo();He();uh=zt(cu(),1);mF();J();la();bR();f_();da();mp();Bt();rs();Vo();ma();lt();cn=class t{static{s(this,"Runner")}static async audit(e,n){let{resolvedConfig:r,computedCache:a}=n,o=r.settings;try{let i={msg:"Audit phase",id:"lh:runner:audit"};N.time(i,"verbose");let c=[];if(o.gatherMode&&!o.auditMode)return;if(!r.audits)throw new Error("No audits to evaluate.");let u=await t._runAudits(o,r.audits,e,c,a),l={msg:"Generating results...",id:"lh:runner:generate"};N.time(l),e.LighthouseRunWarnings&&c.push(...e.LighthouseRunWarnings);let p={"axe-core":e.Accessibility?.version},g={};r.categories&&(g=Km.scoreAllCategories(r.categories,u)),N.timeEnd(l),N.timeEnd(i);let f=e.FullPageScreenshot;(r.settings.disableFullPageScreenshot||f instanceof Error)&&(f=void 0);let y={lighthouseVersion:Xm,requestedUrl:e.URL.requestedUrl,mainDocumentUrl:e.URL.mainDocumentUrl,finalDisplayedUrl:e.URL.finalDisplayedUrl,finalUrl:e.URL.mainDocumentUrl,fetchTime:e.fetchTime,gatherMode:e.GatherContext.gatherMode,runtimeError:t.getArtifactRuntimeError(e),runWarnings:c,userAgent:e.HostUserAgent,environment:{networkUserAgent:e.NetworkUserAgent,hostUserAgent:e.HostUserAgent,benchmarkIndex:e.BenchmarkIndex,benchmarkIndexes:e.BenchmarkIndexes,credits:p},audits:u,configSettings:o,categories:g,categoryGroups:r.groups||void 0,stackPacks:vR(e.Stacks),entities:await t.getEntityClassification(e,{computedCache:a}),fullPageScreenshot:f,timing:this._getTiming(e),i18n:{rendererFormattedStrings:kF(o.locale),icuMessagePaths:{}}};y.i18n.icuMessagePaths=Tg(y,o.locale);let b=y;if(o.auditMode){let T=t._getDataSavePath(o);m_(b,T)}let D=ms.generateReport(b,o.output);return{lhr:b,artifacts:e,report:D}}catch(i){throw t.createRunnerError(i,o)}}static async getEntityClassification(e,n){let r=e.devtoolsLogs?.[h.DEFAULT_PASS];if(!r)return;let a=await gn.request({URL:e.URL,devtoolsLog:r},n),o=[];for(let[i,c]of a.urlsByEntity){let u=new Set;for(let m of c){let p=te.getOrigin(m);p&&u.add(p)}let l={name:i.name,homepage:i.homepage,origins:[...u]};i===a.firstParty&&(l.isFirstParty=!0),i.isUnrecognized&&(l.isUnrecognized=!0),i.category&&(l.category=i.category),o.push(l)}return o}static async gather(e,n){let r=n.resolvedConfig.settings;try{let a=en.getContext();en.captureBreadcrumb({message:"Run started",category:"lifecycle",data:a});let o;if(r.auditMode&&!r.gatherMode){let i=this._getDataSavePath(r);o=l_(i)}else{let i={msg:"Gather phase",id:"lh:runner:gather"};if(N.time(i,"verbose"),o=await e({resolvedConfig:n.resolvedConfig}),N.timeEnd(i),o.Timing=N.takeTimeEntries(),r.gatherMode){let c=this._getDataSavePath(r);await d_(o,c)}}return o}catch(a){throw t.createRunnerError(a,r)}}static createRunnerError(e,n){return e.friendlyMessage&&(e.friendlyMessage=$o(e.friendlyMessage,n.locale)),en.captureException(e,{level:"fatal"}),e}static _getTiming(e){let n=e.Timing||[],r=N.takeTimeEntries(),a=[...n,...r].map(m=>[`${m.startTime}-${m.name}-${m.duration}`,m]),o=Array.from(new Map(a).values()).map(m=>({startTime:parseFloat(m.startTime.toFixed(2)),name:m.name,duration:parseFloat(m.duration.toFixed(2)),entryType:m.entryType})).sort((m,p)=>m.startTime-p.startTime),i=o.find(m=>m.name==="lh:runner:gather"),c=o.find(m=>m.name==="lh:runner:audit"),u=i?.duration||0,l=c?.duration||0;return{entries:o,total:u+l}}static async _runAudits(e,n,r,a,o){let i={msg:"Analyzing and running audits...",id:"lh:runner:auditing"};if(N.time(i),r.settings){let l={locale:void 0,gatherMode:void 0,auditMode:void 0,output:void 0,channel:void 0,budgets:void 0},m=Object.assign({},r.settings,l),p=Object.assign({},e,l),g=new Set([...Object.keys(m),...Object.keys(p)]);for(let f of g)if(!(0,uh.default)(m[f],p[f]))throw new Error(`Cannot change settings between gathering and auditing. Difference found at: ${f}`);if(!(0,uh.default)(m,p))throw new Error("Cannot change settings between gathering and auditing")}let c={settings:e,computedCache:o},u={};for(let l of n){let m=l.implementation.meta.id,p=await t._runAudit(l,r,c,a);u[m]=p}return N.timeEnd(i),u}static async _runAudit(e,n,r,a){let o=e.implementation,i={msg:`Auditing: ${$o(o.meta.title,"en-US")}`,id:`lh:audit:${o.meta.id}`};N.time(i);let c;try{if(n.PageLoadError)throw n.PageLoadError;for(let f of o.meta.requiredArtifacts){let y=n[f]===void 0,b=f==="traces"&&!n.traces[h.DEFAULT_PASS],D=f==="devtoolsLogs"&&!n.devtoolsLogs[h.DEFAULT_PASS];if(y||b||D)throw N.warn("Runner",`${f} gatherer, required by audit ${o.meta.id}, did not run.`),new G(G.errors.MISSING_REQUIRED_ARTIFACT,{artifactName:f});if(n[f]instanceof Error){let T=n[f];N.warn("Runner",`${f} gatherer, required by audit ${o.meta.id}, encountered an error: ${T.message}`);let A=new G(G.errors.ERRORED_REQUIRED_ARTIFACT,{artifactName:f,errorMessage:T.message},{cause:T});throw A.expected=!0,A}}let l={options:Object.assign({},o.defaultOptions,e.options),...r},p=o.meta.requiredArtifacts.concat(o.meta.__internalOptionalArtifacts||[]).reduce((f,y)=>{let b=n[y];return f[y]=b,f},{}),g=await o.audit(p,l);a.push(...g.runWarnings||[]),c=h.generateAuditResult(o,g)}catch(u){u.code!=="MISSING_REQUIRED_ARTIFACT"&&u.code!=="ERRORED_REQUIRED_ARTIFACT"&&N.warn(o.meta.id,`Caught exception: ${u.message}`),en.captureException(u,{tags:{audit:o.meta.id},level:"error"});let l=u.friendlyMessage?u.friendlyMessage:u.message,m=u.cause?.stack??u.stack;c=h.generateErrorAuditResult(o,l,m)}return N.timeEnd(i),c}static getArtifactRuntimeError(e){let n=[e.PageLoadError,...Object.values(e)];for(let r of n)if(r instanceof G&&r.lhrRuntimeError){let o=r.friendlyMessage||r.message;return{code:r.code,message:o}}}static getAuditList(){let e=["audit.js","violation-audit.js","accessibility/axe-audit.js","multi-check-audit.js","byte-efficiency/byte-efficiency-audit.js","manual/manual-audit.js"];return["accessibility","audit.js","autocomplete.js","bf-cache.js","bootup-time.js","byte-efficiency","content-width.js","critical-request-chains.js","csp-xss.js","deprecations.js","diagnostics.js","dobetterweb","errors-in-console.js","final-screenshot.js","font-display.js","image-aspect-ratio.js","image-size-responsive.js","installable-manifest.js","is-on-https.js","largest-contentful-paint-element.js","layout-shift-elements.js","lcp-lazy-loaded.js","long-tasks.js","main-thread-tasks.js","mainthread-work-breakdown.js","manual","maskable-icon.js","metrics","metrics.js","multi-check-audit.js","network-requests.js","network-rtt.js","network-server-latency.js","no-unload-listeners.js","non-composited-animations.js","oopif-iframe-test-audit.js","performance-budget.js","predictive-perf.js","preload-fonts.js","prioritize-lcp-image.js","redirects.js","screenshot-thumbnails.js","script-elements-test-audit.js","script-treemap-data.js","seo","server-response-time.js","splash-screen.js","themed-omnibox.js","third-party-facades.js","third-party-summary.js","timing-budget.js","unsized-images.js","user-timings.js","uses-rel-preconnect.js","uses-rel-preload.js","valid-source-maps.js","viewport.js","violation-audit.js","work-during-interaction.js",...["charset.js","doctype.js","dom-size.js","geolocation-on-start.js","inspector-issues.js","js-libraries.js","no-document-write.js","notification-on-start.js","paste-preventing-inputs.js","uses-http2.js","uses-passive-event-listeners.js"].map(r=>`dobetterweb/${r}`),...["cumulative-layout-shift.js","first-contentful-paint.js","first-meaningful-paint.js","interaction-to-next-paint.js","interactive.js","largest-contentful-paint.js","max-potential-fid.js","speed-index.js","total-blocking-time.js"].map(r=>`metrics/${r}`),...["canonical.js","crawlable-anchors.js","font-size.js","hreflang.js","http-status-code.js","is-crawlable.js","link-text.js","manual","meta-description.js","plugins.js","robots-txt.js","tap-targets.js"].map(r=>`seo/${r}`),...["structured-data.js"].map(r=>`seo/manual/${r}`),...["accesskeys.js","aria-allowed-attr.js","aria-allowed-role.js","aria-command-name.js","aria-dialog-name.js","aria-hidden-body.js","aria-hidden-focus.js","aria-input-field-name.js","aria-meter-name.js","aria-progressbar-name.js","aria-required-attr.js","aria-required-children.js","aria-required-parent.js","aria-roles.js","aria-text.js","aria-toggle-field-name.js","aria-tooltip-name.js","aria-treeitem-name.js","aria-valid-attr-value.js","aria-valid-attr.js","axe-audit.js","button-name.js","bypass.js","color-contrast.js","definition-list.js","dlitem.js","document-title.js","duplicate-id-active.js","duplicate-id-aria.js","empty-heading.js","form-field-multiple-labels.js","frame-title.js","heading-order.js","html-has-lang.js","html-lang-valid.js","html-xml-lang-mismatch.js","identical-links-same-purpose.js","image-alt.js","image-redundant-alt.js","input-button-name.js","input-image-alt.js","label-content-name-mismatch.js","label.js","landmark-one-main.js","link-in-text-block.js","link-name.js","list.js","listitem.js","manual","meta-refresh.js","meta-viewport.js","object-alt.js","select-name.js","skip-link.js","tabindex.js","table-duplicate-name.js","table-fake-caption.js","target-size.js","td-has-header.js","td-headers-attr.js","th-has-data-cells.js","valid-lang.js","video-caption.js"].map(r=>`accessibility/${r}`),...["custom-controls-labels.js","custom-controls-roles.js","focus-traps.js","focusable-controls.js","interactive-element-affordance.js","logical-tab-order.js","managed-focus.js","offscreen-content-hidden.js","use-landmarks.js","visual-order-follows-dom.js"].map(r=>`accessibility/manual/${r}`),...["byte-efficiency-audit.js","duplicated-javascript.js","efficient-animated-content.js","legacy-javascript.js","modern-image-formats.js","offscreen-images.js","polyfill-graph-data.json","render-blocking-resources.js","total-byte-weight.js","unminified-css.js","unminified-javascript.js","unused-css-rules.js","unused-javascript.js","uses-long-cache-ttl.js","uses-optimized-images.js","uses-responsive-images-snapshot.js","uses-responsive-images.js","uses-text-compression.js"].map(r=>`byte-efficiency/${r}`),...["manual-audit.js","pwa-cross-browser.js","pwa-each-page-has-url.js","pwa-page-transitions.js"].map(r=>`manual/${r}`)].filter(r=>/\.js$/.test(r)&&!e.includes(r)).sort()}static getGathererList(){return["accessibility.js","anchor-elements.js","bf-cache-failures.js","cache-contents.js","console-messages.js","css-usage.js","devtools-log-compat.js","devtools-log.js","dobetterweb","full-page-screenshot.js","global-listeners.js","iframe-elements.js","image-elements.js","inputs.js","inspector-issues.js","installability-errors.js","js-usage.js","link-elements.js","main-document-content.js","meta-elements.js","network-user-agent.js","script-elements.js","scripts.js","seo","service-worker.js","source-maps.js","stacks.js","trace-compat.js","trace-elements.js","trace.js","viewport-dimensions.js","web-app-manifest.js",...["embedded-content.js","font-size.js","robots-txt.js","tap-targets.js"].map(n=>`seo/${n}`),...["doctype.js","domstats.js","optimized-images.js","response-compression.js","tags-blocking-first-paint.js"].map(n=>`dobetterweb/${n}`)].filter(n=>/\.js$/.test(n)&&n!=="gatherer.js").sort()}static _getDataSavePath(e){let{auditMode:n,gatherMode:r}=e;return typeof n=="string"?Ot.resolve(process.cwd(),n):typeof r=="string"?Ot.resolve(process.cwd(),r):Ot.join(process.cwd(),"latest-run")}}});function fY(t){return(!t||typeof t=="string")&&(t=new Error(t)),{__failedInBrowser:!0,name:t.name||"Error",message:t.message||"unknown error",stack:t.stack}}function gY(t){let e=window.__ElementMatches||window.Element.prototype.matches,n=[],r=s(a=>{for(let o of a){if(!t||e.call(o,t)){let i=o;n.push(i)}o.shadowRoot&&r(o.shadowRoot.querySelectorAll("*"))}},"_findAllElements");return r(document.querySelectorAll("*")),n}function Du(t,e=[],n=500){let a=["autofill-information","autofill-prediction","title"];t instanceof ShadowRoot&&(t=t.host);try{let o=t.cloneNode();t.ownerDocument.createElement("template").content.append(o),e.concat(a).forEach(m=>{o.removeAttribute(m)});let c=0;for(let m of o.getAttributeNames()){if(c>n){o.removeAttribute(m);continue}let p=o.getAttribute(m);if(p===null)continue;let g=!1;if(m==="src"&&"currentSrc"in t){let y=t,b=y.currentSrc,D=y.ownerDocument.location.href;new URL(p,D).toString()!==b&&(p=b,g=!0)}let f=Ya(p,75);if(f!==p&&(g=!0),p=f,g)if(m==="style"){let y=o;y.style.cssText=p}else o.setAttribute(m,p);c+=m.length+p.length}let u=/^[\s\S]*?>/,[l]=o.outerHTML.match(u)||[];return l&&c>n?l.slice(0,l.length-1)+" …>":l||""}catch{return`<${t.localName}>`}}function hY(){function t(){let n=Date.now(),r=0;for(;Date.now()-n<500;){let o="";for(let i=0;i<1e4;i++)o+="a";if(o.length===1)throw new Error("will never happen, but prevents compiler optimizations");r++}let a=(Date.now()-n)/1e3;return Math.round(r/10/a)}s(t,"benchmarkIndexGC");function e(){let n=[],r=[];for(let c=0;c<1e5;c++)n[c]=r[c]=c;let a=Date.now(),o=0;for(;o%10!==0||Date.now()-a<500;){let c=o%2===0?n:r,u=o%2===0?r:n;for(let l=0;l<c.length;l++)u[l]=c[l];o++}let i=(Date.now()-a)/1e3;return Math.round(o/10/i)}return s(e,"benchmarkIndexNoGC"),(t()+e())/2}function lh(t){let e=s(i=>i.nodeType===Node.DOCUMENT_FRAGMENT_NODE,"isShadowRoot"),n=s(i=>e(i)?i.host:i.parentNode,"getNodeParent");function r(i){if(e(i))return"a";let c=0,u;for(;u=i.previousSibling;)i=u,!(i.nodeType===Node.TEXT_NODE&&(i.nodeValue||"").trim().length===0)&&c++;return c}s(r,"getNodeIndex");let a=t,o=[];for(;a&&n(a);){let i=r(a);o.push([i,a.nodeName]),a=n(a)}return o.reverse(),o.join(",")}function dh(t){function e(r){let a=r.tagName.toLowerCase();return r.id?a+="#"+r.id:r.classList.length>0&&(a+="."+r.classList[0]),a}s(e,"getSelectorPart");let n=[];for(;n.length<4&&(n.unshift(e(t)),!(!t.parentElement||(t=t.parentElement,t.tagName==="HTML"))););return n.join(" > ")}function yY(t){function e(a,o){return a.style[o]||window.getComputedStyle(a)[o]}s(e,"getStyleAttrValue");let n=document.querySelector("html");if(!n)throw new Error("html element not found in document");if(n.scrollHeight<=n.clientHeight||!["scroll","auto","visible"].includes(e(n,"overflowY")))return!1;let r=t;for(;r;){let a=e(r,"position");if(a==="fixed"||a==="sticky")return!0;r=r.parentElement}return!1}function ps(t){let e=t.tagName.toLowerCase();if(e!=="html"&&e!=="body"){let n=t instanceof HTMLElement&&t.innerText||t.getAttribute("alt")||t.getAttribute("aria-label");if(n)return Ya(n,80);{let r=t.querySelector("[alt], [aria-label]");if(r)return ps(r)}}return null}function mh(t){let n=(window.__HTMLElementBoundingClientRect||window.HTMLElement.prototype.getBoundingClientRect).call(t);return{top:Math.round(n.top),bottom:Math.round(n.bottom),left:Math.round(n.left),right:Math.round(n.right),width:Math.round(n.width),height:Math.round(n.height)}}function vY(t){let n=Math.floor(40/t),r=window.requestIdleCallback;window.requestIdleCallback=(a,o)=>r(s(c=>{let u=Date.now();c.__timeRemaining=c.timeRemaining,c.timeRemaining=()=>{let l=c.__timeRemaining();return Math.min(l,Math.max(0,n-(Date.now()-u)))},c.timeRemaining.toString=()=>"function timeRemaining() { [native code] }",a(c)},"cbWrap"),o),window.requestIdleCallback.toString=()=>"function requestIdleCallback() { [native code] }"}function fp(t){window.__lighthouseNodesDontTouchOrAllVarianceGoesAway||(window.__lighthouseNodesDontTouchOrAllVarianceGoesAway=new Map),t=t instanceof ShadowRoot?t.host:t;let e=dh(t),n=window.__lighthouseNodesDontTouchOrAllVarianceGoesAway.get(t);return n||(n=[window.__lighthouseExecutionContextUniqueIdentifier===void 0?"page":window.__lighthouseExecutionContextUniqueIdentifier,window.__lighthouseNodesDontTouchOrAllVarianceGoesAway.size,t.tagName].join("-"),window.__lighthouseNodesDontTouchOrAllVarianceGoesAway.set(t,n)),{lhId:n,devtoolsNodePath:lh(t),selector:e,boundingRect:mh(t),snippet:Du(t),nodeLabel:ps(t)||e}}function Ya(t,e){return rt.truncate(t,e)}function bY(){if(globalThis.isDevtools||globalThis.isLightrider)return!0;let t=Go("core/lib/page-functions.js");try{return t.resolve("lighthouse-logger"),!1}catch{return!0}}function DY(){if(!bY())return"";let e=(()=>{let a=s(()=>{},"a")}).toString().replace("/* @__PURE__ */","").match(/=\s*([\w_]+)\(/);if(!e)throw new Error("Could not determine esbuild function wrapper name");let n=s((a,o)=>Object.defineProperty(a,"name",{value:o,configurable:!0}),"esbuildFunctionWrapper");return`let ${e[1]}=${n}`}function wu(t){let e=t.toString().match(/function ([\w$]+)/);if(!e)throw new Error(`could not find function name for: ${t}`);return e[1]}var wY,gp,k_,I_,EY,Ee,un=v(()=>{"use strict";d();es();Rr();s(fY,"wrapRuntimeEvalErrorInBrowser");s(gY,"getElementsInDocument");s(Du,"getOuterHTMLSnippet");s(hY,"computeBenchmarkIndex");s(lh,"getNodePath");s(dh,"getNodeSelector");s(yY,"isPositionFixed");s(ps,"getNodeLabel");s(mh,"getBoundingClientRect");s(vY,"wrapRequestIdleCallback");s(fp,"getNodeDetails");s(Ya,"truncate");s(bY,"isBundledEnvironment");wY=DY();s(DY,"createEsbuildFunctionWrapper");s(wu,"getRuntimeFunctionName");gp={truncate:wu(Ya),getNodeLabel:wu(ps),getOuterHTMLSnippet:wu(Du),getNodeDetails:wu(fp)};Ya.toString=()=>`function ${gp.truncate}(string, characterLimit) {
+  const Util = { ${rt.truncate} };
+  return Util.truncate(string, characterLimit);
+}`;k_=ps.toString();ps.toString=()=>`function ${gp.getNodeLabel}(element) {
+  ${Ya};
+  return (${k_})(element);
+}`;I_=Du.toString();Du.toString=()=>`function ${gp.getOuterHTMLSnippet}(element, ignoreAttrs = [], snippetCharacterLimit = 500) {
+  ${Ya};
+  return (${I_})(element, ignoreAttrs, snippetCharacterLimit);
+}`;EY=fp.toString();fp.toString=()=>`function ${gp.getNodeDetails}(element) {
+  ${Ya};
+  ${lh};
+  ${dh};
+  ${mh};
+  ${I_};
+  ${k_};
+  return (${EY})(element);
+}`;Ee={wrapRuntimeEvalErrorInBrowser:fY,getElementsInDocument:gY,getOuterHTMLSnippet:Du,computeBenchmarkIndex:hY,getNodeDetails:fp,getNodePath:lh,getNodeSelector:dh,getNodeLabel:ps,isPositionFixed:yY,wrapRequestIdleCallback:vY,getBoundingClientRect:mh,truncate:Ya,esbuildFunctionWrapperString:wY,getRuntimeFunctionName:wu}});var Ka,hp=v(()=>{"use strict";d();Yt();un();Ka=class t{static{s(this,"ExecutionContext")}constructor(e){this._session=e,this._executionContextId=void 0,this._executionContextIdentifiersCreated=0,e.on("Page.frameNavigated",()=>this.clearContextId()),e.on("Runtime.executionContextDestroyed",n=>{n.executionContextId===this._executionContextId&&this.clearContextId()})}getContextId(){return this._executionContextId}clearContextId(){this._executionContextId=void 0}async _getOrCreateIsolatedContextId(){if(typeof this._executionContextId=="number")return this._executionContextId;await this._session.sendCommand("Page.enable"),await this._session.sendCommand("Runtime.enable");let n=(await this._session.sendCommand("Page.getFrameTree")).frameTree.frame.id,r=await this._session.sendCommand("Page.createIsolatedWorld",{frameId:n,worldName:"lighthouse_isolated_context"});return this._executionContextId=r.executionContextId,this._executionContextIdentifiersCreated++,r.executionContextId}async _evaluateInContext(e,n){let r=this._session.hasNextProtocolTimeout()?this._session.getNextProtocolTimeout():6e4,a=n===void 0?void 0:this._executionContextIdentifiersCreated,o={expression:`(function wrapInNativePromise() {
+        ${t._cachedNativesPreamble};
+        globalThis.__lighthouseExecutionContextUniqueIdentifier =
+          ${a};
+        ${Ee.esbuildFunctionWrapperString}
+        return new Promise(function (resolve) {
+          return Promise.resolve()
+            .then(_ => ${e})
+            .catch(${Ee.wrapRuntimeEvalErrorInBrowser})
+            .then(resolve);
+        });
+      }())
+      //# sourceURL=_lighthouse-eval.js`,includeCommandLineAPI:!0,awaitPromise:!0,returnByValue:!0,timeout:r,contextId:n};this._session.setNextProtocolTimeout(r);let i=await this._session.sendCommand("Runtime.evaluate",o),c=i.exceptionDetails;if(c){let m=["Runtime.evaluate exception",`Expression: ${e.replace(/\s+/g," ").substring(0,100)}
+---- (elided)`,c.stackTrace?null:`Parse error at: ${c.lineNumber+1}:${c.columnNumber+1}`,c.exception?.description||c.text].filter(Boolean),p=new Error(m.join(`
+`));return Promise.reject(p)}if(i.result===void 0)return Promise.reject(new Error('Runtime.evaluate response did not contain a "result" object'));let u=i.result.value;return u?.__failedInBrowser?Promise.reject(Object.assign(new Error,u)):u}async evaluateAsync(e,n={}){let r=n.useIsolation?await this._getOrCreateIsolatedContextId():void 0;try{return await this._evaluateInContext(e,r)}catch(a){if(r&&a.message.includes("Cannot find context")){this.clearContextId();let o=await this._getOrCreateIsolatedContextId();return this._evaluateInContext(e,o)}throw a}}evaluate(e,n){let r=t.serializeArguments(n.args),o=`(() => {
+      ${t.serializeDeps(n.deps)}
+      return (${e})(${r});
+    })()`;return this.evaluateAsync(o,n)}async evaluateOnNewDocument(e,n){let r=t.serializeArguments(n.args),a=t.serializeDeps(n.deps),o=`(() => {
+      ${t._cachedNativesPreamble};
+      ${a};
+      (${e})(${r});
+    })()
+    //# sourceURL=_lighthouse-eval.js`;await this._session.sendCommand("Page.addScriptToEvaluateOnNewDocument",{source:o})}async cacheNativesOnNewDocument(){await this.evaluateOnNewDocument(()=>{window.__nativePromise=window.Promise,window.__nativeURL=window.URL,window.__nativePerformance=window.performance,window.__nativeFetch=window.fetch,window.__ElementMatches=window.Element.prototype.matches,window.__HTMLElementBoundingClientRect=window.HTMLElement.prototype.getBoundingClientRect},{args:[]})}static _cachedNativesPreamble=["const Promise = globalThis.__nativePromise || globalThis.Promise","const URL = globalThis.__nativeURL || globalThis.URL","const performance = globalThis.__nativePerformance || globalThis.performance","const fetch = globalThis.__nativeFetch || globalThis.fetch"].join(`;
+`);static serializeArguments(e){return e.map(n=>n===void 0?"undefined":JSON.stringify(n)).join(",")}static serializeDeps(e){return e=[Ee.esbuildFunctionWrapperString,...e||[]],e.map(n=>{if(typeof n=="function"){let r=n.toString(),a=Ee.getRuntimeFunctionName(n);return a!==n.name?`${r}; const ${n.name} = ${a};`:r}else return n}).join(`
+`)}}});var TY,SY,yp,M_=v(()=>{"use strict";d();ia();Bt();TY=3e4,SY=Zn,yp=class extends SY{static{s(this,"ProtocolSession")}constructor(e){super(),this._cdpSession=e,this._targetInfo=void 0,this._nextProtocolTimeout=void 0,this._handleProtocolEvent=this._handleProtocolEvent.bind(this),this._cdpSession.on("*",this._handleProtocolEvent)}id(){return this._cdpSession.id()}_handleProtocolEvent(e,...n){this.emit(e,...n)}setTargetInfo(e){this._targetInfo=e}hasNextProtocolTimeout(){return this._nextProtocolTimeout!==void 0}getNextProtocolTimeout(){return this._nextProtocolTimeout||TY}setNextProtocolTimeout(e){this._nextProtocolTimeout=e}sendCommand(e,...n){let r=this.getNextProtocolTimeout();this._nextProtocolTimeout=void 0;let a,o=new Promise((u,l)=>{r!==1/0&&(a=setTimeout(l,r,new G(G.errors.PROTOCOL_TIMEOUT,{protocolMethod:e})))}),i=this._cdpSession.send(e,...n);return Promise.race([i,o]).finally(()=>{a&&clearTimeout(a)})}async dispose(){this._cdpSession.off("*",this._handleProtocolEvent),await this._cdpSession.detach()}}});var xY,vp,N_=v(()=>{"use strict";d();ia();He();M_();xY=Zn,vp=class extends xY{static{s(this,"TargetManager")}constructor(e){super(),this._enabled=!1,this._rootCdpSession=e,this._mainFrameId="",this._targetIdToTargets=new Map,this._executionContextIdToDescriptions=new Map,this._onSessionAttached=this._onSessionAttached.bind(this),this._onFrameNavigated=this._onFrameNavigated.bind(this),this._onExecutionContextCreated=this._onExecutionContextCreated.bind(this),this._onExecutionContextDestroyed=this._onExecutionContextDestroyed.bind(this),this._onExecutionContextsCleared=this._onExecutionContextsCleared.bind(this)}async _onFrameNavigated(e){if(!e.frame.parentId&&this._enabled)try{await this._rootCdpSession.send("Target.setAutoAttach",{autoAttach:!0,flatten:!0,waitForDebuggerOnStart:!0})}catch(n){if(this._enabled)throw n}}_findSession(e){for(let{session:n,cdpSession:r}of this._targetIdToTargets.values())if(r.id()===e)return n;throw new Error(`session ${e} not found`)}rootSession(){let e=this._rootCdpSession.id();return this._findSession(e)}mainFrameExecutionContexts(){return[...this._executionContextIdToDescriptions.values()].filter(e=>e.auxData.frameId===this._mainFrameId)}async _onSessionAttached(e){let n=new yp(e);try{let r=await n.sendCommand("Target.getTargetInfo").catch(()=>null),a=r?.targetInfo?.type;if(!r||!(a==="page"||a==="iframe"))return;let i=r.targetInfo.targetId;if(this._targetIdToTargets.has(i))return;n.setTargetInfo(r.targetInfo);let c=r.targetInfo.url||r.targetInfo.targetId;N.verbose("target-manager",`target ${c} attached`);let l=this._getProtocolEventListener(a,n.id());e.on("*",l),e.on("sessionattached",this._onSessionAttached);let m={target:r.targetInfo,cdpSession:e,session:n,protocolListener:l};this._targetIdToTargets.set(i,m),await n.sendCommand("Network.enable"),await n.sendCommand("Target.setAutoAttach",{autoAttach:!0,flatten:!0,waitForDebuggerOnStart:!0})}catch(r){if(/Target closed/.test(r.message))return;throw r}finally{await n.sendCommand("Runtime.runIfWaitingForDebugger").catch(()=>{})}}_onExecutionContextCreated(e){e.context.name!=="__puppeteer_utility_world__"&&e.context.name!=="lighthouse_isolated_context"&&this._executionContextIdToDescriptions.set(e.context.uniqueId,e.context)}_onExecutionContextDestroyed(e){this._executionContextIdToDescriptions.delete(e.executionContextUniqueId)}_onExecutionContextsCleared(){this._executionContextIdToDescriptions.clear()}_getProtocolEventListener(e,n){return s((a,o)=>{let i={method:a,params:o,targetType:e,sessionId:n};this.emit("protocolevent",i)},"onProtocolEvent")}async enable(){this._enabled||(this._enabled=!0,this._targetIdToTargets=new Map,this._executionContextIdToDescriptions=new Map,this._rootCdpSession.on("Page.frameNavigated",this._onFrameNavigated),this._rootCdpSession.on("Runtime.executionContextCreated",this._onExecutionContextCreated),this._rootCdpSession.on("Runtime.executionContextDestroyed",this._onExecutionContextDestroyed),this._rootCdpSession.on("Runtime.executionContextsCleared",this._onExecutionContextsCleared),await this._rootCdpSession.send("Page.enable"),await this._rootCdpSession.send("Runtime.enable"),this._mainFrameId=(await this._rootCdpSession.send("Page.getFrameTree")).frameTree.frame.id,await this._onSessionAttached(this._rootCdpSession))}async disable(){this._rootCdpSession.off("Page.frameNavigated",this._onFrameNavigated),this._rootCdpSession.off("Runtime.executionContextCreated",this._onExecutionContextCreated),this._rootCdpSession.off("Runtime.executionContextDestroyed",this._onExecutionContextDestroyed),this._rootCdpSession.off("Runtime.executionContextsCleared",this._onExecutionContextsCleared);for(let{cdpSession:e,protocolListener:n}of this._targetIdToTargets.values())e.off("*",n),e.off("sessionattached",this._onSessionAttached);await this._rootCdpSession.send("Page.disable"),await this._rootCdpSession.send("Runtime.disable"),this._enabled=!1,this._targetIdToTargets=new Map,this._executionContextIdToDescriptions=new Map,this._mainFrameId=""}}});var bp,L_=v(()=>{"use strict";d();Yt();bp=class{static{s(this,"Fetcher")}constructor(e){this.session=e}async fetchResource(e,n={timeout:2e3}){return globalThis.isLightrider?this._wrapWithTimeout(this._fetchWithFetchApi(e),n.timeout):this._fetchResourceOverProtocol(e,n)}async _fetchWithFetchApi(e){let n=await fetch(e),r=null;try{r=await n.text()}catch{}return{content:r,status:n.status}}async _readIOStream(e,n={timeout:2e3}){let r=Date.now(),a,o="";for(;!a||!a.eof;){if(Date.now()-r>n.timeout)throw new Error("Waiting for the end of the IO stream exceeded the allotted time.");a=await this.session.sendCommand("IO.read",{handle:e});let c=a.base64Encoded?Buffer.from(a.data,"base64").toString("utf-8"):a.data;o=o.concat(c)}return o}async _loadNetworkResource(e){let n=await this.session.sendCommand("Page.getFrameTree"),r=await this.session.sendCommand("Network.loadNetworkResource",{frameId:n.frameTree.frame.id,url:e,options:{disableCache:!0,includeCredentials:!0}});return{stream:r.resource.success&&r.resource.stream||null,status:r.resource.httpStatusCode||null}}async _fetchResourceOverProtocol(e,n){let r=Date.now(),a=await this._wrapWithTimeout(this._loadNetworkResource(e),n.timeout),o=a.status&&a.status>=200&&a.status<=299;if(!a.stream||!o)return{status:a.status,content:null};let i=n.timeout-(Date.now()-r),c=await this._readIOStream(a.stream,{timeout:i});return{status:a.status,content:c}}async _wrapWithTimeout(e,n){let r,a=new Promise((i,c)=>{r=setTimeout(c,n,new Error("Timed out fetching resource"))});return await Promise.race([e,a]).finally(()=>clearTimeout(r))}}});var CY,fs,ph=v(()=>{"use strict";d();ia();He();Yt();eh();St();lt();CY=Xe,fs=class extends CY{static{s(this,"NetworkMonitor")}_networkRecorder=void 0;_frameNavigations=[];constructor(e){super(),this._targetManager=e,this._session=e.rootSession(),this._onFrameNavigated=n=>this._frameNavigations.push(n.frame),this._onProtocolMessage=n=>{this._networkRecorder&&this._networkRecorder.dispatch(n)}}async enable(){if(this._networkRecorder)return;this._frameNavigations=[],this._networkRecorder=new us;let e=s(n=>r=>{this.emit(n,r),this._emitNetworkStatus()},"reEmit");this._networkRecorder.on("requeststarted",e("requeststarted")),this._networkRecorder.on("requestfinished",e("requestfinished")),this._session.on("Page.frameNavigated",this._onFrameNavigated),this._targetManager.on("protocolevent",this._onProtocolMessage)}async disable(){this._networkRecorder&&(this._session.off("Page.frameNavigated",this._onFrameNavigated),this._targetManager.off("protocolevent",this._onProtocolMessage),this._frameNavigations=[],this._networkRecorder=void 0)}async getNavigationUrls(){let e=this._frameNavigations;if(!e.length)return{};let n=e.filter(a=>!a.parentId);n.length||N.warn("NetworkMonitor","No detected navigations");let r=n[0]?.url;if(this._networkRecorder){let o=this._networkRecorder.getRawRecords().find(i=>i.url===r);for(;o?.redirectSource;)o=o.redirectSource,r=o.url}return{requestedUrl:r,mainDocumentUrl:n[n.length-1]?.url}}getInflightRequests(){return this._networkRecorder?this._networkRecorder.getRawRecords().filter(e=>!e.finished):[]}isIdle(){return this._isActiveIdlePeriod(0)}isCriticalIdle(){if(!this._networkRecorder)return!1;let r=this._networkRecorder.getRawRecords().find(a=>a.resourceType==="Document")?.frameId;return this._isActiveIdlePeriod(0,a=>a.frameId===r&&(a.priority==="VeryHigh"||a.priority==="High"))}is2Idle(){return this._isActiveIdlePeriod(2)}_isActiveIdlePeriod(e,n){if(!this._networkRecorder)return!1;let r=this._networkRecorder.getRawRecords(),a=0;for(let o=0;o<r.length;o++){let i=r[o];i.finished||n&&!n(i)||Y.isNonNetworkRequest(i)||a++}return a<=e}_emitNetworkStatus(){let e=this.isIdle(),n=this.is2Idle(),r=this.isCriticalIdle();this.emit(e?"networkidle":"networkbusy"),this.emit(n?"network-2-idle":"network-2-busy"),this.emit(r?"network-critical-idle":"network-critical-busy"),n&&e?N.verbose("NetworkRecorder","network fully-quiet"):n&&!e?N.verbose("NetworkRecorder","network semi-quiet"):N.verbose("NetworkRecorder","network busy")}static findNetworkQuietPeriods(e,n,r=1/0){let a=[];e.forEach(u=>{te.isNonNetworkProtocol(u.protocol)||u.protocol==="ws"||u.protocol==="wss"||(a.push({time:u.networkRequestTime*1e3,isStart:!0}),u.finished&&a.push({time:u.networkEndTime*1e3,isStart:!1}))}),a=a.filter(u=>u.time<=r).sort((u,l)=>u.time-l.time);let o=0,i=0,c=[];return a.forEach(u=>{u.isStart?(o===n&&c.push({start:i,end:u.time}),o++):(o--,o===n&&(i=u.time))}),o<=n&&c.push({start:i,end:r}),c.filter(u=>u.start!==u.end)}}});var Yn,fh,Ja,wp=v(()=>{"use strict";d();He();hp();N_();L_();ph();Yn=s(()=>{throw new Error("Session not connected")},"throwNotConnectedFn"),fh={setTargetInfo:Yn,hasNextProtocolTimeout:Yn,getNextProtocolTimeout:Yn,setNextProtocolTimeout:Yn,on:Yn,once:Yn,off:Yn,sendCommand:Yn,dispose:Yn},Ja=class{static{s(this,"Driver")}constructor(e){this._page=e,this._targetManager=void 0,this._networkMonitor=void 0,this._executionContext=void 0,this._fetcher=void 0,this.defaultSession=fh}get executionContext(){return this._executionContext?this._executionContext:Yn()}get fetcher(){return this._fetcher?this._fetcher:Yn()}get targetManager(){return this._targetManager?this._targetManager:Yn()}get networkMonitor(){return this._networkMonitor?this._networkMonitor:Yn()}async url(){return this._page.url()}async connect(){if(this.defaultSession!==fh)return;let e={msg:"Connecting to browser",id:"lh:driver:connect"};N.time(e);let n=await this._page.target().createCDPSession();this._targetManager=new vp(n),await this._targetManager.enable(),this._networkMonitor=new fs(this._targetManager),await this._networkMonitor.enable(),this.defaultSession=this._targetManager.rootSession(),this._executionContext=new Ka(this.defaultSession),this._fetcher=new bp(this.defaultSession),N.timeEnd(e)}async disconnect(){this.defaultSession!==fh&&(await this._targetManager?.disable(),await this._networkMonitor?.disable(),await this.defaultSession.dispose())}}});function P_(t,e){return new Error(`Dependency "${t.id}" failed with exception: ${e.message}`)}function gs(){return{startInstrumentation:{},startSensitiveInstrumentation:{},stopSensitiveInstrumentation:{},stopInstrumentation:{},getArtifact:{}}}async function Fn(t){let{driver:e,page:n,artifactDefinitions:r,artifactState:a,baseArtifacts:o,phase:i,gatherMode:c,computedCache:u,settings:l}=t,m=AY[i],p=m&&a[m]||{},g=i==="getArtifact";for(let f of r){N.verbose(`artifacts:${i}`,f.id);let y=f.gatherer.instance,D=(p[f.id]||Promise.resolve()).then(async()=>{let T=g?await FY(f,a.getArtifact):{},A={msg:`Getting artifact: ${f.id}`,id:`lh:gather:getArtifact:${f.id}`};g&&N.time(A);let R=await y[i]({gatherMode:c,driver:e,page:n,baseArtifacts:o,dependencies:T,computedCache:u,settings:l});return g&&N.timeEnd(A),R});await D.catch(T=>{en.captureException(T,{tags:{gatherer:f.id,phase:i},level:"error"}),N.error(f.id,T.message)}),a[i][f.id]=D}}async function FY(t,e){if(!t.dependencies)return{};let n=Object.entries(t.dependencies).map(async([r,a])=>{let o=e[a.id];if(o===void 0)throw new Error(`"${a.id}" did not run`);if(o instanceof Error)throw P_(a,o);let i=Promise.resolve().then(()=>o).catch(c=>Promise.reject(P_(a,c)));return[r,await i]});return Object.fromEntries(await Promise.all(n))}async function hs(t){let e={};for(let[n,r]of Object.entries(t.getArtifact)){let a=await r.catch(o=>o);a!==void 0&&(e[n]=a)}return e}var AY,Dp=v(()=>{"use strict";d();He();da();s(P_,"createDependencyError");s(gs,"getEmptyArtifactState");AY={startInstrumentation:void 0,startSensitiveInstrumentation:"startInstrumentation",stopSensitiveInstrumentation:"startSensitiveInstrumentation",stopInstrumentation:"stopSensitiveInstrumentation",getArtifact:"stopInstrumentation"};s(Fn,"collectPhaseArtifacts");s(FY,"collectArtifactDependencies");s(hs,"awaitArtifacts")});var O_,RY,_Y,kY,IY,ys,U_=v(()=>{"use strict";d();O_=["server-response-time","render-blocking-resources","redirects","critical-request-chains","uses-text-compression","uses-rel-preconnect","uses-rel-preload","font-display","unminified-javascript","unminified-css","unused-css-rules"],RY=[...O_,"largest-contentful-paint-element","prioritize-lcp-image","unused-javascript","efficient-animated-content","total-byte-weight","lcp-lazy-loaded"],_Y=["long-tasks","third-party-summary","third-party-facades","bootup-time","mainthread-work-breakdown","dom-size","duplicated-javascript","legacy-javascript","viewport"],kY=["layout-shift-elements","non-composited-animations","unsized-images"],IY=["work-during-interaction"],ys={fcpRelevantAudits:O_,lcpRelevantAudits:RY,tbtRelevantAudits:_Y,clsRelevantAudits:kY,inpRelevantAudits:IY}});var Se,Re,B_,Ep,gh=v(()=>{"use strict";d();Yt();Vn();k();U_();Se={performanceCategoryTitle:"Performance",budgetsGroupTitle:"Budgets",budgetsGroupDescription:"Performance budgets set standards for the performance of your site.",metricGroupTitle:"Metrics",loadOpportunitiesGroupTitle:"Opportunities",loadOpportunitiesGroupDescription:"These suggestions can help your page load faster. They don't [directly affect](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) the Performance score.",firstPaintImprovementsGroupTitle:"First Paint Improvements",firstPaintImprovementsGroupDescription:"The most critical aspect of performance is how quickly pixels are rendered onscreen. Key metrics: First Contentful Paint, First Meaningful Paint",overallImprovementsGroupTitle:"Overall Improvements",overallImprovementsGroupDescription:"Enhance the overall loading experience, so the page is responsive and ready to use as soon as possible. Key metrics: Time to Interactive, Speed Index",diagnosticsGroupTitle:"Diagnostics",diagnosticsGroupDescription:"More information about the performance of your application. These numbers don't [directly affect](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) the Performance score.",a11yCategoryTitle:"Accessibility",a11yCategoryDescription:"These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged.",a11yCategoryManualDescription:"These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://web.dev/how-to-review/).",a11yBestPracticesGroupTitle:"Best practices",a11yBestPracticesGroupDescription:"These items highlight common accessibility best practices.",a11yColorContrastGroupTitle:"Contrast",a11yColorContrastGroupDescription:"These are opportunities to improve the legibility of your content.",a11yNamesLabelsGroupTitle:"Names and labels",a11yNamesLabelsGroupDescription:"These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader.",a11yNavigationGroupTitle:"Navigation",a11yNavigationGroupDescription:"These are opportunities to improve keyboard navigation in your application.",a11yAriaGroupTitle:"ARIA",a11yAriaGroupDescription:"These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader.",a11yLanguageGroupTitle:"Internationalization and localization",a11yLanguageGroupDescription:"These are opportunities to improve the interpretation of your content by users in different locales.",a11yAudioVideoGroupTitle:"Audio and video",a11yAudioVideoGroupDescription:"These are opportunities to provide alternative content for audio and video. This may improve the experience for users with hearing or vision impairments.",a11yTablesListsVideoGroupTitle:"Tables and lists",a11yTablesListsVideoGroupDescription:"These are opportunities to improve the experience of reading tabular or list data using assistive technology, like a screen reader.",seoCategoryTitle:"SEO",seoCategoryDescription:"These checks ensure that your page is following basic search engine optimization advice. There are many additional factors Lighthouse does not score here that may affect your search ranking, including performance on [Core Web Vitals](https://web.dev/learn-core-web-vitals/). [Learn more about Google Search Essentials](https://support.google.com/webmasters/answer/35769).",seoCategoryManualDescription:"Run these additional validators on your site to check additional SEO best practices.",seoMobileGroupTitle:"Mobile Friendly",seoMobileGroupDescription:"Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn how to make pages mobile-friendly](https://developers.google.com/search/mobile-sites/).",seoContentGroupTitle:"Content Best Practices",seoContentGroupDescription:"Format your HTML in a way that enables crawlers to better understand your app’s content.",seoCrawlingGroupTitle:"Crawling and Indexing",seoCrawlingGroupDescription:"To appear in search results, crawlers need access to your app.",pwaCategoryTitle:"PWA",pwaCategoryDescription:"These checks validate the aspects of a Progressive Web App. [Learn what makes a good Progressive Web App](https://web.dev/pwa-checklist/).",pwaCategoryManualDescription:"These checks are required by the baseline [PWA Checklist](https://web.dev/pwa-checklist/) but are not automatically checked by Lighthouse. They do not affect your score but it's important that you verify them manually.",bestPracticesCategoryTitle:"Best Practices",bestPracticesTrustSafetyGroupTitle:"Trust and Safety",bestPracticesUXGroupTitle:"User Experience",bestPracticesBrowserCompatGroupTitle:"Browser Compatibility",bestPracticesGeneralGroupTitle:"General",pwaInstallableGroupTitle:"Installable",pwaOptimizedGroupTitle:"PWA Optimized"},Re=w("core/config/default-config.js",Se),B_={settings:Qn,artifacts:[{id:"DevtoolsLog",gatherer:"devtools-log"},{id:"Trace",gatherer:"trace"},{id:"Accessibility",gatherer:"accessibility"},{id:"AnchorElements",gatherer:"anchor-elements"},{id:"CacheContents",gatherer:"cache-contents"},{id:"ConsoleMessages",gatherer:"console-messages"},{id:"CSSUsage",gatherer:"css-usage"},{id:"Doctype",gatherer:"dobetterweb/doctype"},{id:"DOMStats",gatherer:"dobetterweb/domstats"},{id:"EmbeddedContent",gatherer:"seo/embedded-content"},{id:"FontSize",gatherer:"seo/font-size"},{id:"Inputs",gatherer:"inputs"},{id:"GlobalListeners",gatherer:"global-listeners"},{id:"IFrameElements",gatherer:"iframe-elements"},{id:"ImageElements",gatherer:"image-elements"},{id:"InstallabilityErrors",gatherer:"installability-errors"},{id:"InspectorIssues",gatherer:"inspector-issues"},{id:"JsUsage",gatherer:"js-usage"},{id:"LinkElements",gatherer:"link-elements"},{id:"MainDocumentContent",gatherer:"main-document-content"},{id:"MetaElements",gatherer:"meta-elements"},{id:"NetworkUserAgent",gatherer:"network-user-agent"},{id:"OptimizedImages",gatherer:"dobetterweb/optimized-images"},{id:"ResponseCompression",gatherer:"dobetterweb/response-compression"},{id:"RobotsTxt",gatherer:"seo/robots-txt"},{id:"ServiceWorker",gatherer:"service-worker"},{id:"ScriptElements",gatherer:"script-elements"},{id:"Scripts",gatherer:"scripts"},{id:"SourceMaps",gatherer:"source-maps"},{id:"Stacks",gatherer:"stacks"},{id:"TagsBlockingFirstPaint",gatherer:"dobetterweb/tags-blocking-first-paint"},{id:"TapTargets",gatherer:"seo/tap-targets"},{id:"TraceElements",gatherer:"trace-elements"},{id:"ViewportDimensions",gatherer:"viewport-dimensions"},{id:"WebAppManifest",gatherer:"web-app-manifest"},{id:"devtoolsLogs",gatherer:"devtools-log-compat"},{id:"traces",gatherer:"trace-compat"},{id:"FullPageScreenshot",gatherer:"full-page-screenshot"},{id:"BFCacheFailures",gatherer:"bf-cache-failures"}],audits:["is-on-https","viewport","metrics/first-contentful-paint","metrics/largest-contentful-paint","metrics/first-meaningful-paint","metrics/speed-index","screenshot-thumbnails","final-screenshot","metrics/total-blocking-time","metrics/max-potential-fid","metrics/cumulative-layout-shift","metrics/interaction-to-next-paint","errors-in-console","server-response-time","metrics/interactive","user-timings","critical-request-chains","redirects","installable-manifest","splash-screen","themed-omnibox","maskable-icon","content-width","image-aspect-ratio","image-size-responsive","preload-fonts","deprecations","mainthread-work-breakdown","bootup-time","uses-rel-preload","uses-rel-preconnect","font-display","diagnostics","network-requests","network-rtt","network-server-latency","main-thread-tasks","metrics","performance-budget","timing-budget","third-party-summary","third-party-facades","largest-contentful-paint-element","lcp-lazy-loaded","layout-shift-elements","long-tasks","no-unload-listeners","non-composited-animations","unsized-images","valid-source-maps","prioritize-lcp-image","csp-xss","script-treemap-data","manual/pwa-cross-browser","manual/pwa-page-transitions","manual/pwa-each-page-has-url","accessibility/accesskeys","accessibility/aria-allowed-attr","accessibility/aria-allowed-role","accessibility/aria-command-name","accessibility/aria-dialog-name","accessibility/aria-hidden-body","accessibility/aria-hidden-focus","accessibility/aria-input-field-name","accessibility/aria-meter-name","accessibility/aria-progressbar-name","accessibility/aria-required-attr","accessibility/aria-required-children","accessibility/aria-required-parent","accessibility/aria-roles","accessibility/aria-text","accessibility/aria-toggle-field-name","accessibility/aria-tooltip-name","accessibility/aria-treeitem-name","accessibility/aria-valid-attr-value","accessibility/aria-valid-attr","accessibility/button-name","accessibility/bypass","accessibility/color-contrast","accessibility/definition-list","accessibility/dlitem","accessibility/document-title","accessibility/duplicate-id-active","accessibility/duplicate-id-aria","accessibility/empty-heading","accessibility/form-field-multiple-labels","accessibility/frame-title","accessibility/heading-order","accessibility/html-has-lang","accessibility/html-lang-valid","accessibility/html-xml-lang-mismatch","accessibility/identical-links-same-purpose","accessibility/image-alt","accessibility/image-redundant-alt","accessibility/input-button-name","accessibility/input-image-alt","accessibility/label-content-name-mismatch","accessibility/label","accessibility/landmark-one-main","accessibility/link-name","accessibility/link-in-text-block","accessibility/list","accessibility/listitem","accessibility/meta-refresh","accessibility/meta-viewport","accessibility/object-alt","accessibility/select-name","accessibility/skip-link","accessibility/tabindex","accessibility/table-duplicate-name","accessibility/table-fake-caption","accessibility/target-size","accessibility/td-has-header","accessibility/td-headers-attr","accessibility/th-has-data-cells","accessibility/valid-lang","accessibility/video-caption","accessibility/manual/custom-controls-labels","accessibility/manual/custom-controls-roles","accessibility/manual/focus-traps","accessibility/manual/focusable-controls","accessibility/manual/interactive-element-affordance","accessibility/manual/logical-tab-order","accessibility/manual/managed-focus","accessibility/manual/offscreen-content-hidden","accessibility/manual/use-landmarks","accessibility/manual/visual-order-follows-dom","byte-efficiency/uses-long-cache-ttl","byte-efficiency/total-byte-weight","byte-efficiency/offscreen-images","byte-efficiency/render-blocking-resources","byte-efficiency/unminified-css","byte-efficiency/unminified-javascript","byte-efficiency/unused-css-rules","byte-efficiency/unused-javascript","byte-efficiency/modern-image-formats","byte-efficiency/uses-optimized-images","byte-efficiency/uses-text-compression","byte-efficiency/uses-responsive-images","byte-efficiency/efficient-animated-content","byte-efficiency/duplicated-javascript","byte-efficiency/legacy-javascript","byte-efficiency/uses-responsive-images-snapshot","dobetterweb/doctype","dobetterweb/charset","dobetterweb/dom-size","dobetterweb/geolocation-on-start","dobetterweb/inspector-issues","dobetterweb/no-document-write","dobetterweb/js-libraries","dobetterweb/notification-on-start","dobetterweb/paste-preventing-inputs","dobetterweb/uses-http2","dobetterweb/uses-passive-event-listeners","seo/meta-description","seo/http-status-code","seo/font-size","seo/link-text","seo/crawlable-anchors","seo/is-crawlable","seo/robots-txt","seo/tap-targets","seo/hreflang","seo/plugins","seo/canonical","seo/manual/structured-data","work-during-interaction","bf-cache"],groups:{metrics:{title:Re(Se.metricGroupTitle)},"load-opportunities":{title:Re(Se.loadOpportunitiesGroupTitle),description:Re(Se.loadOpportunitiesGroupDescription)},budgets:{title:Re(Se.budgetsGroupTitle),description:Re(Se.budgetsGroupDescription)},diagnostics:{title:Re(Se.diagnosticsGroupTitle),description:Re(Se.diagnosticsGroupDescription)},"pwa-installable":{title:Re(Se.pwaInstallableGroupTitle)},"pwa-optimized":{title:Re(Se.pwaOptimizedGroupTitle)},"a11y-best-practices":{title:Re(Se.a11yBestPracticesGroupTitle),description:Re(Se.a11yBestPracticesGroupDescription)},"a11y-color-contrast":{title:Re(Se.a11yColorContrastGroupTitle),description:Re(Se.a11yColorContrastGroupDescription)},"a11y-names-labels":{title:Re(Se.a11yNamesLabelsGroupTitle),description:Re(Se.a11yNamesLabelsGroupDescription)},"a11y-navigation":{title:Re(Se.a11yNavigationGroupTitle),description:Re(Se.a11yNavigationGroupDescription)},"a11y-aria":{title:Re(Se.a11yAriaGroupTitle),description:Re(Se.a11yAriaGroupDescription)},"a11y-language":{title:Re(Se.a11yLanguageGroupTitle),description:Re(Se.a11yLanguageGroupDescription)},"a11y-audio-video":{title:Re(Se.a11yAudioVideoGroupTitle),description:Re(Se.a11yAudioVideoGroupDescription)},"a11y-tables-lists":{title:Re(Se.a11yTablesListsVideoGroupTitle),description:Re(Se.a11yTablesListsVideoGroupDescription)},"seo-mobile":{title:Re(Se.seoMobileGroupTitle),description:Re(Se.seoMobileGroupDescription)},"seo-content":{title:Re(Se.seoContentGroupTitle),description:Re(Se.seoContentGroupDescription)},"seo-crawl":{title:Re(Se.seoCrawlingGroupTitle),description:Re(Se.seoCrawlingGroupDescription)},"best-practices-trust-safety":{title:Re(Se.bestPracticesTrustSafetyGroupTitle)},"best-practices-ux":{title:Re(Se.bestPracticesUXGroupTitle)},"best-practices-browser-compat":{title:Re(Se.bestPracticesBrowserCompatGroupTitle)},"best-practices-general":{title:Re(Se.bestPracticesGeneralGroupTitle)},hidden:{title:""}},categories:{performance:{title:Re(Se.performanceCategoryTitle),supportedModes:["navigation","timespan","snapshot"],auditRefs:[{id:"first-contentful-paint",weight:10,group:"metrics",acronym:"FCP",relevantAudits:ys.fcpRelevantAudits},{id:"largest-contentful-paint",weight:25,group:"metrics",acronym:"LCP",relevantAudits:ys.lcpRelevantAudits},{id:"total-blocking-time",weight:30,group:"metrics",acronym:"TBT",relevantAudits:ys.tbtRelevantAudits},{id:"cumulative-layout-shift",weight:25,group:"metrics",acronym:"CLS",relevantAudits:ys.clsRelevantAudits},{id:"speed-index",weight:10,group:"metrics",acronym:"SI"},{id:"interaction-to-next-paint",weight:0,group:"metrics",acronym:"INP",relevantAudits:ys.inpRelevantAudits},{id:"interactive",weight:0,group:"hidden",acronym:"TTI"},{id:"max-potential-fid",weight:0,group:"hidden"},{id:"first-meaningful-paint",weight:0,acronym:"FMP",group:"hidden"},{id:"render-blocking-resources",weight:0},{id:"uses-responsive-images",weight:0},{id:"offscreen-images",weight:0},{id:"unminified-css",weight:0},{id:"unminified-javascript",weight:0},{id:"unused-css-rules",weight:0},{id:"unused-javascript",weight:0},{id:"uses-optimized-images",weight:0},{id:"modern-image-formats",weight:0},{id:"uses-text-compression",weight:0},{id:"uses-rel-preconnect",weight:0},{id:"server-response-time",weight:0},{id:"redirects",weight:0},{id:"uses-rel-preload",weight:0},{id:"uses-http2",weight:0},{id:"efficient-animated-content",weight:0},{id:"duplicated-javascript",weight:0},{id:"legacy-javascript",weight:0},{id:"prioritize-lcp-image",weight:0},{id:"total-byte-weight",weight:0},{id:"uses-long-cache-ttl",weight:0},{id:"dom-size",weight:0},{id:"critical-request-chains",weight:0},{id:"user-timings",weight:0},{id:"bootup-time",weight:0},{id:"mainthread-work-breakdown",weight:0},{id:"font-display",weight:0},{id:"third-party-summary",weight:0},{id:"third-party-facades",weight:0},{id:"largest-contentful-paint-element",weight:0},{id:"lcp-lazy-loaded",weight:0},{id:"layout-shift-elements",weight:0},{id:"uses-passive-event-listeners",weight:0},{id:"no-document-write",weight:0},{id:"long-tasks",weight:0},{id:"non-composited-animations",weight:0},{id:"unsized-images",weight:0},{id:"viewport",weight:0},{id:"uses-responsive-images-snapshot",weight:0},{id:"work-during-interaction",weight:0},{id:"bf-cache",weight:0},{id:"performance-budget",weight:0,group:"budgets"},{id:"timing-budget",weight:0,group:"budgets"},{id:"network-requests",weight:0,group:"hidden"},{id:"network-rtt",weight:0,group:"hidden"},{id:"network-server-latency",weight:0,group:"hidden"},{id:"main-thread-tasks",weight:0,group:"hidden"},{id:"diagnostics",weight:0,group:"hidden"},{id:"metrics",weight:0,group:"hidden"},{id:"screenshot-thumbnails",weight:0,group:"hidden"},{id:"final-screenshot",weight:0,group:"hidden"},{id:"script-treemap-data",weight:0,group:"hidden"}]},accessibility:{title:Re(Se.a11yCategoryTitle),description:Re(Se.a11yCategoryDescription),manualDescription:Re(Se.a11yCategoryManualDescription),supportedModes:["navigation","snapshot"],auditRefs:[{id:"accesskeys",weight:7,group:"a11y-navigation"},{id:"aria-allowed-attr",weight:10,group:"a11y-aria"},{id:"aria-allowed-role",weight:1,group:"a11y-aria"},{id:"aria-command-name",weight:7,group:"a11y-aria"},{id:"aria-dialog-name",weight:7,group:"a11y-aria"},{id:"aria-hidden-body",weight:10,group:"a11y-aria"},{id:"aria-hidden-focus",weight:7,group:"a11y-aria"},{id:"aria-input-field-name",weight:7,group:"a11y-aria"},{id:"aria-meter-name",weight:7,group:"a11y-aria"},{id:"aria-progressbar-name",weight:7,group:"a11y-aria"},{id:"aria-required-attr",weight:10,group:"a11y-aria"},{id:"aria-required-children",weight:10,group:"a11y-aria"},{id:"aria-required-parent",weight:10,group:"a11y-aria"},{id:"aria-roles",weight:7,group:"a11y-aria"},{id:"aria-text",weight:7,group:"a11y-aria"},{id:"aria-toggle-field-name",weight:7,group:"a11y-aria"},{id:"aria-tooltip-name",weight:7,group:"a11y-aria"},{id:"aria-treeitem-name",weight:7,group:"a11y-aria"},{id:"aria-valid-attr-value",weight:10,group:"a11y-aria"},{id:"aria-valid-attr",weight:10,group:"a11y-aria"},{id:"button-name",weight:10,group:"a11y-names-labels"},{id:"bypass",weight:7,group:"a11y-navigation"},{id:"color-contrast",weight:7,group:"a11y-color-contrast"},{id:"definition-list",weight:7,group:"a11y-tables-lists"},{id:"dlitem",weight:7,group:"a11y-tables-lists"},{id:"document-title",weight:7,group:"a11y-names-labels"},{id:"duplicate-id-active",weight:7,group:"a11y-navigation"},{id:"duplicate-id-aria",weight:10,group:"a11y-aria"},{id:"form-field-multiple-labels",weight:3,group:"a11y-names-labels"},{id:"frame-title",weight:7,group:"a11y-names-labels"},{id:"heading-order",weight:3,group:"a11y-navigation"},{id:"html-has-lang",weight:7,group:"a11y-language"},{id:"html-lang-valid",weight:7,group:"a11y-language"},{id:"html-xml-lang-mismatch",weight:3,group:"a11y-language"},{id:"image-alt",weight:10,group:"a11y-names-labels"},{id:"image-redundant-alt",weight:1,group:"a11y-names-labels"},{id:"input-button-name",weight:10,group:"a11y-names-labels"},{id:"input-image-alt",weight:10,group:"a11y-names-labels"},{id:"label-content-name-mismatch",weight:7,group:"a11y-names-labels"},{id:"label",weight:7,group:"a11y-names-labels"},{id:"link-in-text-block",weight:7,group:"a11y-color-contrast"},{id:"link-name",weight:7,group:"a11y-names-labels"},{id:"list",weight:7,group:"a11y-tables-lists"},{id:"listitem",weight:7,group:"a11y-tables-lists"},{id:"meta-refresh",weight:10,group:"a11y-best-practices"},{id:"meta-viewport",weight:10,group:"a11y-best-practices"},{id:"object-alt",weight:7,group:"a11y-names-labels"},{id:"select-name",weight:7,group:"a11y-names-labels"},{id:"skip-link",weight:3,group:"a11y-names-labels"},{id:"tabindex",weight:7,group:"a11y-navigation"},{id:"table-duplicate-name",weight:1,group:"a11y-tables-lists"},{id:"table-fake-caption",weight:7,group:"a11y-tables-lists"},{id:"td-has-header",weight:10,group:"a11y-tables-lists"},{id:"td-headers-attr",weight:7,group:"a11y-tables-lists"},{id:"th-has-data-cells",weight:7,group:"a11y-tables-lists"},{id:"valid-lang",weight:7,group:"a11y-language"},{id:"video-caption",weight:10,group:"a11y-audio-video"},{id:"focusable-controls",weight:0},{id:"interactive-element-affordance",weight:0},{id:"logical-tab-order",weight:0},{id:"visual-order-follows-dom",weight:0},{id:"focus-traps",weight:0},{id:"managed-focus",weight:0},{id:"use-landmarks",weight:0},{id:"offscreen-content-hidden",weight:0},{id:"custom-controls-labels",weight:0},{id:"custom-controls-roles",weight:0},{id:"empty-heading",weight:0,group:"hidden"},{id:"identical-links-same-purpose",weight:0,group:"hidden"},{id:"landmark-one-main",weight:0,group:"hidden"},{id:"target-size",weight:0,group:"hidden"}]},"best-practices":{title:Re(Se.bestPracticesCategoryTitle),supportedModes:["navigation","timespan","snapshot"],auditRefs:[{id:"is-on-https",weight:5,group:"best-practices-trust-safety"},{id:"geolocation-on-start",weight:1,group:"best-practices-trust-safety"},{id:"notification-on-start",weight:1,group:"best-practices-trust-safety"},{id:"csp-xss",weight:0,group:"best-practices-trust-safety"},{id:"paste-preventing-inputs",weight:3,group:"best-practices-ux"},{id:"image-aspect-ratio",weight:1,group:"best-practices-ux"},{id:"image-size-responsive",weight:1,group:"best-practices-ux"},{id:"preload-fonts",weight:1,group:"best-practices-ux"},{id:"doctype",weight:1,group:"best-practices-browser-compat"},{id:"charset",weight:1,group:"best-practices-browser-compat"},{id:"no-unload-listeners",weight:1,group:"best-practices-general"},{id:"js-libraries",weight:0,group:"best-practices-general"},{id:"deprecations",weight:5,group:"best-practices-general"},{id:"errors-in-console",weight:1,group:"best-practices-general"},{id:"valid-source-maps",weight:0,group:"best-practices-general"},{id:"inspector-issues",weight:1,group:"best-practices-general"}]},seo:{title:Re(Se.seoCategoryTitle),description:Re(Se.seoCategoryDescription),manualDescription:Re(Se.seoCategoryManualDescription),supportedModes:["navigation","snapshot"],auditRefs:[{id:"viewport",weight:1,group:"seo-mobile"},{id:"document-title",weight:1,group:"seo-content"},{id:"meta-description",weight:1,group:"seo-content"},{id:"http-status-code",weight:1,group:"seo-crawl"},{id:"link-text",weight:1,group:"seo-content"},{id:"crawlable-anchors",weight:1,group:"seo-crawl"},{id:"is-crawlable",weight:1,group:"seo-crawl"},{id:"robots-txt",weight:1,group:"seo-crawl"},{id:"image-alt",weight:1,group:"seo-content"},{id:"hreflang",weight:1,group:"seo-content"},{id:"canonical",weight:1,group:"seo-content"},{id:"font-size",weight:1,group:"seo-mobile"},{id:"plugins",weight:1,group:"seo-content"},{id:"tap-targets",weight:1,group:"seo-mobile"},{id:"structured-data",weight:0}]},pwa:{title:Re(Se.pwaCategoryTitle),description:Re(Se.pwaCategoryDescription),manualDescription:Re(Se.pwaCategoryManualDescription),supportedModes:["navigation"],auditRefs:[{id:"installable-manifest",weight:2,group:"pwa-installable"},{id:"splash-screen",weight:1,group:"pwa-optimized"},{id:"themed-omnibox",weight:1,group:"pwa-optimized"},{id:"content-width",weight:1,group:"pwa-optimized"},{id:"viewport",weight:2,group:"pwa-optimized"},{id:"maskable-icon",weight:1,group:"pwa-optimized"},{id:"pwa-cross-browser",weight:0},{id:"pwa-page-transitions",weight:0},{id:"pwa-each-page-has-url",weight:0}]}}};Object.defineProperty(B_,"UIStrings",{enumerable:!1,get:()=>Se});Ep=B_});function j_(t,e){let n={timespan:0,snapshot:1,navigation:2},r=Math.min(...t.instance.meta.supportedModes.map(o=>n[o])),a=Math.min(...e.instance.meta.supportedModes.map(o=>n[o]));return r===n.timespan?a===n.timespan:r===n.snapshot?a===n.snapshot:!0}function q_(t,e){if(!e.startsWith("lighthouse-plugin-"))throw new Error(`plugin name '${e}' does not start with 'lighthouse-plugin-'`);if(t.categories?.[e])throw new Error(`plugin name '${e}' not allowed because it is the id of a category already found in config`)}function MY(t){let e=t.gatherer.instance;if(typeof e.meta!="object")throw new Error(`Gatherer for ${t.id} did not provide a meta object.`);if(e.meta.supportedModes.length===0)throw new Error(`Gatherer for ${t.id} did not support any gather modes.`);if(typeof e.getArtifact!="function"||e.getArtifact===X.prototype.getArtifact)throw new Error(`Gatherer for ${t.id} did not define a "getArtifact" method.`)}function NY(t){if(!t||!t.length)return{warnings:[]};let e=[],n=t[0];if(n.loadFailureMode!=="fatal"){let o=n.loadFailureMode,i=[`"${n.id}" is the first navigation but had a failure mode of ${o}.`,"The first navigation will always be treated as loadFailureMode=fatal."].join(" ");e.push(i),n.loadFailureMode="fatal"}let r=t.map(o=>o.id),a=r.find((o,i)=>r.slice(i+1).some(c=>o===c));if(a)throw new Error(`Navigation must have unique identifiers, but "${a}" was repeated.`);return{warnings:e}}function hh(t){let{implementation:e,path:n}=t,r=n||e?.meta?.id||"Unknown audit";if(typeof e.audit!="function"||e.audit===h.audit)throw new Error(`${r} has no audit() method.`);if(typeof e.meta.id!="string")throw new Error(`${r} has no meta.id property, or the property is not a string.`);if(!_r(e.meta.title))throw new Error(`${r} has no meta.title property, or the property is not a string.`);let a=e.meta.scoreDisplayMode||h.SCORING_MODES.BINARY;if(!_r(e.meta.failureTitle)&&a===h.SCORING_MODES.BINARY)throw new Error(`${r} has no meta.failureTitle and should.`);if(_r(e.meta.description)){if(e.meta.description==="")throw new Error(`${r} has an empty meta.description string. Please add a description for the UI.`)}else throw new Error(`${r} has no meta.description property, or the property is not a string.`);if(!Array.isArray(e.meta.requiredArtifacts))throw new Error(`${r} has no meta.requiredArtifacts property, or the property is not an array.`)}function LY(t,e,n){if(!t)return;let r=new Map((e||[]).map(a=>[a.implementation.meta.id,a]));Object.keys(t).forEach(a=>{t[a].auditRefs.forEach((o,i)=>{if(!o.id)throw new Error(`missing an audit id at ${a}[${i}]`);let c=r.get(o.id);if(!c)throw new Error(`could not find ${o.id} audit for category ${a}`);let l=c.implementation.meta.scoreDisplayMode==="manual";if(a==="accessibility"&&!o.group&&!l)throw new Error(`${o.id} accessibility audit does not have a group`);if(o.weight>0&&l)throw new Error(`${o.id} is manual but has a positive weight`);if(o.group&&(!n||!n[o.group]))throw new Error(`${o.id} references unknown group ${o.group}`)})})}function yh(t){if(!t.formFactor)throw new Error("`settings.formFactor` must be defined as 'mobile' or 'desktop'. See https://github.com/GoogleChrome/lighthouse/blob/main/docs/emulation.md");if(!t.screenEmulation.disabled&&t.screenEmulation.mobile!==(t.formFactor==="mobile"))throw new Error(`Screen emulation mobile setting (${t.screenEmulation.mobile}) does not match formFactor setting (${t.formFactor}). See https://github.com/GoogleChrome/lighthouse/blob/main/docs/emulation.md`);let e=t.skipAudits?.find(n=>t.onlyAudits?.includes(n));if(e)throw new Error(`${e} appears in both skipAudits and onlyAudits`)}function z_(t){let e=new Set;for(let n of t)for(let r of n.artifacts)if(e.add(r.id),!!r.dependencies)for(let[a,{id:o}]of Object.entries(r.dependencies))e.has(o)||vh(r.id,a)}function H_(t){let{warnings:e}=NY(t.navigations),n=new Set;for(let r of t.artifacts||[]){if(n.has(r.id))throw new Error(`Config defined multiple artifacts with id '${r.id}'`);n.add(r.id),MY(r)}for(let r of t.audits||[])hh(r);return LY(t.categories,t.audits,t.groups),yh(t.settings),{warnings:e}}function vh(t,e){throw new Error([`Failed to find dependency "${e}" for "${t}" artifact`,"Check that...",`  1. A gatherer exposes a matching Symbol that satisfies "${e}".`,`  2. "${e}" is configured to run before "${t}"`].join(`
+`))}function G_(t,e){throw new Error([`Dependency "${e}" for "${t}" artifact is invalid.`,"The dependency must be collected before the dependent."].join(`
+`))}var bh=v(()=>{"use strict";d();J();Ue();k();s(j_,"isValidArtifactDependency");s(q_,"assertValidPluginName");s(MY,"assertValidArtifact");s(NY,"assertValidNavigations");s(hh,"assertValidAudit");s(LY,"assertValidCategories");s(yh,"assertValidSettings");s(z_,"assertArtifactTopologicalOrder");s(H_,"assertValidConfig");s(vh,"throwInvalidDependencyOrder");s(G_,"throwInvalidArtifactDependency")});function W_(t,e){if(!t)return new Set;e=e||Object.keys(t);let r=e.map(a=>t[a]).flatMap(a=>a?.auditRefs||[]);return new Set(r.map(a=>a.id))}function jY(t,e){if(!t)return null;if(!e)return t;let n=new Map(t.map(o=>[o.id,o])),r=new Set([...BY,...e.flatMap(o=>o.implementation.meta.requiredArtifacts)]),a=0;for(;a!==r.size;){a=r.size;for(let o of r){let i=n.get(o);if(i&&i.dependencies)for(let c of Object.values(i.dependencies))r.add(c.id)}}return t.filter(o=>r.has(o.id))}function qY(t,e){return t?t.filter(n=>n.gatherer.instance.meta.supportedModes.includes(e)):null}function zY(t,e){if(!t)return t;let n=new Set(e.map(r=>r.id).concat(V_));return t.map(r=>({...r,artifacts:r.artifacts.filter(a=>n.has(a.id))})).filter(r=>r.artifacts.length)}function HY(t,e){if(!t)return null;let n=new Set(e.map(r=>r.id).concat(V_));return t.filter(r=>r.implementation.meta.requiredArtifacts.every(o=>n.has(o)))}function GY(t,e){return t?t.filter(n=>{let r=n.implementation.meta;return!r.supportedModes||r.supportedModes.includes(e)}):null}function WY(t,e){if(!t)return null;let n=Object.entries(t).filter(([r,a])=>!a.supportedModes||a.supportedModes.includes(e));return Object.fromEntries(n)}function VY(t,e){if(!t||!e)return t;let n=Object.entries(t).filter(([r])=>e.includes(r));return Object.fromEntries(n)}function $Y(t,e){if(e)for(let n of e)t?.[n]||N.warn("config",`unrecognized category in 'onlyCategories': ${n}`)}function $_(t,e){if(!t)return t;let n=new Map(e.map(a=>[a.implementation.meta.id,a.implementation.meta])),r=Object.entries(t).map(([a,o])=>{let i={...o,auditRefs:o.auditRefs.filter(l=>n.has(l.id))},c=i.auditRefs.length<o.auditRefs.length,u=i.auditRefs.every(l=>{let m=n.get(l.id);return m?m.scoreDisplayMode===h.SCORING_MODES.MANUAL:!1});return c&&u&&(i.auditRefs=[]),[a,i]}).filter(a=>typeof a[1]=="object"&&a[1].auditRefs.length);return Object.fromEntries(r)}function Y_(t,e){let n=qY(t.artifacts,e),r=GY(t.audits,e),a=HY(r,n||[]),o=WY(t.categories,e),i=$_(o,a||[]);return{...t,artifacts:n,audits:a,categories:i}}function K_(t,e){let{onlyAudits:n,onlyCategories:r,skipAudits:a}=e;$Y(t.categories,r);let o=W_(t.categories,void 0);r?o=W_(t.categories,r):n?o=new Set:(!t.categories||!Object.keys(t.categories).length)&&(o=new Set(t.audits?.map(g=>g.implementation.meta.id)));let i=new Set([...o,...n||[],...UY].filter(g=>!a||!a.includes(g))),c=i.size&&t.audits?t.audits.filter(g=>i.has(g.implementation.meta.id)):t.audits,u=$_(t.categories,c||[]),l=VY(u,r),m=jY(t.artifacts,c);m&&t.settings.disableFullPageScreenshot&&(m=m.filter(({id:g})=>g!=="FullPageScreenshot"));let p=zY(t.navigations,m||[]);return{...t,artifacts:m,navigations:p,audits:c,categories:l}}var OY,V_,UY,BY,J_=v(()=>{"use strict";d();He();J();OY={fetchTime:"",LighthouseRunWarnings:"",BenchmarkIndex:"",BenchmarkIndexes:"",settings:"",Timing:"",URL:"",PageLoadError:"",HostFormFactor:"",HostUserAgent:"",GatherContext:""},V_=Object.keys(OY),UY=[],BY=["Stacks","NetworkUserAgent","FullPageScreenshot"];s(W_,"getAuditIdsInCategories");s(jY,"filterArtifactsByAvailableAudits");s(qY,"filterArtifactsByGatherMode");s(zY,"filterNavigationsByAvailableArtifacts");s(HY,"filterAuditsByAvailableArtifacts");s(GY,"filterAuditsByGatherMode");s(WY,"filterCategoriesByGatherMode");s(VY,"filterCategoriesByExplicitFilters");s($Y,"warnOnUnknownOnlyCategories");s($_,"filterCategoriesByAvailableAudits");s(Y_,"filterConfigByGatherMode");s(K_,"filterConfigByExplicitFilters")});function Tp(t){return Array.isArray(t)&&t.every(Z_)}function Z_(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function X_(t){return typeof t=="number"&&!isNaN(t)}var Mr,Eu=v(()=>{"use strict";d();s(Tp,"isArrayOfUnknownObjects");s(Z_,"isObjectOfUnknownProperties");s(X_,"isNumber");Mr=class t{static{s(this,"Budget")}static assertNoExcessProperties(e,n){let r=Object.keys(e);if(r.length>0){let a=r.join(", ");throw new Error(`${n} has unrecognized properties: [${a}]`)}}static assertNoDuplicateStrings(e,n){let r=new Set;for(let a of e){if(r.has(a))throw new Error(`${n} has duplicate entry of type '${a}'`);r.add(a)}}static validateResourceBudget(e){let{resourceType:n,budget:r,...a}=e;t.assertNoExcessProperties(a,"Resource Budget");let o=["total","document","script","stylesheet","image","media","font","other","third-party"];if(!o.includes(n))throw new Error(`Invalid resource type: ${n}. 
+Valid resource types are: ${o.join(", ")}`);if(!X_(r))throw new Error(`Invalid budget: ${r}`);return{resourceType:n,budget:r}}static throwInvalidPathError(e,n){throw new Error(`Invalid path ${e}. ${n}
+'Path' should be specified using the 'robots.txt' format.
+Learn more about the 'robots.txt' format here:
+https://developers.google.com/search/reference/robots_txt#url-matching-based-on-path-values`)}static validatePath(e){if(e!==void 0){if(typeof e!="string"){this.throwInvalidPathError(e,"Path should be a string.");return}else e.startsWith("/")?(e.match(/\*/g)||[]).length>1?this.throwInvalidPathError(e,"Path should only contain one '*'."):(e.match(/\$/g)||[]).length>1?this.throwInvalidPathError(e,"Path should only contain one '$' character."):e.includes("$")&&!e.endsWith("$")&&this.throwInvalidPathError(e,"'$' character should only occur at end of path."):this.throwInvalidPathError(e,"Path should start with '/'.");return e}}static getMatchingBudget(e,n){if(!(e===null||n===void 0))for(let r=e.length-1;r>=0;r--){let a=e[r];if(this.urlMatchesPattern(n,a.path))return a}}static urlMatchesPattern(e,n="/"){let r=new URL(e),a=r.pathname+r.search,o=n.includes("*"),i=n.includes("$");if(!o&&!i)return a.startsWith(n);if(!o&&i)return a===n.slice(0,-1);if(o&&!i){let[c,u]=n.split("*"),l=a.slice(c.length);return a.startsWith(c)&&l.includes(u)}else if(o&&i){let[c,u]=n.split("*"),l=a.slice(c.length);return a.startsWith(c)&&l.endsWith(u.slice(0,-1))}return!1}static validateTimingBudget(e){let{metric:n,budget:r,...a}=e;t.assertNoExcessProperties(a,"Timing Budget");let o=["first-contentful-paint","interactive","first-meaningful-paint","max-potential-fid","total-blocking-time","speed-index","largest-contentful-paint","cumulative-layout-shift"];if(!o.includes(n))throw new Error(`Invalid timing metric: ${n}. 
+Valid timing metrics are: ${o.join(", ")}`);if(!X_(r))throw new Error(`Invalid budget: ${r}`);return{metric:n,budget:r}}static validateHostname(e){let n=`${e} is not a valid hostname.`;if(e.length===0)throw new Error(n);if(e.includes("/"))throw new Error(n);if(e.includes(":"))throw new Error(n);if(e.includes("*")&&(!e.startsWith("*.")||e.lastIndexOf("*")>0))throw new Error(n);return e}static validateHostnames(e){if(Array.isArray(e)&&e.every(n=>typeof n=="string"))return e.map(t.validateHostname);if(e!==void 0)throw new Error("firstPartyHostnames should be defined as an array of strings.")}static initializeBudget(e){if(e=JSON.parse(JSON.stringify(e)),!Tp(e))throw new Error("Budget file is not defined as an array of budgets.");return e.map((r,a)=>{let o={},{path:i,options:c,resourceSizes:u,resourceCounts:l,timings:m,...p}=r;if(t.assertNoExcessProperties(p,"Budget"),o.path=t.validatePath(i),Z_(c)){let{firstPartyHostnames:g,...f}=c;t.assertNoExcessProperties(f,"Options property"),o.options={},o.options.firstPartyHostnames=t.validateHostnames(g)}else if(c!==void 0)throw new Error(`Invalid options property in budget at index ${a}`);if(Tp(u))o.resourceSizes=u.map(t.validateResourceBudget),t.assertNoDuplicateStrings(o.resourceSizes.map(g=>g.resourceType),`budgets[${a}].resourceSizes`);else if(u!==void 0)throw new Error(`Invalid resourceSizes entry in budget at index ${a}`);if(Tp(l))o.resourceCounts=l.map(t.validateResourceBudget),t.assertNoDuplicateStrings(o.resourceCounts.map(g=>g.resourceType),`budgets[${a}].resourceCounts`);else if(l!==void 0)throw new Error(`Invalid resourceCounts entry in budget at index ${a}`);if(Tp(m))o.timings=m.map(t.validateTimingBudget),t.assertNoDuplicateStrings(o.timings.map(g=>g.metric),`budgets[${a}].timings`);else if(m!==void 0)throw new Error(`Invalid timings entry in budget at index ${a}`);return o})}}});function Q_(t){return Array.isArray(t)&&t.every(Su)}function Su(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function YY(t){return typeof t!="string"?!1:t==="navigation"||t==="timespan"||t==="snapshot"}function KY(t){return Array.isArray(t)?t.every(YY):!1}function Tu(t,e,n=""){n&&(n+=" ");let r=Object.keys(t);if(r.length>0){let a=r.join(", ");throw new Error(`${e} has unrecognized ${n}properties: [${a}]`)}}var wh,ek,tk=v(()=>{"use strict";d();k();s(Q_,"isArrayOfUnknownObjects");s(Su,"isObjectOfUnknownProperties");s(YY,"objectIsGatherMode");s(KY,"isArrayOfGatherModes");s(Tu,"assertNoExcessProperties");wh=class t{static{s(this,"ConfigPlugin")}static _parseAuditsList(e,n){if(e!==void 0){if(!Q_(e))throw new Error(`${n} has an invalid audits array.`);return e.map(r=>{let{path:a,...o}=r;if(Tu(o,n,"audit"),typeof a!="string")throw new Error(`${n} has a missing audit path.`);return{path:a}})}}static _parseAuditRefsList(e,n){if(!Q_(e))throw new Error(`${n} has no valid auditsRefs.`);return e.map(r=>{let{id:a,weight:o,group:i,...c}=r;if(Tu(c,n,"auditRef"),typeof a!="string")throw new Error(`${n} has an invalid auditRef id.`);if(typeof o!="number")throw new Error(`${n} has an invalid auditRef weight.`);if(typeof i!="string"&&typeof i<"u")throw new Error(`${n} has an invalid auditRef group.`);let u=i&&`${n}-${i}`;return{id:a,weight:o,group:u}})}static _parseCategory(e,n){if(!Su(e))throw new Error(`${n} has no valid category.`);let{title:r,description:a,manualDescription:o,auditRefs:i,supportedModes:c,...u}=e;if(Tu(u,n,"category"),!_r(r))throw new Error(`${n} has an invalid category tile.`);if(!_r(a)&&a!==void 0)throw new Error(`${n} has an invalid category description.`);if(!_r(o)&&o!==void 0)throw new Error(`${n} has an invalid category manualDescription.`);if(!KY(c)&&c!==void 0)throw new Error(`${n} supportedModes must be an array, valid array values are "navigation", "timespan", and "snapshot".`);let l=t._parseAuditRefsList(i,n);return{title:r,auditRefs:l,description:a,manualDescription:o,supportedModes:c}}static _parseGroups(e,n){if(e===void 0)return;if(!Su(e))throw new Error(`${n} groups json is not defined as an object.`);let r=Object.entries(e),a={};return r.forEach(([o,i])=>{if(!Su(i))throw new Error(`${n} has a group not defined as an object.`);let{title:c,description:u,...l}=i;if(Tu(l,n,"group"),!_r(c))throw new Error(`${n} has an invalid group title.`);if(!_r(u)&&u!==void 0)throw new Error(`${n} has an invalid group description.`);a[`${n}-${o}`]={title:c,description:u}}),a}static parsePlugin(e,n){if(e=JSON.parse(JSON.stringify(e)),!Su(e))throw new Error(`${n} is not defined as an object.`);let{audits:r,category:a,groups:o,...i}=e;return Tu(i,n),{audits:t._parseAuditsList(r,n),categories:{[n]:t._parseCategory(a,n)},groups:t._parseGroups(o,n)}}},ek=wh});var nk,rk=v(()=>{"use strict";d();ca();es();nk=`/*! axe v4.7.2
+ * Copyright (c) 2023 Deque Systems, Inc.
+ *
+ * Your use of this Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This entire copyright notice must appear in every copy of this file you
+ * distribute or in any file that contains substantial portions of this source
+ * code.
+ */
+!function e(t){var n=t,a=t.document;function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o=o||{};function u(e){this.name="SupportError",this.cause=e.cause,this.message="\`".concat(e.cause,"\` - feature unsupported in your environment."),e.ruleId&&(this.ruleId=e.ruleId,this.message+=" Skipping ".concat(this.ruleId," rule.")),this.stack=(new Error).stack}o.version="4.7.2","function"==typeof define&&define.amd&&define("axe-core",[],(function(){return o})),"object"===("undefined"==typeof module?"undefined":r(module))&&module.exports&&"function"==typeof e.toString&&(o.source="("+e.toString()+')(typeof window === "object" ? window : this);',module.exports=o),"function"==typeof t.getComputedStyle&&(t.axe=o),(u.prototype=Object.create(Error.prototype)).constructor=u;var i=["node"],l=["variant"],s=["matches"],c=["chromium"],d=["noImplicit"],p=["noPresentational"],f=["precision","format","inGamut"],D=["space"],m=["algorithm"],h=["method"],g=["maxDeltaE","deltaEMethod","steps","maxSteps"],b=["node"],v=["nodes"],y=["node"],F=["relatedNodes"],w=["environmentData"],E=["environmentData"],C=["node"],x=["environmentData"],A=["environmentData"],k=["environmentData"];function B(e,t,n){return(B=O()?Reflect.construct.bind():function(e,t,n){var a=[null];return a.push.apply(a,t),t=new(Function.bind.apply(e,a)),n&&N(t,n.prototype),t}).apply(null,arguments)}function T(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&N(e,t)}function N(e,t){return(N=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function R(e){var t=O();return function(){var n,a=S(e);n=t?(n=S(this).constructor,Reflect.construct(a,arguments,n)):a.apply(this,arguments),a=this;if(n&&("object"===r(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return _(a)}}function _(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function O(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function S(e){return(S=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function M(e,t,n){I(e,t),t.set(e,n)}function P(e,t){I(e,t),t.add(e)}function I(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function j(e,t){return(t=z(e,t,"get")).get?t.get.call(e):t.value}function L(e,t,n){if(t.has(e))return n;throw new TypeError("attempted to get private field on non-instance")}function q(e,t,n){if((t=z(e,t,"set")).set)t.set.call(e,n);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=n}}function z(e,t,n){if(t.has(e))return t.get(e);throw new TypeError("attempted to "+n+" private field on non-instance")}function V(e,t){if(null==e)return{};var n,a=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],0<=t.indexOf(n)||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols)for(var r=Object.getOwnPropertySymbols(e),o=0;o<r.length;o++)n=r[o],0<=t.indexOf(n)||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n]);return a}function $(e){return function(e){if(Array.isArray(e))return te(e)}(e)||H(e)||ee(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function U(){return(U=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n,a=arguments[t];for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e}).apply(this,arguments)}function G(e,t){return Y(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,u,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(s)throw r}}return i}}(e,t)||ee(e,t)||W()}function W(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Y(e){if(Array.isArray(e))return e}function K(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function X(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,J(a.key),a)}}function Z(e,t,n){return t&&X(e.prototype,t),n&&X(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function J(e){return e=function(e,t){if("object"!==r(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return String(e);if(n=n.call(e,"string"),"object"===r(n))throw new TypeError("@@toPrimitive must return a primitive value.");return n}(e),"symbol"===r(e)?e:String(e)}function Q(e,t){var n,a,r,o,u="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(u)return a=!(n=!0),{s:function(){u=u.call(e)},n:function(){var e=u.next();return n=e.done,e},e:function(e){a=!0,r=e},f:function(){try{n||null==u.return||u.return()}finally{if(a)throw r}}};if(Array.isArray(e)||(u=ee(e))||t&&e&&"number"==typeof e.length)return u&&(e=u),o=0,{s:t=function(){},n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:t};throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function ee(e,t){var n;if(e)return"string"==typeof e?te(e,t):"Map"===(n="Object"===(n=Object.prototype.toString.call(e).slice(8,-1))&&e.constructor?e.constructor.name:n)||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?te(e,t):void 0}function te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ne(e,t){return function(){return t||e((t={exports:{}}).exports,t),t.exports}}function ae(e,t){for(var n in t)de(e,n,{get:t[n],enumerable:!0})}function re(e){return function(e,t,n){if(t&&"object"===r(t)||"function"==typeof t){var a,o=Q(De(t));try{for(o.s();!(a=o.n()).done;)!function(){var r=a.value;fe.call(e,r)||"default"===r||de(e,r,{get:function(){return t[r]},enumerable:!(n=me(t,r))||n.enumerable})}()}catch(e){o.e(e)}finally{o.f()}}return e}((t=de(null!=e?ce(pe(e)):{},"default",e&&e.__esModule&&"default"in e?{get:function(){return e.default},enumerable:!0}:{value:e,enumerable:!0}),de(t,"__esModule",{value:!0})),e);var t}function oe(e,t,n){(t="symbol"!==r(t)?t+"":t)in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n}var ue,ie,le,se,ce=Object.create,de=Object.defineProperty,pe=Object.getPrototypeOf,fe=Object.prototype.hasOwnProperty,De=Object.getOwnPropertyNames,me=Object.getOwnPropertyDescriptor,he=ne((function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isIdentStart=function(e){return"a"<=e&&e<="z"||"A"<=e&&e<="Z"||"-"===e||"_"===e},e.isIdent=function(e){return"a"<=e&&e<="z"||"A"<=e&&e<="Z"||"0"<=e&&e<="9"||"-"===e||"_"===e},e.isHex=function(e){return"a"<=e&&e<="f"||"A"<=e&&e<="F"||"0"<=e&&e<="9"},e.escapeIdentifier=function(t){for(var n=t.length,a="",r=0;r<n;){var o=t.charAt(r);if(e.identSpecialChars[o])a+="\\\\"+o;else if("_"===o||"-"===o||"A"<=o&&o<="Z"||"a"<=o&&o<="z"||0!==r&&"0"<=o&&o<="9")a+=o;else{if(55296==(63488&(o=o.charCodeAt(0)))){var u=t.charCodeAt(r++);if(55296!=(64512&o)||56320!=(64512&u))throw Error("UCS-2(decode): illegal sequence");o=((1023&o)<<10)+(1023&u)+65536}a+="\\\\"+o.toString(16)+" "}r++}return a},e.escapeStr=function(t){for(var n,a=t.length,r="",o=0;o<a;){var u=t.charAt(o);'"'===u?u='\\\\"':"\\\\"===u?u="\\\\\\\\":void 0!==(n=e.strReplacementsRev[u])&&(u=n),r+=u,o++}return'"'+r+'"'},e.identSpecialChars={"!":!0,'"':!0,"#":!0,$:!0,"%":!0,"&":!0,"'":!0,"(":!0,")":!0,"*":!0,"+":!0,",":!0,".":!0,"/":!0,";":!0,"<":!0,"=":!0,">":!0,"?":!0,"@":!0,"[":!0,"\\\\":!0,"]":!0,"^":!0,"\`":!0,"{":!0,"|":!0,"}":!0,"~":!0},e.strReplacementsRev={"\\n":"\\\\n","\\r":"\\\\r","\\t":"\\\\t","\\f":"\\\\f","\\v":"\\\\v"},e.singleQuoteEscapeChars={n:"\\n",r:"\\r",t:"\\t",f:"\\f","\\\\":"\\\\","'":"'"},e.doubleQuotesEscapeChars={n:"\\n",r:"\\r",t:"\\t",f:"\\f","\\\\":"\\\\",'"':'"'}})),ge=ne((function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=he();e.parseCssSelector=function(e,n,a,r,o,u){var i=e.length,l="";function s(a,r){var o="";for(n++,l=e.charAt(n);n<i;){if(l===a)return n++,o;var u;if("\\\\"===l)if(n++,(l=e.charAt(n))===a)o+=a;else if(void 0!==(u=r[l]))o+=u;else{if(t.isHex(l)){var s=l;for(n++,l=e.charAt(n);t.isHex(l);)s+=l,n++,l=e.charAt(n);" "===l&&(n++,l=e.charAt(n)),o+=String.fromCharCode(parseInt(s,16));continue}o+=l}else o+=l;n++,l=e.charAt(n)}return o}function c(){var a="";for(l=e.charAt(n);n<i;){if(!t.isIdent(l)){if("\\\\"!==l)return a;if(i<=++n)throw Error("Expected symbol but end of file reached.");if(l=e.charAt(n),!t.identSpecialChars[l]&&t.isHex(l)){var r=l;for(n++,l=e.charAt(n);t.isHex(l);)r+=l,n++,l=e.charAt(n);" "===l&&(n++,l=e.charAt(n)),a+=String.fromCharCode(parseInt(r,16));continue}}a+=l,n++,l=e.charAt(n)}return a}function d(){for(l=e.charAt(n);" "===l||"\\t"===l||"\\n"===l||"\\r"===l||"\\f"===l;)n++,l=e.charAt(n)}function p(){var t=f();if(!t)return null;var a=t;for(l=e.charAt(n);","===l;){if(n++,d(),"selectors"!==a.type&&(a={type:"selectors",selectors:[t]}),!(t=f()))throw Error('Rule expected after ",".');a.selectors.push(t)}return a}function f(){d();var t={type:"ruleSet"},a=D();if(!a)return null;for(var r=t;a&&(a.type="rule",r.rule=a,r=a,d(),l=e.charAt(n),!(i<=n||","===l||")"===l));)if(o[l]){var u=l;if(n++,d(),!(a=D()))throw Error('Rule expected after "'+u+'".');a.nestingOperator=u}else(a=D())&&(a.nestingOperator=null);return t}function D(){for(var o=null;n<i;)if("*"===(l=e.charAt(n)))n++,(o=o||{}).tagName="*";else if(t.isIdentStart(l)||"\\\\"===l)(o=o||{}).tagName=c();else if("."===l)n++,((o=o||{}).classNames=o.classNames||[]).push(c());else if("#"===l)n++,(o=o||{}).id=c();else if("["===l){n++,d();var f={name:c()};if(d(),"]"===l)n++;else{var D="";if(r[l]&&(D=l,n++,l=e.charAt(n)),i<=n)throw Error('Expected "=" but end of file reached.');if("="!==l)throw Error('Expected "=" but "'+l+'" found.');f.operator=D+"=",n++,d();var m="";if(f.valueType="string",'"'===l)m=s('"',t.doubleQuotesEscapeChars);else if("'"===l)m=s("'",t.singleQuoteEscapeChars);else if(u&&"$"===l)n++,m=c(),f.valueType="substitute";else{for(;n<i&&"]"!==l;)m+=l,n++,l=e.charAt(n);m=m.trim()}if(d(),i<=n)throw Error('Expected "]" but end of file reached.');if("]"!==l)throw Error('Expected "]" but "'+l+'" found.');n++,f.value=m}((o=o||{}).attrs=o.attrs||[]).push(f)}else{if(":"!==l)break;if(n++,f={name:D=c()},"("===l){n++;var h="";if(d(),"selector"===a[D])f.valueType="selector",h=p();else{if(f.valueType=a[D]||"string",'"'===l)h=s('"',t.doubleQuotesEscapeChars);else if("'"===l)h=s("'",t.singleQuoteEscapeChars);else if(u&&"$"===l)n++,h=c(),f.valueType="substitute";else{for(;n<i&&")"!==l;)h+=l,n++,l=e.charAt(n);h=h.trim()}d()}if(i<=n)throw Error('Expected ")" but end of file reached.');if(")"!==l)throw Error('Expected ")" but "'+l+'" found.');n++,f.value=h}((o=o||{}).pseudos=o.pseudos||[]).push(f)}return o}var m=p();if(n<i)throw Error('Rule expected but "'+e.charAt(n)+'" found.');return m}})),be=ne((function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=he();e.renderEntity=function e(n){var a="";switch(n.type){case"ruleSet":for(var r=n.rule,o=[];r;)r.nestingOperator&&o.push(r.nestingOperator),o.push(e(r)),r=r.rule;a=o.join(" ");break;case"selectors":a=n.selectors.map(e).join(", ");break;case"rule":n.tagName&&(a="*"===n.tagName?"*":t.escapeIdentifier(n.tagName)),n.id&&(a+="#"+t.escapeIdentifier(n.id)),n.classNames&&(a+=n.classNames.map((function(e){return"."+t.escapeIdentifier(e)})).join("")),n.attrs&&(a+=n.attrs.map((function(e){return"operator"in e?"substitute"===e.valueType?"["+t.escapeIdentifier(e.name)+e.operator+"$"+e.value+"]":"["+t.escapeIdentifier(e.name)+e.operator+t.escapeStr(e.value)+"]":"["+t.escapeIdentifier(e.name)+"]"})).join("")),n.pseudos&&(a+=n.pseudos.map((function(n){return n.valueType?"selector"===n.valueType?":"+t.escapeIdentifier(n.name)+"("+e(n.value)+")":"substitute"===n.valueType?":"+t.escapeIdentifier(n.name)+"($"+n.value+")":"numeric"===n.valueType?":"+t.escapeIdentifier(n.name)+"("+n.value+")":":"+t.escapeIdentifier(n.name)+"("+t.escapeIdentifier(n.value)+")":":"+t.escapeIdentifier(n.name)})).join(""));break;default:throw Error('Unknown entity type: "'+n.type+'".')}return a}})),ve=ne((function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=ge(),n=be();function a(){this.pseudos={},this.attrEqualityMods={},this.ruleNestingOperators={},this.substitutesEnabled=!1}a.prototype.registerSelectorPseudos=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)this.pseudos[a[n]]="selector";return this},a.prototype.unregisterSelectorPseudos=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)delete this.pseudos[a[n]];return this},a.prototype.registerNumericPseudos=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)this.pseudos[a[n]]="numeric";return this},a.prototype.unregisterNumericPseudos=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)delete this.pseudos[a[n]];return this},a.prototype.registerNestingOperators=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)this.ruleNestingOperators[a[n]]=!0;return this},a.prototype.unregisterNestingOperators=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)delete this.ruleNestingOperators[a[n]];return this},a.prototype.registerAttrEqualityMods=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)this.attrEqualityMods[a[n]]=!0;return this},a.prototype.unregisterAttrEqualityMods=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0,a=e;n<a.length;n++)delete this.attrEqualityMods[a[n]];return this},a.prototype.enableSubstitutes=function(){return this.substitutesEnabled=!0,this},a.prototype.disableSubstitutes=function(){return this.substitutesEnabled=!1,this},a.prototype.parse=function(e){return t.parseCssSelector(e,0,this.pseudos,this.attrEqualityMods,this.ruleNestingOperators,this.substitutesEnabled)},a.prototype.render=function(e){return n.renderEntity(e).trim()},e.CssSelectorParser=a})),ye=ne((function(e,t){"use strict";t.exports=function(){}})),Fe=ne((function(e,t){"use strict";var n=ye()();t.exports=function(e){return e!==n&&null!==e}})),we=ne((function(e,t){"use strict";var n=Fe(),a=Array.prototype.forEach,r=Object.create;t.exports=function(e){var t=r(null);return a.call(arguments,(function(e){if(n(e)){var a,r=Object(e),o=t;for(a in r)o[a]=r[a]}})),t}})),Ee=ne((function(e,t){"use strict";t.exports=function(){var e=Math.sign;return"function"==typeof e&&1===e(10)&&-1===e(-20)}})),Ce=ne((function(e,t){"use strict";t.exports=function(e){return e=Number(e),isNaN(e)||0===e?e:0<e?1:-1}})),xe=ne((function(e,t){"use strict";t.exports=Ee()()?Math.sign:Ce()})),Ae=ne((function(e,t){"use strict";var n=xe(),a=Math.abs,r=Math.floor;t.exports=function(e){return isNaN(e)?0:0!==(e=Number(e))&&isFinite(e)?n(e)*r(a(e)):e}})),ke=ne((function(e,t){"use strict";var n=Ae(),a=Math.max;t.exports=function(e){return a(0,n(e))}})),Be=ne((function(e,t){"use strict";var n=ke();t.exports=function(e,t,a){return isNaN(e)?0<=t?a&&t?t-1:t:1:!1!==e&&n(e)}})),Te=ne((function(e,t){"use strict";t.exports=function(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}})),Ne=ne((function(e,t){"use strict";var n=Fe();t.exports=function(e){if(n(e))return e;throw new TypeError("Cannot use null or undefined")}})),Re=ne((function(e,t){"use strict";var n=Te(),a=Ne(),r=Function.prototype.bind,o=Function.prototype.call,u=Object.keys,i=Object.prototype.propertyIsEnumerable;t.exports=function(e,t){return function(l,s){var c,d=arguments[2],p=arguments[3];return l=Object(a(l)),n(s),c=u(l),p&&c.sort("function"==typeof p?r.call(p,l):void 0),"function"!=typeof e&&(e=c[e]),o.call(e,c,(function(e,n){return i.call(l,e)?o.call(s,d,l[e],e,l,n):t}))}}})),_e=ne((function(e,t){"use strict";t.exports=Re()("forEach")})),Oe=ne((function(){})),Se=ne((function(e,t){"use strict";t.exports=function(){var e=Object.assign;return"function"==typeof e&&(e(e={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),e.foo+e.bar+e.trzy==="razdwatrzy")}})),Me=ne((function(e,t){"use strict";t.exports=function(){try{return Object.keys("primitive"),!0}catch(e){return!1}}})),Pe=ne((function(e,t){"use strict";var n=Fe(),a=Object.keys;t.exports=function(e){return a(n(e)?Object(e):e)}})),Ie=ne((function(e,t){"use strict";t.exports=Me()()?Object.keys:Pe()})),je=ne((function(e,t){"use strict";var n=Ie(),a=Ne(),r=Math.max;t.exports=function(e,t){var o,u,i,l=r(arguments.length,2);for(e=Object(a(e)),i=function(n){try{e[n]=t[n]}catch(n){o=o||n}},u=1;u<l;++u)n(t=arguments[u]).forEach(i);if(void 0!==o)throw o;return e}})),Le=ne((function(e,t){"use strict";t.exports=Se()()?Object.assign:je()})),qe=ne((function(e,t){"use strict";var n=Fe(),a={function:!0,object:!0};t.exports=function(e){return n(e)&&a[r(e)]||!1}})),ze=ne((function(e,t){"use strict";var n=Le(),a=qe(),r=Fe(),o=Error.captureStackTrace;t.exports=function(e){e=new Error(e);var u=arguments[1],i=arguments[2];return r(i)||a(u)&&(i=u,u=null),r(i)&&n(e,i),r(u)&&(e.code=u),o&&o(e,t.exports),e}})),Ve=ne((function(e,t){"use strict";var n=Ne(),a=Object.defineProperty,r=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols;t.exports=function(e,t){var i,l=Object(n(t));if(e=Object(n(e)),o(l).forEach((function(n){try{a(e,n,r(t,n))}catch(n){i=n}})),"function"==typeof u&&u(l).forEach((function(n){try{a(e,n,r(t,n))}catch(n){i=n}})),void 0!==i)throw i;return e}})),$e=ne((function(e,t){"use strict";function n(e,t){return t}var a,r,o,u,i,l=ke();try{Object.defineProperty(n,"length",{configurable:!0,writable:!1,enumerable:!1,value:1})}catch(e){}1===n.length?(a={configurable:!0,writable:!1,enumerable:!1},r=Object.defineProperty,t.exports=function(e,t){return t=l(t),e.length===t?e:(a.value=t,r(e,"length",a))}):(u=Ve(),i=[],o=function(e){var t,n=0;if(i[e])return i[e];for(t=[];e--;)t.push("a"+(++n).toString(36));return new Function("fn","return function ("+t.join(", ")+") { return fn.apply(this, arguments); };")},t.exports=function(e,t){if(t=l(t),e.length===t)return e;t=o(t)(e);try{u(t,e)}catch(e){}return t})})),He=ne((function(e,t){"use strict";t.exports=function(e){return null!=e}})),Ue=ne((function(e,t){"use strict";var n=He(),a={object:!0,function:!0,undefined:!0};t.exports=function(e){return!!n(e)&&hasOwnProperty.call(a,r(e))}})),Ge=ne((function(e,t){"use strict";var n=Ue();t.exports=function(e){if(!n(e))return!1;try{return!!e.constructor&&e.constructor.prototype===e}catch(e){return!1}}})),We=ne((function(e,t){"use strict";var n=Ge();t.exports=function(e){if("function"!=typeof e)return!1;if(!hasOwnProperty.call(e,"length"))return!1;try{if("number"!=typeof e.length)return!1;if("function"!=typeof e.call)return!1;if("function"!=typeof e.apply)return!1}catch(e){return!1}return!n(e)}})),Ye=ne((function(e,t){"use strict";var n=We(),a=/^\\s*class[\\s{/}]/,r=Function.prototype.toString;t.exports=function(e){return!!n(e)&&!a.test(r.call(e))}})),Ke=ne((function(e,t){"use strict";var n="razdwatrzy";t.exports=function(){return"function"==typeof n.contains&&!0===n.contains("dwa")&&!1===n.contains("foo")}})),Xe=ne((function(e,t){"use strict";var n=String.prototype.indexOf;t.exports=function(e){return-1<n.call(this,e,arguments[1])}})),Ze=ne((function(e,t){"use strict";t.exports=Ke()()?String.prototype.contains:Xe()})),Je=ne((function(e,t){"use strict";var n=He(),a=Ye(),r=Le(),o=we(),u=Ze();(t.exports=function(e,t){var a,i,l,s;return arguments.length<2||"string"!=typeof e?(s=t,t=e,e=null):s=arguments[2],n(e)?(a=u.call(e,"c"),i=u.call(e,"e"),l=u.call(e,"w")):i=!(a=l=!0),e={value:t,configurable:a,enumerable:i,writable:l},s?r(o(s),e):e}).gs=function(e,t,i){var l,s;return"string"!=typeof e?(s=i,i=t,t=e,e=null):s=arguments[3],n(t)?a(t)?n(i)?a(i)||(s=i,i=void 0):i=void 0:(s=t,t=i=void 0):t=void 0,e=n(e)?(l=u.call(e,"c"),u.call(e,"e")):!(l=!0),t={get:t,set:i,configurable:l,enumerable:e},s?r(o(s),t):t}})),Qe=ne((function(e,t){"use strict";var n=Je(),a=Te(),o=Function.prototype.apply,u=Function.prototype.call,i=Object.create,l=Object.defineProperty,s=Object.defineProperties,c=Object.prototype.hasOwnProperty,d={configurable:!0,enumerable:!1,writable:!0},p=function(e,t){var n;return a(t),c.call(this,"__ee__")?n=this.__ee__:(n=d.value=i(null),l(this,"__ee__",d),d.value=null),n[e]?"object"===r(n[e])?n[e].push(t):n[e]=[n[e],t]:n[e]=t,this},f=function(e,t){var n,r;return a(t),r=this,p.call(this,e,n=function(){D.call(r,e,n),o.call(t,this,arguments)}),n.__eeOnceListener__=t,this},D=function(e,t){var n,o,u,i;if(a(t),c.call(this,"__ee__")&&(n=this.__ee__)[e])if(o=n[e],"object"===r(o))for(i=0;u=o[i];++i)u!==t&&u.__eeOnceListener__!==t||(2===o.length?n[e]=o[i?0:1]:o.splice(i,1));else o!==t&&o.__eeOnceListener__!==t||delete n[e];return this},m=function(e){var t,n,a,i,l;if(c.call(this,"__ee__")&&(i=this.__ee__[e]))if("object"===r(i)){for(n=arguments.length,l=new Array(n-1),t=1;t<n;++t)l[t-1]=arguments[t];for(i=i.slice(),t=0;a=i[t];++t)o.call(a,this,l)}else switch(arguments.length){case 1:u.call(i,this);break;case 2:u.call(i,this,arguments[1]);break;case 3:u.call(i,this,arguments[1],arguments[2]);break;default:for(n=arguments.length,l=new Array(n-1),t=1;t<n;++t)l[t-1]=arguments[t];o.call(i,this,l)}},h={on:p,once:f,off:D,emit:m},g={on:n(p),once:n(f),off:n(D),emit:n(m)},b=s({},g);t.exports=e=function(e){return null==e?i(b):s(Object(e),g)},e.methods=h})),et=ne((function(e,t){"use strict";t.exports=function(){var e,t=Array.from;return"function"==typeof t&&(e=t(t=["raz","dwa"]),Boolean(e&&e!==t&&"dwa"===e[1]))}})),tt=ne((function(e,t){"use strict";t.exports=function(){return"object"===("undefined"==typeof globalThis?"undefined":r(globalThis))&&!!globalThis&&globalThis.Array===Array}})),nt=ne((function(e,n){function a(){if("object"===("undefined"==typeof self?"undefined":r(self))&&self)return self;if("object"===(void 0===t?"undefined":r(t))&&t)return t;throw new Error("Unable to resolve global \`this\`")}n.exports=function(){if(this)return this;try{Object.defineProperty(Object.prototype,"__global__",{get:function(){return this},configurable:!0})}catch(e){return a()}try{return __global__||a()}finally{delete Object.prototype.__global__}}()})),at=ne((function(e,t){"use strict";t.exports=tt()()?globalThis:nt()})),rt=ne((function(e,t){"use strict";var n=at(),a={object:!0,symbol:!0};t.exports=function(){var e,t=n.Symbol;if("function"!=typeof t)return!1;e=t("test symbol");try{String(e)}catch(e){return!1}return!!a[r(t.iterator)]&&!!a[r(t.toPrimitive)]&&!!a[r(t.toStringTag)]}})),ot=ne((function(e,t){"use strict";t.exports=function(e){return!!e&&("symbol"===r(e)||!!e.constructor&&"Symbol"===e.constructor.name&&"Symbol"===e[e.constructor.toStringTag])}})),ut=ne((function(e,t){"use strict";var n=ot();t.exports=function(e){if(n(e))return e;throw new TypeError(e+" is not a symbol")}})),it=ne((function(e,t){"use strict";var n=Je(),a=Object.create,r=Object.defineProperty,o=Object.prototype,u=a(null);t.exports=function(e){for(var t,a,i=0;u[e+(i||"")];)++i;return u[e+=i||""]=!0,r(o,t="@@"+e,n.gs(null,(function(e){a||(a=!0,r(this,t,n(e)),a=!1)}))),t}})),lt=ne((function(e,t){"use strict";var n=Je(),a=at().Symbol;t.exports=function(e){return Object.defineProperties(e,{hasInstance:n("",a&&a.hasInstance||e("hasInstance")),isConcatSpreadable:n("",a&&a.isConcatSpreadable||e("isConcatSpreadable")),iterator:n("",a&&a.iterator||e("iterator")),match:n("",a&&a.match||e("match")),replace:n("",a&&a.replace||e("replace")),search:n("",a&&a.search||e("search")),species:n("",a&&a.species||e("species")),split:n("",a&&a.split||e("split")),toPrimitive:n("",a&&a.toPrimitive||e("toPrimitive")),toStringTag:n("",a&&a.toStringTag||e("toStringTag")),unscopables:n("",a&&a.unscopables||e("unscopables"))})}})),st=ne((function(e,t){"use strict";var n=Je(),a=ut(),r=Object.create(null);t.exports=function(e){return Object.defineProperties(e,{for:n((function(t){return r[t]||(r[t]=e(String(t)))})),keyFor:n((function(e){for(var t in a(e),r)if(r[t]===e)return t}))})}})),ct=ne((function(e,t){"use strict";var n,a,o,u=Je(),i=ut(),l=at().Symbol,s=it(),c=lt(),d=st(),p=Object.create,f=Object.defineProperties,D=Object.defineProperty;if("function"==typeof l)try{String(l()),o=!0}catch(e){}else l=null;a=function(e){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return n(e)},t.exports=n=function e(t){var n;if(this instanceof e)throw new TypeError("Symbol is not a constructor");return o?l(t):(n=p(a.prototype),t=void 0===t?"":String(t),f(n,{__description__:u("",t),__name__:u("",s(t))}))},c(n),d(n),f(a.prototype,{constructor:u(n),toString:u("",(function(){return this.__name__}))}),f(n.prototype,{toString:u((function(){return"Symbol ("+i(this).__description__+")"})),valueOf:u((function(){return i(this)}))}),D(n.prototype,n.toPrimitive,u("",(function(){var e=i(this);return"symbol"===r(e)?e:e.toString()}))),D(n.prototype,n.toStringTag,u("c","Symbol")),D(a.prototype,n.toStringTag,u("c",n.prototype[n.toStringTag])),D(a.prototype,n.toPrimitive,u("c",n.prototype[n.toPrimitive]))})),dt=ne((function(e,t){"use strict";t.exports=rt()()?at().Symbol:ct()})),pt=ne((function(e,t){"use strict";var n=Object.prototype.toString,a=n.call(function(){return arguments}());t.exports=function(e){return n.call(e)===a}})),ft=ne((function(e,t){"use strict";var n=Object.prototype.toString,a=RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);t.exports=function(e){return"function"==typeof e&&a(n.call(e))}})),Dt=ne((function(e,t){"use strict";var n=Object.prototype.toString,a=n.call("");t.exports=function(e){return"string"==typeof e||e&&"object"===r(e)&&(e instanceof String||n.call(e)===a)||!1}})),mt=ne((function(e,t){"use strict";var n=dt().iterator,a=pt(),r=ft(),o=ke(),u=Te(),i=Ne(),l=Fe(),s=Dt(),c=Array.isArray,d=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},f=Object.defineProperty;t.exports=function(e){var t,D,m,h,g,b,v,y,F,w,E=arguments[1],C=arguments[2];if(e=Object(i(e)),l(E)&&u(E),this&&this!==Array&&r(this))t=this;else{if(!E){if(a(e))return 1!==(g=e.length)?Array.apply(null,e):((h=new Array(1))[0]=e[0],h);if(c(e)){for(h=new Array(g=e.length),D=0;D<g;++D)h[D]=e[D];return h}}h=[]}if(!c(e))if(void 0!==(F=e[n])){for(v=u(F).call(e),t&&(h=new t),y=v.next(),D=0;!y.done;)w=E?d.call(E,C,y.value,D):y.value,t?(p.value=w,f(h,D,p)):h[D]=w,y=v.next(),++D;g=D}else if(s(e)){for(g=e.length,t&&(h=new t),m=D=0;D<g;++D)w=e[D],D+1<g&&55296<=(b=w.charCodeAt(0))&&b<=56319&&(w+=e[++D]),w=E?d.call(E,C,w,m):w,t?(p.value=w,f(h,m,p)):h[m]=w,++m;g=m}if(void 0===g)for(g=o(e.length),t&&(h=new t(g)),D=0;D<g;++D)w=E?d.call(E,C,e[D],D):e[D],t?(p.value=w,f(h,D,p)):h[D]=w;return t&&(p.value=null,h.length=g),h}})),ht=ne((function(e,t){"use strict";t.exports=et()()?Array.from:mt()})),gt=ne((function(e,t){"use strict";var n=ht(),a=Array.isArray;t.exports=function(e){return a(e)?e:n(e)}})),bt=ne((function(e,t){"use strict";var n=gt(),a=Fe(),r=Te(),o=Array.prototype.slice,u=function(e){return this.map((function(t,n){return t?t(e[n]):e[n]})).concat(o.call(e,this.length))};t.exports=function(e){return(e=n(e)).forEach((function(e){a(e)&&r(e)})),u.bind(e)}})),vt=ne((function(e,t){"use strict";var n=Te();t.exports=function(e){var t;return"function"==typeof e?{set:e,get:e}:(t={get:n(e.get)},void 0!==e.set?(t.set=n(e.set),e.delete&&(t.delete=n(e.delete)),e.clear&&(t.clear=n(e.clear))):t.set=t.get,t)}})),yt=ne((function(e,t){"use strict";var n=ze(),a=$e(),r=Je(),o=Qe().methods,u=bt(),i=vt(),l=Function.prototype.apply,s=Function.prototype.call,c=Object.create,d=Object.defineProperties,p=o.on,f=o.emit;t.exports=function(e,t,o){var D,m,h,g,b,v,y,F,w,E,C,x=c(null),A=!1!==t?t:isNaN(e.length)?1:e.length;return o.normalizer&&(E=i(o.normalizer),m=E.get,h=E.set,g=E.delete,b=E.clear),null!=o.resolvers&&(C=u(o.resolvers)),E=m?a((function(t){var a,r,o=arguments;if(C&&(o=C(o)),null!==(a=m(o))&&hasOwnProperty.call(x,a))return y&&D.emit("get",a,o,this),x[a];if(r=1===o.length?s.call(e,this,o[0]):l.call(e,this,o),null===a){if(null!==(a=m(o)))throw n("Circular invocation","CIRCULAR_INVOCATION");a=h(o)}else if(hasOwnProperty.call(x,a))throw n("Circular invocation","CIRCULAR_INVOCATION");return x[a]=r,F&&D.emit("set",a,null,r),r}),A):0===t?function(){var t;if(hasOwnProperty.call(x,"data"))return y&&D.emit("get","data",arguments,this),x.data;if(t=arguments.length?l.call(e,this,arguments):s.call(e,this),hasOwnProperty.call(x,"data"))throw n("Circular invocation","CIRCULAR_INVOCATION");return x.data=t,F&&D.emit("set","data",null,t),t}:function(t){var a,r=arguments;if(C&&(r=C(arguments)),a=String(r[0]),hasOwnProperty.call(x,a))return y&&D.emit("get",a,r,this),x[a];if(r=1===r.length?s.call(e,this,r[0]):l.call(e,this,r),hasOwnProperty.call(x,a))throw n("Circular invocation","CIRCULAR_INVOCATION");return x[a]=r,F&&D.emit("set",a,null,r),r},D={original:e,memoized:E,profileName:o.profileName,get:function(e){return C&&(e=C(e)),m?m(e):String(e[0])},has:function(e){return hasOwnProperty.call(x,e)},delete:function(e){var t;hasOwnProperty.call(x,e)&&(g&&g(e),t=x[e],delete x[e],w)&&D.emit("delete",e,t)},clear:function(){var e=x;b&&b(),x=c(null),D.emit("clear",e)},on:function(e,t){return"get"===e?y=!0:"set"===e?F=!0:"delete"===e&&(w=!0),p.call(this,e,t)},emit:f,updateEnv:function(){e=D.original}},o=m?a((function(e){var t=arguments;C&&(t=C(t)),null!==(t=m(t))&&D.delete(t)}),A):0===t?function(){return D.delete("data")}:function(e){return C&&(e=C(arguments)[0]),D.delete(e)},A=a((function(){var e=arguments;return 0===t?x.data:(C&&(e=C(e)),e=m?m(e):String(e[0]),x[e])})),v=a((function(){var e=arguments;return 0===t?D.has("data"):(C&&(e=C(e)),null!==(e=m?m(e):String(e[0]))&&D.has(e))})),d(E,{__memoized__:r(!0),delete:r(o),clear:r(D.clear),_get:r(A),_has:r(v)}),D}})),Ft=ne((function(e,t){"use strict";var n=Te(),a=_e(),r=Oe(),o=yt(),u=Be();t.exports=function e(t){var i,l,s;if(n(t),(i=Object(arguments[1])).async&&i.promise)throw new Error("Options 'async' and 'promise' cannot be used together");return hasOwnProperty.call(t,"__memoized__")&&!i.force?t:(l=u(i.length,t.length,i.async&&r.async),s=o(t,l,i),a(r,(function(e,t){i[t]&&e(i[t],s,i)})),e.__profiler__&&e.__profiler__(s),s.updateEnv(),s.memoized)}})),wt=ne((function(e,t){"use strict";t.exports=function(e){var t,n,a=e.length;if(!a)return"";for(t=String(e[n=0]);--a;)t+=""+e[++n];return t}})),Et=ne((function(e,t){"use strict";t.exports=function(e){return e?function(t){for(var n=String(t[0]),a=0,r=e;--r;)n+=""+t[++a];return n}:function(){return""}}})),Ct=ne((function(e,t){"use strict";t.exports=function(){var e=Number.isNaN;return"function"==typeof e&&!e({})&&e(NaN)&&!e(34)}})),xt=ne((function(e,t){"use strict";t.exports=function(e){return e!=e}})),At=ne((function(e,t){"use strict";t.exports=Ct()()?Number.isNaN:xt()})),kt=ne((function(e,t){"use strict";var n=At(),a=ke(),r=Ne(),o=Array.prototype.indexOf,u=Object.prototype.hasOwnProperty,i=Math.abs,l=Math.floor;t.exports=function(e){var t,s,c;if(!n(e))return o.apply(this,arguments);for(s=a(r(this).length),e=arguments[1],t=e=isNaN(e)?0:0<=e?l(e):a(this.length)-l(i(e));t<s;++t)if(u.call(this,t)&&(c=this[t],n(c)))return t;return-1}})),Bt=ne((function(e,t){"use strict";var n=kt(),a=Object.create;t.exports=function(){var e=0,t=[],r=a(null);return{get:function(e){var a,r=0,o=t,u=e.length;if(0===u)return o[u]||null;if(o=o[u]){for(;r<u-1;){if(-1===(a=n.call(o[0],e[r])))return null;o=o[1][a],++r}return-1===(a=n.call(o[0],e[r]))?null:o[1][a]||null}return null},set:function(a){var o,u=0,i=t,l=a.length;if(0===l)i[l]=++e;else{for(i[l]||(i[l]=[[],[]]),i=i[l];u<l-1;)-1===(o=n.call(i[0],a[u]))&&(o=i[0].push(a[u])-1,i[1].push([[],[]])),i=i[1][o],++u;-1===(o=n.call(i[0],a[u]))&&(o=i[0].push(a[u])-1),i[1][o]=++e}return r[e]=a,e},delete:function(e){var a,o=0,u=t,i=r[e],l=i.length,s=[];if(0===l)delete u[l];else if(u=u[l]){for(;o<l-1;){if(-1===(a=n.call(u[0],i[o])))return;s.push(u,a),u=u[1][a],++o}if(-1===(a=n.call(u[0],i[o])))return;for(e=u[1][a],u[0].splice(a,1),u[1].splice(a,1);!u[0].length&&s.length;)a=s.pop(),(u=s.pop())[0].splice(a,1),u[1].splice(a,1)}delete r[e]},clear:function(){t=[],r=a(null)}}}})),Tt=ne((function(e,t){"use strict";var n=kt();t.exports=function(){var e=0,t=[],a=[];return{get:function(e){return-1===(e=n.call(t,e[0]))?null:a[e]},set:function(n){return t.push(n[0]),a.push(++e),e},delete:function(e){-1!==(e=n.call(a,e))&&(t.splice(e,1),a.splice(e,1))},clear:function(){t=[],a=[]}}}})),Nt=ne((function(e,t){"use strict";var n=kt(),a=Object.create;t.exports=function(e){var t=0,r=[[],[]],o=a(null);return{get:function(t){for(var a,o=0,u=r;o<e-1;){if(-1===(a=n.call(u[0],t[o])))return null;u=u[1][a],++o}return-1!==(a=n.call(u[0],t[o]))&&u[1][a]||null},set:function(a){for(var u,i=0,l=r;i<e-1;)-1===(u=n.call(l[0],a[i]))&&(u=l[0].push(a[i])-1,l[1].push([[],[]])),l=l[1][u],++i;return-1===(u=n.call(l[0],a[i]))&&(u=l[0].push(a[i])-1),l[1][u]=++t,o[t]=a,t},delete:function(t){for(var a,u=0,i=r,l=[],s=o[t];u<e-1;){if(-1===(a=n.call(i[0],s[u])))return;l.push(i,a),i=i[1][a],++u}if(-1!==(a=n.call(i[0],s[u]))){for(t=i[1][a],i[0].splice(a,1),i[1].splice(a,1);!i[0].length&&l.length;)a=l.pop(),(i=l.pop())[0].splice(a,1),i[1].splice(a,1);delete o[t]}},clear:function(){r=[[],[]],o=a(null)}}}})),Rt=ne((function(e,t){"use strict";var n=Te(),a=_e(),r=Function.prototype.call;t.exports=function(e,t){var o={},u=arguments[2];return n(t),a(e,(function(e,n,a,i){o[n]=r.call(t,u,e,n,a,i)})),o}})),_t=ne((function(e,t){"use strict";function n(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}function o(e){var t,r,o=a.createTextNode(""),u=0;return new e((function(){var e;if(t)r&&(t=r.concat(t));else{if(!r)return;t=r}if(r=t,t=null,"function"==typeof r)e=r,r=null,e();else for(o.data=u=++u%2;r;)e=r.shift(),r.length||(r=null),e()})).observe(o,{characterData:!0}),function(e){n(e),t?"function"==typeof t?t=[t,e]:t.push(e):(t=e,o.data=u=++u%2)}}t.exports=function(){if("object"===("undefined"==typeof process?"undefined":r(process))&&process&&"function"==typeof process.nextTick)return process.nextTick;if("function"==typeof queueMicrotask)return function(e){queueMicrotask(n(e))};if("object"===(void 0===a?"undefined":r(a))&&a){if("function"==typeof MutationObserver)return o(MutationObserver);if("function"==typeof WebKitMutationObserver)return o(WebKitMutationObserver)}return"function"==typeof setImmediate?function(e){setImmediate(n(e))}:"function"==typeof setTimeout||"object"===("undefined"==typeof setTimeout?"undefined":r(setTimeout))?function(e){setTimeout(n(e),0)}:null}()})),Ot=ne((function(){"use strict";var e=ht(),t=Rt(),n=Ve(),a=$e(),r=_t(),o=Array.prototype.slice,u=Function.prototype.apply,i=Object.create;Oe().async=function(l,s){var c,d,p,f=i(null),D=i(null),m=s.memoized,h=s.original;s.memoized=a((function(e){var t=arguments,n=t[t.length-1];return"function"==typeof n&&(c=n,t=o.call(t,0,-1)),m.apply(d=this,p=t)}),m);try{n(s.memoized,m)}catch(l){}s.on("get",(function(e){var t,n,a;c&&(f[e]?("function"==typeof f[e]?f[e]=[f[e],c]:f[e].push(c),c=null):(t=c,n=d,a=p,c=d=p=null,r((function(){var r;hasOwnProperty.call(D,e)?(r=D[e],s.emit("getasync",e,a,n),u.call(t,r.context,r.args)):(c=t,d=n,p=a,m.apply(n,a))}))))})),s.original=function(){var t,n,a,o;return c?(t=e(arguments),a=c,c=d=p=null,t.push(n=function t(n){var a,i,l=t.id;if(null==l)r(u.bind(t,this,arguments));else if(delete t.id,a=f[l],delete f[l],a)return i=e(arguments),s.has(l)&&(n?s.delete(l):(D[l]={context:this,args:i},s.emit("setasync",l,"function"==typeof a?1:a.length))),"function"==typeof a?o=u.call(a,this,i):a.forEach((function(e){o=u.call(e,this,i)}),this),o}),o=u.call(h,this,t),n.cb=a,c=n,o):u.call(h,this,arguments)},s.on("set",(function(e){c?(f[e]?"function"==typeof f[e]?f[e]=[f[e],c.cb]:f[e].push(c.cb):f[e]=c.cb,delete c.cb,c.id=e,c=null):s.delete(e)})),s.on("delete",(function(e){var t;hasOwnProperty.call(f,e)||D[e]&&(t=D[e],delete D[e],s.emit("deleteasync",e,o.call(t.args,1)))})),s.on("clear",(function(){var e=D;D=i(null),s.emit("clearasync",t(e,(function(e){return o.call(e.args,1)})))}))}})),St=ne((function(e,t){"use strict";var n=Array.prototype.forEach,a=Object.create;t.exports=function(e){var t=a(null);return n.call(arguments,(function(e){t[e]=!0})),t}})),Mt=ne((function(e,t){"use strict";t.exports=function(e){return"function"==typeof e}})),Pt=ne((function(e,t){"use strict";var n=Mt();t.exports=function(e){try{return e&&n(e.toString)?e.toString():String(e)}catch(e){throw new TypeError("Passed argument cannot be stringifed")}}})),It=ne((function(e,t){"use strict";var n=Ne(),a=Pt();t.exports=function(e){return a(n(e))}})),jt=ne((function(e,t){"use strict";var n=Mt();t.exports=function(e){try{return e&&n(e.toString)?e.toString():String(e)}catch(e){return"<Non-coercible to string value>"}}})),Lt=ne((function(e,t){"use strict";var n=jt(),a=/[\\n\\r\\u2028\\u2029]/g;t.exports=function(e){return(e=100<(e=n(e)).length?e.slice(0,99)+"…":e).replace(a,(function(e){return JSON.stringify(e).slice(1,-1)}))}})),qt=ne((function(e,t){function n(e){return!!e&&("object"===r(e)||"function"==typeof e)&&"function"==typeof e.then}t.exports=n,t.exports.default=n})),zt=ne((function(){"use strict";var e=Rt(),t=St(),n=It(),a=Lt(),r=qt(),o=_t(),u=Object.create,i=t("then","then:finally","done","done:finally");Oe().promise=function(t,l){var s=u(null),c=u(null),d=u(null);if(!0===t)t=null;else if(t=n(t),!i[t])throw new TypeError("'"+a(t)+"' is not valid promise mode");l.on("set",(function(e,n,a){var u=!1;if(r(a)){s[e]=1,d[e]=a;var i=function(t){var n=s[e];if(u)throw new Error("Memoizee error: Detected unordered then|done & finally resolution, which in turn makes proper detection of success/failure impossible (when in 'done:finally' mode)\\nConsider to rely on 'then' or 'done' mode instead.");n&&(delete s[e],c[e]=t,l.emit("setasync",e,n))},p=function(){u=!0,s[e]&&(delete s[e],delete d[e],l.delete(e))},f=t;if("then"===(f=f||"then")){var D=function(){o(p)};"function"==typeof(a=a.then((function(e){o(i.bind(this,e))}),D)).finally&&a.finally(D)}else if("done"===f){if("function"!=typeof a.done)throw new Error("Memoizee error: Retrieved promise does not implement 'done' in 'done' mode");a.done(i,p)}else if("done:finally"===f){if("function"!=typeof a.done)throw new Error("Memoizee error: Retrieved promise does not implement 'done' in 'done:finally' mode");if("function"!=typeof a.finally)throw new Error("Memoizee error: Retrieved promise does not implement 'finally' in 'done:finally' mode");a.done(i),a.finally(p)}}else c[e]=a,l.emit("setasync",e,1)})),l.on("get",(function(e,t,n){var a,u;s[e]?++s[e]:(a=d[e],u=function(){l.emit("getasync",e,t,n)},r(a)?"function"==typeof a.done?a.done(u):a.then((function(){o(u)})):u())})),l.on("delete",(function(e){var t;delete d[e],s[e]?delete s[e]:hasOwnProperty.call(c,e)&&(t=c[e],delete c[e],l.emit("deleteasync",e,[t]))})),l.on("clear",(function(){var t=c;c=u(null),s=u(null),d=u(null),l.emit("clearasync",e(t,(function(e){return[e]})))}))}})),Vt=ne((function(){"use strict";var e=Te(),t=_e(),n=Oe(),a=Function.prototype.apply;n.dispose=function(r,o,u){var i;e(r),u.async&&n.async||u.promise&&n.promise?(o.on("deleteasync",i=function(e,t){a.call(r,null,t)}),o.on("clearasync",(function(e){t(e,(function(e,t){i(t,e)}))}))):(o.on("delete",i=function(e,t){r(t)}),o.on("clear",(function(e){t(e,(function(e,t){i(t,e)}))})))}})),$t=ne((function(e,t){"use strict";t.exports=2147483647})),Ht=ne((function(e,t){"use strict";var n=ke(),a=$t();t.exports=function(e){if(e=n(e),a<e)throw new TypeError(e+" exceeds maximum possible timeout");return e}})),Ut=ne((function(){"use strict";var e=ht(),t=_e(),n=_t(),a=qt(),r=Ht(),o=Oe(),u=Function.prototype,i=Math.max,l=Math.min,s=Object.create;o.maxAge=function(c,d,p){var f,D,m,h;(c=r(c))&&(f=s(null),D=p.async&&o.async||p.promise&&o.promise?"async":"",d.on("set"+D,(function(e){f[e]=setTimeout((function(){d.delete(e)}),c),"function"==typeof f[e].unref&&f[e].unref(),h&&(h[e]&&"nextTick"!==h[e]&&clearTimeout(h[e]),h[e]=setTimeout((function(){delete h[e]}),m),"function"==typeof h[e].unref)&&h[e].unref()})),d.on("delete"+D,(function(e){clearTimeout(f[e]),delete f[e],h&&("nextTick"!==h[e]&&clearTimeout(h[e]),delete h[e])})),p.preFetch&&(m=!0===p.preFetch||isNaN(p.preFetch)?.333:i(l(Number(p.preFetch),1),0))&&(h={},m=(1-m)*c,d.on("get"+D,(function(t,r,o){h[t]||(h[t]="nextTick",n((function(){var n;"nextTick"===h[t]&&(delete h[t],d.delete(t),p.async&&(r=e(r)).push(u),n=d.memoized.apply(o,r),p.promise)&&a(n)&&("function"==typeof n.done?n.done(u,u):n.then(u,u))})))}))),d.on("clear"+D,(function(){t(f,(function(e){clearTimeout(e)})),f={},h&&(t(h,(function(e){"nextTick"!==e&&clearTimeout(e)})),h={})})))}})),Gt=ne((function(e,t){"use strict";var n=ke(),a=Object.create,r=Object.prototype.hasOwnProperty;t.exports=function(e){var t,o=0,u=1,i=a(null),l=a(null),s=0;return e=n(e),{hit:function(n){var a=l[n],c=++s;if(i[c]=n,l[n]=c,!a)return++o<=e?void 0:(n=i[u],t(n),n);if(delete i[a],u===a)for(;!r.call(i,++u););},delete:t=function(e){var t=l[e];if(t&&(delete i[t],delete l[e],--o,u===t))if(o)for(;!r.call(i,++u););else s=0,u=1},clear:function(){o=0,u=1,i=a(null),l=a(null),s=0}}}})),Wt=ne((function(){"use strict";var e=ke(),t=Gt(),n=Oe();n.max=function(a,r,o){var u;(a=e(a))&&(u=t(a),a=o.async&&n.async||o.promise&&n.promise?"async":"",r.on("set"+a,o=function(e){void 0!==(e=u.hit(e))&&r.delete(e)}),r.on("get"+a,o),r.on("delete"+a,u.delete),r.on("clear"+a,u.clear))}})),Yt=ne((function(){"use strict";var e=Je(),t=Oe(),n=Object.create,a=Object.defineProperties;t.refCounter=function(r,o,u){var i=n(null);u=u.async&&t.async||u.promise&&t.promise?"async":"";o.on("set"+u,(function(e,t){i[e]=t||1})),o.on("get"+u,(function(e){++i[e]})),o.on("delete"+u,(function(e){delete i[e]})),o.on("clear"+u,(function(){i={}})),a(o.memoized,{deleteRef:e((function(){var e=o.get(arguments);return null!==e&&i[e]?!--i[e]&&(o.delete(e),!0):null})),getRefCount:e((function(){var e=o.get(arguments);return null!==e&&i[e]||0}))})}})),Kt=ne((function(e,t){"use strict";var n=we(),a=Be(),r=Ft();t.exports=function(e){var t,o=n(arguments[1]);return o.normalizer||0!==(t=o.length=a(o.length,e.length,o.async))&&(o.primitive?!1===t?o.normalizer=wt():1<t&&(o.normalizer=Et()(t)):o.normalizer=!1===t?Bt()():1===t?Tt()():Nt()(t)),o.async&&Ot(),o.promise&&zt(),o.dispose&&Vt(),o.maxAge&&Ut(),o.max&&Wt(),o.refCounter&&Yt(),r(e,o)}})),Xt=ne((function(e,a){!function(){"use strict";var e={name:"doT",version:"1.1.1",templateSettings:{evaluate:/\\{\\{([\\s\\S]+?(\\}?)+)\\}\\}/g,interpolate:/\\{\\{=([\\s\\S]+?)\\}\\}/g,encode:/\\{\\{!([\\s\\S]+?)\\}\\}/g,use:/\\{\\{#([\\s\\S]+?)\\}\\}/g,useParams:/(^|[^\\w$])def(?:\\.|\\[[\\'\\"])([\\w$\\.]+)(?:[\\'\\"]\\])?\\s*\\:\\s*([\\w$\\.]+|\\"[^\\"]+\\"|\\'[^\\']+\\'|\\{[^\\}]+\\})/g,define:/\\{\\{##\\s*([\\w\\.$]+)\\s*(\\:|=)([\\s\\S]+?)#\\}\\}/g,defineParams:/^\\s*([\\w$]+):([\\s\\S]+)/,conditional:/\\{\\{\\?(\\?)?\\s*([\\s\\S]*?)\\s*\\}\\}/g,iterate:/\\{\\{~\\s*(?:\\}\\}|([\\s\\S]+?)\\s*\\:\\s*([\\w$]+)\\s*(?:\\:\\s*([\\w$]+))?\\s*\\}\\})/g,varname:"it",strip:!0,append:!0,selfcontained:!1,doNotSkipEncoded:!1},template:void 0,compile:void 0,log:!0};if("object"!==("undefined"==typeof globalThis?"undefined":r(globalThis)))try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__}catch(e){t.globalThis=function(){if("undefined"!=typeof self)return self;if(void 0!==t)return t;if(void 0!==n)return n;if(void 0!==this)return this;throw new Error("Unable to locate global \`this\`")}()}e.encodeHTMLSource=function(e){var t={"&":"&#38;","<":"&#60;",">":"&#62;",'"':"&#34;","'":"&#39;","/":"&#47;"},n=e?/[&<>"'\\/]/g:/&(?!#?\\w+;)|<|>|"|'|\\//g;return function(e){return e?e.toString().replace(n,(function(e){return t[e]||e})):""}},void 0!==a&&a.exports?a.exports=e:"function"==typeof define&&define.amd?define((function(){return e})):globalThis.doT=e;var o={append:{start:"'+(",end:")+'",startencode:"'+encodeHTML("},split:{start:"';out+=(",end:");out+='",startencode:"';out+=encodeHTML("}},u=/$^/;function i(e){return e.replace(/\\\\('|\\\\)/g,"$1").replace(/[\\r\\t\\n]/g," ")}e.template=function(t,n,a){var r,l,s=(n=n||e.templateSettings).append?o.append:o.split,c=0;a=n.use||n.define?function e(t,n,a){return("string"==typeof n?n:n.toString()).replace(t.define||u,(function(e,n,r,o){return(n=0===n.indexOf("def.")?n.substring(4):n)in a||(":"===r?(t.defineParams&&o.replace(t.defineParams,(function(e,t,r){a[n]={arg:t,text:r}})),n in a||(a[n]=o)):new Function("def","def['"+n+"']="+o)(a)),""})).replace(t.use||u,(function(n,r){return t.useParams&&(r=r.replace(t.useParams,(function(e,t,n,r){var o;if(a[n]&&a[n].arg&&r)return o=(n+":"+r).replace(/'|\\\\/g,"_"),a.__exp=a.__exp||{},a.__exp[o]=a[n].text.replace(new RegExp("(^|[^\\\\w$])"+a[n].arg+"([^\\\\w$])","g"),"$1"+r+"$2"),t+"def.__exp['"+o+"']"}))),(r=new Function("def","return "+r)(a))&&e(t,r,a)}))}(n,t,a||{}):t,a=("var out='"+(n.strip?a.replace(/(^|\\r|\\n)\\t* +| +\\t*(\\r|\\n|$)/g," ").replace(/\\r|\\n|\\t|\\/\\*[\\s\\S]*?\\*\\//g,""):a).replace(/'|\\\\/g,"\\\\$&").replace(n.interpolate||u,(function(e,t){return s.start+i(t)+s.end})).replace(n.encode||u,(function(e,t){return r=!0,s.startencode+i(t)+s.end})).replace(n.conditional||u,(function(e,t,n){return t?n?"';}else if("+i(n)+"){out+='":"';}else{out+='":n?"';if("+i(n)+"){out+='":"';}out+='"})).replace(n.iterate||u,(function(e,t,n,a){return t?(c+=1,l=a||"i"+c,t=i(t),"';var arr"+c+"="+t+";if(arr"+c+"){var "+n+","+l+"=-1,l"+c+"=arr"+c+".length-1;while("+l+"<l"+c+"){"+n+"=arr"+c+"["+l+"+=1];out+='"):"';} } out+='"})).replace(n.evaluate||u,(function(e,t){return"';"+i(t)+"out+='"}))+"';return out;").replace(/\\n/g,"\\\\n").replace(/\\t/g,"\\\\t").replace(/\\r/g,"\\\\r").replace(/(\\s|;|\\}|^|\\{)out\\+='';/g,"$1").replace(/\\+''/g,"");r&&(n.selfcontained||!globalThis||globalThis._encodeHTML||(globalThis._encodeHTML=e.encodeHTMLSource(n.doNotSkipEncoded)),a="var encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : ("+e.encodeHTMLSource.toString()+"("+(n.doNotSkipEncoded||"")+"));"+a);try{return new Function(n.varname,a)}catch(t){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+a),t}},e.compile=function(t,n){return e.template(t,null,n)}}()})),Zt=ne((function(e,o){var u;u=function(){"use strict";function e(e){return"function"==typeof e}var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},u=0,i=void 0,l=void 0,s=function(e,t){m[u]=e,m[u+1]=t,2===(u+=2)&&(l?l(h):y())},c=void 0!==t?t:void 0,d=(d=c||{}).MutationObserver||d.WebKitMutationObserver,p="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function D(){var e=setTimeout;return function(){return e(h,1)}}var m=new Array(1e3);function h(){for(var e=0;e<u;e+=2)(0,m[e])(m[e+1]),m[e]=void 0,m[e+1]=void 0;u=0}var g,b,v,y=void 0;function F(e,t){var n,a=this,r=new this.constructor(C),o=(void 0===r[E]&&I(r),a._state);return o?(n=arguments[o-1],s((function(){return M(o,r,n,a._result)}))):O(a,r,e,t),r}function w(e){var t;return e&&"object"===r(e)&&e.constructor===this?e:(T(t=new this(C),e),t)}y=p?function(){return process.nextTick(h)}:d?(b=0,p=new d(h),v=a.createTextNode(""),p.observe(v,{characterData:!0}),function(){v.data=b=++b%2}):f?((g=new MessageChannel).port1.onmessage=h,function(){return g.port2.postMessage(0)}):(void 0===c?function(){try{var e=Function("return this")().require("vertx");return void 0!==(i=e.runOnLoop||e.runOnContext)?function(){i(h)}:D()}catch(e){return D()}}:D)();var E=Math.random().toString(36).substring(2);function C(){}var x=void 0,A=1,k=2;function B(t,n,a){var r,o;n.constructor===t.constructor&&a===F&&n.constructor.resolve===w?(r=t,(o=n)._state===A?R(r,o._result):o._state===k?_(r,o._result):O(o,void 0,(function(e){return T(r,e)}),(function(e){return _(r,e)}))):void 0!==a&&e(a)?function(e,t,n){s((function(e){var a=!1,r=function(e,t,n,a){try{e.call(t,n,a)}catch(e){return e}}(n,t,(function(n){a||(a=!0,(t!==n?T:R)(e,n))}),(function(t){a||(a=!0,_(e,t))}),e._label);!a&&r&&(a=!0,_(e,r))}),e)}(t,n,a):R(t,n)}function T(e,t){if(e===t)_(e,new TypeError("You cannot resolve a promise with itself"));else if(a=r(n=t),null===n||"object"!==a&&"function"!==a)R(e,t);else{n=void 0;try{n=t.then}catch(t){return void _(e,t)}B(e,t,n)}var n,a}function N(e){e._onerror&&e._onerror(e._result),S(e)}function R(e,t){e._state===x&&(e._result=t,e._state=A,0!==e._subscribers.length)&&s(S,e)}function _(e,t){e._state===x&&(e._state=k,e._result=t,s(N,e))}function O(e,t,n,a){var r=e._subscribers,o=r.length;e._onerror=null,r[o]=t,r[o+A]=n,r[o+k]=a,0===o&&e._state&&s(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var a,r=void 0,o=e._result,u=0;u<t.length;u+=3)a=t[u],r=t[u+n],a?M(n,a,r,o):r(o);e._subscribers.length=0}}function M(t,n,a,r){var o=e(a),u=void 0,i=void 0,l=!0;if(o){try{u=a(r)}catch(t){l=!1,i=t}if(n===u)return void _(n,new TypeError("A promises callback cannot return that same promise."))}else u=r;n._state===x&&(o&&l?T(n,u):!1===l?_(n,i):t===A?R(n,u):t===k&&_(n,u))}var P=0;function I(e){e[E]=P++,e._state=void 0,e._result=void 0,e._subscribers=[]}L.prototype._enumerate=function(e){for(var t=0;this._state===x&&t<e.length;t++)this._eachEntry(e[t],t)},L.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,a=n.resolve;if(a===w){var r,o=void 0,u=void 0,i=!1;try{o=e.then}catch(t){i=!0,u=t}o===F&&e._state!==x?this._settledAt(e._state,t,e._result):"function"!=typeof o?(this._remaining--,this._result[t]=e):n===q?(r=new n(C),i?_(r,u):B(r,e,o),this._willSettleAt(r,t)):this._willSettleAt(new n((function(t){return t(e)})),t)}else this._willSettleAt(a(e),t)},L.prototype._settledAt=function(e,t,n){var a=this.promise;a._state===x&&(this._remaining--,e===k?_(a,n):this._result[t]=n),0===this._remaining&&R(a,this._result)},L.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,(function(e){return n._settledAt(A,t,e)}),(function(e){return n._settledAt(k,t,e)}))};var j=L;function L(e,t){this._instanceConstructor=e,this.promise=new e(C),this.promise[E]||I(this.promise),o(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0!==this.length&&(this.length=this.length||0,this._enumerate(t),0!==this._remaining)||R(this.promise,this._result)):_(this.promise,new Error("Array Methods must be provided an Array"))}z.prototype.catch=function(e){return this.then(null,e)},z.prototype.finally=function(t){var n=this.constructor;return e(t)?this.then((function(e){return n.resolve(t()).then((function(){return e}))}),(function(e){return n.resolve(t()).then((function(){throw e}))})):this.then(t,t)};var q=z;function z(e){if(this[E]=P++,this._result=this._state=void 0,this._subscribers=[],C!==e){if("function"!=typeof e)throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof z))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");var t=this;try{e((function(e){T(t,e)}),(function(e){_(t,e)}))}catch(e){_(t,e)}}}return q.prototype.then=F,q.all=function(e){return new j(this,e).promise},q.race=function(e){var t=this;return o(e)?new t((function(n,a){for(var r=e.length,o=0;o<r;o++)t.resolve(e[o]).then(n,a)})):new t((function(e,t){return t(new TypeError("You must pass an array to race."))}))},q.resolve=w,q.reject=function(e){var t=new this(C);return _(t,e),t},q._setScheduler=function(e){l=e},q._setAsap=function(e){s=e},q._asap=s,q.polyfill=function(){var e=void 0;if(void 0!==n)e=n;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var a=null;try{a=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===a&&!t.cast)return}e.Promise=q},q.Promise=q},"object"===r(e)&&void 0!==o?o.exports=u():"function"==typeof define&&define.amd?define(u):e.ES6Promise=u()})),Jt=ne((function(e){var t,n,a=1e5,o=(t=Object.prototype.toString,n=Object.prototype.hasOwnProperty,{Class:function(e){return t.call(e).replace(/^\\[object *|\\]$/g,"")},HasProperty:function(e,t){return t in e},HasOwnProperty:function(e,t){return n.call(e,t)},IsCallable:function(e){return"function"==typeof e},ToInt32:function(e){return e>>0},ToUint32:function(e){return e>>>0}}),u=Math.LN2,i=Math.abs,l=Math.floor,s=Math.log,c=Math.min,d=Math.pow,p=Math.round;function f(e,t,n){return e<t?t:n<e?n:e}var D,m,h,g,b,v,y,F,w,E,C,x=Object.getOwnPropertyNames||function(e){if(e!==Object(e))throw new TypeError("Object.getOwnPropertyNames called on non-object");var t,n=[];for(t in e)o.HasOwnProperty(e,t)&&n.push(t);return n};function A(e){if(x&&D)for(var t=x(e),n=0;n<t.length;n+=1)D(e,t[n],{value:e[t[n]],writable:!1,enumerable:!1,configurable:!1})}function k(e){if(D){if(e.length>a)throw new RangeError("Array too large for polyfill");for(var t=0;t<e.length;t+=1)!function(t){D(e,t,{get:function(){return e._getter(t)},set:function(n){e._setter(t,n)},enumerable:!0,configurable:!1})}(t)}}function B(e,t){return e<<(t=32-t)>>t}function T(e,t){return e<<(t=32-t)>>>t}function N(e){return T(e[0],8)}function R(e,t,n){var a,r,o,p,f,D,m,h=(1<<t-1)-1;function g(e){var t=l(e);return(e=e-t)<.5||!(.5<e||t%2)?t:t+1}for(e!=e?(r=(1<<t)-1,o=d(2,n-1),a=0):e===1/0||e===-1/0?(r=(1<<t)-1,a=e<(o=0)?1:0):0===e?a=1/e==-1/(o=r=0)?1:0:(a=e<0,(e=i(e))>=d(2,1-h)?(r=c(l(s(e)/u),1023),2<=(o=g(e/d(2,r)*d(2,n)))/d(2,n)&&(r+=1,o=1),h<r?(r=(1<<t)-1,o=0):(r+=h,o-=d(2,n))):(r=0,o=g(e/d(2,1-h-n)))),f=[],p=n;p;--p)f.push(o%2?1:0),o=l(o/2);for(p=t;p;--p)f.push(r%2?1:0),r=l(r/2);for(f.push(a?1:0),f.reverse(),D=f.join(""),m=[];D.length;)m.push(parseInt(D.substring(0,8),2)),D=D.substring(8);return m}function _(e,t,n){for(var a,r,o,u,i,l,s=[],c=e.length;c;--c)for(r=e[c-1],a=8;a;--a)s.push(r%2?1:0),r>>=1;return s.reverse(),l=s.join(""),o=(1<<t-1)-1,u=parseInt(l.substring(0,1),2)?-1:1,i=parseInt(l.substring(1,1+t),2),l=parseInt(l.substring(1+t),2),i===(1<<t)-1?0===l?1/0*u:NaN:0<i?u*d(2,i-o)*(1+l/d(2,n)):0!==l?u*d(2,-(o-1))*(l/d(2,n)):u<0?-0:0}function O(e){if((e=o.ToInt32(e))<0)throw new RangeError("ArrayBuffer size is not a small enough positive integer");var t;for(this.byteLength=e,this._bytes=[],this._bytes.length=e,t=0;t<this.byteLength;t+=1)this._bytes[t]=0;A(this)}function S(){}function M(e,t,n){var a=function(e,t,n){var u,i,l,s;if(arguments.length&&"number"!=typeof e)if("object"===r(e)&&e.constructor===a)for(this.length=(u=e).length,this.byteLength=this.length*this.BYTES_PER_ELEMENT,this.buffer=new O(this.byteLength),l=this.byteOffset=0;l<this.length;l+=1)this._setter(l,u._getter(l));else if("object"!==r(e)||e instanceof O||"ArrayBuffer"===o.Class(e)){if("object"!==r(e)||!(e instanceof O||"ArrayBuffer"===o.Class(e)))throw new TypeError("Unexpected argument type(s)");if(this.buffer=e,this.byteOffset=o.ToUint32(t),this.byteOffset>this.buffer.byteLength)throw new RangeError("byteOffset out of range");if(this.byteOffset%this.BYTES_PER_ELEMENT)throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size.");if(arguments.length<3){if(this.byteLength=this.buffer.byteLength-this.byteOffset,this.byteLength%this.BYTES_PER_ELEMENT)throw new RangeError("length of buffer minus byteOffset not a multiple of the element size");this.length=this.byteLength/this.BYTES_PER_ELEMENT}else this.length=o.ToUint32(n),this.byteLength=this.length*this.BYTES_PER_ELEMENT;if(this.byteOffset+this.byteLength>this.buffer.byteLength)throw new RangeError("byteOffset and length reference an area beyond the end of the buffer")}else for(this.length=o.ToUint32((i=e).length),this.byteLength=this.length*this.BYTES_PER_ELEMENT,this.buffer=new O(this.byteLength),l=this.byteOffset=0;l<this.length;l+=1)s=i[l],this._setter(l,Number(s));else{if(this.length=o.ToInt32(e),n<0)throw new RangeError("ArrayBufferView size is not a small enough positive integer");this.byteLength=this.length*this.BYTES_PER_ELEMENT,this.buffer=new O(this.byteLength),this.byteOffset=0}this.constructor=a,A(this),k(this)};return(a.prototype=new S).BYTES_PER_ELEMENT=e,a.prototype._pack=t,a.prototype._unpack=n,a.BYTES_PER_ELEMENT=e,a.prototype.get=a.prototype._getter=function(e){if(arguments.length<1)throw new SyntaxError("Not enough arguments");if(!((e=o.ToUint32(e))>=this.length)){for(var t=[],n=0,a=this.byteOffset+e*this.BYTES_PER_ELEMENT;n<this.BYTES_PER_ELEMENT;n+=1,a+=1)t.push(this.buffer._bytes[a]);return this._unpack(t)}},a.prototype._setter=function(e,t){if(arguments.length<2)throw new SyntaxError("Not enough arguments");if((e=o.ToUint32(e))<this.length)for(var n=this._pack(t),a=0,r=this.byteOffset+e*this.BYTES_PER_ELEMENT;a<this.BYTES_PER_ELEMENT;a+=1,r+=1)this.buffer._bytes[r]=n[a]},a.prototype.set=function(e,t){if(arguments.length<1)throw new SyntaxError("Not enough arguments");var n,a,u,i,l,s,c,d,p,f;if("object"===r(e)&&e.constructor===this.constructor){if(n=e,(u=o.ToUint32(t))+n.length>this.length)throw new RangeError("Offset plus length of array is out of range");if(d=this.byteOffset+u*this.BYTES_PER_ELEMENT,p=n.length*this.BYTES_PER_ELEMENT,n.buffer===this.buffer){for(f=[],l=0,s=n.byteOffset;l<p;l+=1,s+=1)f[l]=n.buffer._bytes[s];for(l=0,c=d;l<p;l+=1,c+=1)this.buffer._bytes[c]=f[l]}else for(l=0,s=n.byteOffset,c=d;l<p;l+=1,s+=1,c+=1)this.buffer._bytes[c]=n.buffer._bytes[s]}else{if("object"!==r(e)||void 0===e.length)throw new TypeError("Unexpected argument type(s)");if(i=o.ToUint32((a=e).length),(u=o.ToUint32(t))+i>this.length)throw new RangeError("Offset plus length of array is out of range");for(l=0;l<i;l+=1)s=a[l],this._setter(u+l,Number(s))}},a.prototype.subarray=function(e,t){e=o.ToInt32(e),t=o.ToInt32(t),arguments.length<1&&(e=0),arguments.length<2&&(t=this.length),e<0&&(e=this.length+e),t<0&&(t=this.length+t),e=f(e,0,this.length);var n=(t=f(t,0,this.length))-e;return new this.constructor(this.buffer,this.byteOffset+e*this.BYTES_PER_ELEMENT,n=n<0?0:n)},a}function P(e,t){return o.IsCallable(e.get)?e.get(t):e[t]}function I(t,n,a){if(0===arguments.length)t=new e.ArrayBuffer(0);else if(!(t instanceof e.ArrayBuffer||"ArrayBuffer"===o.Class(t)))throw new TypeError("TypeError");if(this.buffer=t||new e.ArrayBuffer(0),this.byteOffset=o.ToUint32(n),this.byteOffset>this.buffer.byteLength)throw new RangeError("byteOffset out of range");if(this.byteLength=arguments.length<3?this.buffer.byteLength-this.byteOffset:o.ToUint32(a),this.byteOffset+this.byteLength>this.buffer.byteLength)throw new RangeError("byteOffset and length reference an area beyond the end of the buffer");A(this)}function j(t){return function(n,a){if((n=o.ToUint32(n))+t.BYTES_PER_ELEMENT>this.byteLength)throw new RangeError("Array index out of range");n+=this.byteOffset;for(var r=new e.Uint8Array(this.buffer,n,t.BYTES_PER_ELEMENT),u=[],i=0;i<t.BYTES_PER_ELEMENT;i+=1)u.push(P(r,i));return Boolean(a)===Boolean(C)&&u.reverse(),P(new t(new e.Uint8Array(u).buffer),0)}}function L(t){return function(n,a,r){if((n=o.ToUint32(n))+t.BYTES_PER_ELEMENT>this.byteLength)throw new RangeError("Array index out of range");a=new t([a]);for(var u=new e.Uint8Array(a.buffer),i=[],l=0;l<t.BYTES_PER_ELEMENT;l+=1)i.push(P(u,l));Boolean(r)===Boolean(C)&&i.reverse(),new e.Uint8Array(this.buffer,n,t.BYTES_PER_ELEMENT).set(i)}}D=Object.defineProperty&&function(){try{return Object.defineProperty({},"x",{}),1}catch(e){}}()?Object.defineProperty:function(e,t,n){if(!e===Object(e))throw new TypeError("Object.defineProperty called on non-object");return o.HasProperty(n,"get")&&Object.prototype.__defineGetter__&&Object.prototype.__defineGetter__.call(e,t,n.get),o.HasProperty(n,"set")&&Object.prototype.__defineSetter__&&Object.prototype.__defineSetter__.call(e,t,n.set),o.HasProperty(n,"value")&&(e[t]=n.value),e},e.ArrayBuffer=e.ArrayBuffer||O,E=M(1,(function(e){return[255&e]}),(function(e){return B(e[0],8)})),m=M(1,(function(e){return[255&e]}),N),h=M(1,(function(e){return[(e=p(Number(e)))<0?0:255<e?255:255&e]}),N),g=M(2,(function(e){return[e>>8&255,255&e]}),(function(e){return B(e[0]<<8|e[1],16)})),b=M(2,(function(e){return[e>>8&255,255&e]}),(function(e){return T(e[0]<<8|e[1],16)})),v=M(4,(function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}),(function(e){return B(e[0]<<24|e[1]<<16|e[2]<<8|e[3],32)})),y=M(4,(function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}),(function(e){return T(e[0]<<24|e[1]<<16|e[2]<<8|e[3],32)})),F=M(4,(function(e){return R(e,8,23)}),(function(e){return _(e,8,23)})),w=M(8,(function(e){return R(e,11,52)}),(function(e){return _(e,11,52)})),e.Int8Array=e.Int8Array||E,e.Uint8Array=e.Uint8Array||m,e.Uint8ClampedArray=e.Uint8ClampedArray||h,e.Int16Array=e.Int16Array||g,e.Uint16Array=e.Uint16Array||b,e.Int32Array=e.Int32Array||v,e.Uint32Array=e.Uint32Array||y,e.Float32Array=e.Float32Array||F,e.Float64Array=e.Float64Array||w,E=new e.Uint16Array([4660]),C=18===P(new e.Uint8Array(E.buffer),0),I.prototype.getUint8=j(e.Uint8Array),I.prototype.getInt8=j(e.Int8Array),I.prototype.getUint16=j(e.Uint16Array),I.prototype.getInt16=j(e.Int16Array),I.prototype.getUint32=j(e.Uint32Array),I.prototype.getInt32=j(e.Int32Array),I.prototype.getFloat32=j(e.Float32Array),I.prototype.getFloat64=j(e.Float64Array),I.prototype.setUint8=L(e.Uint8Array),I.prototype.setInt8=L(e.Int8Array),I.prototype.setUint16=L(e.Uint16Array),I.prototype.setInt16=L(e.Int16Array),I.prototype.setUint32=L(e.Uint32Array),I.prototype.setInt32=L(e.Int32Array),I.prototype.setFloat32=L(e.Float32Array),I.prototype.setFloat64=L(e.Float64Array),e.DataView=e.DataView||I})),Qt=ne((function(e){!function(e){"use strict";var t,n,a;function o(){if(void 0===this)throw new TypeError("Constructor WeakMap requires 'new'");if(a(this,"_id","_WeakMap_"+i()+"."+i()),0<arguments.length)throw new TypeError("WeakMap iterable is not supported")}function u(e,n){if(!l(e)||!t.call(e,"_id"))throw new TypeError(n+" method called on incompatible receiver "+r(e))}function i(){return Math.random().toString().substring(2)}function l(e){return Object(e)===e}e.WeakMap||(t=Object.prototype.hasOwnProperty,n=Object.defineProperty&&function(){try{return 1===Object.defineProperty({},"x",{value:1}).x}catch(e){}}(),e.WeakMap=((a=function(e,t,a){n?Object.defineProperty(e,t,{configurable:!0,writable:!0,value:a}):e[t]=a})(o.prototype,"delete",(function(e){var t;return u(this,"delete"),!!l(e)&&!(!(t=e[this._id])||t[0]!==e||(delete e[this._id],0))})),a(o.prototype,"get",(function(e){var t;return u(this,"get"),l(e)&&(t=e[this._id])&&t[0]===e?t[1]:void 0})),a(o.prototype,"has",(function(e){var t;return u(this,"has"),!!l(e)&&!(!(t=e[this._id])||t[0]!==e)})),a(o.prototype,"set",(function(e,t){var n;if(u(this,"set"),l(e))return(n=e[this._id])&&n[0]===e?n[1]=t:a(e,this._id,[e,t]),this;throw new TypeError("Invalid value used as weak map key")})),a(o,"_polyfill",!0),o))}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:void 0!==t?t:void 0!==n?n:e)})),en={helpUrlBase:"https://dequeuniversity.com/rules/",gridSize:200,results:[],resultGroups:[],resultGroupMap:{},impact:Object.freeze(["minor","moderate","serious","critical"]),preload:Object.freeze({assets:["cssom","media"],timeout:1e4}),allOrigins:"<unsafe_all_origins>",sameOrigin:"<same_origin>"},tn=([{name:"NA",value:"inapplicable",priority:0,group:"inapplicable"},{name:"PASS",value:"passed",priority:1,group:"passes"},{name:"CANTTELL",value:"cantTell",priority:2,group:"incomplete"},{name:"FAIL",value:"failed",priority:3,group:"violations"}].forEach((function(e){var t=e.name,n=e.value,a=e.priority;e=e.group;en[t]=n,en[t+"_PRIO"]=a,en[t+"_GROUP"]=e,en.results[a]=n,en.resultGroups[a]=e,en.resultGroupMap[n]=e})),Object.freeze(en.results),Object.freeze(en.resultGroups),Object.freeze(en.resultGroupMap),Object.freeze(en),en),nn=function(){"object"===("undefined"==typeof console?"undefined":r(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},an=/[\\t\\r\\n\\f]/g;function rn(){K(this,rn),this.parent=void 0}Z(rn,[{key:"props",get:function(){throw new Error('VirtualNode class must have a "props" object consisting of "nodeType" and "nodeName" properties')}},{key:"attrNames",get:function(){throw new Error('VirtualNode class must have an "attrNames" property')}},{key:"attr",value:function(){throw new Error('VirtualNode class must have an "attr" function')}},{key:"hasAttr",value:function(){throw new Error('VirtualNode class must have a "hasAttr" function')}},{key:"hasClass",value:function(e){var t=this.attr("class");return!!t&&(e=" "+e+" ",0<=(" "+t+" ").replace(an," ").indexOf(e))}}]);var on=rn,un={},ln=(ae(un,{DqElement:function(){return Jn},aggregate:function(){return ln},aggregateChecks:function(){return Dn},aggregateNodeResults:function(){return hn},aggregateResult:function(){return bn},areStylesSet:function(){return vn},assert:function(){return yn},checkHelper:function(){return Qn},clone:function(){return ea},closest:function(){return ca},collectResultsFromFrames:function(){return tr},contains:function(){return nr},convertSelector:function(){return ia},cssParser:function(){return ta},deepMerge:function(){return ar},escapeSelector:function(){return wn},extendMetaData:function(){return rr},filterHtmlAttrs:function(){return fp},finalizeRuleResult:function(){return mn},findBy:function(){return Ja},getAllChecks:function(){return Za},getAncestry:function(){return Gn},getBaseLang:function(){return nd},getCheckMessage:function(){return cd},getCheckOption:function(){return dd},getEnvironmentData:function(){return pd},getFlattenedTree:function(){return td},getFrameContexts:function(){return Cd},getFriendlyUriEnd:function(){return kn},getNodeAttributes:function(){return Bn},getNodeFromTree:function(){return Xn},getPreloadConfig:function(){return up},getRootNode:function(){return lr},getRule:function(){return xd},getScroll:function(){return Ad},getScrollState:function(){return Bd},getSelector:function(){return Hn},getSelectorData:function(){return qn},getShadowSelector:function(){return Rn},getStandards:function(){return Td},getStyleSheetFactory:function(){return Rd},getXpath:function(){return Wn},injectStyle:function(){return _d},isHidden:function(){return Od},isHtmlElement:function(){return Sd},isNodeInContext:function(){return Md},isShadowRoot:function(){return ur},isValidLang:function(){return Ep},isXHTML:function(){return Nn},matchAncestry:function(){return Id},matches:function(){return sa},matchesExpression:function(){return la},matchesSelector:function(){return Tn},memoize:function(){return Dr},mergeResults:function(){return er},nodeLookup:function(){return Ld},nodeSorter:function(){return jd},parseCrossOriginStylesheet:function(){return Hd},parseSameOriginStylesheet:function(){return Vd},parseStylesheet:function(){return $d},performanceTimer:function(){return Yd},pollyfillElementsFromPoint:function(){return Kd},preload:function(){return ip},preloadCssom:function(){return tp},preloadMedia:function(){return rp},processMessage:function(){return sd},publishMetaData:function(){return sp},querySelectorAll:function(){return cp},querySelectorAllFilter:function(){return ep},queue:function(){return ha},respondable:function(){return Ga},ruleShouldRun:function(){return pp},select:function(){return mp},sendCommandToFrame:function(){return Ya},setScrollState:function(){return hp},shadowSelect:function(){return gp},shadowSelectAll:function(){return bp},shouldPreload:function(){return op},toArray:function(){return Fn},tokenList:function(){return Gc},uniqueArray:function(){return Zd},uuid:function(){return Ta},validInputTypes:function(){return vp},validLangs:function(){return Fp}}),function(e,t,n){return t=t.slice(),n&&t.push(n),n=t.map((function(t){return e.indexOf(t)})).sort(),e[n.pop()]}),sn=tn.CANTTELL_PRIO,cn=tn.FAIL_PRIO,dn=[],pn=(dn[tn.PASS_PRIO]=!0,dn[tn.CANTTELL_PRIO]=null,dn[tn.FAIL_PRIO]=!1,["any","all","none"]);function fn(e,t){pn.reduce((function(n,a){return n[a]=(e[a]||[]).map((function(e){return t(e,a)})),n}),{})}var Dn=function(e){var t=Object.assign({},e),n=(fn(t,(function(e,t){var n=void 0===e.result?-1:dn.indexOf(e.result);e.priority=-1!==n?n:tn.CANTTELL_PRIO,"none"===t&&(e.priority===tn.PASS_PRIO?e.priority=tn.FAIL_PRIO:e.priority===tn.FAIL_PRIO&&(e.priority=tn.PASS_PRIO))})),{all:t.all.reduce((function(e,t){return Math.max(e,t.priority)}),0),none:t.none.reduce((function(e,t){return Math.max(e,t.priority)}),0),any:t.any.reduce((function(e,t){return Math.min(e,t.priority)}),4)%4}),a=(t.priority=Math.max(n.all,n.none,n.any),[]);return pn.forEach((function(e){t[e]=t[e].filter((function(a){return a.priority===t.priority&&a.priority===n[e]})),t[e].forEach((function(e){return a.push(e.impact)}))})),[sn,cn].includes(t.priority)?t.impact=ln(tn.impact,a):t.impact=null,fn(t,(function(e){delete e.result,delete e.priority})),t.result=tn.results[t.priority],delete t.priority,t},mn=function(e){var t=o._audit.rules.find((function(t){return t.id===e.id}));return t&&t.impact&&e.nodes.forEach((function(e){["any","all","none"].forEach((function(n){(e[n]||[]).forEach((function(e){e.impact=t.impact}))}))})),Object.assign(e,hn(e.nodes)),delete e.nodes,e},hn=function(e){var t={},n=((e=e.map((function(e){if(e.any&&e.all&&e.none)return Dn(e);if(Array.isArray(e.node))return mn(e);throw new TypeError("Invalid Result type")})))&&e.length?(n=e.map((function(e){return e.result})),t.result=ln(tn.results,n,t.result)):t.result="inapplicable",tn.resultGroups.forEach((function(e){return t[e]=[]})),e.forEach((function(e){var n=tn.resultGroupMap[e.result];t[n].push(e)})),tn.FAIL_GROUP);return 0===t[n].length&&(n=tn.CANTTELL_GROUP),0<t[n].length?(e=t[n].map((function(e){return e.impact})),t.impact=ln(tn.impact,e)||null):t.impact=null,t};function gn(e,t,n){var a=Object.assign({},t);a.nodes=(a[n]||[]).concat(),tn.resultGroups.forEach((function(e){delete a[e]})),e[n].push(a)}var bn=function(e){var t={};return tn.resultGroups.forEach((function(e){return t[e]=[]})),e.forEach((function(e){e.error?gn(t,e,tn.CANTTELL_GROUP):e.result===tn.NA?gn(t,e,tn.NA_GROUP):tn.resultGroups.forEach((function(n){Array.isArray(e[n])&&0<e[n].length&&gn(t,e,n)}))})),t},vn=function e(n,a,r){var o=t.getComputedStyle(n,null);if(!o)return!1;for(var u=0;u<a.length;++u){var i=a[u];if(o.getPropertyValue(i.property)===i.value)return!0}return!(!n.parentNode||n.nodeName.toUpperCase()===r.toUpperCase())&&e(n.parentNode,a,r)},yn=function(e,t){if(!e)throw new Error(t)},Fn=function(e){return Array.prototype.slice.call(e)},wn=function(e){for(var t,n=String(e),a=n.length,r=-1,o="",u=n.charCodeAt(0);++r<a;)0==(t=n.charCodeAt(r))?o+="�":o+=1<=t&&t<=31||127==t||0==r&&48<=t&&t<=57||1==r&&48<=t&&t<=57&&45==u?"\\\\"+t.toString(16)+" ":0==r&&1==a&&45==t||!(128<=t||45==t||95==t||48<=t&&t<=57||65<=t&&t<=90||97<=t&&t<=122)?"\\\\"+n.charAt(r):n.charAt(r);return o};function En(e,t){return[e.substring(0,t),e.substring(t)]}function Cn(e){return e.replace(/\\s+$/,"")}var xn,An,kn=function(){var e,t,n,a,r,o,u,i,l=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",s=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};if(!(l.length<=1||"data:"===l.substr(0,5)||"javascript:"===l.substr(0,11)||l.includes("?")))return e=s.currentDomain,s=void 0===(s=s.maxLength)?25:s,u=o=i=r=a="",(n=l).includes("#")&&(l=(t=G(En(l,l.indexOf("#")),2))[0],u=t[1]),l.includes("?")&&(l=(t=G(En(l,l.indexOf("?")),2))[0],o=t[1]),l.includes("://")?(a=(t=G(l.split("://"),2))[0],r=(t=G(En(l=t[1],l.indexOf("/")),2))[0],l=t[1]):"//"===l.substr(0,2)&&(r=(t=G(En(l=l.substr(2),l.indexOf("/")),2))[0],l=t[1]),(r="www."===r.substr(0,4)?r.substr(4):r)&&r.includes(":")&&(r=(t=G(En(r,r.indexOf(":")),2))[0],i=t[1]),n=(t={original:n,protocol:a,domain:r,port:i,path:l,query:o,hash:u}).domain,a=t.hash,i=(r=t.path).substr(r.substr(0,r.length-2).lastIndexOf("/")+1),a?i&&(i+a).length<=s?Cn(i+a):i.length<2&&2<a.length&&a.length<=s?Cn(a):void 0:n&&n.length<s&&r.length<=1||r==="/"+i&&n&&e&&n!==e&&(n+r).length<=s?Cn(n+r):(-1===(l=i.lastIndexOf("."))||1<l)&&(-1!==l||2<i.length)&&i.length<=s&&!i.match(/index(\\.[a-zA-Z]{2-4})?/)&&!function(e){var t=0<arguments.length&&void 0!==e?e:"";return 0!==t.length&&(t.match(/[0-9]/g)||"").length>=t.length/2}(i)?Cn(i):void 0},Bn=function(e){return(e.attributes instanceof t.NamedNodeMap?e:e.cloneNode(!1)).attributes},Tn=function(e,t){return!!e[xn=xn&&e[xn]?xn:function(e){for(var t,n=["matches","matchesSelector","mozMatchesSelector","webkitMatchesSelector","msMatchesSelector"],a=n.length,r=0;r<a;r++)if(e[t=n[r]])return t}(e)]&&e[xn](t)},Nn=function(e){return!!e.createElement&&"A"===e.createElement("A").localName},Rn=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};if(!t)return"";var r=t.getRootNode&&t.getRootNode()||a;if(11!==r.nodeType)return e(t,n,r);for(var o=[];11===r.nodeType;){if(!r.host)return"";o.unshift({elm:t,doc:r}),r=(t=r.host).getRootNode()}return o.unshift({elm:t,doc:r}),o.map((function(t){var a=t.elm;t=t.doc;return e(a,n,t)}))},_n=["class","style","id","selected","checked","disabled","tabindex","aria-checked","aria-selected","aria-invalid","aria-activedescendant","aria-busy","aria-disabled","aria-expanded","aria-grabbed","aria-pressed","aria-valuenow"],On=31,Sn=/([\\\\"])/g,Mn=/(\\r\\n|\\r|\\n)/g;function Pn(e){return e.replace(Sn,"\\\\$1").replace(Mn,"\\\\a ")}function In(e,t){var n,a=t.name;return-1!==a.indexOf("href")||-1!==a.indexOf("src")?(n=kn(e.getAttribute(a)))?wn(t.name)+'$="'+Pn(n)+'"':wn(t.name)+'="'+Pn(e.getAttribute(a))+'"':wn(a)+'="'+Pn(t.value)+'"'}function jn(e,t){return e.count<t.count?-1:e.count===t.count?0:1}function Ln(e){return!_n.includes(e.name)&&-1===e.name.indexOf(":")&&(!e.value||e.value.length<On)}function qn(e){for(var t={classes:{},tags:{},attributes:{}},n=(e=Array.isArray(e)?e:[e]).slice(),a=[];n.length;)!function(){var e,r=n.pop(),o=r.actualNode;for(o.querySelectorAll&&(e=o.nodeName,t.tags[e]?t.tags[e]++:t.tags[e]=1,o.classList&&Array.from(o.classList).forEach((function(e){e=wn(e),t.classes[e]?t.classes[e]++:t.classes[e]=1})),o.hasAttributes())&&Array.from(Bn(o)).filter(Ln).forEach((function(e){(e=In(o,e))&&(t.attributes[e]?t.attributes[e]++:t.attributes[e]=1)})),r.children.length&&(a.push(n),n=r.children.slice());!n.length&&a.length;)n=a.pop()}();return t}function zn(e){return void 0===An&&(An=Nn(a)),wn(An?e.localName:e.nodeName.toLowerCase())}function Vn(e,t){var n,a,r,o,u,i,l,s,c,d="",p=(a=e,r=[],o=t.classes,u=t.tags,a.classList&&Array.from(a.classList).forEach((function(e){e=wn(e),o[e]<u[a.nodeName]&&r.push({name:e,count:o[e],species:"class"})})),r.sort(jn));i=e,l=[],s=t.attributes,c=t.tags,i.hasAttributes()&&Array.from(Bn(i)).filter(Ln).forEach((function(e){(e=In(i,e))&&s[e]<c[i.nodeName]&&l.push({name:e,count:s[e],species:"attribute"})})),t=l.sort(jn);return p.length&&1===p[0].count?n=[p[0]]:t.length&&1===t[0].count?(n=[t[0]],d=zn(e)):((n=p.concat(t)).sort(jn),(n=n.slice(0,3)).some((function(e){return"class"===e.species}))?n.sort((function(e,t){return e.species!==t.species&&"class"===e.species?-1:e.species===t.species?0:1})):d=zn(e)),d+n.reduce((function(e,t){switch(t.species){case"class":return e+"."+t.name;case"attribute":return e+"["+t.name+"]"}return e}),"")}function $n(e,t,n){if(!o._selectorData)throw new Error("Expect axe._selectorData to be set up");var r,u,i=void 0!==(t=t.toRoot)&&t;do{var l=function(e){var t;if(e.getAttribute("id"))return t=e.getRootNode&&e.getRootNode()||a,(e="#"+wn(e.getAttribute("id")||"")).match(/player_uid_/)||1!==t.querySelectorAll(e).length?void 0:e}(e);l||(l=Vn(e,o._selectorData),l+=function(e,t){var n=e.parentNode&&Array.from(e.parentNode.children||"")||[];return n.find((function(n){return n!==e&&Tn(n,t)}))?":nth-child("+(1+n.indexOf(e))+")":""}(e,l)),r=r?l+" > "+r:l,u=u?u.filter((function(e){return Tn(e,r)})):Array.from(n.querySelectorAll(r)),e=e.parentElement}while((1<u.length||i)&&e&&11!==e.nodeType);return 1===u.length?r:-1!==r.indexOf(" > ")?":root"+r.substring(r.indexOf(" > ")):":root"}function Hn(e,t){return Rn($n,e,t)}function Un(e){var t,n=e.nodeName.toLowerCase(),a=e.parentElement;return a?(t="","head"!==n&&"body"!==n&&1<a.children.length&&(e=Array.prototype.indexOf.call(a.children,e)+1,t=":nth-child(".concat(e,")")),Un(a)+" > "+n+t):n}function Gn(e,t){return Rn(Un,e,t)}var Wn=function(e){return function e(t,n){var a,r,o,u;if(!t)return[];if(!n&&9===t.nodeType)return[{str:"html"}];if(n=n||[],t.parentNode&&t.parentNode!==t&&(n=e(t.parentNode,n)),t.previousSibling){for(r=1,a=t.previousSibling;1===a.nodeType&&a.nodeName===t.nodeName&&r++,a=a.previousSibling;);1===r&&(r=null)}else if(t.nextSibling)for(a=t.nextSibling;a=1===a.nodeType&&a.nodeName===t.nodeName?(r=1,null):(r=null,a.previousSibling););return 1===t.nodeType&&((o={}).str=t.nodeName.toLowerCase(),(u=t.getAttribute&&wn(t.getAttribute("id")))&&1===t.ownerDocument.querySelectorAll("#"+u).length&&(o.id=t.getAttribute("id")),1<r&&(o.count=r),n.push(o)),n}(e).reduce((function(e,t){return t.id?"/".concat(t.str,"[@id='").concat(t.id,"']"):e+"/".concat(t.str)+(0<t.count?"[".concat(t.count,"]"):"")}),"")},Yn={},Kn={set:function(e,t){var n;yn("string"==typeof(n=e),"key must be a string, "+r(n)+" given"),yn(""!==n,"key must not be empty"),Yn[e]=t},get:function(e,t){var n;return yn("function"==typeof(n=t)||void 0===n,"creator must be a function or undefined, "+r(n)+" given"),e in Yn?Yn[e]:"function"==typeof t?(n=t(),yn(void 0!==n,"Cache creator function should not return undefined"),this.set(e,n),Yn[e]):void 0},clear:function(){Yn={}}},Xn=function(e,t){return t=t||e,Kn.get("nodeMap")?Kn.get("nodeMap").get(t):null};function Zn(e){var n,a,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};this.spec=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},e instanceof on?(this._virtualNode=e,this._element=e.actualNode):(this._element=e,this._virtualNode=Xn(e)),this.fromFrame=1<(null==(n=this.spec.selector)?void 0:n.length),r.absolutePaths&&(this._options={toRoot:!0}),this.nodeIndexes=[],Array.isArray(this.spec.nodeIndexes)?this.nodeIndexes=this.spec.nodeIndexes:"number"==typeof(null==(n=this._virtualNode)?void 0:n.nodeIndex)&&(this.nodeIndexes=[this._virtualNode.nodeIndex]),this.source=null,o._audit.noHtml||(this.source=null!=(r=this.spec.source)?r:null!=(n=this._element)&&n.outerHTML?((r=n.outerHTML)||"function"!=typeof t.XMLSerializer||(r=(new t.XMLSerializer).serializeToString(n)),(n=r||"").length>(a=a||300)&&(a=n.indexOf(">"),n=n.substring(0,a+1)),n):"")}Zn.prototype={get selector(){return this.spec.selector||[Hn(this.element,this._options)]},get ancestry(){return this.spec.ancestry||[Gn(this.element)]},get xpath(){return this.spec.xpath||[Wn(this.element)]},get element(){return this._element},toJSON:function(){return{selector:this.selector,source:this.source,xpath:this.xpath,ancestry:this.ancestry,nodeIndexes:this.nodeIndexes}}},Zn.fromFrame=function(e,t,n){return e=Zn.mergeSpecs(e,n),new Zn(n.element,t,e)},Zn.mergeSpecs=function(e,t){return U({},e,{selector:[].concat($(t.selector),$(e.selector)),ancestry:[].concat($(t.ancestry),$(e.ancestry)),xpath:[].concat($(t.xpath),$(e.xpath)),nodeIndexes:[].concat($(t.nodeIndexes),$(e.nodeIndexes))})};var Jn=Zn,Qn=function(e,n,a,r){return{isAsync:!1,async:function(){return this.isAsync=!0,function(t){t instanceof Error==0?(e.result=t,a(e)):r(t)}},data:function(t){e.data=t},relatedNodes:function(a){t.Node&&(a=a instanceof t.Node||a instanceof on?[a]:Fn(a),e.relatedNodes=[],a.forEach((function(a){(a=a instanceof on?a.actualNode:a)instanceof t.Node&&(a=new Jn(a,n),e.relatedNodes.push(a))})))}}},ea=function e(n){var a,o,u,i=n;if(null!=(a=t)&&a.Node&&n instanceof t.Node||null!=(a=t)&&a.HTMLCollection&&n instanceof t.HTMLCollection)return n;if(null!==n&&"object"===r(n))if(Array.isArray(n))for(i=[],o=0,u=n.length;o<u;o++)i[o]=e(n[o]);else for(o in i={},n)i[o]=e(n[o]);return i},ta=((Po=new(re(ve()).CssSelectorParser)).registerSelectorPseudos("not"),Po.registerSelectorPseudos("is"),Po.registerNestingOperators(">"),Po.registerAttrEqualityMods("^","$","*","~"),Po);function na(e,t){return u=t,1===(o=e).props.nodeType&&("*"===u.tag||o.props.nodeName===u.tag)&&(r=e,!(o=t).classes||o.classes.every((function(e){return r.hasClass(e.value)})))&&(a=e,!(u=t).attributes||u.attributes.every((function(e){var t=a.attr(e.key);return null!==t&&e.test(t)})))&&(o=e,!(u=t).id||o.props.id===u.id)&&(n=e,!((o=t).pseudos&&!o.pseudos.every((function(e){if("not"===e.name)return!e.expressions.some((function(e){return la(n,e)}));if("is"===e.name)return e.expressions.some((function(e){return la(n,e)}));throw new Error("the pseudo selector "+e.name+" has not yet been implemented")}))));var n,a,r,o,u}aa=/(?=[\\-\\[\\]{}()*+?.\\\\\\^$|,#\\s])/g;var aa,ra=function(e){return e.replace(aa,"\\\\")},oa=/\\\\/g;function ua(e){return e.map((function(e){for(var t=[],n=e.rule;n;)t.push({tag:n.tagName?n.tagName.toLowerCase():"*",combinator:n.nestingOperator||" ",id:n.id,attributes:function(e){if(e)return e.map((function(e){var t,n,a=e.name.replace(oa,""),r=(e.value||"").replace(oa,"");switch(e.operator){case"^=":n=new RegExp("^"+ra(r));break;case"$=":n=new RegExp(ra(r)+"$");break;case"~=":n=new RegExp("(^|\\\\s)"+ra(r)+"(\\\\s|$)");break;case"|=":n=new RegExp("^"+ra(r)+"(-|$)");break;case"=":t=function(e){return r===e};break;case"*=":t=function(e){return e&&e.includes(r)};break;case"!=":t=function(e){return r!==e};break;default:t=function(e){return null!==e}}return""===r&&/^[*$^]=$/.test(e.operator)&&(t=function(){return!1}),{key:a,value:r,type:void 0===e.value?"attrExist":"attrValue",test:t=t||function(e){return e&&n.test(e)}}}))}(n.attrs),classes:function(e){if(e)return e.map((function(e){return{value:e=e.replace(oa,""),regexp:new RegExp("(^|\\\\s)"+ra(e)+"(\\\\s|$)")}}))}(n.classNames),pseudos:function(e){if(e)return e.map((function(e){var t;return["is","not"].includes(e.name)&&(t=ua(t=(t=e.value).selectors||[t])),{name:e.name,expressions:t,value:e.value}}))}(n.pseudos)}),n=n.rule;return t}))}function ia(e){return ua((e=ta.parse(e)).selectors||[e])}function la(e,t,n){return function e(t,n,a,r){if(!t)return!1;for(var o=Array.isArray(n)?n[a]:n,u=na(t,o);!u&&r&&t.parent;)u=na(t=t.parent,o);if(0<a){if(!1===[" ",">"].includes(o.combinator))throw new Error("axe.utils.matchesExpression does not support the combinator: "+o.combinator);u=u&&e(t.parent,n,a-1," "===o.combinator)}return u}(e,t,t.length-1,n)}var sa=function(e,t){return ia(t).some((function(t){return la(e,t)}))},ca=function(e,t){for(;e;){if(sa(e,t))return e;if(void 0===e.parent)throw new TypeError("Cannot resolve parent for non-DOM nodes");e=e.parent}return null};function da(){}function pa(e){if("function"!=typeof e)throw new TypeError("Queue methods require functions as arguments")}for(var fa,Da,ma,ha=function(){function e(e){t=e,setTimeout((function(){null!=t&&nn("Uncaught error (of queue)",t)}),1)}var t,n=[],a=0,o=0,u=da,i=!1,l=e;function s(e){return u=da,l(e),n}function c(){for(var e=n.length;a<e;a++){var t=n[a];try{t.call(null,function(e){return function(t){n[e]=t,--o||u===da||(i=!0,u(n))}}(a),s)}catch(e){s(e)}}}var d={defer:function(e){var a;if("object"===r(e)&&e.then&&e.catch&&(a=e,e=function(e,t){a.then(e).catch(t)}),pa(e),void 0===t){if(i)throw new Error("Queue already completed");return n.push(e),++o,c(),d}},then:function(e){if(pa(e),u!==da)throw new Error("queue \`then\` already set");return t||(u=e,o)||(i=!0,u(n)),d},catch:function(n){if(pa(n),l!==e)throw new Error("queue \`catch\` already set");return t?(n(t),t=null):l=n,d},abort:s};return d},ga=t.crypto||t.msCrypto,ba=(!fa&&ga&&ga.getRandomValues&&(Da=new Uint8Array(16),fa=function(){return ga.getRandomValues(Da),Da}),fa||(ma=new Array(16),fa=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),ma[t]=e>>>((3&t)<<3)&255;return ma}),"function"==typeof t.Buffer?t.Buffer:Array),va=[],ya={},Fa=0;Fa<256;Fa++)va[Fa]=(Fa+256).toString(16).substr(1),ya[va[Fa]]=Fa;function wa(e,t){return t=t||0,va[e[t++]]+va[e[t++]]+va[e[t++]]+va[e[t++]]+"-"+va[e[t++]]+va[e[t++]]+"-"+va[e[t++]]+va[e[t++]]+"-"+va[e[t++]]+va[e[t++]]+"-"+va[e[t++]]+va[e[t++]]+va[e[t++]]+va[e[t++]]+va[e[t++]]+va[e[+t]]}var Ea=[1|(Po=fa())[0],Po[1],Po[2],Po[3],Po[4],Po[5]],Ca=16383&(Po[6]<<8|Po[7]),xa=0,Aa=0;function ka(e,t,n){var a=t&&n||0,r=t||[],o=(n=null!=(e=e||{}).clockseq?e.clockseq:Ca,null!=e.msecs?e.msecs:(new Date).getTime()),u=null!=e.nsecs?e.nsecs:Aa+1;if((i=o-xa+(u-Aa)/1e4)<0&&null==e.clockseq&&(n=n+1&16383),1e4<=(u=(i<0||xa<o)&&null==e.nsecs?0:u))throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");xa=o,Ca=n;for(var i=(1e4*(268435455&(o+=122192928e5))+(Aa=u))%4294967296,l=(u=(r[a++]=i>>>24&255,r[a++]=i>>>16&255,r[a++]=i>>>8&255,r[a++]=255&i,o/4294967296*1e4&268435455),r[a++]=u>>>8&255,r[a++]=255&u,r[a++]=u>>>24&15|16,r[a++]=u>>>16&255,r[a++]=n>>>8|128,r[a++]=255&n,e.node||Ea),s=0;s<6;s++)r[a+s]=l[s];return t||wa(r)}function Ba(e,t,n){var a=t&&n||0,r=("string"==typeof e&&(t="binary"==e?new ba(16):null,e=null),(e=e||{}).random||(e.rng||fa)());if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t)for(var o=0;o<16;o++)t[a+o]=r[o];return t||wa(r)}(Po=Ba).v1=ka,Po.v4=Ba,Po.parse=function(e,t,n){var a=t&&n||0,r=0;for(t=t||[],e.toLowerCase().replace(/[0-9a-f]{2}/g,(function(e){r<16&&(t[a+r++]=ya[e])}));r<16;)t[a+r++]=0;return t},Po.unparse=wa,Po.BufferClass=ba,o._uuid=ka();var Ta=Ba,Na=Object.freeze(["EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function Ra(){var e="axeAPI",t="";return(e=void 0!==o&&o._audit&&o._audit.application?o._audit.application:e)+"."+(void 0!==o?o.version:t)}function _a(e){Sa(e),yn(t.parent===e,"Source of the response must be the parent window.")}function Oa(e){Sa(e),yn(e.parent===t,"Respondable target must be a frame in the current window")}function Sa(e){yn(t!==e,"Messages can not be sent to the same window.")}var Ma={},Pa=[];function Ia(){var e="".concat(Ba(),":").concat(Ba());return Pa.includes(e)?Ia():(Pa.push(e),e)}function ja(e,t,n,a){var r,u;return"function"==typeof a&&function(e,t,n){var a=!(2<arguments.length&&void 0!==n)||n;yn(!Ma[e],"A replyHandler already exists for this message channel."),Ma[e]={replyHandler:t,sendToParent:a}}(t.channelId,a,n),(n?_a:Oa)(e),t.message instanceof Error&&!n?(o.log(t.message),!1):(n=(a=U({messageId:Ia()},t)).topic,t=a.channelId,u=a.message,t={channelId:t,topic:n,messageId:a.messageId,keepalive:!!a.keepalive,source:Ra()},u instanceof Error?t.error={name:u.name,message:u.message,stack:u.stack}:t.payload=u,r=JSON.stringify(t),!(!(n=o._audit.allowedOrigins)||!n.length||(n.forEach((function(t){try{e.postMessage(r,t)}catch(n){if(n instanceof e.DOMException)throw new Error('allowedOrigins value "'.concat(t,'" is not a valid origin'));throw n}})),0)))}function La(e,t,n){var a=!(2<arguments.length&&void 0!==n)||n;return function(n,r,o){ja(e,{channelId:t,message:n,keepalive:r},a,o)}}function qa(e,n){var a,u,i,l=e.origin,s=e.data;e=e.source;try{var c=function(e){var n,a,o,u;try{n=JSON.parse(e)}catch(e){return}if(null!==(e=n)&&"object"===r(e)&&"string"==typeof e.channelId&&e.source===Ra())return a=(e=n).topic,o=e.channelId,u=e.messageId,e=e.keepalive,{topic:a,message:"object"===r(n.error)?function(e){var n=e.message||"Unknown error occurred",a=Na.includes(e.name)?e.name:"Error";return a=t[a]||Error,e.stack&&(n+="\\n"+e.stack.replace(e.message,"")),new a(n)}(n.error):n.payload,messageId:u,channelId:o,keepalive:!!e}}(s)||{},d=c.channelId,p=c.message,f=c.messageId;if(u=l,((i=o._audit.allowedOrigins)&&i.includes("*")||i.includes(u))&&(a=f,!Pa.includes(a))&&(Pa.push(a),1))if(p instanceof Error&&e.parent!==t)o.log(p);else try{if(c.topic){var D=La(e,d);_a(e),n(c,D)}else{var m=e,h=(b=c).channelId,g=b.message,b=b.keepalive,v=(y=function(e){return Ma[e]}(h)||{}).replyHandler,y=y.sendToParent;if(v){(y?_a:Oa)(m),m=La(m,h,y),!b&&h&&function(e){delete Ma[e]}(h);try{v(g,b,m)}catch(n){o.log(n),m(n,b)}}}}catch(n){var F=e,w=n,E=d;if(!F.parent!==t)o.log(w);else try{ja(F,{topic:null,channelId:E,message:w,messageId:Ia(),keepalive:!0},!0)}catch(n){return void o.log(n)}}}catch(n){o.log(n)}}var za,Va,$a={open:function(e){var n;if("function"==typeof t.addEventListener)return t.addEventListener("message",n=function(t){qa(t,e)},!1),function(){t.removeEventListener("message",n,!1)}},post:function(e,n,a){return"function"==typeof t.addEventListener&&ja(e,n,!1,a)}};function Ha(e){e.updateMessenger($a)}var Ua={};function Ga(e,t,n,a,r){return t={topic:t,message:n,channelId:"".concat(Ba(),":").concat(Ba()),keepalive:a},Va(e,t,r)}function Wa(e,t){var n=e.topic,a=e.message;e=e.keepalive;if(n=Ua[n])try{n(a,e,t)}catch(n){o.log(n),t(n,e)}}function Ya(e,t,n,a){var r,o=e.contentWindow,u=null!=(u=null==(u=t.options)?void 0:u.pingWaitTime)?u:500;o?0===u?Ka(e,t,n,a):(r=setTimeout((function(){r=setTimeout((function(){t.debug?a(Xa("No response from frame",e)):n(null)}),0)}),u),Ga(o,"axe.ping",null,void 0,(function(){clearTimeout(r),Ka(e,t,n,a)}))):(nn("Frame does not have a content window",e),n(null))}function Ka(e,t,n,a){var r=null!=(r=null==(r=t.options)?void 0:r.frameWaitTime)?r:6e4,o=e.contentWindow,u=setTimeout((function(){a(Xa("Axe in frame timed out",e))}),r);Ga(o,"axe.start",t,void 0,(function(e){clearTimeout(u),(e instanceof Error==0?n:a)(e)}))}function Xa(e,t){var n;return o._tree&&(n=Hn(t)),new Error(e+": "+(n||t))}Ga.updateMessenger=function(e){var t=e.open;e=e.post,yn("function"==typeof t,"open callback must be a function"),yn("function"==typeof e,"post callback must be a function"),za&&za(),t=t(Wa);za=t?(yn("function"==typeof t,"open callback must return a cleanup function"),t):null,Va=e},Ga.subscribe=function(e,t){yn("function"==typeof t,"Subscriber callback must be a function"),yn(!Ua[e],"Topic ".concat(e," is already registered to.")),Ua[e]=t},Ga.isInFrame=function(){return!!(0<arguments.length&&void 0!==arguments[0]?arguments[0]:t).frameElement},Ha(Ga);var Za=function(e){return[].concat(e.any||[]).concat(e.all||[]).concat(e.none||[])},Ja=function(e,t,n){if(Array.isArray(e))return e.find((function(e){return"object"===r(e)&&e[t]===n}))};function Qa(e,t){for(var n=0<arguments.length&&void 0!==e?e:[],a=1<arguments.length&&void 0!==t?t:[],r=Math.max(null==n?void 0:n.length,null==a?void 0:a.length),o=0;o<r;o++){var u=null==n?void 0:n[o],i=null==a?void 0:a[o];if("number"!=typeof u||isNaN(u))return 0===o?1:-1;if("number"!=typeof i||isNaN(i))return 0===o?-1:1;if(u!==i)return u-i}return 0}var er=function(e,t){var n=[];return e.forEach((function(e){var a,r=(r=e)&&r.results?Array.isArray(r.results)?r.results.length?r.results:null:[r.results]:null;r&&r.length&&(a=function(e,t){return e.frameElement?new Jn(e.frameElement,t):e.frameSpec?e.frameSpec:null}(e,t),r.forEach((function(e){e.nodes&&a&&(u=e.nodes,r=t,o=a,u.forEach((function(e){e.node=Jn.fromFrame(e.node,r,o),Za(e).forEach((function(e){e.relatedNodes=e.relatedNodes.map((function(e){return Jn.fromFrame(e,r,o)}))}))})));var r,o,u=Ja(n,"id",e.id);if(u){if(e.nodes.length){for(var i=u.nodes,l=e.nodes,s=l[0].node,c=0;c<i.length;c++){var d=i[c].node,p=Qa(d.nodeIndexes,s.nodeIndexes);if(0<p||0===p&&s.selector.length<d.selector.length)return void i.splice.apply(i,[c,0].concat($(l)))}i.push.apply(i,$(l))}}else n.push(e)})))})),n.forEach((function(e){e.nodes&&e.nodes.sort((function(e,t){return Qa(e.node.nodeIndexes,t.node.nodeIndexes)}))})),n};function tr(e,t,n,a,r,o){var u=ha();e.frames.forEach((function(e){var r=e.node,o=V(e,i);u.defer((function(e,u){Ya(r,{options:t,command:n,parameter:a,context:o},(function(t){return e(t?{results:t,frameElement:r}:null)}),u)}))})),u.then((function(e){r(er(e,t))})).catch(o)}function nr(e,t){if(!e.shadowId&&!t.shadowId&&e.actualNode&&"function"==typeof e.actualNode.contains)return e.actualNode.contains(t.actualNode);do{if(e===t)return!0;if(t.nodeIndex<e.nodeIndex)return!1}while(t=t.parent);return!1}var ar=function e(){for(var t={},n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return a.forEach((function(n){if(n&&"object"===r(n)&&!Array.isArray(n))for(var a=0,o=Object.keys(n);a<o.length;a++){var u=o[a];!t.hasOwnProperty(u)||"object"!==r(n[u])||Array.isArray(t[u])?t[u]=n[u]:t[u]=e(t[u],n[u])}})),t},rr=function(e,t){Object.assign(e,t),Object.keys(t).filter((function(e){return"function"==typeof t[e]})).forEach((function(n){e[n]=null;try{e[n]=t[n](e)}catch(n){}}))},or=["article","aside","blockquote","body","div","footer","h1","h2","h3","h4","h5","h6","header","main","nav","p","section","span"],ur=function(e){return!!(e.shadowRoot&&(e=e.nodeName.toLowerCase(),or.includes(e)||/^[a-z][a-z0-9_.-]*-[a-z0-9_.-]*$/.test(e)))},ir={},lr=(ae(ir,{createGrid:function(){return Xr},findElmsInContext:function(){return cr},findNearbyElms:function(){return ao},findUp:function(){return pr},findUpVirtual:function(){return dr},focusDisabled:function(){return po},getComposedParent:function(){return Mr},getElementByReference:function(){return ho},getElementCoordinates:function(){return Ir},getElementStack:function(){return ko},getModalDialog:function(){return uo},getOverflowHiddenAncestors:function(){return gr},getRootNode:function(){return sr},getScrollOffset:function(){return Pr},getTabbableElements:function(){return Bo},getTextElementStack:function(){return Di},getViewportSize:function(){return jr},getVisibleChildTextRects:function(){return fi},hasContent:function(){return yi},hasContentVirtual:function(){return vi},hasLangText:function(){return Fi},idrefs:function(){return No},insertedIntoFocusOrder:function(){return wi},isCurrentPageLink:function(){return mo},isFocusable:function(){return Qo},isHTML5:function(){return Ai},isHiddenForEveryone:function(){return _r},isHiddenWithCSS:function(){return xi},isInTabOrder:function(){return ki},isInTextBlock:function(){return Ri},isInert:function(){return io},isModalOpen:function(){return _i},isMultiline:function(){return Oi},isNativelyFocusable:function(){return Jo},isNode:function(){return Si},isOffscreen:function(){return Lr},isOpaque:function(){return Bc},isSkipLink:function(){return Tc},isVisible:function(){return Oc},isVisibleOnScreen:function(){return zr},isVisibleToScreenReaders:function(){return Pu},isVisualContent:function(){return hi},reduceToElementsBelowFloating:function(){return Sc},shadowElementsFromPoint:function(){return Lc},urlPropsFromAttribute:function(){return qc},visuallyContains:function(){return Mc},visuallyOverlaps:function(){return zc},visuallySort:function(){return go}}),function(e){var t=e.getRootNode&&e.getRootNode()||a;return t===e?a:t}),sr=lr,cr=function(e){var t=e.context,n=e.value,a=e.attr;e=void 0===(e=e.elm)?"":e,n=wn(n),t=9===t.nodeType||11===t.nodeType?t:sr(t);return Array.from(t.querySelectorAll(e+"["+a+"="+n+"]"))},dr=function(e,t){var n=e.actualNode;if(!e.shadowId&&"function"==typeof e.actualNode.closest)return e.actualNode.closest(t)||null;for(;(n=(n=n.assignedSlot||n.parentNode)&&11===n.nodeType?n.host:n)&&!Tn(n,t)&&n!==a.documentElement;);return n&&Tn(n,t)?n:null},pr=function(e,t){return dr(Xn(e),t)},fr=re(Kt()),Dr=(o._memoizedFns=[],function(e){return e=(0,fr.default)(e),o._memoizedFns.push(e),e});function mr(e,t){return(0|e.left)<(0|t.right)&&(0|e.right)>(0|t.left)&&(0|e.top)<(0|t.bottom)&&(0|e.bottom)>(0|t.top)}var hr=Dr((function(e){var t=[];return e?("hidden"===e.getComputedStylePropertyValue("overflow")&&t.push(e),t.concat(hr(e.parent))):t})),gr=hr,br=/rect\\s*\\(([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px\\s*\\)/,vr=/(\\w+)\\((\\d+)/;function yr(e){return["style","script","noscript","template"].includes(e.props.nodeName)}function Fr(e){return"area"!==e.props.nodeName&&"none"===e.getComputedStylePropertyValue("display")}function wr(e){return!(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).isAncestor&&["hidden","collapse"].includes(e.getComputedStylePropertyValue("visibility"))}function Er(e){return!!(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).isAncestor&&"hidden"===e.getComputedStylePropertyValue("content-visibility")}function Cr(e){return"true"===e.attr("aria-hidden")}function xr(e){return"0"===e.getComputedStylePropertyValue("opacity")}function Ar(e){var t=Ad(e.actualNode),n=parseInt(e.getComputedStylePropertyValue("height"));e=parseInt(e.getComputedStylePropertyValue("width"));return!!t&&(0===n||0===e)}function kr(e){var t,n;return!(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).isAncestor&&(t=e.boundingClientRect,!!(n=gr(e)).length)&&n.some((function(e){return(e=e.boundingClientRect).width<2||e.height<2||!mr(t,e)}))}function Br(e){var t=e.getComputedStylePropertyValue("clip").match(br),n=e.getComputedStylePropertyValue("clip-path").match(vr);if(t&&5===t.length&&(e=e.getComputedStylePropertyValue("position"),["fixed","absolute"].includes(e)))return t[3]-t[1]<=0&&t[2]-t[4]<=0;if(n){e=n[1];var a=parseInt(n[2],10);switch(e){case"inset":return 50<=a;case"circle":return 0===a}}return!1}function Tr(e,t){var n,a=ca(e,"map");return!a||!((a=a.attr("name"))&&(e=lr(e.actualNode))&&9===e.nodeType&&(n=cp(o._tree,'img[usemap="#'.concat(wn(a),'"]')))&&n.length)||n.some((function(e){return!t(e)}))}function Nr(e){var t;return"details"===(null==(t=e.parent)?void 0:t.props.nodeName)&&(("summary"!==e.props.nodeName||e.parent.children.find((function(e){return"summary"===e.props.nodeName}))!==e)&&!e.parent.hasAttr("open"))}var Rr=[Fr,wr,Er,Nr];function _r(e){var t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).skipAncestors,n=void 0!==(n=n.isAncestor)&&n;return e=Ld(e).vNode,(t?Or:Sr)(e,n)}var Or=Dr((function(e,t){return!!yr(e)||!(!e.actualNode||!Rr.some((function(n){return n(e,{isAncestor:t})}))&&e.actualNode.isConnected)})),Sr=Dr((function(e,t){return!!Or(e,t)||!!e.parent&&Sr(e.parent,!0)})),Mr=function e(t){if(t.assignedSlot)return e(t.assignedSlot);if(t.parentNode){if(1===(t=t.parentNode).nodeType)return t;if(t.host)return t.host}return null},Pr=function(e){var t,n;return 9===(e=!e.nodeType&&e.document?e.document:e).nodeType?(t=e.documentElement,n=e.body,{left:t&&t.scrollLeft||n&&n.scrollLeft||0,top:t&&t.scrollTop||n&&n.scrollTop||0}):{left:e.scrollLeft,top:e.scrollTop}},Ir=function(e){var t=(n=Pr(a)).left,n=n.top;return{top:(e=e.getBoundingClientRect()).top+n,right:e.right+t,bottom:e.bottom+n,left:e.left+t,width:e.right-e.left,height:e.bottom-e.top}},jr=function(e){var t=e.document,n=t.documentElement;return e.innerWidth?{width:e.innerWidth,height:e.innerHeight}:n?{width:n.clientWidth,height:n.clientHeight}:{width:(e=t.body).clientWidth,height:e.clientHeight}},Lr=function(e){if((1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).isAncestor)return!1;var n=Ld(e).domNode;if(n){var r=a.documentElement,o=t.getComputedStyle(n),u=t.getComputedStyle(a.body||r).getPropertyValue("direction"),i=Ir(n);if(i.bottom<0&&(function(e,t){for(e=Mr(e);e&&"html"!==e.nodeName.toLowerCase();){if(e.scrollTop&&0<=(t+=e.scrollTop))return;e=Mr(e)}return 1}(n,i.bottom)||"absolute"===o.position))return!0;if(0!==i.left||0!==i.right)if("ltr"===u){if(i.right<=0)return!0}else if(n=Math.max(r.scrollWidth,jr(t).width),i.left>=n)return!0;return!1}},qr=[xr,Ar,kr,Br,Lr];function zr(e){return e=Ld(e).vNode,Vr(e)}var Vr=Dr((function(e,t){return e.actualNode&&"area"===e.props.nodeName?!Tr(e,Vr):!(_r(e,{skipAncestors:!0,isAncestor:t})||e.actualNode&&qr.some((function(n){return n(e,{isAncestor:t})})))&&(!e.parent||Vr(e.parent,!0))}));function $r(e,n){var a=Math.min(e.top,n.top),r=Math.max(e.right,n.right),o=Math.max(e.bottom,n.bottom);e=Math.min(e.left,n.left);return new t.DOMRect(e,a,r-e,o-a)}function Hr(e,t){var n=e.x,a=(e=e.y,t.top),r=t.right,o=t.bottom;t=t.left;return a<=e&&n<=r&&e<=o&&t<=n}var Ur=0,Gr=.1,Wr=.2,Yr=.3,Kr=0;function Xr(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:a.body,n=1<arguments.length?arguments[1]:void 0,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Kn.get("gridCreated")||r){Kn.set("gridCreated",!0),r||(i=(i=Xn(a.documentElement))||new Uc(a.documentElement),Kr=0,i._stackingOrder=[Jr(Ur,null)],Qr(n=null!=n?n:new eo,i),Ad(i.actualNode)&&(u=new eo(i),i._subGrid=u));for(var u,i,l=a.createTreeWalker(e,t.NodeFilter.SHOW_ELEMENT,null,!1),s=r?l.nextNode():l.currentNode;s;){var c=Xn(s),d=(c&&c.parent?r=c.parent:s.assignedSlot?r=Xn(s.assignedSlot):s.parentElement?r=Xn(s.parentElement):s.parentNode&&Xn(s.parentNode)&&(r=Xn(s.parentNode)),(c=c||new o.VirtualNode(s,r))._stackingOrder=function(e,t,n){var a=t._stackingOrder.slice();if(function(e,t){var n=e.getComputedStylePropertyValue("position"),a=e.getComputedStylePropertyValue("z-index");return"fixed"===n||"sticky"===n||"auto"!==a&&"static"!==n||"1"!==e.getComputedStylePropertyValue("opacity")||"none"!==(e.getComputedStylePropertyValue("-webkit-transform")||e.getComputedStylePropertyValue("-ms-transform")||e.getComputedStylePropertyValue("transform")||"none")||(n=e.getComputedStylePropertyValue("mix-blend-mode"))&&"normal"!==n||(n=e.getComputedStylePropertyValue("filter"))&&"none"!==n||(n=e.getComputedStylePropertyValue("perspective"))&&"none"!==n||(n=e.getComputedStylePropertyValue("clip-path"))&&"none"!==n||"none"!==(e.getComputedStylePropertyValue("-webkit-mask")||e.getComputedStylePropertyValue("mask")||"none")||"none"!==(e.getComputedStylePropertyValue("-webkit-mask-image")||e.getComputedStylePropertyValue("mask-image")||"none")||"none"!==(e.getComputedStylePropertyValue("-webkit-mask-border")||e.getComputedStylePropertyValue("mask-border")||"none")||"isolate"===e.getComputedStylePropertyValue("isolation")||"transform"===(n=e.getComputedStylePropertyValue("will-change"))||"opacity"===n||"touch"===e.getComputedStylePropertyValue("-webkit-overflow-scrolling")?1:(n=e.getComputedStylePropertyValue("contain"),["layout","paint","strict","content"].includes(n)||"auto"!==a&&Zr(t)?1:void 0)}(e,t)){var r=a.findIndex((function(e){return e=e.value,[Ur,Wr,Yr].includes(e)}));r=(-1!==r&&a.splice(r,a.length-r),function(e,t){return"static"!==e.getComputedStylePropertyValue("position")||Zr(t)?e.getComputedStylePropertyValue("z-index"):"auto"}(e,t));if(["auto","0"].includes(r)){for(var o=n.toString();o.length<10;)o="0"+o;a.push(Jr(parseFloat("".concat(Gr).concat(o)),e))}else a.push(Jr(parseInt(r),e))}else"static"!==e.getComputedStylePropertyValue("position")?a.push(Jr(Yr,e)):"none"!==e.getComputedStylePropertyValue("float")&&a.push(Jr(Wr,e));return a}(c,r,Kr++),function(e,t){for(var n=null,a=[e];t;){if(Ad(t.actualNode)){n=t;break}if(t._scrollRegionParent){n=t._scrollRegionParent;break}a.push(t),t=Xn(t.actualNode.parentElement||t.actualNode.parentNode)}return a.forEach((function(e){return e._scrollRegionParent=n})),n}(c,r)),p=(d=d?d._subGrid:n,Ad(c.actualNode)&&(p=new eo(c),c._subGrid=p),c.boundingClientRect);0!==p.width&&0!==p.height&&zr(s)&&Qr(d,c),ur(s)&&Xr(s.shadowRoot,d,c),s=l.nextNode()}}return tn.gridSize}function Zr(e){if(e)return e=e.getComputedStylePropertyValue("display"),["flex","inline-flex","grid","inline-grid"].includes(e)}function Jr(e,t){return{value:e,vNode:t}}function Qr(e,t){t.clientRects.forEach((function(n){null==t._grid&&(t._grid=e),n=e.getGridPositionOfRect(n),e.loopGridPosition(n,(function(e){e.includes(t)||e.push(t)}))}))}Z(to,[{key:"toGridIndex",value:function(e){return Math.floor(e/tn.gridSize)}},{key:"getCellFromPoint",value:function(e){var t=e.x;e=e.y,yn(this.boundaries,"Grid does not have cells added"),e=this.toGridIndex(e),t=this.toGridIndex(t);return null!=(t=(e=(yn(Hr({y:e,x:t},this.boundaries),"Element midpoint exceeds the grid bounds"),null!=(e=this.cells[e-this.cells._negativeIndex])?e:[]))[t-e._negativeIndex])?t:[]}},{key:"loopGridPosition",value:function(e,t){var n=(o=e).left,a=o.right,r=o.top,o=o.bottom;this.boundaries&&(e=$r(this.boundaries,e)),this.boundaries=e,no(this.cells,r,o,(function(e,r){no(e,n,a,(function(e,n){t(e,{row:r,col:n})}))}))}},{key:"getGridPositionOfRect",value:function(e){var n=e.top,a=e.right,r=e.bottom,o=e.left,u=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;n=this.toGridIndex(n-u),a=this.toGridIndex(a+u-1),r=this.toGridIndex(r+u-1),o=this.toGridIndex(o-u);return new t.DOMRect(o,n,a-o,r-n)}}]);var eo=to;function to(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null;K(this,to),this.container=e,this.cells=[]}function no(e,t,n,a){if(null!=e._negativeIndex||(e._negativeIndex=0),t<e._negativeIndex){for(var r=0;r<e._negativeIndex-t;r++)e.splice(0,0,[]);e._negativeIndex=t}for(var o,u=t-e._negativeIndex,i=n-e._negativeIndex,l=u;l<=i;l++)null==e[o=l]&&(e[o]=[]),a(e[l],l+e._negativeIndex)}function ao(e){var t,n,a,r,o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;return Xr(),null!=(a=e._grid)&&null!=(a=a.cells)&&a.length?(a=e.boundingClientRect,t=e._grid,n=ro(e),a=t.getGridPositionOfRect(a,o),r=[],t.loopGridPosition(a,(function(t){var a,o=Q(t);try{for(o.s();!(a=o.n()).done;){var u=a.value;u&&u!==e&&!r.includes(u)&&n===ro(u)&&r.push(u)}}catch(t){o.e(t)}finally{o.f()}})),r):[]}var ro=Dr((function(e){return!!e&&("fixed"===e.getComputedStylePropertyValue("position")||ro(e.parent))}));function oo(e,n){var a=Math.max(e.left,n.left),r=Math.min(e.right,n.right),o=Math.max(e.top,n.top);e=Math.min(e.bottom,n.bottom);return r<=a||e<=o?null:new t.DOMRect(a,o,r-a,e-o)}var uo=Dr((function(){var e;return o._tree&&(e=ep(o._tree[0],"dialog[open]",(function(e){var t=e.boundingClientRect;return a.elementsFromPoint(t.left+1,t.top+1).includes(e.actualNode)&&zr(e)}))).length?e.find((function(e){var t=e.boundingClientRect;return a.elementsFromPoint(t.left-10,t.top-10).includes(e.actualNode)}))||(null!=(e=e.find((function(e){e=null!=(e=function(e){Xr();var n=o._tree[0]._grid,a=new t.DOMRect(0,0,t.innerWidth,t.innerHeight);if(n)for(var r=0;r<n.cells.length;r++){var u=n.cells[r];if(u)for(var i=0;i<u.length;i++){var l=u[i];if(l)for(var s=0;s<l.length;s++){var c=l[s],d=oo(c.boundingClientRect,a);if("html"!==c.props.nodeName&&c!==e&&"none"!==c.getComputedStylePropertyValue("pointer-events")&&d)return{vNode:c,rect:d}}}}}(e))?e:{};var n=e.vNode;e=e.rect;return!!n&&!a.elementsFromPoint(e.left+1,e.top+1).includes(n.actualNode)})))?e:null):null}));function io(e){var t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).skipAncestors,n=n.isAncestor;return(t?lo:so)(e,n)}var lo=Dr((function(e,t){return!!e.hasAttr("inert")||!(t||!e.actualNode||!(t=uo())||nr(t,e))})),so=Dr((function(e,t){return!!lo(e,t)||!!e.parent&&so(e.parent,!0)})),co=["button","command","fieldset","keygen","optgroup","option","select","textarea","input"],po=function(e){var t=Ld(e).vNode;if(e=t.props.nodeName,co.includes(e)&&t.hasAttr("disabled")||io(t))return!0;for(var n=t.parent,a=[],r=!1;n&&n.shadowId===t.shadowId&&!r&&(a.push(n),"legend"!==n.props.nodeName);){if(void 0!==n._inDisabledFieldset){r=n._inDisabledFieldset;break}"fieldset"===n.props.nodeName&&n.hasAttr("disabled")&&(r=!0),n=n.parent}return a.forEach((function(e){return e._inDisabledFieldset=r})),!!r||"area"!==t.props.nodeName&&!!t.actualNode&&_r(t)},fo=/^\\/\\#/,Do=/^#[!/]/;function mo(e){var n,a,r,o,u=e.getAttribute("href");return!(!u||"#"===u)&&(!!fo.test(u)||(o=e.hash,n=e.protocol,a=e.hostname,r=e.port,e=e.pathname,!Do.test(o)&&("#"===u.charAt(0)||("string"!=typeof(null==(o=t.location)?void 0:o.origin)||-1===t.location.origin.indexOf("://")?null:(u=t.location.origin+t.location.pathname,o=a?"".concat(n,"//").concat(a).concat(r?":".concat(r):""):t.location.origin,(o+=e?("/"!==e[0]?"/":"")+e:t.location.pathname)===u)))))}var ho=function(e,t){var n=e.getAttribute(t);return n&&("href"!==t||mo(e))?(-1!==n.indexOf("#")&&(n=decodeURIComponent(n.substr(n.indexOf("#")+1))),(t=a.getElementById(n))||((t=a.getElementsByName(n)).length?t[0]:null)):null};function go(e,n){Xr();for(var a=Math.max(e._stackingOrder.length,n._stackingOrder.length),r=0;r<a;r++){if(void 0===n._stackingOrder[r])return-1;if(void 0===e._stackingOrder[r])return 1;if(n._stackingOrder[r].value>e._stackingOrder[r].value)return 1;if(n._stackingOrder[r].value<e._stackingOrder[r].value)return-1}var o=e.actualNode,u=n.actualNode;if(o.getRootNode&&o.getRootNode()!==u.getRootNode()){for(var i=[];o;)i.push({root:o.getRootNode(),node:o}),o=o.getRootNode().host;for(;u&&!i.find((function(e){return e.root===u.getRootNode()}));)u=u.getRootNode().host;if((o=i.find((function(e){return e.root===u.getRootNode()})).node)===u)return e.actualNode.getRootNode()!==o.getRootNode()?-1:1}var l,s=(d=t.Node).DOCUMENT_POSITION_FOLLOWING,c=d.DOCUMENT_POSITION_CONTAINS,d=d.DOCUMENT_POSITION_CONTAINED_BY;s=(l=o.compareDocumentPosition(u))&s?1:-1,c=l&c||l&d;return(l=bo(e))===(d=bo(n))||c?s:d-l}function bo(e){return-1!==e.getComputedStylePropertyValue("display").indexOf("inline")?2:function e(t){if(!t)return!1;if(void 0!==t._isFloated)return t._isFloated;var n=t.getComputedStylePropertyValue("float");return"none"!==n?t._isFloated=!0:(n=e(t.parent),t._isFloated=n,n)}(e)?1:0}var vo={};function yo(e,t){e=e.boundingClientRect,t=t.boundingClientRect;var n,a,r,o=(n=e,a=t,r={},[["x","left","right","width"],["y","top","bottom","height"]].forEach((function(e){var t,o=(e=G(e,4))[0],u=e[1],i=e[2];e=e[3];a[u]<n[u]&&a[i]>n[i]?r[o]=n[u]+n[e]/2:(e=a[u]+a[e]/2,t=Math.abs(e-n[u]),e=Math.abs(e-n[i]),r[o]=e<=t?n[u]:n[i])})),r);e=function(e,t,n){var a=e.x;if(function(e,t){var n=e.x;return(e=e.y)>=t.top&&n<=t.right&&e<=t.bottom&&n>=t.left}({x:a,y:e=e.y},n)){var r=function(e,t,n){var a,r,o=e.x;e=e.y;return o===t.left&&t.right<n.right?a=t.right:o===t.right&&t.left>n.left&&(a=t.left),e===t.top&&t.bottom<n.bottom?r=t.bottom:e===t.bottom&&t.top>n.top&&(r=t.top),a||r?r?a&&Math.abs(o-a)<Math.abs(e-r)?{x:a,y:e}:{x:o,y:r}:{x:a,y:e}:null}({x:a,y:e},t,n);if(null!==r)return r;n=t}t=(r=n).top,n=r.right;var o=r.bottom,u=(r=r.left)<=a&&a<=n,i=t<=e&&e<=o;r=Math.abs(r-a)<Math.abs(n-a)?r:n,n=Math.abs(t-e)<Math.abs(o-e)?t:o;return!u&&i?{x:r,y:e}:u&&!i?{x:a,y:n}:u||i?Math.abs(a-r)<Math.abs(e-n)?{x:r,y:e}:{x:a,y:n}:{x:r,y:n}}(o,e,t);return t=o,o=e,e=Math.abs(t.x-o.x),t=Math.abs(t.y-o.y),e&&t?Math.sqrt(Math.pow(e,2)+Math.pow(t,2)):e||t}function Fo(e){var n=e.left,a=e.top,r=e.width;e=e.height;return new t.DOMPoint(n+r/2,a+e/2)}function wo(e,t){var n=e.boundingClientRect,a=t.boundingClientRect;return!(n.left>=a.right||n.right<=a.left||n.top>=a.bottom||n.bottom<=a.top)&&0<go(e,t)}function Eo(e,t){var n,a=[e],r=Q(t);try{function o(){var e=n.value;a=a.reduce((function(t,n){return t.concat(function(e,t){var n=e.top,a=e.left,r=e.bottom,o=e.right,u=n<t.bottom&&r>t.top,i=a<t.right&&o>t.left,l=[];return Co(t.top,n,r)&&i&&l.push({top:n,left:a,bottom:t.top,right:o}),Co(t.right,a,o)&&u&&l.push({top:n,left:t.right,bottom:r,right:o}),Co(t.bottom,n,r)&&i&&l.push({top:t.bottom,right:o,bottom:r,left:a}),Co(t.left,a,o)&&u&&l.push({top:n,left:a,bottom:r,right:t.left}),0===l.length&&l.push(e),l.map(xo)}(n,e))}),[])}for(r.s();!(n=r.n()).done;)o()}catch(e){r.e(e)}finally{r.f()}return a}ae(vo,{getBoundingRect:function(){return $r},getIntersectionRect:function(){return oo},getOffset:function(){return yo},getRectCenter:function(){return Fo},hasVisualOverlap:function(){return wo},isPointInRect:function(){return Hr},rectsOverlap:function(){return mr},splitRects:function(){return Eo}});var Co=function(e,t,n){return t<e&&e<n};function xo(e){return U({},e,{x:e.left,y:e.top,height:e.bottom-e.top,width:e.right-e.left})}function Ao(e,t,n){var r=2<arguments.length&&void 0!==n&&n,o=Fo(t),u=e.getCellFromPoint(o)||[],i=Math.floor(o.x),l=Math.floor(o.y);o=u.filter((function(e){return e.clientRects.some((function(e){var t=e.left,n=e.top;return i<Math.floor(t+e.width)&&i>=Math.floor(t)&&l<Math.floor(n+e.height)&&l>=Math.floor(n)}))}));return(u=e.container)&&(o=Ao(u._grid,u.boundingClientRect,!0).concat(o)),r?o:o.sort(go).map((function(e){return e.actualNode})).concat(a.documentElement).filter((function(e,t,n){return n.indexOf(e)===t}))}var ko=function(e){Xr();var t=(e=Xn(e))._grid;return t?Ao(t,e.boundingClientRect):[]},Bo=function(e){return cp(e,"*").filter((function(e){var t=e.isFocusable;return(e=(e=e.actualNode.getAttribute("tabindex"))&&!isNaN(parseInt(e,10))?parseInt(e):null)?t&&0<=e:t}))},To={},No=(ae(To,{accessibleText:function(){return Ro},accessibleTextVirtual:function(){return ni},autocomplete:function(){return oi},formControlValue:function(){return Xu},formControlValueMethods:function(){return Yu},hasUnicode:function(){return Ju},isHumanInterpretable:function(){return ri},isIconLigature:function(){return Qu},isValidAutocomplete:function(){return ui},label:function(){return ci},labelText:function(){return Tu},labelVirtual:function(){return si},nativeElementType:function(){return di},nativeTextAlternative:function(){return Su},nativeTextMethods:function(){return Ou},removeUnicode:function(){return ai},sanitize:function(){return Zo},subtreeText:function(){return Bu},titleText:function(){return Cu},unsupported:function(){return Mu},visible:function(){return li},visibleTextNodes:function(){return pi},visibleVirtual:function(){return ju}}),function(e,t){e=e.actualNode||e;try{var n=sr(e),a=[];if(r=e.getAttribute(t))for(var r=Gc(r),o=0;o<r.length;o++)a.push(n.getElementById(r[o]));return a}catch(e){throw new TypeError("Cannot resolve id references for non-DOM nodes")}}),Ro=function(e,t){return e=Xn(e),ni(e,t)},_o=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=Ld(e).vNode;return 1!==(null==n?void 0:n.props.nodeType)||1!==n.props.nodeType||t.inLabelledByContext||t.inControlContext||!n.attr("aria-labelledby")?"":No(n,"aria-labelledby").filter((function(e){return e})).reduce((function(e,a){return a=Ro(a,U({inLabelledByContext:!0,startNode:t.startNode||n},t)),e?"".concat(e," ").concat(a):a}),"")};function Oo(e){return 1===(null==(e=Ld(e).vNode)?void 0:e.props.nodeType)&&e.attr("aria-label")||""}var So={"aria-activedescendant":{type:"idref",allowEmpty:!0},"aria-atomic":{type:"boolean",global:!0},"aria-autocomplete":{type:"nmtoken",values:["inline","list","both","none"]},"aria-braillelabel":{type:"string",global:!0},"aria-brailleroledescription":{type:"string",global:!0},"aria-busy":{type:"boolean",global:!0},"aria-checked":{type:"nmtoken",values:["false","mixed","true","undefined"]},"aria-colcount":{type:"int",minValue:-1},"aria-colindex":{type:"int",minValue:1},"aria-colspan":{type:"int",minValue:1},"aria-controls":{type:"idrefs",allowEmpty:!0,global:!0},"aria-current":{type:"nmtoken",allowEmpty:!0,values:["page","step","location","date","time","true","false"],global:!0},"aria-describedby":{type:"idrefs",allowEmpty:!0,global:!0},"aria-description":{type:"string",allowEmpty:!0,global:!0},"aria-details":{type:"idref",allowEmpty:!0,global:!0},"aria-disabled":{type:"boolean",global:!0},"aria-dropeffect":{type:"nmtokens",values:["copy","execute","link","move","none","popup"],global:!0},"aria-errormessage":{type:"idref",allowEmpty:!0,global:!0},"aria-expanded":{type:"nmtoken",values:["true","false","undefined"]},"aria-flowto":{type:"idrefs",allowEmpty:!0,global:!0},"aria-grabbed":{type:"nmtoken",values:["true","false","undefined"],global:!0},"aria-haspopup":{type:"nmtoken",allowEmpty:!0,values:["true","false","menu","listbox","tree","grid","dialog"],global:!0},"aria-hidden":{type:"nmtoken",values:["true","false","undefined"],global:!0},"aria-invalid":{type:"nmtoken",values:["grammar","false","spelling","true"],global:!0},"aria-keyshortcuts":{type:"string",allowEmpty:!0,global:!0},"aria-label":{type:"string",allowEmpty:!0,global:!0},"aria-labelledby":{type:"idrefs",allowEmpty:!0,global:!0},"aria-level":{type:"int",minValue:1},"aria-live":{type:"nmtoken",values:["assertive","off","polite"],global:!0},"aria-modal":{type:"boolean"},"aria-multiline":{type:"boolean"},"aria-multiselectable":{type:"boolean"},"aria-orientation":{type:"nmtoken",values:["horizontal","undefined","vertical"]},"aria-owns":{type:"idrefs",allowEmpty:!0,global:!0},"aria-placeholder":{type:"string",allowEmpty:!0},"aria-posinset":{type:"int",minValue:1},"aria-pressed":{type:"nmtoken",values:["false","mixed","true","undefined"]},"aria-readonly":{type:"boolean"},"aria-relevant":{type:"nmtokens",values:["additions","all","removals","text"],global:!0},"aria-required":{type:"boolean"},"aria-roledescription":{type:"string",allowEmpty:!0,global:!0},"aria-rowcount":{type:"int",minValue:-1},"aria-rowindex":{type:"int",minValue:1},"aria-rowspan":{type:"int",minValue:0},"aria-selected":{type:"nmtoken",values:["false","true","undefined"]},"aria-setsize":{type:"int",minValue:-1},"aria-sort":{type:"nmtoken",values:["ascending","descending","none","other"]},"aria-valuemax":{type:"decimal"},"aria-valuemin":{type:"decimal"},"aria-valuenow":{type:"decimal"},"aria-valuetext":{type:"string"}},Mo={alert:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"]},alertdialog:{type:"widget",allowedAttrs:["aria-expanded","aria-modal"],superclassRole:["alert","dialog"],accessibleNameRequired:!0},application:{type:"landmark",allowedAttrs:["aria-activedescendant","aria-expanded"],superclassRole:["structure"],accessibleNameRequired:!0},article:{type:"structure",allowedAttrs:["aria-posinset","aria-setsize","aria-expanded"],superclassRole:["document"]},banner:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},blockquote:{type:"structure",superclassRole:["section"]},button:{type:"widget",allowedAttrs:["aria-expanded","aria-pressed"],superclassRole:["command"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},caption:{type:"structure",requiredContext:["figure","table","grid","treegrid"],superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},cell:{type:"structure",requiredContext:["row"],allowedAttrs:["aria-colindex","aria-colspan","aria-rowindex","aria-rowspan","aria-expanded"],superclassRole:["section"],nameFromContent:!0},checkbox:{type:"widget",requiredAttrs:["aria-checked"],allowedAttrs:["aria-readonly","aria-required"],superclassRole:["input"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},code:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},columnheader:{type:"structure",requiredContext:["row"],allowedAttrs:["aria-sort","aria-colindex","aria-colspan","aria-expanded","aria-readonly","aria-required","aria-rowindex","aria-rowspan","aria-selected"],superclassRole:["cell","gridcell","sectionhead"],accessibleNameRequired:!1,nameFromContent:!0},combobox:{type:"widget",requiredAttrs:["aria-expanded","aria-controls"],allowedAttrs:["aria-owns","aria-autocomplete","aria-readonly","aria-required","aria-activedescendant","aria-orientation"],superclassRole:["select"],accessibleNameRequired:!0},command:{type:"abstract",superclassRole:["widget"]},complementary:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},composite:{type:"abstract",superclassRole:["widget"]},contentinfo:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},comment:{type:"structure",allowedAttrs:["aria-level","aria-posinset","aria-setsize"],superclassRole:["article"]},definition:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"]},deletion:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},dialog:{type:"widget",allowedAttrs:["aria-expanded","aria-modal"],superclassRole:["window"],accessibleNameRequired:!0},directory:{type:"structure",deprecated:!0,allowedAttrs:["aria-expanded"],superclassRole:["list"],nameFromContent:!0},document:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["structure"]},emphasis:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},feed:{type:"structure",requiredOwned:["article"],allowedAttrs:["aria-expanded"],superclassRole:["list"]},figure:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],nameFromContent:!0},form:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},grid:{type:"composite",requiredOwned:["rowgroup","row"],allowedAttrs:["aria-level","aria-multiselectable","aria-readonly","aria-activedescendant","aria-colcount","aria-expanded","aria-rowcount"],superclassRole:["composite","table"],accessibleNameRequired:!1},gridcell:{type:"widget",requiredContext:["row"],allowedAttrs:["aria-readonly","aria-required","aria-selected","aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan"],superclassRole:["cell","widget"],nameFromContent:!0},group:{type:"structure",allowedAttrs:["aria-activedescendant","aria-expanded"],superclassRole:["section"]},heading:{type:"structure",requiredAttrs:["aria-level"],allowedAttrs:["aria-expanded"],superclassRole:["sectionhead"],accessibleNameRequired:!1,nameFromContent:!0},img:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],accessibleNameRequired:!0,childrenPresentational:!0},input:{type:"abstract",superclassRole:["widget"]},insertion:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},landmark:{type:"abstract",superclassRole:["section"]},link:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["command"],accessibleNameRequired:!0,nameFromContent:!0},list:{type:"structure",requiredOwned:["listitem"],allowedAttrs:["aria-expanded"],superclassRole:["section"]},listbox:{type:"widget",requiredOwned:["group","option"],allowedAttrs:["aria-multiselectable","aria-readonly","aria-required","aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["select"],accessibleNameRequired:!0},listitem:{type:"structure",requiredContext:["list"],allowedAttrs:["aria-level","aria-posinset","aria-setsize","aria-expanded"],superclassRole:["section"],nameFromContent:!0},log:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"]},main:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},marquee:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"]},math:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],childrenPresentational:!0},menu:{type:"composite",requiredOwned:["group","menuitemradio","menuitem","menuitemcheckbox","menu","separator"],allowedAttrs:["aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["select"]},menubar:{type:"composite",requiredOwned:["group","menuitemradio","menuitem","menuitemcheckbox","menu","separator"],allowedAttrs:["aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["menu"]},menuitem:{type:"widget",requiredContext:["menu","menubar","group"],allowedAttrs:["aria-posinset","aria-setsize","aria-expanded"],superclassRole:["command"],accessibleNameRequired:!0,nameFromContent:!0},menuitemcheckbox:{type:"widget",requiredContext:["menu","menubar","group"],requiredAttrs:["aria-checked"],allowedAttrs:["aria-expanded","aria-posinset","aria-readonly","aria-setsize"],superclassRole:["checkbox","menuitem"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},menuitemradio:{type:"widget",requiredContext:["menu","menubar","group"],requiredAttrs:["aria-checked"],allowedAttrs:["aria-expanded","aria-posinset","aria-readonly","aria-setsize"],superclassRole:["menuitemcheckbox","radio"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},meter:{type:"structure",requiredAttrs:["aria-valuenow"],allowedAttrs:["aria-valuemax","aria-valuemin","aria-valuetext"],superclassRole:["range"],accessibleNameRequired:!0,childrenPresentational:!0},mark:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},navigation:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},none:{type:"structure",superclassRole:["structure"],prohibitedAttrs:["aria-label","aria-labelledby"]},note:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"]},option:{type:"widget",requiredContext:["group","listbox"],allowedAttrs:["aria-selected","aria-checked","aria-posinset","aria-setsize"],superclassRole:["input"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},paragraph:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},presentation:{type:"structure",superclassRole:["structure"],prohibitedAttrs:["aria-label","aria-labelledby"]},progressbar:{type:"widget",allowedAttrs:["aria-expanded","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],superclassRole:["range"],accessibleNameRequired:!0,childrenPresentational:!0},radio:{type:"widget",requiredAttrs:["aria-checked"],allowedAttrs:["aria-posinset","aria-setsize","aria-required"],superclassRole:["input"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},radiogroup:{type:"composite",allowedAttrs:["aria-readonly","aria-required","aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["select"],accessibleNameRequired:!1},range:{type:"abstract",superclassRole:["widget"]},region:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"],accessibleNameRequired:!1},roletype:{type:"abstract",superclassRole:[]},row:{type:"structure",requiredContext:["grid","rowgroup","table","treegrid"],requiredOwned:["cell","columnheader","gridcell","rowheader"],allowedAttrs:["aria-colindex","aria-level","aria-rowindex","aria-selected","aria-activedescendant","aria-expanded","aria-posinset","aria-setsize"],superclassRole:["group","widget"],nameFromContent:!0},rowgroup:{type:"structure",requiredContext:["grid","table","treegrid"],requiredOwned:["row"],superclassRole:["structure"],nameFromContent:!0},rowheader:{type:"structure",requiredContext:["row"],allowedAttrs:["aria-sort","aria-colindex","aria-colspan","aria-expanded","aria-readonly","aria-required","aria-rowindex","aria-rowspan","aria-selected"],superclassRole:["cell","gridcell","sectionhead"],accessibleNameRequired:!1,nameFromContent:!0},scrollbar:{type:"widget",requiredAttrs:["aria-valuenow"],allowedAttrs:["aria-controls","aria-orientation","aria-valuemax","aria-valuemin","aria-valuetext"],superclassRole:["range"],childrenPresentational:!0},search:{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},searchbox:{type:"widget",allowedAttrs:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-placeholder","aria-readonly","aria-required"],superclassRole:["textbox"],accessibleNameRequired:!0},section:{type:"abstract",superclassRole:["structure"],nameFromContent:!0},sectionhead:{type:"abstract",superclassRole:["structure"],nameFromContent:!0},select:{type:"abstract",superclassRole:["composite","group"]},separator:{type:"structure",requiredAttrs:["aria-valuenow"],allowedAttrs:["aria-valuemax","aria-valuemin","aria-orientation","aria-valuetext"],superclassRole:["structure","widget"],childrenPresentational:!0},slider:{type:"widget",requiredAttrs:["aria-valuenow"],allowedAttrs:["aria-valuemax","aria-valuemin","aria-orientation","aria-readonly","aria-required","aria-valuetext"],superclassRole:["input","range"],accessibleNameRequired:!0,childrenPresentational:!0},spinbutton:{type:"widget",allowedAttrs:["aria-valuemax","aria-valuemin","aria-readonly","aria-required","aria-activedescendant","aria-valuetext","aria-valuenow"],superclassRole:["composite","input","range"],accessibleNameRequired:!0},status:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"]},strong:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},structure:{type:"abstract",superclassRole:["roletype"]},subscript:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},superscript:{type:"structure",superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},switch:{type:"widget",requiredAttrs:["aria-checked"],allowedAttrs:["aria-readonly","aria-required"],superclassRole:["checkbox"],accessibleNameRequired:!0,nameFromContent:!0,childrenPresentational:!0},suggestion:{type:"structure",requiredOwned:["insertion","deletion"],superclassRole:["section"],prohibitedAttrs:["aria-label","aria-labelledby"]},tab:{type:"widget",requiredContext:["tablist"],allowedAttrs:["aria-posinset","aria-selected","aria-setsize","aria-expanded"],superclassRole:["sectionhead","widget"],nameFromContent:!0,childrenPresentational:!0},table:{type:"structure",requiredOwned:["rowgroup","row"],allowedAttrs:["aria-colcount","aria-rowcount","aria-expanded"],superclassRole:["section"],accessibleNameRequired:!1,nameFromContent:!0},tablist:{type:"composite",requiredOwned:["tab"],allowedAttrs:["aria-level","aria-multiselectable","aria-orientation","aria-activedescendant","aria-expanded"],superclassRole:["composite"]},tabpanel:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["section"],accessibleNameRequired:!1},term:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],nameFromContent:!0},text:{type:"structure",superclassRole:["section"],nameFromContent:!0},textbox:{type:"widget",allowedAttrs:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-placeholder","aria-readonly","aria-required"],superclassRole:["input"],accessibleNameRequired:!0},time:{type:"structure",superclassRole:["section"]},timer:{type:"widget",allowedAttrs:["aria-expanded"],superclassRole:["status"]},toolbar:{type:"structure",allowedAttrs:["aria-orientation","aria-activedescendant","aria-expanded"],superclassRole:["group"],accessibleNameRequired:!0},tooltip:{type:"structure",allowedAttrs:["aria-expanded"],superclassRole:["section"],nameFromContent:!0},tree:{type:"composite",requiredOwned:["group","treeitem"],allowedAttrs:["aria-multiselectable","aria-required","aria-activedescendant","aria-expanded","aria-orientation"],superclassRole:["select"],accessibleNameRequired:!1},treegrid:{type:"composite",requiredOwned:["rowgroup","row"],allowedAttrs:["aria-activedescendant","aria-colcount","aria-expanded","aria-level","aria-multiselectable","aria-orientation","aria-readonly","aria-required","aria-rowcount"],superclassRole:["grid","tree"],accessibleNameRequired:!1},treeitem:{type:"widget",requiredContext:["group","tree"],allowedAttrs:["aria-checked","aria-expanded","aria-level","aria-posinset","aria-selected","aria-setsize"],superclassRole:["listitem","option"],accessibleNameRequired:!0,nameFromContent:!0},widget:{type:"abstract",superclassRole:["roletype"]},window:{type:"abstract",superclassRole:["roletype"]}},Po={a:{variant:{href:{matches:"[href]",contentTypes:["interactive","phrasing","flow"],allowedRoles:["button","checkbox","menuitem","menuitemcheckbox","menuitemradio","option","radio","switch","tab","treeitem","doc-backlink","doc-biblioref","doc-glossref","doc-noteref"],namingMethods:["subtreeText"]},default:{contentTypes:["phrasing","flow"],allowedRoles:!0}}},abbr:{contentTypes:["phrasing","flow"],allowedRoles:!0},address:{contentTypes:["flow"],allowedRoles:!0},area:{variant:{href:{matches:"[href]",allowedRoles:!1},default:{allowedRoles:["button","link"]}},contentTypes:["phrasing","flow"],namingMethods:["altText"]},article:{contentTypes:["sectioning","flow"],allowedRoles:["feed","presentation","none","document","application","main","region"],shadowRoot:!0},aside:{contentTypes:["sectioning","flow"],allowedRoles:["feed","note","presentation","none","region","search","doc-dedication","doc-example","doc-footnote","doc-pullquote","doc-tip"]},audio:{variant:{controls:{matches:"[controls]",contentTypes:["interactive","embedded","phrasing","flow"]},default:{contentTypes:["embedded","phrasing","flow"]}},allowedRoles:["application"],chromiumRole:"Audio"},b:{contentTypes:["phrasing","flow"],allowedRoles:!0},base:{allowedRoles:!1,noAriaAttrs:!0},bdi:{contentTypes:["phrasing","flow"],allowedRoles:!0},bdo:{contentTypes:["phrasing","flow"],allowedRoles:!0},blockquote:{contentTypes:["flow"],allowedRoles:!0,shadowRoot:!0},body:{allowedRoles:!1,shadowRoot:!0},br:{contentTypes:["phrasing","flow"],allowedRoles:["presentation","none"],namingMethods:["titleText","singleSpace"]},button:{contentTypes:["interactive","phrasing","flow"],allowedRoles:["checkbox","combobox","link","menuitem","menuitemcheckbox","menuitemradio","option","radio","switch","tab"],namingMethods:["subtreeText"]},canvas:{allowedRoles:!0,contentTypes:["embedded","phrasing","flow"],chromiumRole:"Canvas"},caption:{allowedRoles:!1},cite:{contentTypes:["phrasing","flow"],allowedRoles:!0},code:{contentTypes:["phrasing","flow"],allowedRoles:!0},col:{allowedRoles:!1,noAriaAttrs:!0},colgroup:{allowedRoles:!1,noAriaAttrs:!0},data:{contentTypes:["phrasing","flow"],allowedRoles:!0},datalist:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0,implicitAttrs:{"aria-multiselectable":"false"}},dd:{allowedRoles:!1},del:{contentTypes:["phrasing","flow"],allowedRoles:!0},dfn:{contentTypes:["phrasing","flow"],allowedRoles:!0},details:{contentTypes:["interactive","flow"],allowedRoles:!1},dialog:{contentTypes:["flow"],allowedRoles:["alertdialog"]},div:{contentTypes:["flow"],allowedRoles:!0,shadowRoot:!0},dl:{contentTypes:["flow"],allowedRoles:["group","list","presentation","none"],chromiumRole:"DescriptionList"},dt:{allowedRoles:["listitem"]},em:{contentTypes:["phrasing","flow"],allowedRoles:!0},embed:{contentTypes:["interactive","embedded","phrasing","flow"],allowedRoles:["application","document","img","presentation","none"],chromiumRole:"EmbeddedObject"},fieldset:{contentTypes:["flow"],allowedRoles:["none","presentation","radiogroup"],namingMethods:["fieldsetLegendText"]},figcaption:{allowedRoles:["group","none","presentation"]},figure:{contentTypes:["flow"],allowedRoles:!0,namingMethods:["figureText","titleText"]},footer:{contentTypes:["flow"],allowedRoles:["group","none","presentation","doc-footnote"],shadowRoot:!0},form:{contentTypes:["flow"],allowedRoles:["search","none","presentation"]},h1:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"1"}},h2:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"2"}},h3:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"3"}},h4:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"4"}},h5:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"5"}},h6:{contentTypes:["heading","flow"],allowedRoles:["none","presentation","tab","doc-subtitle"],shadowRoot:!0,implicitAttrs:{"aria-level":"6"}},head:{allowedRoles:!1,noAriaAttrs:!0},header:{contentTypes:["flow"],allowedRoles:["group","none","presentation","doc-footnote"],shadowRoot:!0},hgroup:{contentTypes:["heading","flow"],allowedRoles:!0},hr:{contentTypes:["flow"],allowedRoles:["none","presentation","doc-pagebreak"],namingMethods:["titleText","singleSpace"]},html:{allowedRoles:!1,noAriaAttrs:!0},i:{contentTypes:["phrasing","flow"],allowedRoles:!0},iframe:{contentTypes:["interactive","embedded","phrasing","flow"],allowedRoles:["application","document","img","none","presentation"],chromiumRole:"Iframe"},img:{variant:{nonEmptyAlt:{matches:[{attributes:{alt:"/.+/"}},{hasAccessibleName:!0}],allowedRoles:["button","checkbox","link","menuitem","menuitemcheckbox","menuitemradio","option","progressbar","radio","scrollbar","separator","slider","switch","tab","treeitem","doc-cover"]},usemap:{matches:"[usemap]",contentTypes:["interactive","embedded","flow"]},default:{allowedRoles:["presentation","none"],contentTypes:["embedded","flow"]}},namingMethods:["altText"]},input:{variant:{button:{matches:{properties:{type:"button"}},allowedRoles:["checkbox","combobox","link","menuitem","menuitemcheckbox","menuitemradio","option","radio","switch","tab"]},buttonType:{matches:{properties:{type:["button","submit","reset"]}},namingMethods:["valueText","titleText","buttonDefaultText"]},checkboxPressed:{matches:{properties:{type:"checkbox"},attributes:{"aria-pressed":"/.*/"}},allowedRoles:["button","menuitemcheckbox","option","switch"],implicitAttrs:{"aria-checked":"false"}},checkbox:{matches:{properties:{type:"checkbox"},attributes:{"aria-pressed":null}},allowedRoles:["menuitemcheckbox","option","switch"],implicitAttrs:{"aria-checked":"false"}},noRoles:{matches:{properties:{type:["color","date","datetime-local","file","month","number","password","range","reset","submit","time","week"]}},allowedRoles:!1},hidden:{matches:{properties:{type:"hidden"}},contentTypes:["flow"],allowedRoles:!1,noAriaAttrs:!0},image:{matches:{properties:{type:"image"}},allowedRoles:["link","menuitem","menuitemcheckbox","menuitemradio","radio","switch"],namingMethods:["altText","valueText","labelText","titleText","buttonDefaultText"]},radio:{matches:{properties:{type:"radio"}},allowedRoles:["menuitemradio"],implicitAttrs:{"aria-checked":"false"}},textWithList:{matches:{properties:{type:"text"},attributes:{list:"/.*/"}},allowedRoles:!1},default:{contentTypes:["interactive","flow"],allowedRoles:["combobox","searchbox","spinbutton"],implicitAttrs:{"aria-valuenow":""},namingMethods:["labelText","placeholderText"]}}},ins:{contentTypes:["phrasing","flow"],allowedRoles:!0},kbd:{contentTypes:["phrasing","flow"],allowedRoles:!0},label:{contentTypes:["interactive","phrasing","flow"],allowedRoles:!1,chromiumRole:"Label"},legend:{allowedRoles:!1},li:{allowedRoles:["menuitem","menuitemcheckbox","menuitemradio","option","none","presentation","radio","separator","tab","treeitem","doc-biblioentry","doc-endnote"],implicitAttrs:{"aria-setsize":"1","aria-posinset":"1"}},link:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},main:{contentTypes:["flow"],allowedRoles:!1,shadowRoot:!0},map:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},math:{contentTypes:["embedded","phrasing","flow"],allowedRoles:!1},mark:{contentTypes:["phrasing","flow"],allowedRoles:!0},menu:{contentTypes:["flow"],allowedRoles:["directory","group","listbox","menu","menubar","none","presentation","radiogroup","tablist","toolbar","tree"]},meta:{variant:{itemprop:{matches:"[itemprop]",contentTypes:["phrasing","flow"]}},allowedRoles:!1,noAriaAttrs:!0},meter:{contentTypes:["phrasing","flow"],allowedRoles:!1,chromiumRole:"progressbar"},nav:{contentTypes:["sectioning","flow"],allowedRoles:["doc-index","doc-pagelist","doc-toc","menu","menubar","none","presentation","tablist"],shadowRoot:!0},noscript:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},object:{variant:{usemap:{matches:"[usemap]",contentTypes:["interactive","embedded","phrasing","flow"]},default:{contentTypes:["embedded","phrasing","flow"]}},allowedRoles:["application","document","img"],chromiumRole:"PluginObject"},ol:{contentTypes:["flow"],allowedRoles:["directory","group","listbox","menu","menubar","none","presentation","radiogroup","tablist","toolbar","tree"]},optgroup:{allowedRoles:!1},option:{allowedRoles:!1,implicitAttrs:{"aria-selected":"false"}},output:{contentTypes:["phrasing","flow"],allowedRoles:!0,namingMethods:["subtreeText"]},p:{contentTypes:["flow"],allowedRoles:!0,shadowRoot:!0},param:{allowedRoles:!1,noAriaAttrs:!0},picture:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},pre:{contentTypes:["flow"],allowedRoles:!0},progress:{contentTypes:["phrasing","flow"],allowedRoles:!1,implicitAttrs:{"aria-valuemax":"100","aria-valuemin":"0","aria-valuenow":"0"}},q:{contentTypes:["phrasing","flow"],allowedRoles:!0},rp:{allowedRoles:!0},rt:{allowedRoles:!0},ruby:{contentTypes:["phrasing","flow"],allowedRoles:!0},s:{contentTypes:["phrasing","flow"],allowedRoles:!0},samp:{contentTypes:["phrasing","flow"],allowedRoles:!0},script:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},section:{contentTypes:["sectioning","flow"],allowedRoles:["alert","alertdialog","application","banner","complementary","contentinfo","dialog","document","feed","group","log","main","marquee","navigation","none","note","presentation","search","status","tabpanel","doc-abstract","doc-acknowledgments","doc-afterword","doc-appendix","doc-bibliography","doc-chapter","doc-colophon","doc-conclusion","doc-credit","doc-credits","doc-dedication","doc-endnotes","doc-epigraph","doc-epilogue","doc-errata","doc-example","doc-foreword","doc-glossary","doc-index","doc-introduction","doc-notice","doc-pagelist","doc-part","doc-preface","doc-prologue","doc-pullquote","doc-qna","doc-toc"],shadowRoot:!0},select:{variant:{combobox:{matches:{attributes:{multiple:null,size:[null,"1"]}},allowedRoles:["menu"]},default:{allowedRoles:!1}},contentTypes:["interactive","phrasing","flow"],implicitAttrs:{"aria-valuenow":""},namingMethods:["labelText"]},slot:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},small:{contentTypes:["phrasing","flow"],allowedRoles:!0},source:{allowedRoles:!1,noAriaAttrs:!0},span:{contentTypes:["phrasing","flow"],allowedRoles:!0,shadowRoot:!0},strong:{contentTypes:["phrasing","flow"],allowedRoles:!0},style:{allowedRoles:!1,noAriaAttrs:!0},svg:{contentTypes:["embedded","phrasing","flow"],allowedRoles:!0,chromiumRole:"SVGRoot",namingMethods:["svgTitleText"]},sub:{contentTypes:["phrasing","flow"],allowedRoles:!0},summary:{allowedRoles:!1,namingMethods:["subtreeText"]},sup:{contentTypes:["phrasing","flow"],allowedRoles:!0},table:{contentTypes:["flow"],allowedRoles:!0,namingMethods:["tableCaptionText","tableSummaryText"]},tbody:{allowedRoles:!0},template:{contentTypes:["phrasing","flow"],allowedRoles:!1,noAriaAttrs:!0},textarea:{contentTypes:["interactive","phrasing","flow"],allowedRoles:!1,implicitAttrs:{"aria-valuenow":"","aria-multiline":"true"},namingMethods:["labelText","placeholderText"]},tfoot:{allowedRoles:!0},thead:{allowedRoles:!0},time:{contentTypes:["phrasing","flow"],allowedRoles:!0},title:{allowedRoles:!1,noAriaAttrs:!0},td:{allowedRoles:!0},th:{allowedRoles:!0},tr:{allowedRoles:!0},track:{allowedRoles:!1,noAriaAttrs:!0},u:{contentTypes:["phrasing","flow"],allowedRoles:!0},ul:{contentTypes:["flow"],allowedRoles:["directory","group","listbox","menu","menubar","none","presentation","radiogroup","tablist","toolbar","tree"]},var:{contentTypes:["phrasing","flow"],allowedRoles:!0},video:{variant:{controls:{matches:"[controls]",contentTypes:["interactive","embedded","phrasing","flow"]},default:{contentTypes:["embedded","phrasing","flow"]}},allowedRoles:["application"],chromiumRole:"video"},wbr:{contentTypes:["phrasing","flow"],allowedRoles:["presentation","none"]}},Io={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},jo={ariaAttrs:So,ariaRoles:U({},Mo,{"doc-abstract":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-acknowledgments":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-afterword":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-appendix":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-backlink":{type:"link",allowedAttrs:["aria-expanded"],nameFromContent:!0,superclassRole:["link"]},"doc-biblioentry":{type:"listitem",allowedAttrs:["aria-expanded","aria-level","aria-posinset","aria-setsize"],superclassRole:["listitem"],deprecated:!0},"doc-bibliography":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-biblioref":{type:"link",allowedAttrs:["aria-expanded"],nameFromContent:!0,superclassRole:["link"]},"doc-chapter":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-colophon":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-conclusion":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-cover":{type:"img",allowedAttrs:["aria-expanded"],superclassRole:["img"]},"doc-credit":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-credits":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-dedication":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-endnote":{type:"listitem",allowedAttrs:["aria-expanded","aria-level","aria-posinset","aria-setsize"],superclassRole:["listitem"],deprecated:!0},"doc-endnotes":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-epigraph":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-epilogue":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-errata":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-example":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-footnote":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-foreword":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-glossary":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-glossref":{type:"link",allowedAttrs:["aria-expanded"],nameFromContent:!0,superclassRole:["link"]},"doc-index":{type:"navigation",allowedAttrs:["aria-expanded"],superclassRole:["navigation"]},"doc-introduction":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-noteref":{type:"link",allowedAttrs:["aria-expanded"],nameFromContent:!0,superclassRole:["link"]},"doc-notice":{type:"note",allowedAttrs:["aria-expanded"],superclassRole:["note"]},"doc-pagebreak":{type:"separator",allowedAttrs:["aria-expanded","aria-orientation"],superclassRole:["separator"],childrenPresentational:!0},"doc-pagelist":{type:"navigation",allowedAttrs:["aria-expanded"],superclassRole:["navigation"]},"doc-part":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-preface":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-prologue":{type:"landmark",allowedAttrs:["aria-expanded"],superclassRole:["landmark"]},"doc-pullquote":{type:"none",superclassRole:["none"]},"doc-qna":{type:"section",allowedAttrs:["aria-expanded"],superclassRole:["section"]},"doc-subtitle":{type:"sectionhead",allowedAttrs:["aria-expanded"],superclassRole:["sectionhead"]},"doc-tip":{type:"note",allowedAttrs:["aria-expanded"],superclassRole:["note"]},"doc-toc":{type:"navigation",allowedAttrs:["aria-expanded"],superclassRole:["navigation"]}},{"graphics-document":{type:"structure",superclassRole:["document"],accessibleNameRequired:!0},"graphics-object":{type:"structure",superclassRole:["group"],nameFromContent:!0},"graphics-symbol":{type:"structure",superclassRole:["img"],accessibleNameRequired:!0,childrenPresentational:!0}}),htmlElms:Po,cssColors:Io},Lo=U({},jo),qo=Lo,zo=function(e){return!!(e=qo.ariaRoles[e])&&!!e.unsupported},Vo=function(e){var t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).allowAbstract,n=void 0!==(n=n.flagUnsupported)&&n,a=qo.ariaRoles[e],r=zo(e);return!(!a||n&&r||!t&&"abstract"===a.type)},$o=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=t.fallback,a=t.abstracts,r=t.dpub;return 1===(e=e instanceof on?e:Xn(e)).props.nodeType&&(t=(e.attr("role")||"").trim().toLowerCase(),(n?Gc(t):[t]).find((function(e){return!(!r&&"doc-"===e.substr(0,4))&&Vo(e,{allowAbstract:a})})))||null},Ho=function(e){return Object.keys(qo.htmlElms).filter((function(t){return(t=qo.htmlElms[t]).contentTypes?t.contentTypes.includes(e):!!t.variant&&!(!t.variant.default||!t.variant.default.contentTypes)&&t.variant.default.contentTypes.includes(e)}))},Uo=function(){return Kn.get("globalAriaAttrs",(function(){return Object.keys(qo.ariaAttrs).filter((function(e){return qo.ariaAttrs[e].global}))}))},Go=Dr((function(e){for(var t=[],n=e.rows,a=0,r=n.length;a<r;a++)for(var o=n[a].cells,u=(t[a]=t[a]||[],0),i=0,l=o.length;i<l;i++)for(var s=0;s<o[i].colSpan;s++){for(var c=o[i].getAttribute("rowspan"),d=0===parseInt(c)||0===o[i].rowspan?n.length:o[i].rowSpan,p=0;p<d;p++){for(t[a+p]=t[a+p]||[];t[a+p][u];)u++;t[a+p][u]=o[i]}u++}return t})),Wo=Dr((function(e,t){var n,a;for(t=t||Go(pr(e,"table")),n=0;n<t.length;n++)if(t[n]&&-1!==(a=t[n].indexOf(e)))return{x:a,y:n}})),Yo=function(e){var t,n=(e=Ld(e)).vNode,a=(e=e.domNode,n.attr("scope")),r=n.attr("role");if(["td","th"].includes(n.props.nodeName))return"columnheader"===r?"col":"rowheader"===r?"row":"col"===a||"row"===a?a:"th"===n.props.nodeName&&(n.actualNode?(r=Go(pr(e,"table")))[(t=Wo(e,r)).y].reduce((function(e,t){return e&&"TH"===t.nodeName.toUpperCase()}),!0)?"col":r.map((function(e){return e[t.x]})).reduce((function(e,t){return e&&t&&"TH"===t.nodeName.toUpperCase()}),!0)?"row":"auto":"auto");throw new TypeError("Expected TD or TH element")},Ko=function(e){return-1!==["col","auto"].indexOf(Yo(e))},Xo=function(e){return["row","auto"].includes(Yo(e))},Zo=function(e){return e?e.replace(/\\r\\n/g,"\\n").replace(/\\u00A0/g," ").replace(/[\\s]{2,}/g," ").trim():""},Jo=function(e){var t=Ld(e).vNode;if(t&&!po(t))switch(t.props.nodeName){case"a":case"area":if(t.hasAttr("href"))return!0;break;case"input":return"hidden"!==t.props.type;case"textarea":case"select":case"summary":case"button":return!0;case"details":return!cp(t,"summary").length}return!1};function Qo(e){return 1===(e=Ld(e).vNode).props.nodeType&&!(po(e)||!Jo(e)&&(!(e=e.attr("tabindex"))||isNaN(parseInt(e,10))))}var eu=Ho("sectioning").map((function(e){return"".concat(e,":not([role])")})).join(", ")+" , main:not([role]), [role=article], [role=complementary], [role=main], [role=navigation], [role=region]";function tu(e){var t=Zo(_o(e));e=Zo(Oo(e));return t||e}var nu={a:function(e){return e.hasAttr("href")?"link":null},area:function(e){return e.hasAttr("href")?"link":null},article:"article",aside:"complementary",body:"document",button:"button",datalist:"listbox",dd:"definition",dfn:"term",details:"group",dialog:"dialog",dt:"term",fieldset:"group",figure:"figure",footer:function(e){return ca(e,eu)?null:"contentinfo"},form:function(e){return tu(e)?"form":null},h1:"heading",h2:"heading",h3:"heading",h4:"heading",h5:"heading",h6:"heading",header:function(e){return ca(e,eu)?null:"banner"},hr:"separator",img:function(e){var t=e.hasAttr("alt")&&!e.attr("alt"),n=Uo().find((function(t){return e.hasAttr(t)}));return!t||n||Qo(e)?"img":"presentation"},input:function(e){var t,n;switch(e.hasAttr("list")&&(n=(t=No(e.actualNode,"list").filter((function(e){return!!e}))[0])&&"datalist"===t.nodeName.toLowerCase()),e.props.type){case"checkbox":return"checkbox";case"number":return"spinbutton";case"radio":return"radio";case"range":return"slider";case"search":return n?"combobox":"searchbox";case"button":case"image":case"reset":case"submit":return"button";case"text":case"tel":case"url":case"email":case"":return n?"combobox":"textbox";default:return"textbox"}},li:"listitem",main:"main",math:"math",menu:"list",nav:"navigation",ol:"list",optgroup:"group",option:"option",output:"status",progress:"progressbar",section:function(e){return tu(e)?"region":null},select:function(e){return e.hasAttr("multiple")||1<parseInt(e.attr("size"))?"listbox":"combobox"},summary:"button",table:"table",tbody:"rowgroup",td:function(e){return e=ca(e,"table"),e=$o(e),["grid","treegrid"].includes(e)?"gridcell":"cell"},textarea:"textbox",tfoot:"rowgroup",th:function(e){return Ko(e)?"columnheader":Xo(e)?"rowheader":void 0},thead:"rowgroup",tr:"row",ul:"list"},au=function(e,t){var n=r(t);if(Array.isArray(t)&&void 0!==e)return t.includes(e);if("function"===n)return!!t(e);if(null!=e){if(t instanceof RegExp)return t.test(e);if(/^\\/.*\\/$/.test(t))return n=t.substring(1,t.length-1),new RegExp(n).test(e)}return t===e};function ru(e,t){return au(!!ni(e),t)}var ou=function(e,t){if("object"!==r(t)||Array.isArray(t)||t instanceof RegExp)throw new Error("Expect matcher to be an object");return Object.keys(t).every((function(n){return au(e(n),t[n])}))};function uu(e,t){return e=Ld(e).vNode,ou((function(t){return e.attr(t)}),t)}function iu(e,t){return!!t(e)}function lu(e,t){return au($o(e),t)}function su(e,t){return au(bu(e),t)}function cu(e,t){return e=Ld(e).vNode,au(e.props.nodeName,t)}function du(e,t){return e=Ld(e).vNode,ou((function(t){return e.props[t]}),t)}function pu(e,t){return au(wu(e),t)}var fu={hasAccessibleName:ru,attributes:uu,condition:iu,explicitRole:lu,implicitRole:su,nodeName:cu,properties:du,semanticRole:pu},Du=function e(t,n){return t=Ld(t).vNode,Array.isArray(n)?n.some((function(n){return e(t,n)})):"string"==typeof n?sa(t,n):Object.keys(n).every((function(e){var a;if(fu[e])return a=n[e],(0,fu[e])(t,a);throw new Error('Unknown matcher type "'.concat(e,'"'))}))},mu=function(e,t){return Du(e,t)},hu=(mu.hasAccessibleName=ru,mu.attributes=uu,mu.condition=iu,mu.explicitRole=lu,mu.fromDefinition=Du,mu.fromFunction=ou,mu.fromPrimative=au,mu.implicitRole=su,mu.nodeName=cu,mu.properties=du,mu.semanticRole=pu,mu),gu=function(e){var t=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).noMatchAccessibleName,n=void 0!==t&&t,a=qo.htmlElms[e.props.nodeName];if(!a)return{};if(!a.variant)return a;var r,o,u=a.variant,i=V(a,l);for(r in u)if(u.hasOwnProperty(r)&&"default"!==r){for(var c=u[r],d=c.matches,p=V(c,s),f=Array.isArray(d)?d:[d],D=0;D<f.length&&n;D++)if(f[D].hasOwnProperty("hasAccessibleName"))return a;if(hu(e,d))for(var m in p)p.hasOwnProperty(m)&&(i[m]=p[m])}for(o in u.default)u.default.hasOwnProperty(o)&&void 0===i[o]&&(i[o]=u.default[o]);return i},bu=function(e){var t,n=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).chromium,a=e instanceof on?e:Xn(e);if(e=a.actualNode,a)return t=a.props.nodeName,!(t=nu[t])&&n?gu(a).chromiumRole||null:"function"==typeof t?t(a):t||null;throw new ReferenceError("Cannot get implicit role of a node outside the current scope.")},vu={td:["tr"],th:["tr"],tr:["thead","tbody","tfoot","table"],thead:["table"],tbody:["table"],tfoot:["table"],li:["ol","ul"],dt:["dl","div"],dd:["dl","div"],div:["dl"]};function yu(e,t){var n=t.chromium;t=V(t,c);return(n=bu(e,{chromium:n}))?function e(t,n){var a=vu[t.props.nodeName];if(a){if(t.parent)return a.includes(t.parent.props.nodeName)?(a=$o(t.parent,n),["none","presentation"].includes(a)&&!Fu(t.parent)?a:a?null:e(t.parent,n)):null;if(t.actualNode)throw new ReferenceError("Cannot determine role presentational inheritance of a required parent outside the current scope.")}return null}(e,t)||n:null}function Fu(e){return Uo().some((function(t){return e.hasAttr(t)}))||Qo(e)}var wu=function(e){var t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).noPresentational,n=function(e,t){var n,a=(r=1<arguments.length&&void 0!==t?t:{}).noImplicit,r=V(r,d),o=Ld(e).vNode;return 1!==o.props.nodeType?null:!(n=$o(o,r))||["presentation","none"].includes(n)&&Fu(o)?a?null:yu(o,r):n}(e,V(n,p));return t&&["presentation","none"].includes(n)?null:n},Eu=["iframe"],Cu=function(e){var t=Ld(e).vNode;return 1!==t.props.nodeType||!e.hasAttr("title")||!mu(t,Eu)&&["none","presentation"].includes(wu(t))?"":t.attr("title")},xu=function(e){var t,n,a=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).strict;return 1===(e=e instanceof on?e:Xn(e)).props.nodeType&&(t=wu(e),!(!(n=qo.ariaRoles[t])||!n.nameFromContent)||!a&&(!n||["presentation","none"].includes(t)))},Au=function(e){var t=e.actualNode,n=e.children;if(n)return e.hasAttr("aria-owns")?(e=No(t,"aria-owns").filter((function(e){return!!e})).map((function(e){return o.utils.getNodeFromTree(e)})),[].concat($(n),$(e))):$(n);throw new Error("getOwnedVirtual requires a virtual node")},ku=Ho("phrasing").concat(["#text"]),Bu=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=ni.alreadyProcessed;t.startNode=t.startNode||e;var a=(o=t).strict,r=o.inControlContext,o=o.inLabelledByContext,u=gu(e,{noMatchAccessibleName:!0}).contentTypes;return n(e,t)||1!==e.props.nodeType||null!=u&&u.includes("embedded")||!xu(e,{strict:a})&&!t.subtreeDescendant?"":(a||(t=U({subtreeDescendant:!r&&!o},t)),Au(e).reduce((function(e,n){var a=t,r=n.props.nodeName;return(n=ni(n,a))?(ku.includes(r)||(" "!==n[0]&&(n+=" "),e&&" "!==e[e.length-1]&&(n=" "+n)),e+n):e}),""))},Tu=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=ni.alreadyProcessed;if(t.inControlContext||t.inLabelledByContext||n(e,t))return"";t.startNode||(t.startNode=e);var a,r=U({inControlContext:!0},t);n=function(e){if(!e.attr("id"))return[];if(e.actualNode)return cr({elm:"label",attr:"for",value:e.attr("id"),context:e.actualNode});throw new TypeError("Cannot resolve explicit label reference for non-DOM nodes")}(e);return(t=ca(e,"label"))?(a=[].concat($(n),[t.actualNode])).sort(jd):a=n,a.map((function(e){return Ro(e,r)})).filter((function(e){return""!==e})).join(" ")},Nu={submit:"Submit",image:"Submit",reset:"Reset",button:""};function Ru(e,t){return t.attr(e)||""}function _u(e,t,n){t=t.actualNode;var a=[e=e.toLowerCase(),t.nodeName.toLowerCase()].join(",");return(t=t.querySelector(a))&&t.nodeName.toLowerCase()===e?Ro(t,n):""}var Ou={valueText:function(e){return e.actualNode.value||""},buttonDefaultText:function(e){return e=e.actualNode,Nu[e.type]||""},tableCaptionText:_u.bind(null,"caption"),figureText:_u.bind(null,"figcaption"),svgTitleText:_u.bind(null,"title"),fieldsetLegendText:_u.bind(null,"legend"),altText:Ru.bind(null,"alt"),tableSummaryText:Ru.bind(null,"summary"),titleText:Cu,subtreeText:Bu,labelText:Tu,singleSpace:function(){return" "},placeholderText:Ru.bind(null,"placeholder")},Su=function(e){var t,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},a=e.actualNode;return 1!==e.props.nodeType||["presentation","none"].includes(wu(e))?"":(t=(gu(e,{noMatchAccessibleName:!0}).namingMethods||[]).map((function(e){return Ou[e]})).reduce((function(t,a){return t||a(e,n)}),""),n.debug&&o.log(t||"{empty-value}",a,n),t)},Mu={accessibleNameFromFieldValue:["combobox","listbox","progressbar"]};function Pu(e){return e=Ld(e).vNode,Iu(e)}var Iu=Dr((function(e,t){return!Cr(e)&&!io(e,{skipAncestors:!0,isAncestor:t})&&(e.actualNode&&"area"===e.props.nodeName?!Tr(e,Iu):!_r(e,{skipAncestors:!0,isAncestor:t})&&(!e.parent||Iu(e.parent,!0)))})),ju=function e(t,n,a){var r=Ld(t).vNode,o=n?Pu:zr,u=!t.actualNode||t.actualNode&&o(t);o=r.children.map((function(t){var r=(o=t.props).nodeType,o=o.nodeValue;if(3===r){if(o&&u)return o}else if(!a)return e(t,n)})).join("");return Zo(o)},Lu=["button","checkbox","color","file","hidden","image","password","radio","reset","submit"],qu=function(e){var t=(e=e instanceof on?e:Xn(e)).props.nodeName;return"textarea"===t||"input"===t&&!Lu.includes((e.attr("type")||"").toLowerCase())},zu=function(e){return"select"===(e=e instanceof on?e:Xn(e)).props.nodeName},Vu=function(e){return"textbox"===$o(e)},$u=function(e){return"listbox"===$o(e)},Hu=function(e){return"combobox"===$o(e)},Uu=["progressbar","scrollbar","slider","spinbutton"],Gu=function(e){return e=$o(e),Uu.includes(e)},Wu=["textbox","progressbar","scrollbar","slider","spinbutton","combobox","listbox"],Yu={nativeTextboxValue:function(e){return e=Ld(e).vNode,qu(e)&&e.props.value||""},nativeSelectValue:function(e){if(e=Ld(e).vNode,!zu(e))return"";var t=(e=cp(e,"option")).filter((function(e){return e.props.selected}));return t.length||t.push(e[0]),t.map((function(e){return ju(e)})).join(" ")||""},ariaTextboxValue:function(e){var t=(e=Ld(e)).vNode;e=e.domNode;return Vu(t)?e&&_r(e)?e.textContent:ju(t,!0):""},ariaListboxValue:Ku,ariaComboboxValue:function(e,t){e=Ld(e).vNode;return Hu(e)&&(e=Au(e).filter((function(e){return"listbox"===wu(e)}))[0])?Ku(e,t):""},ariaRangeValue:function(e){e=Ld(e).vNode;return Gu(e)&&e.hasAttr("aria-valuenow")?(e=+e.attr("aria-valuenow"),isNaN(e)?"0":String(e)):""}};function Ku(e,t){e=Ld(e).vNode;return $u(e)&&0!==(e=Au(e).filter((function(e){return"option"===wu(e)&&"true"===e.attr("aria-selected")}))).length?ni(e[0],t):""}var Xu=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=e.actualNode,a=Mu.accessibleNameFromFieldValue||[],r=wu(e);return t.startNode===e||!Wu.includes(r)||a.includes(r)?"":(a=Object.keys(Yu).map((function(e){return Yu[e]})).reduce((function(n,a){return n||a(e,t)}),""),t.debug&&nn(a||"{empty-value}",n,t),a)};function Zu(){return/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g}var Ju=function(e,t){var n=t.emoji,a=t.nonBmp;t=t.punctuations;return n?/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g.test(e):a?/[\\u1D00-\\u1D7F\\u1D80-\\u1DBF\\u1DC0-\\u1DFF\\u20A0-\\u20CF\\u20D0-\\u20FF\\u2100-\\u214F\\u2150-\\u218F\\u2190-\\u21FF\\u2200-\\u22FF\\u2300-\\u23FF\\u2400-\\u243F\\u2440-\\u245F\\u2460-\\u24FF\\u2500-\\u257F\\u2580-\\u259F\\u25A0-\\u25FF\\u2600-\\u26FF\\u2700-\\u27BF\\uE000-\\uF8FF]/g.test(e)||/[\\uDB80-\\uDBBF][\\uDC00-\\uDFFF]/g.test(e):!!t&&/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!"#$%&\\xa3\\xa2\\xa5\\xa7\\u20ac()*+,\\-.\\/:;<=>?@\\[\\]^_\`{|}~\\xb1]/g.test(e)},Qu=function(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:.15,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:3,o=e.actualNode.nodeValue.trim();if(!Zo(o)||Ju(o,{emoji:!0,nonBmp:!0}))return!1;var u=Kn.get("canvasContext",(function(){return a.createElement("canvas").getContext("2d",{willReadFrequently:!0})})),i=u.canvas,l=(Kn.get("fonts")||Kn.set("fonts",{}),Kn.get("fonts"));if(l[D=t.getComputedStyle(e.parent.actualNode).getPropertyValue("font-family")]||(l[D]={occurrences:0,numLigatures:0}),(l=l[D]).occurrences>=r){if(l.numLigatures/l.occurrences==1)return!0;if(0===l.numLigatures)return!1}l.occurrences++;var s="".concat(r=30,"px ").concat(D),c=(u.font=s,o.charAt(0)),d=u.measureText(c).width,p=(d<30&&(d*=p=30/d,s="".concat(r*=p,"px ").concat(D)),i.width=d,i.height=r,u.font=s,u.textAlign="left",u.textBaseline="top",u.fillText(c,0,0),new Uint32Array(u.getImageData(0,0,d,r).data.buffer));if(!p.some((function(e){return e})))return l.numLigatures++,!0;u.clearRect(0,0,d,r),u.fillText(o,0,0);var f=new Uint32Array(u.getImageData(0,0,d,r).data.buffer),D=p.reduce((function(e,t,n){return 0===t&&0===f[n]||0!==t&&0!==f[n]?e:++e}),0);i=o.split("").reduce((function(e,t){return e+u.measureText(t).width}),0),s=u.measureText(o).width;return n<=D/p.length&&n<=1-s/i&&(l.numLigatures++,!0)};function ei(e){var t,n,a,r,u,i=function(e,t){return t.startNode||(t=U({startNode:e},t)),1===e.props.nodeType&&t.inLabelledByContext&&void 0===t.includeHidden&&(t=U({includeHidden:!Pu(e)},t)),t}(e,1<arguments.length&&void 0!==arguments[1]?arguments[1]:{});return function(e,t){if(e&&1===e.props.nodeType&&!t.includeHidden)return!Pu(e)}(e,i)||(t=e,n=(u=i).ignoreIconLigature,a=u.pixelThreshold,r=null!=(r=u.occurrenceThreshold)?r:u.occuranceThreshold,3===t.props.nodeType&&n&&Qu(t,a,r))?"":(u=[_o,Oo,Su,Xu,Bu,ti,Cu].reduce((function(t,n){return""!==(t=i.startNode===e?Zo(t):t)?t:n(e,i)}),""),i.debug&&o.log(u||"{empty-value}",e.actualNode,i),u)}function ti(e){return 3!==e.props.nodeType?"":e.props.nodeValue}ei.alreadyProcessed=function(e,t){return t.processed=t.processed||[],!!t.processed.includes(e)||(t.processed.push(e),!1)};var ni=ei,ai=function(e,t){var n=t.emoji,a=t.nonBmp;t=t.punctuations;return n&&(e=e.replace(/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g,"")),a&&(e=(e=e.replace(/[\\u1D00-\\u1D7F\\u1D80-\\u1DBF\\u1DC0-\\u1DFF\\u20A0-\\u20CF\\u20D0-\\u20FF\\u2100-\\u214F\\u2150-\\u218F\\u2190-\\u21FF\\u2200-\\u22FF\\u2300-\\u23FF\\u2400-\\u243F\\u2440-\\u245F\\u2460-\\u24FF\\u2500-\\u257F\\u2580-\\u259F\\u25A0-\\u25FF\\u2600-\\u26FF\\u2700-\\u27BF\\uE000-\\uF8FF]/g,"")).replace(/[\\uDB80-\\uDBBF][\\uDC00-\\uDFFF]/g,"")),t?e.replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!"#$%&\\xa3\\xa2\\xa5\\xa7\\u20ac()*+,\\-.\\/:;<=>?@\\[\\]^_\`{|}~\\xb1]/g,""):e},ri=function(e){return e.length&&!["x","i"].includes(e)&&(e=ai(e,{emoji:!0,nonBmp:!0,punctuations:!0}),Zo(e))?1:0},oi={stateTerms:["on","off"],standaloneTerms:["name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","username","new-password","current-password","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","url","photo","one-time-code"],qualifiers:["home","work","mobile","fax","pager"],qualifiedTerms:["tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-local-prefix","tel-local-suffix","tel-extension","email","impp"],locations:["billing","shipping"]},ui=function(e){var t=void 0!==(t=(u=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).looseTyped)&&t,n=void 0===(n=u.stateTerms)?[]:n,a=void 0===(a=u.locations)?[]:a,r=void 0===(r=u.qualifiers)?[]:r,o=void 0===(o=u.standaloneTerms)?[]:o,u=void 0===(u=u.qualifiedTerms)?[]:u;return e=e.toLowerCase().trim(),!(!(n=n.concat(oi.stateTerms)).includes(e)&&""!==e)||(r=r.concat(oi.qualifiers),a=a.concat(oi.locations),o=o.concat(oi.standaloneTerms),u=u.concat(oi.qualifiedTerms),!("webauthn"===(n=e.split(/\\s+/g))[n.length-1]&&(n.pop(),0===n.length)||!t&&(8<n[0].length&&"section-"===n[0].substr(0,8)&&n.shift(),a.includes(n[0])&&n.shift(),r.includes(n[0])&&(n.shift(),o=[]),1!==n.length))&&(t=n[n.length-1],o.includes(t)||u.includes(t)))},ii=function(e){var t;return e.attr("aria-labelledby")&&(t=No(e.actualNode,"aria-labelledby").map((function(e){return(e=Xn(e))?ju(e):""})).join(" ").trim())?t:(t=(t=e.attr("aria-label"))&&Zo(t))||null},li=function(e,t,n){return e=Xn(e),ju(e,t,n)},si=function(e){if(t=ii(e))return t;if(e.attr("id")){if(!e.actualNode)throw new TypeError("Cannot resolve explicit label reference for non-DOM nodes");var t,n=wn(e.attr("id"));if(t=(n=sr(e.actualNode).querySelector('label[for="'+n+'"]'))&&li(n,!0))return t}return(t=(n=ca(e,"label"))&&ju(n,!0))||null},ci=function(e){return e=Xn(e),si(e)},di=[{matches:[{nodeName:"textarea"},{nodeName:"input",properties:{type:["text","password","search","tel","email","url"]}}],namingMethods:"labelText"},{matches:{nodeName:"input",properties:{type:["button","submit","reset"]}},namingMethods:["valueText","titleText","buttonDefaultText"]},{matches:{nodeName:"input",properties:{type:"image"}},namingMethods:["altText","valueText","labelText","titleText","buttonDefaultText"]},{matches:"button",namingMethods:"subtreeText"},{matches:"fieldset",namingMethods:"fieldsetLegendText"},{matches:"OUTPUT",namingMethods:"subtreeText"},{matches:[{nodeName:"select"},{nodeName:"input",properties:{type:/^(?!text|password|search|tel|email|url|button|submit|reset)/}}],namingMethods:"labelText"},{matches:"summary",namingMethods:"subtreeText"},{matches:"figure",namingMethods:["figureText","titleText"]},{matches:"img",namingMethods:"altText"},{matches:"table",namingMethods:["tableCaptionText","tableSummaryText"]},{matches:["hr","br"],namingMethods:["titleText","singleSpace"]}],pi=function e(t){var n=zr(t),a=[];return t.children.forEach((function(t){3===t.actualNode.nodeType?n&&a.push(t):a=a.concat(e(t))})),a},fi=Dr((function(e){var t=Xn(e),n=t.boundingClientRect,r=[],o=gr(t);return e.childNodes.forEach((function(e){var t,u,i,l;3!==e.nodeType||""===Zo(e.nodeValue)||((t=a.createRange()).selectNodeContents(e),e=Array.from(t.getClientRects()),u=n,e.some((function(e){return!Hr(Fo(e),u)})))||r.push.apply(r,$((i=o,l=[],e.forEach((function(e){e.width<1||e.height<1||(e=i.reduce((function(e,t){return e&&oo(e,t.boundingClientRect)}),e))&&l.push(e)})),l)))})),r.length?r:[n]})),Di=function(e){Xr();var t=Xn(e)._grid;return t?fi(e).map((function(e){return Ao(t,e)})):[]},mi=["checkbox","img","meter","progressbar","scrollbar","radio","slider","spinbutton","textbox"],hi=function(e){var t=Ld(e).vNode;if(e=o.commons.aria.getExplicitRole(t))return-1!==mi.indexOf(e);switch(t.props.nodeName){case"img":case"iframe":case"object":case"video":case"audio":case"canvas":case"svg":case"math":case"button":case"select":case"textarea":case"keygen":case"progress":case"meter":return!0;case"input":return"hidden"!==t.props.type;default:return!1}},gi=["head","title","template","script","style","iframe","object","video","audio","noscript"];function bi(e){return!gi.includes(e.props.nodeName)&&e.children.some((function(e){return 3===(e=e.props).nodeType&&e.nodeValue.trim()}))}var vi=function e(t,n,a){return bi(t)||hi(t.actualNode)||!a&&!!ii(t)||!n&&t.children.some((function(t){return 1===t.actualNode.nodeType&&e(t)}))},yi=function(e,t,n){return e=Xn(e),vi(e,t,n)};function Fi(e){return!(void 0!==e.children&&!bi(e))||(1===e.props.nodeType&&hi(e)?!!o.commons.text.accessibleTextVirtual(e):e.children.some((function(e){return!e.attr("lang")&&Fi(e)&&!_r(e)})))}var wi=function(e){return-1<parseInt(e.getAttribute("tabindex"),10)&&Qo(e)&&!Jo(e)};function Ei(e,t){var n=(e=Ld(e)).vNode;e=e.domNode;return n?(void 0===n._isHiddenWithCSS&&(n._isHiddenWithCSS=Ci(e,t)),n._isHiddenWithCSS):Ci(e,t)}function Ci(e,n){if(9===e.nodeType)return!1;if(11===e.nodeType&&(e=e.host),["STYLE","SCRIPT"].includes(e.nodeName.toUpperCase()))return!1;var a,r=t.getComputedStyle(e,null);if(r)return"none"===r.getPropertyValue("display")||(a=["hidden","collapse"],r=r.getPropertyValue("visibility"),!(!a.includes(r)||n))||!!(a.includes(r)&&n&&a.includes(n))||!(!(n=Mr(e))||a.includes(r))&&Ei(n,r);throw new Error("Style does not exist for the given element.")}var xi=Ei,Ai=function(e){return null!==(e=e.doctype)&&"html"===e.name&&!e.publicId&&!e.systemId};function ki(e){return 1===(e=Ld(e).vNode).props.nodeType&&!(parseInt(e.attr("tabindex",10))<=-1)&&Qo(e)}var Bi=function(e){(e instanceof on||null!=(n=t)&&n.Node&&e instanceof t.Node)&&(e=o.commons.aria.getRole(e));var n=qo.ariaRoles[e];return(null==n?void 0:n.type)||null},Ti=["block","list-item","table","flex","grid","inline-block"];function Ni(e){return e=t.getComputedStyle(e).getPropertyValue("display"),Ti.includes(e)||"table-"===e.substr(0,6)}var Ri=function(e,t){var n,a,r,o;return!Ni(e)&&(n=function(e){for(var t=Mr(e);t&&!Ni(t);)t=Mr(t);return Xn(t)}(e),r=a="",o=0,function e(t,n){!1!==n(t.actualNode)&&t.children.forEach((function(t){return e(t,n)}))}(n,(function(t){if(2===o)return!1;if(3===t.nodeType&&(a+=t.nodeValue),1===t.nodeType){var n=(t.nodeName||"").toUpperCase();if(t===e&&(o=1),!["BR","HR"].includes(n))return!("none"===t.style.display||"hidden"===t.style.overflow||!["",null,"none"].includes(t.style.float)||!["",null,"relative"].includes(t.style.position))&&("widget"===Bi(t)?(r+=t.textContent,!1):void 0);0===o?r=a="":o=2}})),a=Zo(a),null!=t&&t.noLengthCompare?0!==a.length:(r=Zo(r),a.length>r.length))},_i=function(e){if(e=(e=e||{}).modalPercent||.75,Kn.get("isModalOpen"))return Kn.get("isModalOpen");if(ep(o._tree[0],"dialog, [role=dialog], [aria-modal=true]",zr).length)return Kn.set("isModalOpen",!0),!0;for(var n=jr(t),u=n.width*e,i=n.height*e,l=(e=(n.width-u)/2,(n.height-i)/2),s=[{x:e,y:l},{x:n.width-e,y:l},{x:n.width/2,y:n.height/2},{x:e,y:n.height-l},{x:n.width-e,y:n.height-l}].map((function(e){return Array.from(a.elementsFromPoint(e.x,e.y))})),c=0;c<s.length;c++){var d=function(e){var n=s[e].find((function(e){return e=t.getComputedStyle(e),parseInt(e.width,10)>=u&&parseInt(e.height,10)>=i&&"none"!==e.getPropertyValue("pointer-events")&&("absolute"===e.position||"fixed"===e.position)}));if(n&&s.every((function(e){return e.includes(n)})))return Kn.set("isModalOpen",!0),{v:!0}}(c);if("object"===r(d))return d.v}Kn.set("isModalOpen",void 0)};function Oi(e){var t,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:2,a=e.ownerDocument.createRange(),r=(a.setStart(e,0),a.setEnd(e,e.childNodes.length),0),o=0,u=Q(a.getClientRects());try{for(u.s();!(t=u.n()).done;){var i=t.value;if(!(i.height<=n))if(r>i.top+n)r=Math.max(r,i.bottom);else{if(0!==o)return!0;r=i.bottom,o++}}}catch(e){u.e(e)}finally{u.f()}return!1}var Si=function(e){return e instanceof t.Node},Mi={},Pi={set:function(e,t){if("string"!=typeof e)throw new Error("Incomplete data: key must be a string");return t&&(Mi[e]=t),Mi[e]},get:function(e){return Mi[e]},clear:function(){Mi={}}},Ii=function(e,n){var a=e.nodeName.toUpperCase();return["IMG","CANVAS","OBJECT","IFRAME","VIDEO","SVG"].includes(a)?(Pi.set("bgColor","imgNode"),!0):((e="none"!==(a=(n=n||t.getComputedStyle(e)).getPropertyValue("background-image")))&&(n=/gradient/.test(a),Pi.set("bgColor",n?"bgGradient":"bgImage")),e)},ji=(ae(Po={},{Colorjs:function(){return mc},CssSelectorParser:function(){return ji.CssSelectorParser},doT:function(){return Li.default},emojiRegexText:function(){return Zu},memoize:function(){return qi.default}}),re(ve())),Li=re(Xt()),qi=re(Kt());function zi(e,t){var n=e.length,a=(Array.isArray(e[0])||(e=[e]),(t=Array.isArray(t[0])?t:t.map((function(e){return[e]})))[0].length),r=t[0].map((function(e,n){return t.map((function(e){return e[n]}))}));e=e.map((function(e){return r.map((function(t){var n=0;if(Array.isArray(e))for(var a=0;a<e.length;a++)n+=e[a]*(t[a]||0);else{var r,o=Q(t);try{for(o.s();!(r=o.n()).done;){var u=r.value;n+=e*u}}catch(t){o.e(t)}finally{o.f()}}return n}))}));return 1===n&&(e=e[0]),1===a?e.map((function(e){return e[0]})):e}function Vi(e){return"string"===$i(e)}function $i(e){return(Object.prototype.toString.call(e).match(/^\\[object\\s+(.*?)\\]$/)[1]||"").toLowerCase()}function Hi(e,t){e=+e,t=+t;var n=(Math.floor(e)+"").length;return n<t?+e.toFixed(t-n):(n=Math.pow(10,n-t),Math.round(e/n)*n)}function Ui(e){var t,n;if(e)return e=e.trim(),t=/^-?[\\d.]+$/,(e=e.match(/^([a-z]+)\\((.+?)\\)$/i))?(n=[],e[2].replace(/\\/?\\s*([-\\w.]+(?:%|deg)?)/g,(function(e,a){/%$/.test(a)?(a=new Number(a.slice(0,-1)/100)).type="<percentage>":/deg$/.test(a)?((a=new Number(+a.slice(0,-3))).type="<angle>",a.unit="deg"):t.test(a)&&((a=new Number(a)).type="<number>"),e.startsWith("/")&&((a=a instanceof Number?a:new Number(a)).alpha=!0),n.push(a)})),{name:e[1].toLowerCase(),rawName:e[1],rawArgs:e[2],args:n}):void 0}function Gi(e){return e[e.length-1]}function Wi(e,t,n){return isNaN(e)?t:isNaN(t)?e:e+(t-e)*n}function Yi(e,t,n){return(n-e)/(t-e)}function Ki(e,t,n){return Wi(t[0],t[1],Yi(e[0],e[1],n))}function Xi(e){return e.map((function(e){return e.split("|").map((function(e){var t,n=(e=e.trim()).match(/^(<[a-z]+>)\\[(-?[.\\d]+),\\s*(-?[.\\d]+)\\]?$/);return n?((t=new String(n[1])).range=[+n[2],+n[3]],t):e}))}))}function Zi(){K(this,Zi)}Io=Object.freeze({__proto__:null,isString:Vi,type:$i,toPrecision:Hi,parseFunction:Ui,last:Gi,interpolate:Wi,interpolateInv:Yi,mapRange:Ki,parseCoordGrammar:Xi,multiplyMatrices:zi}),Z(Zi,[{key:"add",value:function(e,t,n){if("string"!=typeof arguments[0])for(var e in arguments[0])this.add(e,arguments[0][e],t);else(Array.isArray(e)?e:[e]).forEach((function(e){this[e]=this[e]||[],t&&this[e][n?"unshift":"push"](t)}),this)}},{key:"run",value:function(e,t){this[e]=this[e]||[],this[e].forEach((function(e){e.call(t&&t.context?t.context:t,t)}))}}]);var Ji=new Zi,Qi={gamut_mapping:"lch.c",precision:5,deltaE:"76"},el={D50:[.3457/.3585,1,.2958/.3585],D65:[.3127/.329,1,.3583/.329]};function tl(e){return Array.isArray(e)?e:el[e]}function nl(e,t,n,a){var r=3<arguments.length&&void 0!==a?a:{};if(e=tl(e),t=tl(t),!e||!t)throw new TypeError("Missing white point to convert ".concat(e?"":"from").concat(e||t?"":"/").concat(t?"":"to"));if(e===t)return n;if(r={W1:e,W2:t,XYZ:n,options:r},Ji.run("chromatic-adaptation-start",r),r.M||(r.W1===el.D65&&r.W2===el.D50?r.M=[[1.0479298208405488,.022946793341019088,-.05019222954313557],[.029627815688159344,.990434484573249,-.01707382502938514],[-.009243058152591178,.015055144896577895,.7518742899580008]]:r.W1===el.D50&&r.W2===el.D65&&(r.M=[[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]])),Ji.run("chromatic-adaptation-end",r),r.M)return zi(r.M,r.XYZ);throw new TypeError("Only Bradford CAT with white points D50 and D65 supported for now.")}function al(e){K(this,al),P(this,le),P(this,ue),M(this,ie,{writable:!0,value:void 0}),this.id=e.id,this.name=e.name,this.base=e.base?al.get(e.base):null,this.aliases=e.aliases,this.base&&(this.fromBase=e.fromBase,this.toBase=e.toBase);var t,n=null!=(n=e.coords)?n:this.base.coords;this.coords=n,n=null!=(n=null!=(n=e.white)?n:this.base.white)?n:"D65";for(t in this.white=tl(n),this.formats=null!=(n=e.formats)?n:{},this.formats){var a=this.formats[t];a.type||(a.type="function"),a.name||(a.name=t)}!e.cssId||null!=(n=this.formats.functions)&&n.color?null==(n=this.formats)||!n.color||null!=(n=this.formats)&&n.color.id||(this.formats.color.id=this.id):(this.formats.color={id:e.cssId},Object.defineProperty(this,"cssId",{value:e.cssId})),this.referred=e.referred,q(this,ie,L(this,le,ol).call(this).reverse()),Ji.run("colorspace-init-end",this)}function rl(e){var t;return e.coords&&!e.coordGrammar&&(e.type||(e.type="function"),e.name||(e.name="color"),e.coordGrammar=Xi(e.coords),t=Object.entries(this.coords).map((function(t,n){(t=G(t,2))[0],t=t[1],n=e.coordGrammar[n][0],t=t.range||t.refRange;var a=n.range,r="";return"<percentage>"==n?(a=[0,100],r="%"):"<angle>"==n&&(r="deg"),{fromRange:t,toRange:a,suffix:r}})),e.serializeCoords=function(e,n){return e.map((function(e,a){var r=(a=t[a]).fromRange,o=a.toRange;a=a.suffix;return e=Hi(e=r&&o?Ki(r,o,e):e,n),a&&(e+=a),e}))}),e}function ol(){for(var e=[this],t=this;t=t.base;)e.push(t);return e}ue=new WeakSet,ie=new WeakMap,le=new WeakSet,Z(al,[{key:"inGamut",value:function(e){var t,n=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).epsilon,a=void 0===n?75e-6:n;return this.isPolar?(e=this.toBase(e),this.base.inGamut(e,{epsilon:a})):(t=Object.values(this.coords),e.every((function(e,n){var r;return"angle"===(n=t[n]).type||!n.range||!!Number.isNaN(e)||(r=(n=G(n.range,2))[0],n=n[1],(void 0===r||r-a<=e)&&(void 0===n||e<=n+a))})))}},{key:"cssId",get:function(){var e;return(null==(e=this.formats.functions)||null==(e=e.color)?void 0:e.id)||this.id}},{key:"isPolar",get:function(){for(var e in this.coords)if("angle"===this.coords[e].type)return!0;return!1}},{key:"getFormat",value:function(e){return"object"===r(e)||(e="default"===e?Object.values(this.formats)[0]:this.formats[e])?L(this,ue,rl).call(this,e):null}},{key:"to",value:function(e,t){var n;if(1===arguments.length&&(e=(n=[e.space,e.coords])[0],t=n[1]),this!==(e=al.get(e))){t=t.map((function(e){return Number.isNaN(e)?0:e}));for(var a,r,o=j(this,ie),u=j(e,ie),i=0;i<o.length&&o[i]===u[i];i++)a=o[i],r=i;if(!a)throw new Error("Cannot convert between color spaces ".concat(this," and ").concat(e,": no connection space was found"));for(var l=o.length-1;r<l;l--)t=o[l].toBase(t);for(var s=r+1;s<u.length;s++)t=u[s].fromBase(t)}return t}},{key:"from",value:function(e,t){var n;return 1===arguments.length&&(e=(n=[e.space,e.coords])[0],t=n[1]),(e=al.get(e)).to(this,t)}},{key:"toString",value:function(){return"".concat(this.name," (").concat(this.id,")")}},{key:"getMinCoords",value:function(){var e,t=[];for(e in this.coords){var n=(n=this.coords[e]).range||n.refRange;t.push(null!=(n=null==n?void 0:n.min)?n:0)}return t}}],[{key:"all",get:function(){return $(new Set(Object.values(al.registry)))}},{key:"register",value:function(e,t){if(1===arguments.length&&(e=(t=arguments[0]).id),t=this.get(t),this.registry[e]&&this.registry[e]!==t)throw new Error("Duplicate color space registration: '".concat(e,"'"));if(this.registry[e]=t,1===arguments.length&&t.aliases){var n,a=Q(t.aliases);try{for(a.s();!(n=a.n()).done;){var r=n.value;this.register(r,t)}}catch(e){a.e(e)}finally{a.f()}}return t}},{key:"get",value:function(e){if(!e||e instanceof al)return e;if("string"===$i(e)){var t=al.registry[e.toLowerCase()];if(t)return t;throw new TypeError('No color space found with id = "'.concat(e,'"'))}for(var n=arguments.length,a=new Array(1<n?n-1:0),r=1;r<n;r++)a[r-1]=arguments[r];if(a.length)return al.get.apply(al,a);throw new TypeError("".concat(e," is not a valid color space"))}},{key:"resolveCoord",value:function(e,t){var n,a;if(a="string"===$i(e)?e.includes(".")?(n=(a=G(e.split("."),2))[0],a[1]):(n=void 0,e):Array.isArray(e)?(n=(a=G(e,2))[0],a[1]):(n=e.space,e.coordId),!(n=(n=al.get(n))||t))throw new TypeError("Cannot resolve coordinate reference ".concat(e,": No color space specified and relative references are not allowed here"));if(("number"===(t=$i(a))||"string"===t&&0<=a)&&(e=Object.entries(n.coords)[a]))return U({space:n,id:e[0],index:a},e[1]);n=al.get(n);var r,o=a.toLowerCase(),u=0;for(r in n.coords){var i,l=n.coords[r];if(r.toLowerCase()===o||(null==(i=l.name)?void 0:i.toLowerCase())===o)return U({space:n,id:r,index:u},l);u++}throw new TypeError('No "'.concat(a,'" coordinate found in ').concat(n.name,". Its coordinates are: ").concat(Object.keys(n.coords).join(", ")))}}]);var ul,il=al,ll=(oe(il,"registry",{}),oe(il,"DEFAULT_FORMAT",{type:"functions",name:"color"}),new il({id:"xyz-d65",name:"XYZ D65",coords:{x:{name:"X"},y:{name:"Y"},z:{name:"Z"}},white:"D65",formats:{color:{ids:["xyz-d65","xyz"]}},aliases:["xyz"]}));T(sl,il),ul=R(sl),ve=Z(sl);function sl(e){var t;return K(this,sl),e.coords||(e.coords={r:{range:[0,1],name:"Red"},g:{range:[0,1],name:"Green"},b:{range:[0,1],name:"Blue"}}),e.base||(e.base=ll),e.toXYZ_M&&e.fromXYZ_M&&(null==e.toBase&&(e.toBase=function(n){return n=zi(e.toXYZ_M,n),t.white!==t.base.white?nl(t.white,t.base.white,n):n}),null==e.fromBase)&&(e.fromBase=function(n){return n=nl(t.base.white,t.white,n),zi(e.fromXYZ_M,n)}),null==e.referred&&(e.referred="display"),t=ul.call(this,e)}function cl(e){var t={str:null==(n=String(e))?void 0:n.trim()};if(Ji.run("parse-start",t),t.color)return t.color;if(t.parsed=Ui(t.str),t.parsed){var n=function(){var e=t.parsed.name;if("color"===e){var n,a=t.parsed.args.shift(),o=0<t.parsed.rawArgs.indexOf("/")?t.parsed.args.pop():1,u=Q(il.all);try{for(u.s();!(n=u.n()).done;){var i,l=n.value,s=l.getFormat("color");if(s&&(a===s.id||null!=(i=s.ids)&&i.includes(a))){var c=function(){var e=Object.keys(l.coords).length,n=Array(e).fill(0);return n.forEach((function(e,a){return n[a]=t.parsed.args[a]||0})),{v:{v:{spaceId:l.id,coords:n,alpha:o}}}}();if("object"===r(c))return c.v}}}catch(n){u.e(n)}finally{u.f()}var d,p="";throw a in il.registry&&(d=null==(d=il.registry[a].formats)||null==(d=d.functions)||null==(d=d.color)?void 0:d.id)&&(p="Did you mean color(".concat(d,")?")),new TypeError("Cannot parse color(".concat(a,"). ")+(p||"Missing a plugin?"))}var f,D=Q(il.all);try{for(D.s();!(f=D.n()).done;){var m=function(){var n,a,r=f.value,o=r.getFormat(e);if(o&&"function"===o.type)return n=1,(o.lastAlpha||Gi(t.parsed.args).alpha)&&(n=t.parsed.args.pop()),a=t.parsed.args,o.coordGrammar&&Object.entries(r.coords).forEach((function(t,n){var r=(t=G(t,2))[0],u=(t=t[1],o.coordGrammar[n]),i=null==(l=a[n])?void 0:l.type;if(!(u=u.find((function(e){return e==i}))))throw l=t.name||r,new TypeError("".concat(i," not allowed for ").concat(l," in ").concat(e,"()"));r=u.range;var l=t.range||t.refRange;(r="<percentage>"===i?r||[0,1]:r)&&l&&(a[n]=Ki(r,l,a[n]))})),{v:{v:{spaceId:r.id,coords:a,alpha:n}}}}();if("object"===r(m))return m.v}}catch(n){D.e(n)}finally{D.f()}}();if("object"===r(n))return n.v}else{var a,o=Q(il.all);try{for(o.s();!(a=o.n()).done;){var u,i=a.value;for(u in i.formats){var l=i.formats[u];if("custom"===l.type&&(!l.test||l.test(t.str))){var s=l.parse(t.str);if(s)return null==s.alpha&&(s.alpha=1),s}}}}catch(e){o.e(e)}finally{o.f()}}throw new TypeError("Could not parse ".concat(e," as a color. Missing a plugin?"))}function dl(e){var t;if(e)return(t=(e=Vi(e)?cl(e):e).space||e.spaceId)instanceof il||(e.space=il.get(t)),void 0===e.alpha&&(e.alpha=1),e;throw new TypeError("Empty color reference")}function pl(e,t){return(t=il.get(t)).from(e)}function fl(e,t){var n=(t=il.resolveCoord(t,e.space)).space;t=t.index;return pl(e,n)[t]}function Dl(e,t,n){return t=il.get(t),e.coords=t.to(e.space,n),e}function ml(e,t,n){if(e=dl(e),2===arguments.length&&"object"===$i(t)){var a,r=t;for(a in r)ml(e,a,r[a])}else{"function"==typeof n&&(n=n(fl(e,t)));var o=(u=il.resolveCoord(t,e.space)).space,u=u.index,i=pl(e,o);i[u]=n,Dl(e,o,i)}return e}Kt=new il({id:"xyz-d50",name:"XYZ D50",white:"D50",base:ll,fromBase:function(e){return nl(ll.white,"D50",e)},toBase:function(e){return nl("D50",ll.white,e)},formats:{color:{}}});var hl=24389/27,gl=el.D50,bl=new il({id:"lab",name:"Lab",coords:{l:{refRange:[0,100],name:"L"},a:{refRange:[-125,125]},b:{refRange:[-125,125]}},white:gl,base:Kt,fromBase:function(e){return e=e.map((function(e,t){return e/gl[t]})).map((function(e){return 216/24389<e?Math.cbrt(e):(hl*e+16)/116})),[116*e[1]-16,500*(e[0]-e[1]),200*(e[1]-e[2])]},toBase:function(e){var t=[];return t[1]=(e[0]+16)/116,t[0]=e[1]/500+t[1],t[2]=t[1]-e[2]/200,[24/116<t[0]?Math.pow(t[0],3):(116*t[0]-16)/hl,8<e[0]?Math.pow((e[0]+16)/116,3):e[0]/hl,24/116<t[2]?Math.pow(t[2],3):(116*t[2]-16)/hl].map((function(e,t){return e*gl[t]}))},formats:{lab:{coords:["<number> | <percentage>","<number>","<number>"]}}});function vl(e){return(e%360+360)%360}var yl=new il({id:"lch",name:"LCH",coords:{l:{refRange:[0,100],name:"Lightness"},c:{refRange:[0,150],name:"Chroma"},h:{refRange:[0,360],type:"angle",name:"Hue"}},base:bl,fromBase:function(e){var t=(e=G(e,3))[0],n=e[1],a=(e=e[2],Math.abs(n)<.02&&Math.abs(e)<.02?NaN:180*Math.atan2(e,n)/Math.PI);return[t,Math.sqrt(Math.pow(n,2)+Math.pow(e,2)),vl(a)]},toBase:function(e){var t=(e=G(e,3))[0],n=e[1];e=e[2];return n<0&&(n=0),isNaN(e)&&(e=0),[t,n*Math.cos(e*Math.PI/180),n*Math.sin(e*Math.PI/180)]},formats:{lch:{coords:["<number> | <percentage>","<number>","<number> | <angle>"]}}}),Fl=Math.pow(25,7),wl=Math.PI,El=180/wl,Cl=wl/180;function xl(e,t){var n=void 0===(n=(r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).kL)?1:n,a=void 0===(a=r.kC)?1:a,r=void 0===(r=r.kH)?1:r,o=(i=G(bl.from(e),3))[0],u=i[1],i=i[2],l=yl.from(bl,[o,u,i])[1],s=(d=G(bl.from(t),3))[0],c=d[1],d=d[2],p=(l=((l=l<0?0:l)+(p=(p=yl.from(bl,[s,c,d])[1])<0?0:p))/2,Math.pow(l,7)),f=(p=(1+(l=.5*(1-Math.sqrt(p/(p+Fl)))))*u,u=(1+l)*c,l=Math.sqrt(Math.pow(p,2)+Math.pow(i,2)),c=Math.sqrt(Math.pow(u,2)+Math.pow(d,2)),i=0==p&&0===i?0:Math.atan2(i,p),p=0==u&&0===d?0:Math.atan2(d,u),d=(i<0&&(i+=2*wl),p<0&&(p+=2*wl),s-o),u=c-l,(p*=El)-(i*=El)),D=(i=i+p,p=Math.abs(f),f=(l*c==0?D=0:p<=180?D=f:180<f?D=f-360:f<-180?D=360+f:console.log("the unthinkable has happened"),2*Math.sqrt(c*l)*Math.sin(D*Cl/2)),(o+s)/2);o=(l+c)/2,s=Math.pow(o,7),l=l*c==0?i:p<=180?i/2:i<360?(i+360)/2:(i-360)/2,p=1+.015*(c=Math.pow(D-50,2))/Math.sqrt(20+c),i=1+.045*o,D=1,c=1+.015*o*((D-=.17*Math.cos((l-30)*Cl))+.24*Math.cos(2*l*Cl)+.32*Math.cos((3*l+6)*Cl)-.2*Math.cos((4*l-63)*Cl)),o=30*Math.exp(-1*Math.pow((l-275)/25,2)),D=2*Math.sqrt(s/(s+Fl)),l=-1*Math.sin(2*o*Cl)*D,s=Math.pow(d/(n*p),2),s=(s+=Math.pow(u/(a*i),2))+Math.pow(f/(r*c),2)+u/(a*i)*l*(f/(r*c));return Math.sqrt(s)}var Al=75e-6;function kl(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:e.space,n=void 0===(n=(2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).epsilon)?Al:n,a=(e=dl(e),t=il.get(t),e.coords);return t!==e.space&&(a=t.from(e)),t.inGamut(a,{epsilon:n})}function Bl(e){return{space:e.space,coords:e.coords.slice(),alpha:e.alpha}}function Tl(e){var t=void 0===(t=(r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).method)?Qi.gamut_mapping:t,n=void 0===(r=r.space)?e.space:r;if(Vi(arguments[1])&&(n=arguments[1]),!kl(e,n=il.get(n),{epsilon:0})){var a,r=Nl(e,n);if("clip"!==t&&!kl(e,n)){var o=Tl(Bl(r),{method:"clip",space:n});if(2<xl(e,o)){for(var u=il.resolveCoord(t),i=u.space,l=u.id,s=Nl(r,i),c=(u.range||u.refRange)[0],d=fl(s,l);.01<d-c;)xl(s,Tl(Bl(s),{space:n,method:"clip"}))-2<.01?c=fl(s,l):d=fl(s,l),ml(s,l,(c+d)/2);r=Nl(s,n)}else r=o}"clip"!==t&&kl(r,n,{epsilon:0})||(a=Object.values(n.coords).map((function(e){return e.range||[]})),r.coords=r.coords.map((function(e,t){var n=(t=G(a[t],2))[0];t=t[1];return void 0!==n&&(e=Math.max(n,e)),void 0!==t?Math.min(e,t):e}))),n!==e.space&&(r=Nl(r,e.space)),e.coords=r.coords}return e}function Nl(e,t){var n=(2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).inGamut,a=(e=dl(e),(t=il.get(t)).from(e));a={space:t,coords:a,alpha:e.alpha};return n?Tl(a):a}function Rl(e){var t=void 0===(n=(r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).precision)?Qi.precision:n,n=void 0===(n=r.format)?"default":n,a=void 0===(a=r.inGamut)||a,r=V(r,f),o=n,u=(n=null!=(u=null!=(u=(e=dl(e)).space.getFormat(n))?u:e.space.getFormat("default"))?u:il.DEFAULT_FORMAT,a=a||n.toGamut,(u=e.coords).map((function(e){return e||0})));if(a&&!kl(e)&&(u=Tl(Bl(e),!0===a?void 0:a).coords),"custom"===n.type){if(r.precision=t,!n.serialize)throw new TypeError("format ".concat(o," can only be used to parse colors, not for serialization"));i=n.serialize(u,e.alpha,r)}else{a=n.name||"color",o=(n.serializeCoords?u=n.serializeCoords(u,t):null!==t&&(u=u.map((function(e){return Hi(e,t)}))),$(u)),r=("color"===a&&(u=n.id||(null==(r=n.ids)?void 0:r[0])||e.space.id,o.unshift(u)),e.alpha),u=(null!==t&&(r=Hi(r,t)),e.alpha<1&&!n.noAlpha?"".concat(n.commas?",":" /"," ").concat(r):"");var i="".concat(a,"(").concat(o.join(n.commas?", ":" ")).concat(u,")")}return i}Nl.returns=Tl.returns="color";var _l=new ve({id:"rec2020-linear",name:"Linear REC.2020",white:"D65",toXYZ_M:[[.6369580483012914,.14461690358620832,.1688809751641721],[.2627002120112671,.6779980715188708,.05930171646986196],[0,.028072693049087428,1.060985057710791]],fromXYZ_M:[[1.716651187971268,-.355670783776392,-.25336628137366],[-.666684351832489,1.616481236634939,.0157685458139111],[.017639857445311,-.042770613257809,.942103121235474]],formats:{color:{}}}),Ol=1.09929682680944,Sl=.018053968510807,Ml=new ve({id:"rec2020",name:"REC.2020",base:_l,toBase:function(e){return e.map((function(e){return e<4.5*Sl?e/4.5:Math.pow((e+Ol-1)/Ol,1/.45)}))},fromBase:function(e){return e.map((function(e){return Sl<=e?Ol*Math.pow(e,.45)-(Ol-1):4.5*e}))},formats:{color:{}}}),Pl=new ve({id:"p3-linear",name:"Linear P3",white:"D65",toXYZ_M:[[.4865709486482162,.26566769316909306,.1982172852343625],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],fromXYZ_M:[[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]]}),Il=new ve({id:"srgb-linear",name:"Linear sRGB",white:"D65",toXYZ_M:[[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],fromXYZ_M:[[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],formats:{color:{}}}),jl={aliceblue:[240/255,248/255,1],antiquewhite:[250/255,235/255,215/255],aqua:[0,1,1],aquamarine:[127/255,1,212/255],azure:[240/255,1,1],beige:[245/255,245/255,220/255],bisque:[1,228/255,196/255],black:[0,0,0],blanchedalmond:[1,235/255,205/255],blue:[0,0,1],blueviolet:[138/255,43/255,226/255],brown:[165/255,42/255,42/255],burlywood:[222/255,184/255,135/255],cadetblue:[95/255,158/255,160/255],chartreuse:[127/255,1,0],chocolate:[210/255,105/255,30/255],coral:[1,127/255,80/255],cornflowerblue:[100/255,149/255,237/255],cornsilk:[1,248/255,220/255],crimson:[220/255,20/255,60/255],cyan:[0,1,1],darkblue:[0,0,139/255],darkcyan:[0,139/255,139/255],darkgoldenrod:[184/255,134/255,11/255],darkgray:[169/255,169/255,169/255],darkgreen:[0,100/255,0],darkgrey:[169/255,169/255,169/255],darkkhaki:[189/255,183/255,107/255],darkmagenta:[139/255,0,139/255],darkolivegreen:[85/255,107/255,47/255],darkorange:[1,140/255,0],darkorchid:[.6,50/255,.8],darkred:[139/255,0,0],darksalmon:[233/255,150/255,122/255],darkseagreen:[143/255,188/255,143/255],darkslateblue:[72/255,61/255,139/255],darkslategray:[47/255,79/255,79/255],darkslategrey:[47/255,79/255,79/255],darkturquoise:[0,206/255,209/255],darkviolet:[148/255,0,211/255],deeppink:[1,20/255,147/255],deepskyblue:[0,191/255,1],dimgray:[105/255,105/255,105/255],dimgrey:[105/255,105/255,105/255],dodgerblue:[30/255,144/255,1],firebrick:[178/255,34/255,34/255],floralwhite:[1,250/255,240/255],forestgreen:[34/255,139/255,34/255],fuchsia:[1,0,1],gainsboro:[220/255,220/255,220/255],ghostwhite:[248/255,248/255,1],gold:[1,215/255,0],goldenrod:[218/255,165/255,32/255],gray:[128/255,128/255,128/255],green:[0,128/255,0],greenyellow:[173/255,1,47/255],grey:[128/255,128/255,128/255],honeydew:[240/255,1,240/255],hotpink:[1,105/255,180/255],indianred:[205/255,92/255,92/255],indigo:[75/255,0,130/255],ivory:[1,1,240/255],khaki:[240/255,230/255,140/255],lavender:[230/255,230/255,250/255],lavenderblush:[1,240/255,245/255],lawngreen:[124/255,252/255,0],lemonchiffon:[1,250/255,205/255],lightblue:[173/255,216/255,230/255],lightcoral:[240/255,128/255,128/255],lightcyan:[224/255,1,1],lightgoldenrodyellow:[250/255,250/255,210/255],lightgray:[211/255,211/255,211/255],lightgreen:[144/255,238/255,144/255],lightgrey:[211/255,211/255,211/255],lightpink:[1,182/255,193/255],lightsalmon:[1,160/255,122/255],lightseagreen:[32/255,178/255,170/255],lightskyblue:[135/255,206/255,250/255],lightslategray:[119/255,136/255,.6],lightslategrey:[119/255,136/255,.6],lightsteelblue:[176/255,196/255,222/255],lightyellow:[1,1,224/255],lime:[0,1,0],limegreen:[50/255,205/255,50/255],linen:[250/255,240/255,230/255],magenta:[1,0,1],maroon:[128/255,0,0],mediumaquamarine:[.4,205/255,170/255],mediumblue:[0,0,205/255],mediumorchid:[186/255,85/255,211/255],mediumpurple:[147/255,112/255,219/255],mediumseagreen:[60/255,179/255,113/255],mediumslateblue:[123/255,104/255,238/255],mediumspringgreen:[0,250/255,154/255],mediumturquoise:[72/255,209/255,.8],mediumvioletred:[199/255,21/255,133/255],midnightblue:[25/255,25/255,112/255],mintcream:[245/255,1,250/255],mistyrose:[1,228/255,225/255],moccasin:[1,228/255,181/255],navajowhite:[1,222/255,173/255],navy:[0,0,128/255],oldlace:[253/255,245/255,230/255],olive:[128/255,128/255,0],olivedrab:[107/255,142/255,35/255],orange:[1,165/255,0],orangered:[1,69/255,0],orchid:[218/255,112/255,214/255],palegoldenrod:[238/255,232/255,170/255],palegreen:[152/255,251/255,152/255],paleturquoise:[175/255,238/255,238/255],palevioletred:[219/255,112/255,147/255],papayawhip:[1,239/255,213/255],peachpuff:[1,218/255,185/255],peru:[205/255,133/255,63/255],pink:[1,192/255,203/255],plum:[221/255,160/255,221/255],powderblue:[176/255,224/255,230/255],purple:[128/255,0,128/255],rebeccapurple:[.4,.2,.6],red:[1,0,0],rosybrown:[188/255,143/255,143/255],royalblue:[65/255,105/255,225/255],saddlebrown:[139/255,69/255,19/255],salmon:[250/255,128/255,114/255],sandybrown:[244/255,164/255,96/255],seagreen:[46/255,139/255,87/255],seashell:[1,245/255,238/255],sienna:[160/255,82/255,45/255],silver:[192/255,192/255,192/255],skyblue:[135/255,206/255,235/255],slateblue:[106/255,90/255,205/255],slategray:[112/255,128/255,144/255],slategrey:[112/255,128/255,144/255],snow:[1,250/255,250/255],springgreen:[0,1,127/255],steelblue:[70/255,130/255,180/255],tan:[210/255,180/255,140/255],teal:[0,128/255,128/255],thistle:[216/255,191/255,216/255],tomato:[1,99/255,71/255],turquoise:[64/255,224/255,208/255],violet:[238/255,130/255,238/255],wheat:[245/255,222/255,179/255],white:[1,1,1],whitesmoke:[245/255,245/255,245/255],yellow:[1,1,0],yellowgreen:[154/255,205/255,50/255]},Ll=new ve({id:"srgb",name:"sRGB",base:Il,fromBase:function(e){return e.map((function(e){var t=e<0?-1:1,n=e*t;return.0031308<n?t*(1.055*Math.pow(n,1/2.4)-.055):12.92*e}))},toBase:function(e){return e.map((function(e){var t=e<0?-1:1,n=e*t;return n<.04045?e/12.92:t*Math.pow((.055+n)/1.055,2.4)}))},formats:{rgb:{coords:Ll=Array(3).fill("<percentage> | <number>[0, 255]")},rgb_number:{name:"rgb",commas:!0,coords:ql=Array(3).fill("<number>[0, 255]"),noAlpha:!0},color:{},rgba:{coords:Ll,commas:!0,lastAlpha:!0},rgba_number:{name:"rgba",commas:!0,coords:ql},hex:{type:"custom",toGamut:!0,test:function(e){return/^#([a-f0-9]{3,4}){1,2}$/i.test(e)},parse:function(e){e.length<=5&&(e=e.replace(/[a-f0-9]/gi,"$&$&"));var t=[];return e.replace(/[a-f0-9]{2}/gi,(function(e){t.push(parseInt(e,16)/255)})),{spaceId:"srgb",coords:t.slice(0,3),alpha:t.slice(3)[0]}},serialize:function(e,t){var n=void 0===(n=(2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).collapse)||n,a=(t<1&&e.push(t),e=e.map((function(e){return Math.round(255*e)})),n&&e.every((function(e){return e%17==0})));return"#"+e.map((function(e){return a?(e/17).toString(16):e.toString(16).padStart(2,"0")})).join("")}},keyword:{type:"custom",test:function(e){return/^[a-z]+$/i.test(e)},parse:function(e){var t={spaceId:"srgb",coords:null,alpha:1};if("transparent"===(e=e.toLowerCase())?(t.coords=jl.black,t.alpha=0):t.coords=jl[e],t.coords)return t}}}}),ql=new ve({id:"p3",name:"P3",base:Pl,fromBase:Ll.fromBase,toBase:Ll.toBase,formats:{color:{id:"display-p3"}}});if(Qi.display_space=Ll,"undefined"!=typeof CSS&&CSS.supports)for(var zl=0,Vl=[bl,Ml,ql];zl<Vl.length;zl++){var $l=Vl[zl],Hl=$l.getMinCoords();Hl=Rl({space:$l,coords:Hl,alpha:1});if(CSS.supports("color",Hl)){Qi.display_space=$l;break}}function Ul(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"lab",a=(n=il.get(n)).from(e),r=n.from(t);return Math.sqrt(a.reduce((function(e,t,n){return n=r[n],isNaN(t)||isNaN(n)?e:e+Math.pow(n-t,2)}),0))}function Gl(e){return fl(e,[ll,"y"])}function Wl(e,t){ml(e,[ll,"y"],t)}var Yl=Object.freeze({__proto__:null,getLuminance:Gl,setLuminance:Wl,register:function(e){Object.defineProperty(e.prototype,"luminance",{get:function(){return Gl(this)},set:function(e){Wl(this,e)}})}});function Kl(e){return.022<=e?e:e+Math.pow(.022-e,1.414)}function Xl(e){var t=e<0?-1:1;e=Math.abs(e);return t*Math.pow(e,2.4)}var Zl=24389/27,Jl=el.D65,Ql=new il({id:"lab-d65",name:"Lab D65",coords:{l:{refRange:[0,100],name:"L"},a:{refRange:[-125,125]},b:{refRange:[-125,125]}},white:Jl,base:ll,fromBase:function(e){return e=e.map((function(e,t){return e/Jl[t]})).map((function(e){return 216/24389<e?Math.cbrt(e):(Zl*e+16)/116})),[116*e[1]-16,500*(e[0]-e[1]),200*(e[1]-e[2])]},toBase:function(e){var t=[];return t[1]=(e[0]+16)/116,t[0]=e[1]/500+t[1],t[2]=t[1]-e[2]/200,[24/116<t[0]?Math.pow(t[0],3):(116*t[0]-16)/Zl,8<e[0]?Math.pow((e[0]+16)/116,3):e[0]/Zl,24/116<t[2]?Math.pow(t[2],3):(116*t[2]-16)/Zl].map((function(e,t){return e*Jl[t]}))},formats:{"lab-d65":{coords:["<number> | <percentage>","<number>","<number>"]}}}),es=.5*Math.pow(5,.5)+.5,ts=Object.freeze({__proto__:null,contrastWCAG21:function(e,t){var n;return e=dl(e),t=dl(t),(e=Math.max(Gl(e),0))<(t=Math.max(Gl(t),0))&&(e=(n=[t,e])[0],t=n[1]),(e+.05)/(t+.05)},contrastAPCA:function(e,t){t=dl(t),e=dl(e);var n=(t=G((t=Nl(t,"srgb")).coords,3))[0],a=t[1],r=(t=t[2],.2126729*Xl(n)+.7151522*Xl(a)+.072175*Xl(t));n=(e=G((e=Nl(e,"srgb")).coords,3))[0],a=e[1],t=e[2],e=.2126729*Xl(n)+.7151522*Xl(a)+.072175*Xl(t),t=(n=Kl(r))<(a=Kl(e)),r=Math.abs(a-n)<5e-4?0:t?1.14*(Math.pow(a,.56)-Math.pow(n,.57)):1.14*(Math.pow(a,.65)-Math.pow(n,.62));return 100*(Math.abs(r)<.1?0:0<r?r-.027:r+.027)},contrastMichelson:function(e,t){e=dl(e),t=dl(t);var n=((e=Math.max(Gl(e),0))<(t=Math.max(Gl(t),0))&&(e=(n=[t,e])[0],t=n[1]),e+t);return 0===n?0:(e-t)/n},contrastWeber:function(e,t){var n;return e=dl(e),t=dl(t),(e=Math.max(Gl(e),0))<(t=Math.max(Gl(t),0))&&(e=(n=[t,e])[0],t=n[1]),0===t?5e4:(e-t)/t},contrastLstar:function(e,t){return e=dl(e),t=dl(t),e=fl(e,[bl,"l"]),t=fl(t,[bl,"l"]),Math.abs(e-t)},contrastDeltaPhi:function(e,t){return e=dl(e),t=dl(t),e=fl(e,[Ql,"l"]),t=fl(t,[Ql,"l"]),e=Math.abs(Math.pow(e,es)-Math.pow(t,es)),(t=Math.pow(e,1/es)*Math.SQRT2-40)<7.5?0:t}});function ns(e){var t=(e=G(pl(e,ll),3))[0],n=e[1];return[4*t/(e=t+15*n+3*e[2]),9*n/e]}function as(e){var t=(e=G(pl(e,ll),3))[0],n=e[1];return[t/(e=t+n+e[2]),n/e]}var rs=Object.freeze({__proto__:null,uv:ns,xy:as,register:function(e){Object.defineProperty(e.prototype,"uv",{get:function(){return ns(this)}}),Object.defineProperty(e.prototype,"xy",{get:function(){return as(this)}})}}),os=Math.PI/180,us=new il({id:"xyz-abs-d65",name:"Absolute XYZ D65",coords:{x:{refRange:[0,9504.7],name:"Xa"},y:{refRange:[0,1e4],name:"Ya"},z:{refRange:[0,10888.3],name:"Za"}},base:ll,fromBase:function(e){return e.map((function(e){return Math.max(203*e,0)}))},toBase:function(e){return e.map((function(e){return Math.max(e/203,0)}))}}),is=2610/Math.pow(2,14),ls=Math.pow(2,14)/2610,ss=3424/Math.pow(2,12),cs=2413/Math.pow(2,7),ds=2392/Math.pow(2,7),ps=1.7*2523/Math.pow(2,5),fs=Math.pow(2,5)/(1.7*2523),Ds=16295499532821565e-27,ms=[[.41478972,.579999,.014648],[-.20151,1.120649,.0531008],[-.0166008,.2648,.6684799]],hs=[[1.9242264357876067,-1.0047923125953657,.037651404030618],[.35031676209499907,.7264811939316552,-.06538442294808501],[-.09098281098284752,-.3127282905230739,1.5227665613052603]],gs=[[.5,.5,0],[3.524,-4.066708,.542708],[.199076,1.096799,-1.295875]],bs=[[1,.1386050432715393,.05804731615611886],[.9999999999999999,-.1386050432715393,-.05804731615611886],[.9999999999999998,-.09601924202631895,-.8118918960560388]],vs=new il({id:"jzazbz",name:"Jzazbz",coords:{jz:{refRange:[0,1],name:"Jz"},az:{refRange:[-.5,.5]},bz:{refRange:[-.5,.5]}},base:us,fromBase:function(e){var t=(e=G(e,3))[0],n=e[1];e=e[2],n=zi(ms,[1.15*t-(1.15-1)*e,.66*n-(.66-1)*t,e]).map((function(e){var t=ss+cs*Math.pow(e/1e4,is);e=1+ds*Math.pow(e/1e4,is);return Math.pow(t/e,ps)})),e=(t=G(zi(gs,n),3))[0],n=t[1],t=t[2];return[(1-.56)*e/(1+-.56*e)-Ds,n,t]},toBase:function(e){var t=(e=G(e,3))[0],n=e[1];e=e[2],t=zi(bs,[(t+Ds)/(1-.56- -.56*(t+Ds)),n,e]).map((function(e){var t=ss-Math.pow(e,fs);e=ds*Math.pow(e,fs)-cs;return 1e4*Math.pow(t/e,ls)})),e=(n=G(zi(hs,t),3))[0],t=n[1];return[e=(e+(1.15-1)*(n=n[2]))/1.15,(t+(.66-1)*e)/.66,n]},formats:{color:{}}}),ys=new il({id:"jzczhz",name:"JzCzHz",coords:{jz:{refRange:[0,1],name:"Jz"},cz:{refRange:[0,1],name:"Chroma"},hz:{refRange:[0,360],type:"angle",name:"Hue"}},base:vs,fromBase:function(e){var t=(e=G(e,3))[0],n=e[1],a=(e=e[2],Math.abs(n)<2e-4&&Math.abs(e)<2e-4?NaN:180*Math.atan2(e,n)/Math.PI);return[t,Math.sqrt(Math.pow(n,2)+Math.pow(e,2)),vl(a)]},toBase:function(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]},formats:{color:{}}}),Fs=2610/16384,ws=[[.3592,.6976,-.0358],[-.1922,1.1004,.0755],[.007,.0749,.8434]],Es=[[.5,.5,0],[6610/4096,-13613/4096,7003/4096],[17933/4096,-17390/4096,-543/4096]],Cs=[[.9999888965628402,.008605050147287059,.11103437159861648],[1.00001110343716,-.008605050147287059,-.11103437159861648],[1.0000320633910054,.56004913547279,-.3206339100541203]],xs=[[2.0701800566956137,-1.326456876103021,.20661600684785517],[.3649882500326575,.6804673628522352,-.04542175307585323],[-.04959554223893211,-.04942116118675749,1.1879959417328034]],As=new il({id:"ictcp",name:"ICTCP",coords:{i:{refRange:[0,1],name:"I"},ct:{refRange:[-.5,.5],name:"CT"},cp:{refRange:[-.5,.5],name:"CP"}},base:us,fromBase:function(e){var t=e=zi(ws,e);return t=e.map((function(e){var t=.8359375+2413/128*Math.pow(e/1e4,Fs);e=1+18.6875*Math.pow(e/1e4,Fs);return Math.pow(t/e,2523/32)})),zi(Es,t)},toBase:function(e){return e=zi(Cs,e).map((function(e){var t=Math.max(Math.pow(e,32/2523)-.8359375,0);e=2413/128-18.6875*Math.pow(e,32/2523);return 1e4*Math.pow(t/e,16384/2610)})),zi(xs,e)},formats:{color:{}}}),ks=[[.8190224432164319,.3619062562801221,-.12887378261216414],[.0329836671980271,.9292868468965546,.03614466816999844],[.048177199566046255,.26423952494422764,.6335478258136937]],Bs=[[1.2268798733741557,-.5578149965554813,.28139105017721583],[-.04057576262431372,1.1122868293970594,-.07171106666151701],[-.07637294974672142,-.4214933239627914,1.5869240244272418]],Ts=[[.2104542553,.793617785,-.0040720468],[1.9779984951,-2.428592205,.4505937099],[.0259040371,.7827717662,-.808675766]],Ns=[[.9999999984505198,.39633779217376786,.2158037580607588],[1.0000000088817609,-.10556134232365635,-.06385417477170591],[1.0000000546724108,-.08948418209496575,-1.2914855378640917]],Rs=new il({id:"oklab",name:"OKLab",coords:{l:{refRange:[0,1],name:"L"},a:{refRange:[-.4,.4]},b:{refRange:[-.4,.4]}},white:"D65",base:ll,fromBase:function(e){return e=zi(ks,e).map((function(e){return Math.cbrt(e)})),zi(Ts,e)},toBase:function(e){return e=zi(Ns,e).map((function(e){return Math.pow(e,3)})),zi(Bs,e)},formats:{oklab:{coords:["<number> | <percentage>","<number>","<number>"]}}}),_s=Object.freeze({__proto__:null,deltaE76:function(e,t){return Ul(e,t,"lab")},deltaECMC:function(e,t){var n=void 0===(n=(a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).l)?2:n,a=void 0===(a=a.c)?1:a,r=(u=G(bl.from(e),3))[0],o=u[1],u=u[2],i=(l=G(yl.from(bl,[r,o,u]),3))[1],l=l[2],s=(d=G(bl.from(t),3))[0],c=d[1],d=d[2],p=yl.from(bl,[s,c,d])[1];s=r-s,p=(i=i<0?0:i)-(p=p<0?0:p),u-=d,d=Math.pow(o-c,2)+Math.pow(u,2)-Math.pow(p,2),o=.511,16<=r&&(o=.040975*r/(1+.01765*r)),c=.0638*i/(1+.0131*i)+.638,u=164<=(l=Number.isNaN(l)?0:l)&&l<=345?.56+Math.abs(.2*Math.cos((l+168)*os)):.36+Math.abs(.4*Math.cos((l+35)*os)),r=Math.pow(i,4),i=c*((l=Math.sqrt(r/(r+1900)))*u+1-l),r=Math.pow(s/(n*o),2),r=(r+=Math.pow(p/(a*c),2))+d/Math.pow(i,2);return Math.sqrt(r)},deltaE2000:xl,deltaEJz:function(e,t){var n=(e=G(ys.from(e),3))[0],a=e[1],r=(e=e[2],(t=G(ys.from(t),3))[0]),o=t[1];t=t[2],n-=r,r=a-o,Number.isNaN(e)&&Number.isNaN(t)?t=e=0:Number.isNaN(e)?e=t:Number.isNaN(t)&&(t=e),e-=t,t=2*Math.sqrt(a*o)*Math.sin(e/2*(Math.PI/180));return Math.sqrt(Math.pow(n,2)+Math.pow(r,2)+Math.pow(t,2))},deltaEITP:function(e,t){var n=(e=G(As.from(e),3))[0],a=e[1],r=(e=e[2],(t=G(As.from(t),3))[0]),o=t[1];t=t[2];return 720*Math.sqrt(Math.pow(n-r,2)+.25*Math.pow(a-o,2)+Math.pow(e-t,2))},deltaEOK:function(e,t){var n=(e=G(Rs.from(e),3))[0],a=e[1],r=(e=e[2],(t=G(Rs.from(t),3))[0]);a-=t[1],e-=t[2];return Math.sqrt(Math.pow(n-r,2)+Math.pow(a,2)+Math.pow(e,2))}});function Os(e,t){var n,a,r=(a=a=Vi(a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{})?{method:a}:a).method,o=void 0===r?Qi.deltaE:r,u=V(a,h);for(n in e=dl(e),t=dl(t),_s)if("deltae"+o.toLowerCase()===n.toLowerCase())return _s[n](e,t,u);throw new TypeError("Unknown deltaE method: ".concat(o))}var Ss=Object.freeze({__proto__:null,lighten:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:.25;return ml(e,[il.get("oklch","lch"),"l"],(function(e){return e*(1+t)}))},darken:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:.25;return ml(e,[il.get("oklch","lch"),"l"],(function(e){return e*(1-t)}))}});function Ms(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:.5,a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},r=(e=(r=[dl(e),dl(t)])[0],t=r[1],"object"===$i(n)&&(n=(r=[.5,n])[0],a=r[1]),a);return Is(e,t,{space:r.space,outputSpace:r.outputSpace,premultiplied:r.premultiplied})(n)}function Ps(e,t){var n,a,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},o=(s=(js(e)&&(r=t,e=(s=G((n=e).rangeArgs.colors,2))[0],t=s[1]),r)).maxDeltaE,u=s.deltaEMethod,i=(r=void 0===(r=s.steps)?2:r,void 0===(l=s.maxSteps)?1e3:l),l=V(s,g),s=(n||(e=(s=[dl(e),dl(t)])[0],t=s[1],n=Is(e,t,l)),Os(e,t)),c=(l=0<o?Math.max(r,Math.ceil(s/o)+1):r,[]);if(void 0!==i&&(l=Math.min(l,i)),c=1===l?[{p:.5,color:n(.5)}]:(a=1/(l-1),Array.from({length:l},(function(e,t){return{p:t*=a,color:n(t)}}))),0<o)for(var d=c.reduce((function(e,t,n){return 0===n?0:(t=Os(t.color,c[n-1].color,u),Math.max(e,t))}),0);o<d;){d=0;for(var p=1;p<c.length&&c.length<i;p++){var f=c[p-1],D=c[p],m=(D.p+f.p)/2,h=n(m);d=Math.max(d,Os(h,f.color),Os(h,D.color));c.splice(p,0,{p:m,color:n(m)}),p++}}return c=c.map((function(e){return e.color}))}function Is(e,t){var n,a,r,o,u,i,l,s,c,d,p,f,D=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return js(e)?(r=e,o=t,Is.apply(void 0,$(r.rangeArgs.colors).concat([U({},r.rangeArgs.options,o)]))):(p=D.space,f=D.outputSpace,n=D.progression,a=D.premultiplied,e=dl(e),t=dl(t),e=Bl(e),t=Bl(t),r={colors:[e,t],options:D},p=p?il.get(p):il.registry[Qi.interpolationSpace]||e.space,f=f?il.get(f):p,e=Nl(e,p),t=Nl(t,p),e=Tl(e),t=Tl(t),p.coords.h&&"angle"===p.coords.h.type&&(o=D.hue=D.hue||"shorter",s=[(i=[fl(e,D=[p,"h"]),fl(t,D)])[0],i=i[1]],l="raw"===(l=o)?s:(c=(s=G(s.map(vl),2))[0],d=(s=s[1])-c,"increasing"===l?d<0&&(s+=360):"decreasing"===l?0<d&&(c+=360):"longer"===l?-180<d&&d<180&&(0<d?s+=360:c+=360):"shorter"===l&&(180<d?c+=360:d<-180&&(s+=360)),[c,s]),u=(d=G(l,2))[0],i=d[1],ml(e,D,u),ml(t,D,i)),a&&(e.coords=e.coords.map((function(t){return t*e.alpha})),t.coords=t.coords.map((function(e){return e*t.alpha}))),Object.assign((function(r){r=n?n(r):r;var o=e.coords.map((function(e,n){return Wi(e,t.coords[n],r)})),u=Wi(e.alpha,t.alpha,r);o={space:p,coords:o,alpha:u};return a&&(o.coords=o.coords.map((function(e){return e/u}))),f!==p?Nl(o,f):o}),{rangeArgs:r}))}function js(e){return"function"===$i(e)&&!!e.rangeArgs}Qi.interpolationSpace="lab";var Ls=Object.freeze({__proto__:null,mix:Ms,steps:Ps,range:Is,isRange:js,register:function(e){e.defineFunction("mix",Ms,{returns:"color"}),e.defineFunction("range",Is,{returns:"function<color>"}),e.defineFunction("steps",Ps,{returns:"array<color>"})}}),qs=new il({id:"hsl",name:"HSL",coords:{h:{refRange:[0,360],type:"angle",name:"Hue"},s:{range:[0,100],name:"Saturation"},l:{range:[0,100],name:"Lightness"}},base:Ll,fromBase:function(e){var t=Math.max.apply(Math,$(e)),n=Math.min.apply(Math,$(e)),a=(e=G(e,3))[0],r=e[1],o=e[2],u=NaN,i=(e=0,(n+t)/2),l=t-n;if(0!=l){switch(e=0==i||1==i?0:(t-i)/Math.min(i,1-i),t){case a:u=(r-o)/l+(r<o?6:0);break;case r:u=(o-a)/l+2;break;case o:u=(a-r)/l+4}u*=60}return[u,100*e,100*i]},toBase:function(e){var t=(e=G(e,3))[0],n=e[1],a=e[2];function r(e){e=(e+t/30)%12;var r=n*Math.min(a,1-a);return a-r*Math.max(-1,Math.min(e-3,9-e,1))}return(t%=360)<0&&(t+=360),n/=100,a/=100,[r(0),r(8),r(4)]},formats:{hsl:{toGamut:!0,coords:["<number> | <angle>","<percentage>","<percentage>"]},hsla:{coords:["<number> | <angle>","<percentage>","<percentage>"],commas:!0,lastAlpha:!0}}}),zs=new il({id:"hsv",name:"HSV",coords:{h:{refRange:[0,360],type:"angle",name:"Hue"},s:{range:[0,100],name:"Saturation"},v:{range:[0,100],name:"Value"}},base:qs,fromBase:function(e){var t=(e=G(e,3))[0],n=e[1];e=e[2];return[t,0==(n=(e/=100)+(n/=100)*Math.min(e,1-e))?0:200*(1-e/n),100*n]},toBase:function(e){var t=(e=G(e,3))[0],n=e[1];e=e[2];return[t,0==(n=(e/=100)*(1-(n/=100)/2))||1==n?0:(e-n)/Math.min(n,1-n)*100,100*n]},formats:{color:{toGamut:!0}}}),Vs=new il({id:"hwb",name:"HWB",coords:{h:{refRange:[0,360],type:"angle",name:"Hue"},w:{range:[0,100],name:"Whiteness"},b:{range:[0,100],name:"Blackness"}},base:zs,fromBase:function(e){var t=(e=G(e,3))[0],n=e[1];return[t,(e=e[2])*(100-n)/100,100-e]},toBase:function(e){var t=(e=G(e,3))[0],n=e[1],a=(e=e[2],(n/=100)+(e/=100));return 1<=a?[t,0,n/a*100]:[t,100*(0==(a=1-e)?0:1-n/a),100*a]},formats:{hwb:{toGamut:!0,coords:["<number> | <angle>","<percentage>","<percentage>"]}}}),$s=new ve({id:"a98rgb-linear",name:"Linear Adobe® 98 RGB compatible",white:"D65",toXYZ_M:[[.5766690429101305,.1855582379065463,.1882286462349947],[.29734497525053605,.6273635662554661,.07529145849399788],[.02703136138641234,.07068885253582723,.9913375368376388]],fromXYZ_M:[[2.0415879038107465,-.5650069742788596,-.34473135077832956],[-.9692436362808795,1.8759675015077202,.04155505740717557],[.013444280632031142,-.11836239223101838,1.0151749943912054]]}),Hs=new ve({id:"a98rgb",name:"Adobe® 98 RGB compatible",base:$s,toBase:function(e){return e.map((function(e){return Math.pow(Math.abs(e),563/256)*Math.sign(e)}))},fromBase:function(e){return e.map((function(e){return Math.pow(Math.abs(e),256/563)*Math.sign(e)}))},formats:{color:{id:"a98-rgb"}}}),Us=new ve({id:"prophoto-linear",name:"Linear ProPhoto",white:"D50",base:Kt,toXYZ_M:[[.7977604896723027,.13518583717574031,.0313493495815248],[.2880711282292934,.7118432178101014,8565396060525902e-20],[0,0,.8251046025104601]],fromXYZ_M:[[1.3457989731028281,-.25558010007997534,-.05110628506753401],[-.5446224939028347,1.5082327413132781,.02053603239147973],[0,0,1.2119675456389454]]}),Gs=new ve({id:"prophoto",name:"ProPhoto",base:Us,toBase:function(e){return e.map((function(e){return e<.03125?e/16:Math.pow(e,1.8)}))},fromBase:function(e){return e.map((function(e){return 1/512<=e?Math.pow(e,1/1.8):16*e}))},formats:{color:{id:"prophoto-rgb"}}}),Ws=new il({id:"oklch",name:"OKLCh",coords:{l:{refRange:[0,1],name:"Lightness"},c:{refRange:[0,.4],name:"Chroma"},h:{refRange:[0,360],type:"angle",name:"Hue"}},white:"D65",base:Rs,fromBase:function(e){var t=(e=G(e,3))[0],n=e[1],a=(e=e[2],Math.abs(n)<2e-4&&Math.abs(e)<2e-4?NaN:180*Math.atan2(e,n)/Math.PI);return[t,Math.sqrt(Math.pow(n,2)+Math.pow(e,2)),vl(a)]},toBase:function(e){var t,n=(e=G(e,3))[0],a=e[1];e=e[2],a=isNaN(e)?t=0:(t=a*Math.cos(e*Math.PI/180),a*Math.sin(e*Math.PI/180));return[n,t,a]},formats:{oklch:{coords:["<number> | <percentage>","<number>","<number> | <angle>"]}}}),Ys=2610/Math.pow(2,14),Ks=Math.pow(2,14)/2610,Xs=2523/Math.pow(2,5),Zs=Math.pow(2,5)/2523,Js=3424/Math.pow(2,12),Qs=2413/Math.pow(2,7),ec=2392/Math.pow(2,7),tc=new ve({id:"rec2100pq",name:"REC.2100-PQ",base:_l,toBase:function(e){return e.map((function(e){return 1e4*Math.pow(Math.max(Math.pow(e,Zs)-Js,0)/(Qs-ec*Math.pow(e,Zs)),Ks)/203}))},fromBase:function(e){return e.map((function(e){e=Math.max(203*e/1e4,0);var t=Js+Qs*Math.pow(e,Ys);e=1+ec*Math.pow(e,Ys);return Math.pow(t/e,Xs)}))},formats:{color:{id:"rec2100-pq"}}}),nc=.17883277,ac=.28466892,rc=.55991073,oc=3.7743,uc=new ve({id:"rec2100hlg",cssid:"rec2100-hlg",name:"REC.2100-HLG",referred:"scene",base:_l,toBase:function(e){return e.map((function(e){return e<=.5?Math.pow(e,2)/3*oc:Math.exp((e-rc)/nc+ac)/12*oc}))},fromBase:function(e){return e.map((function(e){return(e/=oc)<=1/12?Math.sqrt(3*e):nc*Math.log(12*e-ac)+rc}))},formats:{color:{id:"rec2100-hlg"}}}),ic={};function lc(e){var t=e.id;e.toCone_M,e.fromCone_M,ic[t]=e}function sc(e,t,n){var a=ic[2<arguments.length&&void 0!==n?n:"Bradford"],r=(u=G(zi(a.toCone_M,e),3))[0],o=u[1],u=u[2],i=G(zi(a.toCone_M,t),3);r=zi([[i[0]/r,0,0],[0,i[1]/o,0],[0,0,i[2]/u]],a.toCone_M);return zi(a.fromCone_M,r)}Ji.add("chromatic-adaptation-start",(function(e){e.options.method&&(e.M=sc(e.W1,e.W2,e.options.method))})),Ji.add("chromatic-adaptation-end",(function(e){e.M||(e.M=sc(e.W1,e.W2,e.options.method))})),lc({id:"von Kries",toCone_M:[[.40024,.7076,-.08081],[-.2263,1.16532,.0457],[0,0,.91822]],fromCone_M:[[1.8599364,-1.1293816,.2198974],[.3611914,.6388125,-64e-7],[0,0,1.0890636]]}),lc({id:"Bradford",toCone_M:[[.8951,.2664,-.1614],[-.7502,1.7135,.0367],[.0389,-.0685,1.0296]],fromCone_M:[[.9869929,-.1470543,.1599627],[.4323053,.5183603,.0492912],[-.0085287,.0400428,.9684867]]}),lc({id:"CAT02",toCone_M:[[.7328,.4296,-.1624],[-.7036,1.6975,.0061],[.003,.0136,.9834]],fromCone_M:[[1.0961238,-.278869,.1827452],[.454369,.4735332,.0720978],[-.0096276,-.005698,1.0153256]]}),lc({id:"CAT16",toCone_M:[[.401288,.650173,-.051461],[-.250268,1.204414,.045854],[-.002079,.048952,.953127]],fromCone_M:[[1.862067855087233,-1.011254630531685,.1491867754444518],[.3875265432361372,.6214474419314753,-.008973985167612518],[-.01584149884933386,-.03412293802851557,1.04996443687785]]}),Object.assign(el,{A:[1.0985,1,.35585],C:[.98074,1,1.18232],D55:[.95682,1,.92149],D75:[.94972,1,1.22638],E:[1,1,1],F2:[.99186,1,.67393],F7:[.95041,1,1.08747],F11:[1.00962,1,.6435]}),el.ACES=[.32168/.33767,1,.34065/.33767];var cc=new ve({id:"acescg",name:"ACEScg",coords:{r:{range:[0,65504],name:"Red"},g:{range:[0,65504],name:"Green"},b:{range:[0,65504],name:"Blue"}},referred:"scene",white:el.ACES,toXYZ_M:[[.6624541811085053,.13400420645643313,.1561876870049078],[.27222871678091454,.6740817658111484,.05368951740793705],[-.005574649490394108,.004060733528982826,1.0103391003129971]],fromXYZ_M:[[1.6410233796943257,-.32480329418479,-.23642469523761225],[-.6636628587229829,1.6153315916573379,.016756347685530137],[.011721894328375376,-.008284441996237409,.9883948585390215]],formats:{color:{}}}),dc=Math.pow(2,-16),pc=-.35828683,fc=(Math.log2(65504)+9.72)/17.52,Dc=(ve=new ve({id:"acescc",name:"ACEScc",coords:{r:{range:[pc,fc],name:"Red"},g:{range:[pc,fc],name:"Green"},b:{range:[pc,fc],name:"Blue"}},referred:"scene",base:cc,toBase:function(e){return e.map((function(e){return e<=(9.72-15)/17.52?2*(Math.pow(2,17.52*e-9.72)-dc):e<fc?Math.pow(2,17.52*e-9.72):65504}))},fromBase:function(e){return e.map((function(e){return e<=0?(Math.log2(dc)+9.72)/17.52:e<dc?(Math.log2(dc+.5*e)+9.72)/17.52:(Math.log2(e)+9.72)/17.52}))},formats:{color:{}}}),Object.freeze({__proto__:null,XYZ_D65:ll,XYZ_D50:Kt,XYZ_ABS_D65:us,Lab_D65:Ql,Lab:bl,LCH:yl,sRGB_Linear:Il,sRGB:Ll,HSL:qs,HWB:Vs,HSV:zs,P3_Linear:Pl,P3:ql,A98RGB_Linear:$s,A98RGB:Hs,ProPhoto_Linear:Us,ProPhoto:Gs,REC_2020_Linear:_l,REC_2020:Ml,OKLab:Rs,OKLCH:Ws,Jzazbz:vs,JzCzHz:ys,ICTCP:As,REC_2100_PQ:tc,REC_2100_HLG:uc,ACEScg:cc,ACEScc:ve})),mc=(se=new WeakMap,Z(hc,[{key:"space",get:function(){return j(this,se)}},{key:"spaceId",get:function(){return j(this,se).id}},{key:"clone",value:function(){return new hc(this.space,this.coords,this.alpha)}},{key:"toJSON",value:function(){return{spaceId:this.spaceId,coords:this.coords,alpha:this.alpha}}},{key:"display",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a=function(e){var t=void 0===(t=(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).space)?Qi.display_space:t,n=V(n,D),a=Rl(e,n);return"undefined"==typeof CSS||CSS.supports("color",a)||!Qi.display_space?(a=new String(a)).color=e:(t=Nl(e,t),(a=new String(Rl(t,n))).color=t),a}.apply(void 0,[this].concat(t));return a.color=new hc(a.color),a}}],[{key:"get",value:function(e){if(e instanceof hc)return e;for(var t=arguments.length,n=new Array(1<t?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return B(hc,[e].concat(n))}},{key:"defineFunction",value:function(e,t){function n(){var e,n=t.apply(void 0,arguments);return"color"===o?n=hc.get(n):"function<color>"===o?(e=n,n=function(){var t=e.apply(void 0,arguments);return hc.get(t)},Object.assign(n,e)):"array<color>"===o&&(n=n.map((function(e){return hc.get(e)}))),n}var a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:t,r=void 0===(r=a.instance)||r,o=a.returns;e in hc||(hc[e]=n),r&&(hc.prototype[e]=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return n.apply(void 0,[this].concat(t))})}},{key:"defineFunctions",value:function(e){for(var t in e)hc.defineFunction(t,e[t],e[t])}},{key:"extend",value:function(e){if(e.register)e.register(hc);else for(var t in e)hc.defineFunction(t,e[t])}}]),hc);function hc(){var e=this;K(this,hc),M(this,se,{writable:!0,value:void 0});for(var t,n,a,r=arguments.length,o=new Array(r),u=0;u<r;u++)o[u]=arguments[u];a=(a=1===o.length?dl(o[0]):a)?(t=a.space||a.spaceId,n=a.coords,a.alpha):(t=o[0],n=o[1],o[2]),q(this,se,il.get(t)),this.coords=n?n.slice():[0,0,0],this.alpha=a<1?a:1;for(var i=0;i<this.coords.length;i++)"NaN"===this.coords[i]&&(this.coords[i]=NaN);for(var l in j(this,se).coords)!function(t){Object.defineProperty(e,t,{get:function(){return e.get(t)},set:function(n){return e.set(t,n)}})}(l)}mc.defineFunctions({get:fl,getAll:pl,set:ml,setAll:Dl,to:Nl,equals:function(e,t){return e=dl(e),t=dl(t),e.space===t.space&&e.alpha===t.alpha&&e.coords.every((function(e,n){return e===t.coords[n]}))},inGamut:kl,toGamut:Tl,distance:Ul,toString:Rl}),Object.assign(mc,{util:Io,hooks:Ji,WHITES:el,Space:il,spaces:il.registry,parse:cl,defaults:Qi});for(var gc,bc=0,vc=Object.keys(Dc);bc<vc.length;bc++){var yc=vc[bc];il.register(Dc[yc])}for(gc in il.registry)Fc(gc,il.registry[gc]);function Fc(e,t){Object.keys(t.coords),Object.values(t.coords).map((function(e){return e.name}));var n=e.replace(/-/g,"_");Object.defineProperty(mc.prototype,n,{get:function(){var n=this,a=this.getAll(e);return"undefined"==typeof Proxy?a:new Proxy(a,{has:function(e,n){try{return il.resolveCoord([t,n]),!0}catch(e){}return Reflect.has(e,n)},get:function(e,n,a){if(n&&"symbol"!==r(n)&&!(n in e)){var o=il.resolveCoord([t,n]).index;if(0<=o)return e[o]}return Reflect.get(e,n,a)},set:function(a,o,u,i){if(o&&"symbol"!==r(o)&&!(o in a)||0<=o){var l=il.resolveCoord([t,o]).index;if(0<=l)return a[l]=u,n.setAll(e,a),!0}return Reflect.set(a,o,u,i)}})},set:function(t){this.setAll(e,t)},configurable:!0,enumerable:!0})}Ji.add("colorspace-init-end",(function(e){var t;Fc(e.id,e),null!=(t=e.aliases)&&t.forEach((function(t){Fc(t,e)}))})),mc.extend(_s),mc.extend({deltaE:Os}),mc.extend(Ss),mc.extend({contrast:function(e,t){var n,a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},r=(a=a=Vi(a)?{algorithm:a}:a).algorithm,o=V(a,m);if(!r)throw a=Object.keys(ts).map((function(e){return e.replace(/^contrast/,"")})).join(", "),new TypeError("contrast() function needs a contrast algorithm. Please specify one of: ".concat(a));for(n in e=dl(e),t=dl(t),ts)if("contrast"+r.toLowerCase()===n.toLowerCase())return ts[n](e,t,o);throw new TypeError("Unknown contrast algorithm: ".concat(r))}}),mc.extend(rs),mc.extend(Yl),mc.extend(Ls),mc.extend(ts);pc=re(Zt()),Kt=re(Jt());var wc=(re(Qt()),Li.default.templateSettings.strip=!1,"Promise"in t||pc.default.polyfill(),"Uint32Array"in t||(t.Uint32Array=Kt.Uint32Array),t.Uint32Array&&("some"in t.Uint32Array.prototype||Object.defineProperty(t.Uint32Array.prototype,"some",{value:Array.prototype.some}),"reduce"in t.Uint32Array.prototype||Object.defineProperty(t.Uint32Array.prototype,"reduce",{value:Array.prototype.reduce})),/^#[0-9a-f]{3,8}$/i),Ec=/hsl\\(\\s*([\\d.]+)(rad|turn)/;function Cc(e,t,n){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:1;K(this,Cc),this.red=e,this.green=t,this.blue=n,this.alpha=a}Z(Cc,[{key:"toHexString",value:function(){var e=Math.round(this.red).toString(16),t=Math.round(this.green).toString(16),n=Math.round(this.blue).toString(16);return"#"+(15.5<this.red?e:"0"+e)+(15.5<this.green?t:"0"+t)+(15.5<this.blue?n:"0"+n)}},{key:"toJSON",value:function(){return{red:this.red,green:this.green,blue:this.blue,alpha:this.alpha}}},{key:"parseString",value:function(e){e=e.replace(Ec,(function(e,t,n){var a=t+n;switch(n){case"rad":return e.replace(a,180*t/Math.PI);case"turn":return e.replace(a,360*t)}}));try{var t=new mc(e).to("srgb");this.red=Math.round(255*Ac(t.r,0,1)),this.green=Math.round(255*Ac(t.g,0,1)),this.blue=Math.round(255*Ac(t.b,0,1)),this.alpha=+t.alpha}catch(t){throw new Error('Unable to parse color "'.concat(e,'"'))}return this}},{key:"parseRgbString",value:function(e){this.parseString(e)}},{key:"parseHexString",value:function(e){e.match(wc)&&![6,8].includes(e.length)&&this.parseString(e)}},{key:"parseColorFnString",value:function(e){this.parseString(e)}},{key:"getRelativeLuminance",value:function(){var e=this.red/255,t=this.green/255,n=this.blue/255;return.2126*(e<=.03928?e/12.92:Math.pow((.055+e)/1.055,2.4))+.7152*(t<=.03928?t/12.92:Math.pow((.055+t)/1.055,2.4))+.0722*(n<=.03928?n/12.92:Math.pow((.055+n)/1.055,2.4))}}]);var xc=Cc;function Ac(e,t,n){return Math.min(Math.max(t,e),n)}var kc=function(e){var t=new xc;return t.parseString(e.getPropertyValue("background-color")),0!==t.alpha&&(e=e.getPropertyValue("opacity"),t.alpha=t.alpha*e),t},Bc=function(e){var n=t.getComputedStyle(e);return Ii(e,n)||1===kc(n).alpha};function Tc(e){var t;return!(!e.href||(t=Kn.get("firstPageLink",Nc))&&e.compareDocumentPosition(t.actualNode)!==e.DOCUMENT_POSITION_FOLLOWING)}function Nc(){return(t.location.origin?cp(o._tree,'a[href]:not([href^="javascript:"])').find((function(e){return!mo(e.actualNode)})):cp(o._tree,'a:not([href^="#"]):not([href^="/#"]):not([href^="javascript:"])')[0])||null}var Rc=/rect\\s*\\(([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px\\s*\\)/,_c=/(\\w+)\\((\\d+)/;var Oc=function e(n,a,r){if(!n)throw new TypeError("Cannot determine if element is visible for non-DOM nodes");var u,i,l,s=n instanceof on?n:Xn(n),c=(n=s?s.actualNode:n,"_isVisible"+(a?"ScreenReader":"")),d=(p=null!=(p=t.Node)?p:{}).DOCUMENT_NODE,p=p.DOCUMENT_FRAGMENT_NODE,f=(s?s.props:n).nodeType,D=s?s.props.nodeName:n.nodeName.toLowerCase();return s&&void 0!==s[c]?s[c]:f===d||!["style","script","noscript","template"].includes(D)&&(n&&f===p&&(n=n.host),(!a||"true"!==(s?s.attr("aria-hidden"):n.getAttribute("aria-hidden")))&&(n?null!==(d=t.getComputedStyle(n,null))&&("area"===D?(u=a,i=r,!!(p=pr(f=n,"map"))&&!!(p=p.getAttribute("name"))&&!(!(f=sr(f))||9!==f.nodeType||!(l=cp(o._tree,'img[usemap="#'.concat(wn(p),'"]')))||!l.length)&&l.some((function(t){return e(t.actualNode,u,i)}))):"none"!==d.getPropertyValue("display")&&(D=parseInt(d.getPropertyValue("height")),f=parseInt(d.getPropertyValue("width")),l=(p=Ad(n))&&0===D,p=p&&0===f,D="absolute"===d.getPropertyValue("position")&&(D<2||f<2)&&"hidden"===d.getPropertyValue("overflow"),!(!a&&(function(e){var t=e.getPropertyValue("clip").match(Rc),n=e.getPropertyValue("clip-path").match(_c);if(t&&5===t.length&&(e=e.getPropertyValue("position"),["fixed","absolute"].includes(e)))return t[3]-t[1]<=0&&t[2]-t[4]<=0;if(n){e=n[1];var a=parseInt(n[2],10);switch(e){case"inset":return 50<=a;case"circle":return 0===a}}}(d)||"0"===d.getPropertyValue("opacity")||l||p||D)||!r&&("hidden"===d.getPropertyValue("visibility")||!a&&Lr(n))))&&(f=!1,(p=n.assignedSlot||n.parentNode)&&(f=e(p,a,!0)),s&&(s[c]=f),f)):(D=!0,(r=s.parent)&&(D=e(r,a,!0)),s&&(s[c]=D),D)))},Sc=function(e,n){for(var a=["fixed","sticky"],r=[],o=!1,u=0;u<e.length;++u){var i=e[u],l=(i===n&&(o=!0),t.getComputedStyle(i));o||-1===a.indexOf(l.position)?r.push(i):r=[]}return r};function Mc(e,n){var a=Pc(n);do{var r,o,u,i,l,s,c=Pc(e);if(c===a||c===n)return i=e,r=n,u=(o=t.getComputedStyle(r)).getPropertyValue("overflow"),"inline"===o.getPropertyValue("display")||(i=Array.from(i.getClientRects()),l=r.getBoundingClientRect(),s={left:l.left,top:l.top,width:l.width,height:l.height},(["scroll","auto"].includes(u)||r instanceof t.HTMLHtmlElement)&&(s.width=r.scrollWidth,s.height=r.scrollHeight),1===i.length&&"hidden"===u&&"nowrap"===o.getPropertyValue("white-space")&&(i[0]=s),i.some((function(e){return!(Math.ceil(e.left)<Math.floor(s.left)||Math.ceil(e.top)<Math.floor(s.top)||Math.floor(e.left+e.width)>Math.ceil(s.left+s.width)||Math.floor(e.top+e.height)>Math.ceil(s.top+s.height))})))}while(e=c);return!1}function Pc(e){for(var t=Xn(e).parent;t;){if(Ad(t.actualNode))return t.actualNode;t=t.parent}}var Ic,jc,Lc=function e(t,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:a,o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:0;if(999<o)throw new Error("Infinite loop detected");return Array.from(r.elementsFromPoint(t,n)||[]).filter((function(e){return sr(e)===r})).reduce((function(a,r){var u;return ur(r)&&(u=e(t,n,r.shadowRoot,o+1),!(a=a.concat(u)).length||!Mc(a[0],r))||a.push(r),a}),[])},qc=function(e,t){var n,r;if(e.hasAttribute(t))return r=e.nodeName.toUpperCase(),n=e,["A","AREA"].includes(r)&&!e.ownerSVGElement||((n=a.createElement("a")).href=e.getAttribute(t)),r=["https:","ftps:"].includes(n.protocol)?n.protocol.replace(/s:$/,":"):n.protocol,t=(e=(e=(t=e=/^\\//.test(n.pathname)?n.pathname:"/".concat(n.pathname)).split("/").pop())&&-1!==e.indexOf(".")?{pathname:t.replace(e,""),filename:/index./.test(e)?"":e}:{pathname:t,filename:""}).pathname,e=e.filename,{protocol:r,hostname:n.hostname,port:(r=n.port,["443","80"].includes(r)?"":r),pathname:/\\/$/.test(t)?t:"".concat(t,"/"),search:function(e){var t={};if(e&&e.length){var n=e.substring(1).split("&");if(n&&n.length)for(var a=0;a<n.length;a++){var r=(o=G(n[a].split("="),2))[0],o=void 0===(o=o[1])?"":o;t[decodeURIComponent(r)]=decodeURIComponent(o)}}return t}(n.search),hash:(r=n.hash)&&(t=r.match(/#!?\\/?/g))&&"#"!==G(t,1)[0]?r:"",filename:e}},zc=function(e,n){var a=n.getBoundingClientRect(),r=a.top,o=a.left,u=r-n.scrollTop,i=(r=r-n.scrollTop+n.scrollHeight,o-n.scrollLeft);o=o-n.scrollLeft+n.scrollWidth;return!(e.left>o&&e.left>a.right||e.top>r&&e.top>a.bottom||e.right<i&&e.right<a.left||e.bottom<u&&e.bottom<a.top)&&(o=t.getComputedStyle(n),!(e.left>a.right||e.top>a.bottom)||"scroll"===o.overflow||"auto"===o.overflow||n instanceof t.HTMLBodyElement||n instanceof t.HTMLHtmlElement)},Vc=0;function $c(e,t,n){var a;return K(this,$c),(a=jc.call(this)).shadowId=n,a.children=[],a.actualNode=e,(a.parent=t)||(Vc=0),a.nodeIndex=Vc++,a._isHidden=null,a._cache={},void 0===Ic&&(Ic=Nn(e.ownerDocument)),a._isXHTML=Ic,"input"===e.nodeName.toLowerCase()&&(n=e.getAttribute("type"),n=a._isXHTML?n:(n||"").toLowerCase(),vp().includes(n)||(n="text"),a._type=n),Kn.get("nodeMap")&&Kn.get("nodeMap").set(e,_(a)),a}T($c,on),jc=R($c),Z($c,[{key:"props",get:function(){var e,t,n,a,r,o,u,i,l;return this._cache.hasOwnProperty("props")||(e=(l=this.actualNode).nodeType,t=l.nodeName,n=l.id,a=l.multiple,r=l.nodeValue,o=l.value,u=l.selected,i=l.checked,l=l.indeterminate,this._cache.props={nodeType:e,nodeName:this._isXHTML?t:t.toLowerCase(),id:n,type:this._type,multiple:a,nodeValue:r,value:o,selected:u,checked:i,indeterminate:l}),this._cache.props}},{key:"attr",value:function(e){return"function"!=typeof this.actualNode.getAttribute?null:this.actualNode.getAttribute(e)}},{key:"hasAttr",value:function(e){return"function"==typeof this.actualNode.hasAttribute&&this.actualNode.hasAttribute(e)}},{key:"attrNames",get:function(){var e;return this._cache.hasOwnProperty("attrNames")||(e=(this.actualNode.attributes instanceof t.NamedNodeMap?this.actualNode:this.actualNode.cloneNode(!1)).attributes,this._cache.attrNames=Array.from(e).map((function(e){return e.name}))),this._cache.attrNames}},{key:"getComputedStylePropertyValue",value:function(e){var n="computedStyle_"+e;return this._cache.hasOwnProperty(n)||(this._cache.hasOwnProperty("computedStyle")||(this._cache.computedStyle=t.getComputedStyle(this.actualNode)),this._cache[n]=this._cache.computedStyle.getPropertyValue(e)),this._cache[n]}},{key:"isFocusable",get:function(){return this._cache.hasOwnProperty("isFocusable")||(this._cache.isFocusable=Qo(this.actualNode)),this._cache.isFocusable}},{key:"tabbableElements",get:function(){return this._cache.hasOwnProperty("tabbableElements")||(this._cache.tabbableElements=Bo(this)),this._cache.tabbableElements}},{key:"clientRects",get:function(){return this._cache.hasOwnProperty("clientRects")||(this._cache.clientRects=Array.from(this.actualNode.getClientRects()).filter((function(e){return 0<e.width}))),this._cache.clientRects}},{key:"boundingClientRect",get:function(){return this._cache.hasOwnProperty("boundingClientRect")||(this._cache.boundingClientRect=this.actualNode.getBoundingClientRect()),this._cache.boundingClientRect}}]);var Hc,Uc=$c,Gc=function(e){return(e||"").trim().replace(/\\s{2,}/g," ").split(" ")},Wc=" [idsMap]";function Yc(e,t,n){var a=e[0]._selectorMap;if(a){for(var r=e[0].shadowId,o=0;o<t.length;o++)if(1<t[o].length&&t[o].some(Kc))return;var u=new Set,i=(t.forEach((function(e){var t,n=function(e,t,n){var a=e[e.length-1],r=null,o=1<e.length||!!a.pseudos||!!a.classes;if(Kc(a))r=t["*"];else{if(a.id){if(!t[Wc]||null==(e=t[Wc][a.id])||!e.length)return;r=t[Wc][a.id].filter((function(e){return e.shadowId===n}))}if(a.tag&&"*"!==a.tag){if(null==(e=t[a.tag])||!e.length)return;e=t[a.tag];r=r?Xc(e,r):e}if(a.classes){if(null==(e=t["[class]"])||!e.length)return;e=t["[class]"],r=r?Xc(e,r):e}if(a.attributes)for(var u=0;u<a.attributes.length;u++){var i=a.attributes[u];if("attrValue"===i.type&&(o=!0),null==(l=t["[".concat(i.key,"]")])||!l.length)return;var l=t["[".concat(i.key,"]")];r=r?Xc(l,r):l}}return{nodes:r,isComplexSelector:o}}(e,a,r);null!=n&&null!=(t=n.nodes)&&t.forEach((function(t){n.isComplexSelector&&!la(t,e)||u.add(t)}))})),[]);return u.forEach((function(e){return i.push(e)})),(i=n?i.filter(n):i).sort((function(e,t){return e.nodeIndex-t.nodeIndex}))}}function Kc(e){return"*"===e.tag&&!e.attributes&&!e.id&&!e.classes}function Xc(e,t){return e.filter((function(e){return t.includes(e)}))}function Zc(e,t,n){n[e]=n[e]||[],n[e].push(t)}function Jc(e,t){1===e.props.nodeType&&(Zc(e.props.nodeName,e,t),Zc("*",e,t),e.attrNames.forEach((function(n){"id"===n&&(t[Wc]=t[Wc]||{},Gc(e.attr(n)).forEach((function(n){Zc(n,e,t[Wc])}))),Zc("[".concat(n,"]"),e,t)})))}function Qc(e,t,n){return Jc(e=new Uc(e,t,n),Kn.get("selectorMap")),e}function ed(e,n,a){var r,o,u;function i(e,t,a){return(t=ed(t,n,a))?e.concat(t):e}return u=(e=e.documentElement?e.documentElement:e).nodeName.toLowerCase(),ur(e)?(Hc=!0,r=Qc(e,a,n),n="a"+Math.random().toString().substring(2),o=Array.from(e.shadowRoot.childNodes),r.children=o.reduce((function(e,t){return i(e,t,r)}),[]),[r]):"content"===u&&"function"==typeof e.getDistributedNodes?(o=Array.from(e.getDistributedNodes())).reduce((function(e,t){return i(e,t,a)}),[]):"slot"===u&&"function"==typeof e.assignedNodes?((o=Array.from(e.assignedNodes())).length||(o=function(e){var t=[];for(e=e.firstChild;e;)t.push(e),e=e.nextSibling;return t}(e)),t.getComputedStyle(e),o.reduce((function(e,t){return i(e,t,a)}),[])):1===e.nodeType?(r=Qc(e,a,n),o=Array.from(e.childNodes),r.children=o.reduce((function(e,t){return i(e,t,r)}),[]),[r]):3===e.nodeType?[Qc(e,a)]:void 0}var td=function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:a.documentElement,t=1<arguments.length?arguments[1]:void 0,n=(Hc=!1,{});return Kn.set("nodeMap",new WeakMap),Kn.set("selectorMap",n),(e=ed(e,t,null))[0]._selectorMap=n,e[0]._hasShadowRoot=Hc,e},nd=function(e){return e?e.trim().split("-")[0].toLowerCase():""},ad=function(e){var t={};return t.none=e.none.concat(e.all),t.any=e.any,Object.keys(t).map((function(e){var n;return t[e].length&&(n=o._audit.data.failureSummaries[e])&&"function"==typeof n.failureMessage?n.failureMessage(t[e].map((function(e){return e.message||""}))):void 0})).filter((function(e){return void 0!==e})).join("\\n\\n")};function rd(){var e=o._audit.data.incompleteFallbackMessage;return"string"!=typeof(e="function"==typeof e?e():e)?"":e}var od=tn.resultGroups,ud=function(e,t){var n=o.utils.aggregateResult(e);return od.forEach((function(e){t.resultTypes&&!t.resultTypes.includes(e)&&(n[e]||[]).forEach((function(e){Array.isArray(e.nodes)&&0<e.nodes.length&&(e.nodes=[e.nodes[0]])})),n[e]=(n[e]||[]).map((function(e){return e=Object.assign({},e),Array.isArray(e.nodes)&&0<e.nodes.length&&(e.nodes=e.nodes.map((function(e){var n,a;return"object"===r(e.node)&&(e.html=e.node.source,t.elementRef&&!e.node.fromFrame&&(e.element=e.node.element),!1===t.selectors&&!e.node.fromFrame||(e.target=e.node.selector),t.ancestry&&(e.ancestry=e.node.ancestry),t.xpath)&&(e.xpath=e.node.xpath),delete e.result,delete e.node,n=e,a=t,["any","all","none"].forEach((function(e){Array.isArray(n[e])&&n[e].filter((function(e){return Array.isArray(e.relatedNodes)})).forEach((function(e){e.relatedNodes=e.relatedNodes.map((function(e){var t,n={html:null!=(n=null==e?void 0:e.source)?n:"Undefined"};return!a.elementRef||null!=e&&e.fromFrame||(n.element=null!=(t=null==e?void 0:e.element)?t:null),(!1!==a.selectors||null!=e&&e.fromFrame)&&(n.target=null!=(t=null==e?void 0:e.selector)?t:[":root"]),a.ancestry&&(n.ancestry=null!=(t=null==e?void 0:e.ancestry)?t:[":root"]),a.xpath&&(n.xpath=null!=(t=null==e?void 0:e.xpath)?t:["/"]),n}))}))})),e}))),od.forEach((function(t){return delete e[t]})),delete e.pageLevel,delete e.result,e}))})),n},id=/\\$\\{\\s?data\\s?\\}/g;function ld(e,t){if("string"==typeof t)return e.replace(id,t);for(var n in t){var a;t.hasOwnProperty(n)&&(a=new RegExp("\\\\\${\\\\s?data\\\\."+n+"\\\\s?}","g"),n=void 0===t[n]?"":String(t[n]),e=e.replace(a,n))}return e}var sd=function e(t,n){var a;if(t)return Array.isArray(n)?(n.values=n.join(", "),"string"==typeof t.singular&&"string"==typeof t.plural?ld(1===n.length?t.singular:t.plural,n):ld(t,n)):"string"==typeof t?ld(t,n):"string"==typeof n?ld(t[n],n):(a=t.default||rd(),e(a=n&&n.messageKey&&t[n.messageKey]?t[n.messageKey]:a,n))},cd=function(e,t,n){var a=o._audit.data.checks[e];if(!a)throw new Error("Cannot get message for unknown check: ".concat(e,"."));if(a.messages[t])return sd(a.messages[t],n);throw new Error('Check "'.concat(e,'"" does not have a "').concat(t,'" message.'))},dd=function(e,t,n){t=((n.rules&&n.rules[t]||{}).checks||{})[e.id];var a=(n.checks||{})[e.id],r=e.enabled;e=e.options;return a&&(a.hasOwnProperty("enabled")&&(r=a.enabled),a.hasOwnProperty("options"))&&(e=a.options),t&&(t.hasOwnProperty("enabled")&&(r=t.enabled),t.hasOwnProperty("options"))&&(e=t.options),{enabled:r,options:e,absolutePaths:n.absolutePaths}};function pd(){var e,n,a,u,i=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null,l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t;return i&&"object"===r(i)?i:"object"!==r(l)?{}:{testEngine:{name:"axe-core",version:o.version},testRunner:{name:o._audit.brand},testEnvironment:(i=l).navigator&&"object"===r(i.navigator)?(e=i.navigator,n=i.innerHeight,a=i.innerWidth,i=function(e){return(e=e.screen).orientation||e.msOrientation||e.mozOrientation}(i)||{},u=i.angle,i=i.type,{userAgent:e.userAgent,windowWidth:a,windowHeight:n,orientationAngle:u,orientationType:i}):{},timestamp:(new Date).toISOString(),url:null==(e=l.location)?void 0:e.href}}function fd(e,t){var n=t.focusable;t=t.page;return{node:e,include:[],exclude:[],initiator:!1,focusable:n&&(!(n=(n=e).getAttribute("tabindex"))||(n=parseInt(n,10),isNaN(n))||0<=n),size:function(e){var t=parseInt(e.getAttribute("width"),10),n=parseInt(e.getAttribute("height"),10);return(isNaN(t)||isNaN(n))&&(e=e.getBoundingClientRect(),t=isNaN(t)?e.width:t,n=isNaN(n)?e.height:n),{width:t,height:n}}(e),page:t}}function Dd(e){var n=0<arguments.length&&void 0!==e?e:[],a=[];vd(n)||(n=[n]);for(var r=0;r<n.length;r++){var o=function(e){return e instanceof t.Node?e:"string"==typeof e?[e]:(gd(e)?(function(e){yd(Array.isArray(e.fromFrames),"fromFrames property must be an array"),yd(e.fromFrames.every((function(e){return!Fd(e,"fromFrames")})),"Invalid context; fromFrames selector must be appended, rather than nested"),yd(!Fd(e,"fromShadowDom"),"fromFrames and fromShadowDom cannot be used on the same object")}(e),e=e.fromFrames):bd(e)&&(e=[e]),function(e){if(Array.isArray(e)){var t,n=[],a=Q(e);try{for(a.s();!(t=a.n()).done;){var r=t.value;if(bd(r)&&(function(e){yd(Array.isArray(e.fromShadowDom),"fromShadowDom property must be an array"),yd(e.fromShadowDom.every((function(e){return!Fd(e,"fromFrames")})),"shadow selector must be inside fromFrame instead"),yd(e.fromShadowDom.every((function(e){return!Fd(e,"fromShadowDom")})),"fromShadowDom selector must be appended, rather than nested")}(r),r=r.fromShadowDom),"string"!=typeof r&&!function(e){return Array.isArray(e)&&e.every((function(e){return"string"==typeof e}))}(r))return;n.push(r)}}catch(e){a.e(e)}finally{a.f()}return n}}(e))}(n[r]);o&&a.push(o)}return a}function md(e){return["include","exclude"].some((function(t){return Fd(e,t)&&hd(e[t])}))}function hd(e){return"string"==typeof e||e instanceof t.Node||gd(e)||bd(e)||vd(e)}function gd(e){return Fd(e,"fromFrames")}function bd(e){return Fd(e,"fromShadowDom")}function vd(e){return e&&"object"===r(e)&&"number"==typeof e.length&&e instanceof t.Node==0}function yd(e,t){yn(e,"Invalid context; ".concat(t,"\\nSee: https://github.com/dequelabs/axe-core/blob/master/doc/context.md"))}function Fd(e,t){return!(!e||"object"!==r(e))&&Object.prototype.hasOwnProperty.call(e,t)}function wd(e,n){for(var a=[],r=0,o=e[n].length;r<o;r++){var u=e[n][r];u instanceof t.Node?u.documentElement instanceof t.Node?a.push(e.flatTree[0]):a.push(Xn(u)):u&&u.length&&(1<u.length?function(e,t,n){e.frames=e.frames||[],bp(n.shift()).forEach((function(a){var r=e.frames.find((function(e){return e.node===a}));r||(r=fd(a,e),e.frames.push(r)),r[t].push(n)}))}(e,n,u):(u=bp(u[0]),a.push.apply(a,$(u.map((function(e){return Xn(e)}))))))}return a.filter((function(e){return e}))}function Ed(e,n){var o=this,u=(e=ea(e),this.frames=[],this.page="boolean"==typeof(null==(u=e)?void 0:u.page)?e.page:void 0,this.initiator="boolean"!=typeof(null==(u=e)?void 0:u.initiator)||e.initiator,this.focusable="boolean"!=typeof(null==(u=e)?void 0:u.focusable)||e.focusable,this.size="object"===r(null==(u=e)?void 0:u.size)?e.size:{},e=function(e){if(md(e)){var t=" must be used inside include or exclude. It should not be on the same object.";yd(!Fd(e,"fromFrames"),"fromFrames"+t),yd(!Fd(e,"fromShadowDom"),"fromShadowDom"+t)}else{if(!hd(e))return{include:[a],exclude:[]};e={include:e,exclude:[]}}return 0===(t=Dd(e.include)).length&&t.push(a),{include:t,exclude:e=Dd(e.exclude)}}(e),this.flatTree=null!=n?n:td(function(e){for(var n=e.include,r=(e=e.exclude,Array.from(n).concat(Array.from(e))),o=0;o<r.length;o++){var u=r[o];if(u instanceof t.Element)return u.ownerDocument.documentElement;if(u instanceof t.Document)return u.documentElement}return a.documentElement}(e)),this.exclude=e.exclude,this.include=e.include,this.include=wd(this,"include"),this.exclude=wd(this,"exclude"),mp("frame, iframe",this).forEach((function(e){var t;Md(e,o)&&(t=o,Pu(e=e.actualNode))&&!Ja(t.frames,"node",e)&&t.frames.push(fd(e,t))})),void 0===this.page&&(this.page=function(e){return 1===(e=e.include).length&&e[0].actualNode===a.documentElement}(this),this.frames.forEach((function(e){e.page=o.page}))),this);if(0===u.include.length&&0===u.frames.length)throw u=Ga.isInFrame()?"frame":"page",new Error("No elements found for include in "+u+" Context");Array.isArray(this.include)||(this.include=Array.from(this.include)),this.include.sort(jd)}function Cd(e){return!1===(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).iframes?[]:new Ed(e).frames.map((function(e){var t=e.node;return(e=V(e,b)).initiator=!1,{frameSelector:Gn(t),frameContext:e}}))}var xd=function(e){var t=o._audit.rules.find((function(t){return t.id===e}));if(t)return t;throw new Error("Cannot find rule by id: ".concat(e))};function Ad(e){var n,a,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,o=e.scrollWidth>e.clientWidth+r;r=e.scrollHeight>e.clientHeight+r;if(o||r)return n=kd(a=t.getComputedStyle(e),"overflow-x"),a=kd(a,"overflow-y"),o&&n||r&&a?{elm:e,top:e.scrollTop,left:e.scrollLeft}:void 0}function kd(e,t){return e=e.getPropertyValue(t),["scroll","auto"].includes(e)}var Bd=function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:t,n=e.document.documentElement;return[void 0!==e.pageXOffset?{elm:e,top:e.pageYOffset,left:e.pageXOffset}:{elm:n,top:n.scrollTop,left:n.scrollLeft}].concat(function e(t){return Array.from(t.children||t.childNodes||[]).reduce((function(t,n){var a=Ad(n);return a&&t.push(a),t.concat(e(n))}),[])}(a.body))};function Td(){return ea(qo)}var Nd,Rd=function(e){if(e)return function(t){var n=t.data,a=void 0!==(a=t.isCrossOrigin)&&a,r=t.shadowId,o=t.root,u=t.priority,i=(t=void 0!==(t=t.isLink)&&t,e.createElement("style"));return t?(t=e.createTextNode('@import "'.concat(n.href,'"')),i.appendChild(t)):i.appendChild(e.createTextNode(n)),e.head.appendChild(i),{sheet:i.sheet,isCrossOrigin:a,shadowId:r,root:o,priority:u}};throw new Error("axe.utils.getStyleSheetFactory should be invoked with an argument")},_d=function(e){var t;return Nd&&Nd.parentNode?(void 0===Nd.styleSheet?Nd.appendChild(a.createTextNode(e)):Nd.styleSheet.cssText+=e,Nd):e?(t=a.head||a.getElementsByTagName("head")[0],(Nd=a.createElement("style")).type="text/css",void 0===Nd.styleSheet?Nd.appendChild(a.createTextNode(e)):Nd.styleSheet.cssText=e,t.appendChild(Nd),Nd):void 0},Od=function e(n,a){var r,o=Xn(n);return 9!==n.nodeType&&(11===n.nodeType&&(n=n.host),o&&null!==o._isHidden?o._isHidden:!(r=t.getComputedStyle(n,null))||!n.parentNode||"none"===r.getPropertyValue("display")||!a&&"hidden"===r.getPropertyValue("visibility")||"true"===n.getAttribute("aria-hidden")||(a=e(n.assignedSlot||n.parentNode,!0),o&&(o._isHidden=a),a))},Sd=function(e){var t=null!=(t=null==(t=e.props)?void 0:t.nodeName)?t:e.nodeName.toLowerCase();return"http://www.w3.org/2000/svg"!==e.namespaceURI&&!!qo.htmlElms[t]};function Md(e,t){var n=void 0===(n=t.include)?[]:n;t=void 0===(t=t.exclude)?[]:t,n=n.filter((function(t){return nr(t,e)}));return 0!==n.length&&(0===(t=t.filter((function(t){return nr(t,e)}))).length||(n=Pd(n),nr(Pd(t),n)))}function Pd(e){var t,n,a=Q(e);try{for(a.s();!(n=a.n()).done;){var r=n.value;t&&nr(r,t)||(t=r)}}catch(e){a.e(e)}finally{a.f()}return t}var Id=function(e,t){return e.length===t.length&&e.every((function(e,n){var a=t[n];return Array.isArray(e)?e.length===a.length&&e.every((function(e,t){return a[t]===e})):e===a}))},jd=function(e,t){return(e=e.actualNode||e)===(t=t.actualNode||t)?0:4&e.compareDocumentPosition(t)?-1:1};function Ld(e){return e instanceof on?{vNode:e,domNode:e.actualNode}:{vNode:Xn(e),domNode:e}}var qd,zd,Vd=function(e,t,n,a){var r,o=4<arguments.length&&void 0!==arguments[4]&&arguments[4],u=Array.from(e.cssRules);return u?(r=u.filter((function(e){return 3===e.type}))).length?(r=r.filter((function(e){return e.href})).map((function(e){return e.href})).filter((function(e){return!a.includes(e)})).map((function(e,r){r=[].concat($(n),[r]);var o=/^https?:\\/\\/|^\\/\\//i.test(e);return Hd(e,t,r,a,o)})),(u=u.filter((function(e){return 3!==e.type}))).length&&r.push(Promise.resolve(t.convertDataToStylesheet({data:u.map((function(e){return e.cssText})).join(),isCrossOrigin:o,priority:n,root:t.rootNode,shadowId:t.shadowId}))),Promise.all(r)):Promise.resolve({isCrossOrigin:o,priority:n,root:t.rootNode,shadowId:t.shadowId,sheet:e}):Promise.resolve()},$d=function(e,t,n,a){var r=4<arguments.length&&void 0!==arguments[4]&&arguments[4];return function(e){try{return!(!e.cssRules&&e.href)}catch(e){return!1}}(e)?Vd(e,t,n,a,r):Hd(e.href,t,n,a,!0)},Hd=function(e,n,a,r,o){return r.push(e),new Promise((function(n,a){var r=new t.XMLHttpRequest;r.open("GET",e),r.timeout=tn.preload.timeout,r.addEventListener("error",a),r.addEventListener("timeout",a),r.addEventListener("loadend",(function(e){if(e.loaded&&r.responseText)return n(r.responseText);a(r.responseText)})),r.send()})).then((function(e){return e=n.convertDataToStylesheet({data:e,isCrossOrigin:o,priority:a,root:n.rootNode,shadowId:n.shadowId}),$d(e.sheet,n,a,r,e.isCrossOrigin)}))};function Ud(){if(t.performance&&t.performance)return t.performance.now()}qd=null,zd=Ud();var Gd,Wd,Yd={start:function(){this.mark("mark_axe_start")},end:function(){this.mark("mark_axe_end"),this.measure("axe","mark_axe_start","mark_axe_end"),this.logMeasures("axe")},auditStart:function(){this.mark("mark_audit_start")},auditEnd:function(){this.mark("mark_audit_end"),this.measure("audit_start_to_end","mark_audit_start","mark_audit_end"),this.logMeasures()},mark:function(e){t.performance&&void 0!==t.performance.mark&&t.performance.mark(e)},measure:function(e,n,a){t.performance&&void 0!==t.performance.measure&&t.performance.measure(e,n,a)},logMeasures:function(e){function n(e){nn("Measure "+e.name+" took "+e.duration+"ms")}if(t.performance&&void 0!==t.performance.getEntriesByType)for(var a=t.performance.getEntriesByName("mark_axe_start")[0],r=t.performance.getEntriesByType("measure").filter((function(e){return e.startTime>=a.startTime})),o=0;o<r.length;++o){var u=r[o];if(u.name===e)return void n(u);n(u)}},timeElapsed:function(){return Ud()-zd},reset:function(){qd=qd||Ud(),zd=Ud()}};function Kd(){var e,t,n,r;return a.elementsFromPoint||a.msElementsFromPoint||((e=a.createElement("x")).style.cssText="pointer-events:auto",e="auto"===e.style.pointerEvents,t=e?"pointer-events":"visibility",n=e?"none":"hidden",(r=a.createElement("style")).innerHTML=e?"* { pointer-events: all }":"* { visibility: visible }",function(e,o){var u,i,l,s=[],c=[];for(a.head.appendChild(r);(u=a.elementFromPoint(e,o))&&-1===s.indexOf(u);)s.push(u),c.push({value:u.style.getPropertyValue(t),priority:u.style.getPropertyPriority(t)}),u.style.setProperty(t,n,"important");for(s.indexOf(a.documentElement)<s.length-1&&(s.splice(s.indexOf(a.documentElement),1),s.push(a.documentElement)),i=c.length;l=c[--i];)s[i].style.setProperty(t,l.value||"",l.priority);return a.head.removeChild(r),s})}function Xd(e){return"function"==typeof e||"[object Function]"===Gd.call(e)}"function"!=typeof Object.assign&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n<arguments.length;n++){var a=arguments[n];if(null!=a)for(var r in a)a.hasOwnProperty(r)&&(t[r]=a[r])}return t}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var t,n=Object(this),a=n.length>>>0,r=arguments[1],o=0;o<a;o++)if(t=n[o],e.call(r,t,o,n))return t}}),Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e,t){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var n,a=Object(this),r=a.length>>>0,o=0;o<r;o++)if(n=a[o],e.call(t,n,o,a))return o;return-1}}),"function"==typeof t.addEventListener&&(a.elementsFromPoint=Kd()),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e){var t=Object(this),n=parseInt(t.length,10)||0;if(0!==n){var a,r,o=parseInt(arguments[1],10)||0;for(0<=o?a=o:(a=n+o)<0&&(a=0);a<n;){if(e===(r=t[a])||e!=e&&r!=r)return!0;a++}}return!1}}),Array.prototype.some||Object.defineProperty(Array.prototype,"some",{value:function(e){if(null==this)throw new TypeError("Array.prototype.some called on null or undefined");if("function"!=typeof e)throw new TypeError;for(var t=Object(this),n=t.length>>>0,a=2<=arguments.length?arguments[1]:void 0,r=0;r<n;r++)if(r in t&&e.call(a,t[r],r,t))return!0;return!1}}),Array.from||Object.defineProperty(Array,"from",{value:(Gd=Object.prototype.toString,Wd=Math.pow(2,53)-1,function(e){var t=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var n,a=1<arguments.length?arguments[1]:void 0;if(void 0!==a){if(!Xd(a))throw new TypeError("Array.from: when provided, the second argument must be a function");2<arguments.length&&(n=arguments[2])}for(var r,o=function(e){return e=function(e){return e=Number(e),isNaN(e)?0:0!==e&&isFinite(e)?(0<e?1:-1)*Math.floor(Math.abs(e)):e}(e),Math.min(Math.max(e,0),Wd)}(t.length),u=Xd(this)?Object(new this(o)):new Array(o),i=0;i<o;)r=t[i],u[i]=a?void 0===n?a(r,i):a.call(n,r,i):r,i+=1;return u.length=o,u})}),String.prototype.includes||(String.prototype.includes=function(e,t){return!((t="number"!=typeof t?0:t)+e.length>this.length)&&-1!==this.indexOf(e,t)}),Array.prototype.flat||Object.defineProperty(Array.prototype,"flat",{configurable:!0,value:function e(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,(function(n,a){return Array.isArray(a)?n.push.apply(n,e.call(a,t-1)):n.push(a),n}),[]):Array.prototype.slice.call(this)},writable:!0}),!t.Node||"isConnected"in t.Node.prototype||Object.defineProperty(t.Node.prototype,"isConnected",{get:function(){return!(this.ownerDocument&&this.ownerDocument.compareDocumentPosition(this)&this.DOCUMENT_POSITION_DISCONNECTED)}});var Zd=function(e,t){return e.concat(t).filter((function(e,t,n){return n.indexOf(e)===t}))};function Jd(e,t,n,a,r){return(r=r||{}).vNodes=e,r.vNodesIndex=0,r.anyLevel=t,r.thisLevel=n,r.parentShadowId=a,r}var Qd=[],ep=function(e,t,n){if(a=Yc(e=Array.isArray(e)?e:[e],t=ia(t),n))return a;for(var a=e,r=(e=t,n),o=[],u=Jd(Array.isArray(a)?a:[a],e,null,a[0].shadowId,Qd.pop()),i=[];u.vNodesIndex<u.vNodes.length;){for(var l,s=u.vNodes[u.vNodesIndex++],c=null,d=null,p=((null==(l=u.anyLevel)?void 0:l.length)||0)+((null==(l=u.thisLevel)?void 0:l.length)||0),f=!1,D=0;D<p;D++){var m=D<((null==(m=u.anyLevel)?void 0:m.length)||0)?u.anyLevel[D]:u.thisLevel[D-((null==(m=u.anyLevel)?void 0:m.length)||0)];if((!m[0].id||s.shadowId===u.parentShadowId)&&la(s,m[0]))if(1===m.length)f||r&&!r(s)||(i.push(s),f=!0);else{var h=m.slice(1);if(!1===[" ",">"].includes(h[0].combinator))throw new Error("axe.utils.querySelectorAll does not support the combinator: "+m[1].combinator);(">"===h[0].combinator?c=c||[]:d=d||[]).push(h)}m[0].id&&s.shadowId!==u.parentShadowId||null==(h=u.anyLevel)||!h.includes(m)||(d=d||[]).push(m)}for(s.children&&s.children.length&&(o.push(u),u=Jd(s.children,d,c,s.shadowId,Qd.pop()));u.vNodesIndex===u.vNodes.length&&o.length;)Qd.push(u),u=o.pop()}return i},tp=function(e){var t,n,r,u;e=void 0===(e=e.treeRoot)?o._tree[0]:e;return t=[],e=ep(e,"*",(function(e){return!t.includes(e.shadowId)&&(t.push(e.shadowId),!0)})).map((function(e){return{shadowId:e.shadowId,rootNode:lr(e.actualNode)}})),(e=Zd(e,[])).length?(n=a.implementation.createHTMLDocument("Dynamic document for loading cssom"),n=Rd(n),r=n,u=[],e.forEach((function(e,t){var n=e.rootNode,a=function(e,t,n){return t=11===e.nodeType&&t?function(e,t){return Array.from(e.children).filter(np).reduce((function(n,a){var r=a.nodeName.toUpperCase();a="STYLE"===r?a.textContent:a,a=t({data:a,isLink:"LINK"===r,root:e});return n.push(a.sheet),n}),[])}(e,n):function(e){return Array.from(e.styleSheets).filter((function(e){return!!e.media&&ap(e.media.mediaText)}))}(e),function(e){var t=[];return e.filter((function(e){if(e.href){if(t.includes(e.href))return!1;t.push(e.href)}return!0}))}(t)}(n,e=e.shadowId,r);if(!a)return Promise.all(u);var o=t+1,i={rootNode:n,shadowId:e,convertDataToStylesheet:r,rootIndex:o},l=[];t=Promise.all(a.map((function(e,t){return $d(e,i,[o,t],l)})));u.push(t)})),Promise.all(u).then((function e(t){return t.reduce((function(t,n){return Array.isArray(n)?t.concat(e(n)):t.concat(n)}),[])}))):Promise.resolve()};function np(e){var t=e.nodeName.toUpperCase(),n=e.getAttribute("href"),a=e.getAttribute("rel");n="LINK"===t&&n&&a&&e.rel.toUpperCase().includes("STYLESHEET");return"STYLE"===t||n&&ap(e.media)}function ap(e){return!e||!e.toUpperCase().includes("PRINT")}var rp=function(e){return e=void 0===(e=e.treeRoot)?o._tree[0]:e,e=ep(e,"video, audio",(function(e){return(e=e.actualNode).hasAttribute("src")?!!e.getAttribute("src"):!(Array.from(e.getElementsByTagName("source")).filter((function(e){return!!e.getAttribute("src")})).length<=0)})),Promise.all(e.map((function(e){var t;e=e.actualNode;return t=e,new Promise((function(e){0<t.readyState&&e(t),t.addEventListener("loadedmetadata",(function n(){t.removeEventListener("loadedmetadata",n),e(t)}))}))})))};function op(e){return!e||void 0===e.preload||null===e.preload||("boolean"==typeof e.preload?e.preload:(e=e.preload,"object"===r(e)&&Array.isArray(e.assets)))}function up(e){var t=(n=tn.preload).assets,n=n.timeout;n={assets:t,timeout:n};if(e.preload&&"boolean"!=typeof e.preload){if(!e.preload.assets.every((function(e){return t.includes(e.toLowerCase())})))throw new Error("Requested assets, not supported. Supported assets are: ".concat(t.join(", "),"."));n.assets=Zd(e.preload.assets.map((function(e){return e.toLowerCase()})),[]),e.preload.timeout&&"number"==typeof e.preload.timeout&&!isNaN(e.preload.timeout)&&(n.timeout=e.preload.timeout)}return n}var ip=function(e){var t={cssom:tp,media:rp};return op(e)?new Promise((function(n,a){var r=(o=up(e)).assets,o=o.timeout,u=setTimeout((function(){return a(new Error("Preload assets timed out."))}),o);Promise.all(r.map((function(n){return t[n](e).then((function(e){return t={},(a=J(a=n))in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t;var t,a}))}))).then((function(e){e=e.reduce((function(e,t){return U({},e,t)}),{}),clearTimeout(u),n(e)})).catch((function(e){clearTimeout(u),a(e)}))})):Promise.resolve()};function lp(e,t,n){return function(a){var o,u=(o=e[a.id]||{}).messages||{};delete(o=Object.assign({},o)).messages,n.reviewOnFail||void 0!==a.result?o.message=a.result===t?u.pass:u.fail:("object"!==r(u.incomplete)||Array.isArray(a.data)||(o.message=function(e,t){function n(e){return e.incomplete&&e.incomplete.default?e.incomplete.default:rd()}if(!e||!e.missingData)return e&&e.messageKey?t.incomplete[e.messageKey]:n(t);try{var a=t.incomplete[e.missingData[0].reason];if(a)return a;throw new Error}catch(a){return"string"==typeof e.missingData?t.incomplete[e.missingData]:n(t)}}(a.data,u)),o.message||(o.message=u.incomplete)),"function"!=typeof o.message&&(o.message=sd(o.message,a.data)),rr(a,o)}}var sp=function(e){var t=o._audit.data.checks||{},n=o._audit.data.rules||{},a=Ja(o._audit.rules,"id",e.id)||{},r=(e.tags=ea(a.tags||[]),lp(t,!0,a)),u=lp(t,!1,a);e.nodes.forEach((function(e){e.any.forEach(r),e.all.forEach(r),e.none.forEach(u)})),rr(e,ea(n[e.id]||{}))},cp=function(e,t){return ep(e,t)};function dp(e,t){var n,a=o._audit&&o._audit.tagExclude?o._audit.tagExclude:[],r=t.hasOwnProperty("include")||t.hasOwnProperty("exclude")?(n=t.include||[],n=Array.isArray(n)?n:[n],r=t.exclude||[],(r=Array.isArray(r)?r:[r]).concat(a.filter((function(e){return-1===n.indexOf(e)})))):(n=Array.isArray(t)?t:[t],a.filter((function(e){return-1===n.indexOf(e)})));return!!(n.some((function(t){return-1!==e.tags.indexOf(t)}))||0===n.length&&!1!==e.enabled)&&r.every((function(t){return-1===e.tags.indexOf(t)}))}var pp=function(e,t,n){var a=n.runOnly||{};n=(n.rules||{})[e.id];return!(e.pageLevel&&!t.page)&&("rule"===a.type?-1!==a.values.indexOf(e.id):n&&"boolean"==typeof n.enabled?n.enabled:"tag"===a.type&&a.values?dp(e,a.values):dp(e,[]))};function fp(e,t){var n,a,r;return t?(r=e.cloneNode(!1),n=Bn(r),r=1===r.nodeType?(a=r.outerHTML,Kn.get(a,(function(){return Dp(r,n,e,t)}))):Dp(r,n,e,t),Array.from(e.childNodes).forEach((function(e){r.appendChild(fp(e,t))})),r):e}function Dp(e,t,n,r){return t&&(e=a.createElement(e.nodeName),Array.from(t).forEach((function(t){var a,o,u;a=n,o=t.name,void 0!==(u=r)[o]&&(!0===u[o]||Tn(a,u[o]))||e.setAttribute(t.name,t.value)}))),e}function mp(e,t){var n=[];if(o._selectCache)for(var a=0,r=o._selectCache.length;a<r;a++){var u=o._selectCache[a];if(u.selector===e)return u.result}for(var i,l=t.include.reduce((function(e,t){return e.length&&nr(e[e.length-1],t)||e.push(t),e}),[]),s=(i=t).exclude&&0!==i.exclude.length?function(e){return Md(e,i)}:null,c=0;c<l.length;c++){var d=l[c];n=function(e,t){if(0===e.length)return t;var n;e.length<t.length&&(n=e,e=t,t=n);for(var a=0,r=t.length;a<r;a++)e.includes(t[a])||e.push(t[a]);return e}(n,ep(d,e,s))}return o._selectCache&&o._selectCache.push({selector:e,result:n}),n}var hp=function(e){e.forEach((function(e){var n=e.elm,a=e.top;e=e.left;if(n===t)return n.scroll(e,a);n.scrollTop=a,n.scrollLeft=e}))};function gp(e){return function e(t,n){var a=t.shift();return n=a?n.querySelector(a):null,0===t.length?n:null!=n&&n.shadowRoot?e(t,n.shadowRoot):null}(Array.isArray(e)?$(e):[e],a)}function bp(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:a,n=Array.isArray(e)?$(e):[e];return 0===e.length?[]:function e(t,n){t=function(e){return Y(e)||H(e)||ee(e)||W()}(t);var a=t[0],r=t.slice(1);if(t=n.querySelectorAll(a),0===r.length)return Array.from(t);var o,u=[],i=Q(t);try{for(i.s();!(o=i.n()).done;){var l=o.value;null!=l&&l.shadowRoot&&u.push.apply(u,$(e(r,l.shadowRoot)))}}catch(e){i.e(e)}finally{i.f()}return u}(n,t)}var vp=function(){return["hidden","text","search","tel","url","email","password","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]},yp=[,[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,,,,,1,1,1,1,,,1,1,1,,1,,1,,1,1],[1,1,1,,1,1,,1,1,1,,1,,,1,1,1,,,1,1,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,,,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1],[,1,,,,,,1,,1,,,,,1,,1,,,,1,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,,,1,,,,,1,1,1,,1,,1,,1,,,,,,1],[1,,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,,1,,1,,,,,1,,1,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,,1,1,1,,1,,1,1,1,,,1,1,1,1,1,1,1,1],[,,1,,,1,,1,,,,1,1,1,,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1,1,1,1,1,,,1,1,1],[1,1,1,1,1,,,1,,,1,,,1,1,1,,,,,1,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1],[,1,,1,1,1,,1,1,,1,,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,,,1,1,1,,,1,1,,,,,,1,1],[1,1,1,,,,,1,,,,1,1,,1,,,,,,1,,,,,1],[,1,,,1,,,1,,,,,,1],[,1,,1,,,,1,,,,1],[1,,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,,1,,,1,1,1,1],[,1,1,1,1,1,,,1,,,1,,1,1,,1,,1,,,,,1,,1],[,1,,,,1,,,1,1,,1,,1,1,1,1,,1,1,,,1,,,1],[,1,1,,,,,,1,,,,1,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,,1,1,1,,,1,1,1,1,1,1,,1,,,,,1,1,,1,,1],[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,1,1],[,1,1,1,,,,1,1,1,,1,1,,,1,1,,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,,1,,,,,1,1,1,,,1,,1,,,1,1],[,,,,1,,,,,,,,,,,,,,,,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,,1,1,1,,1,1,,,,1,1,1,1,1,,,1,1,1,,,,,1],[1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,1,,,,,,,1],[,1,1,,1,1,,1,,,,,,,,,,,,,1],,[1,1,1,,,,,,,,,,,,,1],[,,,,,,,,1,,,1,,,1,1,,,,,1]],[,[1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,,1],[,,,1,,,,,,,,,,,,,,,1],[,1,,,1,1,,1,,1,1,,,,1,1,,,1,1,,,,1],[1,,,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,,,,1],,[,1,1,1,1,1,,1,1,1,,1,1,,1,1,,,1,1,1,1,,1,1,,1],[,1,,,1,,,1,,1,,,1,1,1,1,,,1,1,,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,,,1,1,1,1,1,1,1,,,1,,,1,,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,,,,1],[,,,,,,,1,,,,1,,1,1],[,1,1,1,1,1,1,1,,,,1,1,1,1,1,,,1,1,,1,1,1,1,1],[,1,,,1,1,,1,,1,1,1,,,1,1,,,1,,1,1,1,1,,1],[,1,1,1,,1,1,,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1],[,,,,,,,,,,,,,,,,1],,[,1,1,1,1,1,,1,1,1,,,1,,1,1,,1,1,1,1,1,,1,,1],[,,1,,,1,,,1,1,,,1,,1,1,,1],[,1,1,,1,,,,1,1,,1,,1,1,1,1,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,1,,1,,1,1],,[,1,1,,1,,,1,,1,,,,1,1,1,,,,,,1,,,,1],[1,1,,,1,1,,1,,,,,1,,1]],[,[,1],[,,,1,,,,1,,,,1,,,,1,,,1,,,1],[,,,,,,,,,,,,,,,,,,1,1,,,,,,1],,[1,,,,,1],[,1,,,,1,,,,1],[,1,,,,,,,,,,,1,,,1,,,,,,,,,1,1],[,,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,1,,1],[,1],[,1,,1,,1,,1,,1,,1,1,1,,1,1,,1,,,,,,,1],[1,,,,,1,,,1,1,,1,,1,,1,1,,,,,1,,,1],[,1,1,,,1,,1,,1,,1,,1,1,1,1,,,1,,1,,1,1,1],[1,1,1,1,1,,1,,1,,,,1,1,1,1,,1,1,,,1,1,1,1],[1,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],,[,1,,,,,,1,1,1,,1,,,,1,,,1,1,1,,,1],[1,,,,,1,,1,1,1,,1,1,1,1,1,,1,,1,,1,,,1,1],[1,,1,1,,,,,1,,,,,,1,1,,,1,1,1,1,,,1,,1],[1,,,,,,,,,,,,,,,,,1],[,,,,,1,,,1,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,,,1],[,1,,,,1]],[,[1,1,1,,1,,1,1,1,1,1,1,1,1,1,,1,,1,,1,1,,,1,1,1],[,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],,[,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1],,[1,1,,,,1,1,,,,,,1,,,,1,,1,,1,1,,1],[1],[,,,,,,,,,,,1,,,,,,,,,,,1],[,1,,,,,,,1,1,,,1,,1,,,,1,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,,1],[,,1,,,,,1,,1],[1,,,,1,,,,,1,,,,1,1,,,,1,1,,,,,1],[,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[1,,,1,1,,,,,,,1,,1,,1,1,1,1,1,1],[,,,,,1,,,,,,,1,,,,,,,1],,[,,1,1,1,1,1,,1,1,1,,,1,1,,,1,1,,1,1,1,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,,,,1],,[1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,,,1,1,1,1,,,,,,1,,1,,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,,,,1,,1,,,1,1,1,1,1],[,,,,,,,,,,,1,,,,,,,,,1,,,,1],[,1,1,,1,1,,1,,,,1,1,,1,1,,,1,,1,1,,1],[,1,,1,,1,,,1,,,1,1,,1,1,,,1,1,1],[,1,1,1,1,1,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,,,,,,,,,1,,1,,1,1,,,,1,,,1],[,1,,,1,1,,,,,,,,,1,1,1,,,,,1],[1,,,1,1,,,,1,1,1,1,1,,,1,,,1,,,1,,1,,1],[,1,1,,1,1,,1,1,,,,1,1,1,,,1,1,,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,,,,1,,,,,,,,,1],[,1,,,,,,,,1,,,,,1,,,,1,,,1],[,1,1,1,1,,,1,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1],[,,,,,1,,1,,,,,1,1,1,1,1,,,1,,,,1],[,1,,,,,,,,1,,,,,,,,,,,,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,1,,,,1,,1,1,1,1,1,,1,1,,,,,,1],[,1,1,1,1,1,1,1,,1,1,,,1,1,,,,1,,1,1,,1,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,1,1,,1,,,1,1,1,1,,,1,,,,,,,1],[,1,,,,,,,,1,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1],[,1,1,,,,,,,,,,,,1,1,,,,,,1],[,1,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,,,,,1],[1,1,,,1,,,1,1,1,,,,1],,[,,,,,,,,,,,,,1,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,1,,,,,,,1],[1,1,1,,1,,1,1,1,1,1,1,1,1,,1,,,1,,1,,,1,1],[,,,,,,,,,1],[,1,,,,1,,,,,,1,,,1,,,,,1],[,1,1,,1,1,,,,,,,,,,,,,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,1,1,1,,,,1,1,,,,1,,1],[1,1,1,1,1,1,,,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,,1,1],[,,,,,,,,,,,,,,,1,,,,1],,[1,1,,1,,1,,,,,,1,,1,,1,1,,1,,1,1,,1,1,,1],[,,1,,,,,,1,,,,1,,1,,,,,1],[1,,,,,,,,,1,,,,,,1,,,,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,,1,,,,,,1,,,1,,,,,,,,1],[,1,,1,,,,,,,,,,,,1],,[1,1,,,,,,,,,,,,,,,,,,,,,,1,1],[1]],[,[1,,,,,,,,,1,,,,,1,,1,,1],[,1,1,,1,1,,1,1,1,,,1,1,1,,,,1,,,1,,,,1],[,1,,,,,,,1,,,,1,,,,,,1],[1,1,1,1,1,1,,,,1,,,,,,,,,1,1,1,1],[1],[,1,1,,,1,1,,,,,1,,1,,,,,,,,1,,,,1],[1,,1,,,1,,1,,,,,1,1,1,1,,,,1,,,,1],[,,1,,,,,,,1,,,,,,,1,,,,,,,1],[1,,,,,,,,,,,,,,1,,,,1],[,,,1,,1,,,,,1,,,,1,1,,,,1],[1,,,,,1,,,,1,,1,1,,,1,1,,1,1,1,,1,1,1,,1],[,1,1,,,,,1,,1,,1,1,1,,1,1,,,1,,1,1,1],[,1,,,,1,,,,1,,,1,,1,1,,,1,1,,,,,,1],[1,,1,1,,1,,1,1,,1,,1,1,1,1,1,,,1,1,,,,,,1],[1,,,,,,,,,,,,,,,,,,1,,,1,,1],[,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,,1,,1],[,1,,,,1,,,1,1,,1,,,1,1,,,1,,,1,,,1,1],[1,1,,1,1,1,,1,1,1,,1,,1,1,1,,,1,,1,1],[1,,1,1,1,1,,,,1,,1,1,1,,1,,,1,1,1,,1,1,1,1,1],[1,,,,,,,,,,,,,1],[,,1,,,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,,,1,,1,,1,,,,1],[,,,1,,,,,,,,,1],[,1,,,,,,,,,,,,,,1,,,,,,,,,1],[,,,,,,,,1,1,,,,,,,,,1,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,,,1,1,1],[,,,,,1,,,,1,1,1,,,1,1,,,1,,1,1,,1],[,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,1,,,,,,,,,,,,,1],[,,1,,,1,,1,1,1,,1,1,,1,,,,1,,1,1],,[,,1,,,1,,,,,,1,,,,1],[,,,,,,,,,1,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,,1,1,,1,,1,,,1,1,1,,,1],[,,,,,1,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,1,,1,1,,1,,,1],[,,,,,1,,,,,,,,,,,,,,1],[,1,1,1,1,,,,,1,,,1,,1,,,,1,1,,,,1,1],[,1,,,1,,,1,,1,1,,1,,,,,,,1],[,,1,,1,,,1,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,,,,,,,,,,1,,1,1],[,,,,,,,,,,,,1],,[,1,1,1,1,,,,1,1,,1,1,1,1,1,1,,1,1,1,1,,1,,1],[1,,,,1,,,,,,,,,,1],[1,,,,,,,,,1],,[,1,,,,1,,,,,,,,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,,1,,,,1,1,,,1,1,,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,1],[1,1,1,,,,,1,1,1,,1,1,1,1,,,1,1,,1,1,,,,,1],[,1,,,,,,,1,1,,,1,1,1,,1,,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,,,1,,,,1,,,1,,,,1,,,,,,,1,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1],[1,1,1,,1,,,1,1,1,1,,1,1,1,1,,,,1,,1,,1,,,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,,1,1,,,,,,,,,1],,[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,,1,,1,,,,1],[,1,,,1,1,,1,1,1,,,1,1,1,1,1,,1,1,1,,1,,,1],[1,,,1,,,,1,1,1,,,,,1,1,,,,1,,1],[1,1,,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,,1,,1,,,,,,,,1,,1],[,1,,,,1,,1,1,,,,1,1,,1,,,,1,1,1,,1],,[,1,,,,,,1,,,,,,,1],[,,,,,,,,1,,,,1,,1,,,,,,,,,,,,1]],[,[,1,1,,1,1,1,1,,1,1,1,,1,1,,1,1,,1,1,1,1,1,1,,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,,,1,,,,,,,,1,,,,,,1,,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,,1,,1,1,1,1,1,1,1,,1,1,,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1],[,1,1,,,,,1,1,1,,,1,,1,1,,,,1,,1,,,1,1],[,,,,,,,1,,,,1,1,1,1,1,,1,,,,,,,,1],[1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,,1,,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,1,1,,1,,1,1,1,,1,,1,1,,1,1,,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,,1,,,,,1,,1],[,1,1,1,,1,,1,,1,,,,1,,1,,,1,,,,,,1,1],[,1,,,1,1,,1,,1,,1,1,1,1,1,,1,1,,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,,1,,1,,1,,,,,,1,,1,,,,1,1]],[,[,1,,1,,,,,,,,,,,,,,,1,,,,1],[,,,,,,,,,1,,1,1,1,,1,,,1,,1,1],[1,1,,,,,,,1,,,,,,,1,,,,,,1],[,1,,,,,,,,,,1,,,,,,,,,1,1],,[,,,,,,,,,,,,,,,1,,,,1,,1],[,,1,1,,1,,1,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,,,,,,,,1],[1,,1,1,,,,1,,,,,,,,,1,,,1,,,1,1],[,1,1,,1,1,,1,1,1,1,1,1,1,1,1,,,1,1,,1,1,,1],[,1,,,1,1,,,,,,1,,1,,1,,,1,,1,1],[1,1,1,1,,1,,1,,1,,1,1,,1,1,1,1,1,,1,1,1,1,1],[,1,1,,,1,,1,,1,1,1,,,1,1,1,,1,1,1,1,,1,1],[,,,,1,,,1,,,,,,,1,,,,1,1],[,1,,,,,,,,,,1,,1,,1,,,,,1,,,,,1],,[1,1,,1,,1,,1,1,,,,,,1,1,,,1,1,1,1,1,1,1,1,1],[1,1,,1,,,,,,1,,,,,,1,1,,,,1,1,,,1],[,1,1,,1,1,,,,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,,,1,,,,1,,,,1,1],[,,,,1],[,,,,,,,,,1,,,1],,[,,1,,1,,,,,,,,,1,,,,,,,,,,,,1],[,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,,,1],[,1,,1,,,,,,1,,,,,1,1,,,,,1,1],[,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,,,1,,1,1,1],[,1,,,,1,,,,,,,1],[,1,,,1,,,1,,1,,1,1,,1,,,,,1,,1,,,,1,1],[,1,,,1,,,1,1,1,,1,1,1,1,1,,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,1,1,,,,1,1,,,,,,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,,1,1,,1,1,1,1,1],[,1,,,,1,,,,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,1,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,,1,1,1,,1,1,1,,,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,,,,,,,1,1,,,,,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,1,,1,1,1,1],,[,1,1,,,,,1,,1,,,,1,1,1,,,1,,,,,1],[,,,,,,,,,,,,,1],[,,,,,1,,,,,,,,1,1,,,,,1,,1,,,1,1],[,,,,,,,,,,,,,,1]],[,[,1],,,,,,,,,,,,,,,,,,,,[1,1,1,1,1,,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,1,1,1,1],[,1,,1,,1,,,1,1,1,,1,1,1,1,1,,,1,,,,1,,1,1],[,1,,1,,1,,,1,,,,,1,,,,,,1,1],[,1,,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1],[,1,,,,,,,,,,,,,,,1]],[,[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,,,,,,,,,1,1,,,,1],[,,,,,,1],[,,1],[,1,1,,,1,,1,,1,1,,1,1,1,,,,1,1,1,,,,,1],,[,1,,,,1,,,,,,1,,,1,,,,1,1,,1],[,,,,,,,1,,,,,,,,,1],[,1,,,,1,1,,,,,,1,1,1,,,,1,,1,1],[,,,,,,,1,,1,,,,,,,,,,1],[,1,1,,,,,,1,1,,,,1,,,,,,,1,,,1],,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,,1,,,1,,,,,1,,1,,1,,1,,,,,1],[1,1,1,1,1,1,1,1,,,,,1,1,,1,1,,1,,,1,,1],[,,,,,,,,,,,,,,1,,,,,,1],,[,,,,,,,,,1,,,,,,1,,,,,1],[,,1,,,,,,,1,,,1,1],[,,,1,,,,,1,,,,,1,,,,,,1,,,,1],[1,,1,1,,1,1,1,1,1,,1,,,,1,1,1,,,1,1,,,,1,1],,[1,1,,,,,,,,,,1,,1,,1,,,1],[,,,,1,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,1],[,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,,1,,,1,,,,,,,,1,,,,,,1,,,,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,1,,,,1,1,1,1,1,1,,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,1,,1,1,,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,,1,,1,,1,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,,,,,,1,,1,,,,,1,1,,,,,1],[1,,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,,1,,,,1,1,1,1,1,,,1,1,,1,,1],[,1,1,1,1,,,,,1,,1,1,1,1,1,,,1,1,,,,1,1,1],[,1,1,1,1,1,,1,,,,,1,,1,,1,,,1,,,1,1,,1]],[,[1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,,,,,1,,,,,1,1,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,,,,1,,1,1,,1,1,1,1,1,,,1,,1,,1],[1,1,1,,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,,1,,,,,,,,,,1,1,1,1,1,1,1,,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,1,1,,,,,,1,1,1,1,1,,,,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,,1,1,1],[,1,1,1,,1,,1,1,1,1,,,1,1,1,,1,1,1,1,1,,,1,1],[1,1,,,,1,,,1,1,1,,1,,1,,1,,1,1,1,1,1,,1,,1],[,1,,,,,,,1,,1,,1,1,1,1,,,,,,,,,1]],[,[,,,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,1,,,1,,,,,,1,,,1,,,,1],,[,1,,,,1,,1,,1,1,,1,1,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],[1,1,1,,,1,,,,,,,,,1,1,,,,,,,,,,1],[,1,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1,,,1],[,,,,,,,,,1],[1,1,,,,,,1,1,1,,1,1,,,,1,1,,1,,1,1,1,,1],[,1,1,1,,1,1,,,1,,1,1,1,1,,,,,,,1,,1],[,1,1,1,1,,,1,,1,,,,1,1,1,1,,1,1,,1],[,1,,,1,1,,1,,,,1,,1,1,,1,,1,,,1,,,1,,1],[,,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,,,,,1],,[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1],[,1,,,,,,,1,1,,1,,,,,1,,,1,,1],[,1,,,,1,,,1,,,,,,,,1,,1,,,1],[,,,,,,,,,,,,,1,1,,,,1,,,1],[,,,,,1,,,1,,,,1],[,1],,[,1],[1,,,,,,,,,,,,,,1,,,,,1]],[,[,1,,,,1,1,1,1,1,1,,1,1,1,1,1,,1,1,,1,1,,,1],[,,1,,,,,,,,,1],,,[1,,,1,1,,,,,,,,1,1,,1,1,,1],,[,,,,,,,,,,,,,,,,,,1,,1],,[1,,,1,1,,1,1,,,,,1,,1,,,,,1,1,,1],,[,1,,,,,,,,1,1,1,1,1,,1,1,,,,1,1],[,,,,,,,,,,,,,,,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,1,1,1,1],[,,,,,,,,,,,1,,1,,,1],[1,,,,,,,,,,,,,,,,,,1,,1],,,[,1,,,,,,,,,,,,,,1,,,,1,1],[,,,,,,,,,1,,,1,,,,,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,1,1,,,,,,1],,[,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,1,1,,1,1,1,1,1,1,,,1,1,1,1,1,,1,1],[,1,,,,,,,,1],[,,,,1,,,1,,,1,1,,,,,,,,,,1,,,,1],[,1,,1,1,,,1,1,1,,,,1,1,1,1,,1,1,1,1,,1],[,,,,,,,1],[,1,1,,,,,1,,1,,,,,,1,,,,,,1,,1,,1],[,1,,,,,,1,,,,1,,,,,,,,,,1],[,,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1,1,1,1,,1],[,1,,,,,,,,1],[,1,1,,1,,,,,,,,1,,,,,,1,,,1,,1,,1],[,1,,1,,1,,1,1,1,,1,1,1,,1,,,1,1,,1,1,1,1,1],[,1,1,1,1,1,,,1,1,,,,1,1,1,,,,1,1,,,1,1],[,,1,1,1,1,,1,,1,,1,,1,1,1,1,,,,,1,,1,,1],[1,1,1,1,1,1,1,1,,1,,1,,1,1,1,,,1,1,,,,1,,1],[,,,1],,[,1,1,,1,,,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1],[,1,,,,,,1,,1,,1,,,,,,,1,1,,1,1],[,,,,,,1,,1,1,,1,,1,,,,,,,,,,1],[,1,1,,1,,,,1,,,,1,1,1,,,,1,,1,1,1,,1,1],,[,1,1,,,,,,,,,,,,,1,,,1,,,,,1],[,1,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,1,,,,1,,,,,1,,,,,,,1]],[,[,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[,1,1,1,1,1,,1,,1,1,,,1,1,1,1,,1,,,,,1,1,1],[,,1,1,,1,,1,1,,,,1,1,1,1,,,1,,1,1,1,1,,1],[,1,,1,,,,,,,,1,,1,,1,,,,,,,,,,1],[,,1,,1,,,1,,,,,1,1,,,1,,1,1,1,1],[,1],[,1,1,,1,,1,1,,1,,,1,1,1,,,,1,,,1,,1],[1,1,,1,1,1,,,,,,,,,,,,,1,,1,1,1],[,1,1,,,,,,,1,,,1,,1,,1,,1,1,,,1,,,1],[,,1,,,,,,,,,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,,1,,,,,1,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,1,1,1,,,,1,1],[,,,1,1,,,1,,1,,1,,1,1,1,1,,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,,1,,1,,,,1,1,,,1,1,,1,1,,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1,,1,1,,,1],[,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,,1,,,1,,,1,,1,1,1,1,1,,1,,1,1],[,,,,,1,,,,1,,,,,1,1,,,,1],[,1,,1,1,1,,1,,,1,1,1,,,1,,,1,,1,,,1],[,,1,,,,,,,,,1,,1,,,,,1,,1],[,1,1,,,,,,,,1,1,1,,,,,,,,1,,,,,1],[,,,,,,,,1,,,,,1,,,1]],[,[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,,1,1,1,1,1,1,1,1,,,,,,,,,1,1],[,,,,,,,,1,,,,1,,1,,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,1,,1,,1,,,,1,1,,1,,1,,,,1,1,1,1,1,,,1],,[,1,,,,,,,,1,,,1,1,,,1,,1,1,,1,,1],[,1,,,1,,,,,,,,1,,,,,,,1],[1,1,,,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1],,[,1,,,,,,1,,1,,1,1,1,1,1,,,1,,1,1,,,,1],[,1,1,,,1,,1,,1,,,1,1,1,1,,,1,,,1,,,,1],[,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1],[,1,,,1,1,,1,1,,,1,1,,1,1,,1,,1,,1],[1,,1,,,,,1,,1,,1,1,1,1,,,,,1,1,,,,1,1],[,1,1,,,,,1,1,,,1,,1,1,1,1,,,,,,,,,,1],,[,1,1,,,1,,,,1,,1,1,1,1,1,,,,1,,,,1,,1],[,,,1,1,,,1,,,,,1,,1,1,1,,1,1,,,,,,1],[,1,,,,,,,,,,,1,,,,1,,,,,,,1,,1],[,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,1,,,,,1,,1,,,1,1,,1,1,,1],[,1,,,,,,1,,,,,1,1,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1,,,1,,,,,1],[,,,,,,,1,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,,1,,,,,,,1,,,,,,,,1,,,1],[,1,,,,,,,1],[,,,,,,,,,,1],[,1,,,,,,1,1,,,,,,1],,[,1,1,,,,,,1,,,,,1,1,,,,1],[1,,1,,1,,,,,1,,,,,1,,,,,,,,,1,1],[,1,1,,,,,,,,,1,1,1,1,,,,1,,,,,1,,,1],,[,1,1,,1,,,1,1,,,1,,,1,1,1,,1,,1,1,1,,,,1],[,,,,,1,,,,,1,,,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,,,1,,,,,1,,,,,1,,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,1],[,1,,,,,,1,,,,,,,1,1,1,,,1],[,1,,,,,,,,,,1,1,1,,,,,1,,,1],[,,,,,1,,1,,,,,1,1,1,,1,1,,1,1,1,,,1,1],[1,1,,,,,,,1,,,,,1,1,,,,,,,,,,,1],,[,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,,1,,,,,1,,,1,,,,1,,1],[,1,,,,,,,,,1]]];function Fp(e){e=Array.isArray(e)?e:yp;var t=[];return e.forEach((function(e,n){var a=String.fromCharCode(n+96).replace("\`","");Array.isArray(e)?t=t.concat(Fp(e).map((function(e){return a+e}))):t.push(a)})),t}var wp,Ep=function(e){for(var t=yp;e.length<3;)e+="\`";for(var n=0;n<=e.length-1;n++)if(!(t=t[e.charCodeAt(n)-96]))return!1;return!0};T(Cp,on),wp=R(Cp),Z(Cp,[{key:"props",get:function(){return this._props}},{key:"attr",value:function(e){return null!=(e=this._attrs[e])?e:null}},{key:"hasAttr",value:function(e){return void 0!==this._attrs[e]}},{key:"attrNames",get:function(){return Object.keys(this._attrs)}}]),us=Cp;function Cp(e){var t,n,a;return K(this,Cp),(t=wp.call(this))._props=function(e){var t=null!=(t=e.nodeName)?t:kp[e.nodeType],n=null!=(n=null!=(n=e.nodeType)?n:Ap[e.nodeName])?n:1,a=(yn("number"==typeof n,"nodeType has to be a number, got '".concat(n,"'")),yn("string"==typeof t,"nodeName has to be a string, got '".concat(t,"'")),t=t.toLowerCase(),null);return"input"===t&&(a=(e.type||e.attributes&&e.attributes.type||"").toLowerCase(),vp().includes(a)||(a="text")),e=U({},e,{nodeType:n,nodeName:t}),a&&(e.type=a),delete e.attributes,Object.freeze(e)}(e),t._attrs=(e=e.attributes,n=void 0===e?{}:e,a={htmlFor:"for",className:"class"},Object.keys(n).reduce((function(e,t){var o=n[t];return yn("object"!==r(o)||null===o,"expects attributes not to be an object, '".concat(t,"' was")),void 0!==o&&(e[a[t]||t]=null!==o?String(o):null),e}),{})),t}var xp,Ap={"#cdata-section":2,"#text":3,"#comment":8,"#document":9,"#document-fragment":11},kp={},Bp=(Object.keys(Ap).forEach((function(e){kp[Ap[e]]=e})),us),Tp=function(e,t){if(e=e||function(){},t=t||o.log,!o._audit)throw new Error("No audit configured");var n=o.utils.queue(),r=[],u=(Object.keys(o.plugins).forEach((function(e){n.defer((function(t){function n(e){r.push(e),t()}try{o.plugins[e].cleanup(t,n)}catch(e){n(e)}}))})),o.utils.getFlattenedTree(a.body));o.utils.querySelectorAll(u,"iframe, frame").forEach((function(e){n.defer((function(t,n){return o.utils.sendCommandToFrame(e.actualNode,{command:"cleanup-plugin"},t,n)}))})),n.then((function(n){0===r.length?e(n):t(r)})).catch(t)},Np={};function Rp(e){return Np.hasOwnProperty(e)}function _p(e){return"string"==typeof e&&Np[e]?Np[e]:"function"==typeof e?e:xp}var Op={},Sp=(ae(Op,{allowedAttr:function(){return Sp},arialabelText:function(){return Oo},arialabelledbyText:function(){return _o},getAccessibleRefs:function(){return Pp},getElementUnallowedRoles:function(){return qp},getExplicitRole:function(){return $o},getImplicitRole:function(){return bu},getOwnedVirtual:function(){return Au},getRole:function(){return wu},getRoleType:function(){return Bi},getRolesByType:function(){return Vp},getRolesWithNameFromContents:function(){return Gp},implicitNodes:function(){return Yp},implicitRole:function(){return bu},isAccessibleRef:function(){return Kp},isAriaRoleAllowedOnElement:function(){return Ip},isComboboxPopup:function(){return Xp},isUnsupportedRole:function(){return zo},isValidRole:function(){return Vo},label:function(){return Jp},labelVirtual:function(){return ii},lookupTable:function(){return Wp},namedFromContents:function(){return xu},requiredAttr:function(){return Qp},requiredContext:function(){return ef},requiredOwned:function(){return tf},validateAttr:function(){return af},validateAttrValue:function(){return nf}}),function(e){e=qo.ariaRoles[e];var t=$(Uo());return e&&(e.allowedAttrs&&t.push.apply(t,$(e.allowedAttrs)),e.requiredAttrs)&&t.push.apply(t,$(e.requiredAttrs)),t}),Mp=/^idrefs?$/,Pp=function(e){e=e.actualNode||e;var t=(t=sr(e)).documentElement||t,n=Kn.get("idRefsByRoot",(function(){return new WeakMap})),a=n.get(t);return a||(n.set(t,a={}),function e(t,n,a){if(t.hasAttribute){var r;"LABEL"===t.nodeName.toUpperCase()&&t.hasAttribute("for")&&(n[r=t.getAttribute("for")]=n[r]||[],n[r].push(t));for(var o=0;o<a.length;++o){var u=a[o];if(u=Zo(t.getAttribute(u)||""))for(var i=Gc(u),l=0;l<i.length;++l)n[i[l]]=n[i[l]]||[],n[i[l]].push(t)}}for(var s=0;s<t.childNodes.length;s++)1===t.childNodes[s].nodeType&&e(t.childNodes[s],n,a)}(t,a,Object.keys(qo.ariaAttrs).filter((function(e){return e=qo.ariaAttrs[e].type,Mp.test(e)})))),a[e.id]||[]},Ip=function(e,t){e=e instanceof on?e:Xn(e);var n=bu(e);e=gu(e);return Array.isArray(e.allowedRoles)?e.allowedRoles.includes(t):t!==n&&!!e.allowedRoles},jp=["doc-backlink","doc-biblioentry","doc-biblioref","doc-cover","doc-endnote","doc-glossref","doc-noteref"],Lp={header:"banner",footer:"contentinfo"},qp=function(e){var t,n,a,r=!(1<arguments.length&&void 0!==arguments[1])||arguments[1],o=Ld(e).vNode;return Sd(o)?(a=o.props.nodeName,t=bu(o)||Lp[a],a=[],((n=o)?(n.hasAttr("role")&&(n=Gc(n.attr("role").toLowerCase()),a=a.concat(n)),a.filter((function(e){return Vo(e)}))):a).filter((function(e){var n=o,a=t;return!(r&&e===a||(!jp.includes(e)||Bi(e)===a)&&Ip(n,e))}))):[]},zp=function(e){return Object.keys(qo.ariaRoles).filter((function(t){return qo.ariaRoles[t].type===e}))},Vp=function(e){return zp(e)},$p=function(){return Kn.get("ariaRolesNameFromContent",(function(){return Object.keys(qo.ariaRoles).filter((function(e){return qo.ariaRoles[e].nameFromContent}))}))};function Hp(e){return null===e}function Up(e){return null!==e}var Gp=function(){return $p()},Wp=((Il={attributes:{"aria-activedescendant":{type:"idref",allowEmpty:!0,unsupported:!1},"aria-atomic":{type:"boolean",values:["true","false"],unsupported:!1},"aria-autocomplete":{type:"nmtoken",values:["inline","list","both","none"],unsupported:!1},"aria-busy":{type:"boolean",values:["true","false"],unsupported:!1},"aria-checked":{type:"nmtoken",values:["true","false","mixed","undefined"],unsupported:!1},"aria-colcount":{type:"int",unsupported:!1},"aria-colindex":{type:"int",unsupported:!1},"aria-colspan":{type:"int",unsupported:!1},"aria-controls":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-current":{type:"nmtoken",allowEmpty:!0,values:["page","step","location","date","time","true","false"],unsupported:!1},"aria-describedby":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-describedat":{unsupported:!0,unstandardized:!0},"aria-details":{type:"idref",allowEmpty:!0,unsupported:!1},"aria-disabled":{type:"boolean",values:["true","false"],unsupported:!1},"aria-dropeffect":{type:"nmtokens",values:["copy","move","reference","execute","popup","none"],unsupported:!1},"aria-errormessage":{type:"idref",allowEmpty:!0,unsupported:!1},"aria-expanded":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-flowto":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-grabbed":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-haspopup":{type:"nmtoken",allowEmpty:!0,values:["true","false","menu","listbox","tree","grid","dialog"],unsupported:!1},"aria-hidden":{type:"boolean",values:["true","false"],unsupported:!1},"aria-invalid":{type:"nmtoken",allowEmpty:!0,values:["true","false","spelling","grammar"],unsupported:!1},"aria-keyshortcuts":{type:"string",allowEmpty:!0,unsupported:!1},"aria-label":{type:"string",allowEmpty:!0,unsupported:!1},"aria-labelledby":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-level":{type:"int",unsupported:!1},"aria-live":{type:"nmtoken",values:["off","polite","assertive"],unsupported:!1},"aria-modal":{type:"boolean",values:["true","false"],unsupported:!1},"aria-multiline":{type:"boolean",values:["true","false"],unsupported:!1},"aria-multiselectable":{type:"boolean",values:["true","false"],unsupported:!1},"aria-orientation":{type:"nmtoken",values:["horizontal","vertical"],unsupported:!1},"aria-owns":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-placeholder":{type:"string",allowEmpty:!0,unsupported:!1},"aria-posinset":{type:"int",unsupported:!1},"aria-pressed":{type:"nmtoken",values:["true","false","mixed","undefined"],unsupported:!1},"aria-readonly":{type:"boolean",values:["true","false"],unsupported:!1},"aria-relevant":{type:"nmtokens",values:["additions","removals","text","all"],unsupported:!1},"aria-required":{type:"boolean",values:["true","false"],unsupported:!1},"aria-roledescription":{type:"string",allowEmpty:!0,unsupported:!1},"aria-rowcount":{type:"int",unsupported:!1},"aria-rowindex":{type:"int",unsupported:!1},"aria-rowspan":{type:"int",unsupported:!1},"aria-selected":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-setsize":{type:"int",unsupported:!1},"aria-sort":{type:"nmtoken",values:["ascending","descending","other","none"],unsupported:!1},"aria-valuemax":{type:"decimal",unsupported:!1},"aria-valuemin":{type:"decimal",unsupported:!1},"aria-valuenow":{type:"decimal",unsupported:!1},"aria-valuetext":{type:"string",unsupported:!1}},globalAttributes:["aria-atomic","aria-busy","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-dropeffect","aria-flowto","aria-grabbed","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-live","aria-owns","aria-relevant","aria-roledescription"]}).role={alert:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},alertdialog:{type:"widget",attributes:{allowed:["aria-expanded","aria-modal","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["dialog","section"]},application:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage","aria-activedescendant"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["article","audio","embed","iframe","object","section","svg","video"]},article:{type:"structure",attributes:{allowed:["aria-expanded","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["article"],unsupported:!1},banner:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["header"],unsupported:!1,allowedElements:["section"]},button:{type:"widget",attributes:{allowed:["aria-expanded","aria-pressed","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["button",'input[type="button"]','input[type="image"]','input[type="reset"]','input[type="submit"]',"summary"],unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},cell:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-rowindex","aria-rowspan","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["td","th"],unsupported:!1},checkbox:{type:"widget",attributes:{allowed:["aria-checked","aria-required","aria-readonly","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:['input[type="checkbox"]'],unsupported:!1,allowedElements:["button"]},columnheader:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-required","aria-readonly","aria-selected","aria-sort","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["th"],unsupported:!1},combobox:{type:"composite",attributes:{allowed:["aria-autocomplete","aria-required","aria-activedescendant","aria-orientation","aria-errormessage"],required:["aria-expanded"]},owned:{all:["listbox","tree","grid","dialog","textbox"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:"input",properties:{type:["text","search","tel","url","email"]}}]},command:{nameFrom:["author"],type:"abstract",unsupported:!1},complementary:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["aside"],unsupported:!1,allowedElements:["section"]},composite:{nameFrom:["author"],type:"abstract",unsupported:!1},contentinfo:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["footer"],unsupported:!1,allowedElements:["section"]},definition:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["dd","dfn"],unsupported:!1},dialog:{type:"widget",attributes:{allowed:["aria-expanded","aria-modal","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["dialog"],unsupported:!1,allowedElements:["section"]},directory:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:["ol","ul"]},document:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["body"],unsupported:!1,allowedElements:["article","embed","iframe","object","section","svg"]},"doc-abstract":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-acknowledgments":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-afterword":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-appendix":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-backlink":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},"doc-biblioentry":{type:"listitem",attributes:{allowed:["aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author"],context:["doc-bibliography"],unsupported:!1,allowedElements:["li"]},"doc-bibliography":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["doc-biblioentry"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-biblioref":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},"doc-chapter":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-colophon":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-conclusion":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-cover":{type:"img",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1},"doc-credit":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-credits":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-dedication":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-endnote":{type:"listitem",attributes:{allowed:["aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,namefrom:["author"],context:["doc-endnotes"],unsupported:!1,allowedElements:["li"]},"doc-endnotes":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["doc-endnote"]},namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-epigraph":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1},"doc-epilogue":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-errata":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-example":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","section"]},"doc-footnote":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","footer","header"]},"doc-foreword":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-glossary":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:["term","definition"],namefrom:["author"],context:null,unsupported:!1,allowedElements:["dl"]},"doc-glossref":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},"doc-index":{type:"navigation",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},"doc-introduction":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-noteref":{type:"link",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:Up}}]},"doc-notice":{type:"note",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-pagebreak":{type:"separator",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["hr"]},"doc-pagelist":{type:"navigation",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},"doc-part":{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-preface":{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-prologue":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-pullquote":{type:"none",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","section"]},"doc-qna":{type:"section",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-subtitle":{type:"sectionhead",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["h1","h2","h3","h4","h5","h6"]}},"doc-tip":{type:"note",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside"]},"doc-toc":{type:"navigation",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},feed:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["article"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["article","aside","section"]},figure:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["figure"],unsupported:!1},form:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["form"],unsupported:!1},grid:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-colcount","aria-level","aria-multiselectable","aria-readonly","aria-rowcount","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,implicit:["table"],unsupported:!1},gridcell:{type:"widget",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-selected","aria-readonly","aria-required","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["td","th"],unsupported:!1},group:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["details","optgroup"],unsupported:!1,allowedElements:["dl","figcaption","fieldset","figure","footer","header","ol","ul"]},heading:{type:"structure",attributes:{required:["aria-level"],allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["h1","h2","h3","h4","h5","h6"],unsupported:!1},img:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["img"],unsupported:!1,allowedElements:["embed","iframe","object","svg"]},input:{nameFrom:["author"],type:"abstract",unsupported:!1},landmark:{nameFrom:["author"],type:"abstract",unsupported:!1},link:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["a[href]","area[href]"],unsupported:!1,allowedElements:["button",{nodeName:"input",properties:{type:["image","button"]}}]},list:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{all:["listitem"]},nameFrom:["author"],context:null,implicit:["ol","ul","dl"],unsupported:!1},listbox:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-multiselectable","aria-readonly","aria-required","aria-expanded","aria-orientation","aria-errormessage"]},owned:{all:["option"]},nameFrom:["author"],context:null,implicit:["select"],unsupported:!1,allowedElements:["ol","ul"]},listitem:{type:"structure",attributes:{allowed:["aria-level","aria-posinset","aria-setsize","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["list"],implicit:["li","dt"],unsupported:!1},log:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},main:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["main"],unsupported:!1,allowedElements:["article","section"]},marquee:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},math:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["math"],unsupported:!1},menu:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:{one:["menuitem","menuitemradio","menuitemcheckbox"]},nameFrom:["author"],context:null,implicit:['menu[type="context"]'],unsupported:!1,allowedElements:["ol","ul"]},menubar:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:{one:["menuitem","menuitemradio","menuitemcheckbox"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},menuitem:{type:"widget",attributes:{allowed:["aria-posinset","aria-setsize","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="command"]'],unsupported:!1,allowedElements:["button","li",{nodeName:"iput",properties:{type:["image","button"]}},{nodeName:"a",attributes:{href:Up}}]},menuitemcheckbox:{type:"widget",attributes:{allowed:["aria-checked","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="checkbox"]'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["checkbox","image","button"]}},{nodeName:"a",attributes:{href:Up}}]},menuitemradio:{type:"widget",attributes:{allowed:["aria-checked","aria-selected","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="radio"]'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["image","button","radio"]}},{nodeName:"a",attributes:{href:Up}}]},navigation:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["nav"],unsupported:!1,allowedElements:["section"]},none:{type:"structure",attributes:null,owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:["article","aside","dl","embed","figcaption","fieldset","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hr","iframe","li","ol","section","ul"]},{nodeName:"img",attributes:{alt:Up}}]},note:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["aside"]},option:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize","aria-checked","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["listbox"],implicit:["option"],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["checkbox","button"]}},{nodeName:"a",attributes:{href:Up}}]},presentation:{type:"structure",attributes:null,owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:["article","aside","dl","embed","figcaption","fieldset","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hr","iframe","li","ol","section","ul"]},{nodeName:"img",attributes:{alt:Up}}]},progressbar:{type:"widget",attributes:{allowed:["aria-valuetext","aria-valuenow","aria-valuemax","aria-valuemin","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["progress"],unsupported:!1},radio:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize","aria-required","aria-errormessage","aria-checked"]},owned:null,nameFrom:["author","contents"],context:null,implicit:['input[type="radio"]'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["image","button"]}}]},radiogroup:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-required","aria-expanded","aria-readonly","aria-errormessage","aria-orientation"]},owned:{all:["radio"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["ol","ul","fieldset"]}},range:{nameFrom:["author"],type:"abstract",unsupported:!1},region:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["section[aria-label]","section[aria-labelledby]","section[title]"],unsupported:!1,allowedElements:{nodeName:["article","aside"]}},roletype:{type:"abstract",unsupported:!1},row:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-colindex","aria-expanded","aria-level","aria-selected","aria-rowindex","aria-errormessage"]},owned:{one:["cell","columnheader","rowheader","gridcell"]},nameFrom:["author","contents"],context:["rowgroup","grid","treegrid","table"],implicit:["tr"],unsupported:!1},rowgroup:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-errormessage"]},owned:{all:["row"]},nameFrom:["author","contents"],context:["grid","table","treegrid"],implicit:["tbody","thead","tfoot"],unsupported:!1},rowheader:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-required","aria-readonly","aria-selected","aria-sort","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["th"],unsupported:!1},scrollbar:{type:"widget",attributes:{required:["aria-controls","aria-valuenow"],allowed:["aria-valuetext","aria-orientation","aria-errormessage","aria-valuemax","aria-valuemin"]},owned:null,nameFrom:["author"],context:null,unsupported:!1},search:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["aside","form","section"]}},searchbox:{type:"widget",attributes:{allowed:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-readonly","aria-required","aria-placeholder","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="search"]'],unsupported:!1,allowedElements:{nodeName:"input",properties:{type:"text"}}},section:{nameFrom:["author","contents"],type:"abstract",unsupported:!1},sectionhead:{nameFrom:["author","contents"],type:"abstract",unsupported:!1},select:{nameFrom:["author"],type:"abstract",unsupported:!1},separator:{type:"structure",attributes:{allowed:["aria-expanded","aria-orientation","aria-valuenow","aria-valuemax","aria-valuemin","aria-valuetext","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["hr"],unsupported:!1,allowedElements:["li"]},slider:{type:"widget",attributes:{allowed:["aria-valuetext","aria-orientation","aria-readonly","aria-errormessage","aria-valuemax","aria-valuemin"],required:["aria-valuenow"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="range"]'],unsupported:!1},spinbutton:{type:"widget",attributes:{allowed:["aria-valuetext","aria-required","aria-readonly","aria-errormessage","aria-valuemax","aria-valuemin"],required:["aria-valuenow"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="number"]'],unsupported:!1,allowedElements:{nodeName:"input",properties:{type:["text","tel"]}}},status:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["output"],unsupported:!1,allowedElements:["section"]},structure:{type:"abstract",unsupported:!1},switch:{type:"widget",attributes:{allowed:["aria-errormessage"],required:["aria-checked"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:["button",{nodeName:"input",properties:{type:["checkbox","image","button"]}},{nodeName:"a",attributes:{href:Up}}]},tab:{type:"widget",attributes:{allowed:["aria-selected","aria-expanded","aria-setsize","aria-posinset","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["tablist"],unsupported:!1,allowedElements:[{nodeName:["button","h1","h2","h3","h4","h5","h6","li"]},{nodeName:"input",properties:{type:"button"}},{nodeName:"a",attributes:{href:Up}}]},table:{type:"structure",attributes:{allowed:["aria-colcount","aria-rowcount","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author","contents"],context:null,implicit:["table"],unsupported:!1},tablist:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-level","aria-multiselectable","aria-orientation","aria-errormessage"]},owned:{all:["tab"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},tabpanel:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},term:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["dt"],unsupported:!1},textbox:{type:"widget",attributes:{allowed:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-readonly","aria-required","aria-placeholder","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="text"]','input[type="email"]','input[type="password"]','input[type="tel"]','input[type="url"]',"input:not([type])","textarea"],unsupported:!1},timer:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1},toolbar:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:['menu[type="toolbar"]'],unsupported:!1,allowedElements:["ol","ul"]},tooltip:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1},tree:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-multiselectable","aria-required","aria-expanded","aria-orientation","aria-errormessage"]},owned:{all:["treeitem"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},treegrid:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-colcount","aria-expanded","aria-level","aria-multiselectable","aria-readonly","aria-required","aria-rowcount","aria-orientation","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,unsupported:!1},treeitem:{type:"widget",attributes:{allowed:["aria-checked","aria-selected","aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["group","tree"],unsupported:!1,allowedElements:["li",{nodeName:"a",attributes:{href:Up}}]},widget:{type:"abstract",unsupported:!1},window:{nameFrom:["author"],type:"abstract",unsupported:!1}},Il.implicitHtmlRole=nu,Il.elementsAllowedNoRole=[{nodeName:["base","body","caption","col","colgroup","datalist","dd","details","dt","head","html","keygen","label","legend","main","map","math","meta","meter","noscript","optgroup","param","picture","progress","script","source","style","template","textarea","title","track"]},{nodeName:"area",attributes:{href:Up}},{nodeName:"input",properties:{type:["color","data","datatime","file","hidden","month","number","password","range","reset","submit","time","week"]}},{nodeName:"link",attributes:{href:Up}},{nodeName:"menu",attributes:{type:"context"}},{nodeName:"menuitem",attributes:{type:["command","checkbox","radio"]}},{nodeName:"select",condition:function(e){return e instanceof o.AbstractVirtualNode||(e=o.utils.getNodeFromTree(e)),1<Number(e.attr("size"))},properties:{multiple:!0}},{nodeName:["clippath","cursor","defs","desc","feblend","fecolormatrix","fecomponenttransfer","fecomposite","feconvolvematrix","fediffuselighting","fedisplacementmap","fedistantlight","fedropshadow","feflood","fefunca","fefuncb","fefuncg","fefuncr","fegaussianblur","feimage","femerge","femergenode","femorphology","feoffset","fepointlight","fespecularlighting","fespotlight","fetile","feturbulence","filter","hatch","hatchpath","lineargradient","marker","mask","meshgradient","meshpatch","meshrow","metadata","mpath","pattern","radialgradient","solidcolor","stop","switch","view"]}],Il.elementsAllowedAnyRole=[{nodeName:"a",attributes:{href:Hp}},{nodeName:"img",attributes:{alt:Hp}},{nodeName:["abbr","address","canvas","div","p","pre","blockquote","ins","del","output","span","table","tbody","thead","tfoot","td","em","strong","small","s","cite","q","dfn","abbr","time","code","var","samp","kbd","sub","sup","i","b","u","mark","ruby","rt","rp","bdi","bdo","br","wbr","th","tr"]}],Il.evaluateRoleForElement={A:function(e){var t=e.node;e=e.out;return"http://www.w3.org/2000/svg"===t.namespaceURI||!t.href.length||e},AREA:function(e){return!e.node.href},BUTTON:function(e){var t=e.node,n=e.role;e=e.out;return"menu"===t.getAttribute("type")?"menuitem"===n:e},IMG:function(e){var t=e.node,n=e.role,a=e.out;switch(t.alt){case null:return a;case"":return"presentation"===n||"none"===n;default:return"presentation"!==n&&"none"!==n}},INPUT:function(e){var t=e.node,n=e.role,a=e.out;switch(t.type){case"button":case"image":return a;case"checkbox":return!("button"!==n||!t.hasAttribute("aria-pressed"))||a;case"radio":return"menuitemradio"===n;case"text":return"combobox"===n||"searchbox"===n||"spinbutton"===n;case"tel":return"combobox"===n||"spinbutton"===n;case"url":case"search":case"email":return"combobox"===n;default:return!1}},LI:function(e){var t=e.node;e=e.out;return!o.utils.matchesSelector(t,"ol li, ul li")||e},MENU:function(e){return"context"!==e.node.getAttribute("type")},OPTION:function(e){return e=e.node,!o.utils.matchesSelector(e,"select > option, datalist > option, optgroup > option")},SELECT:function(e){var t=e.node;e=e.role;return!t.multiple&&t.size<=1&&"menu"===e},SVG:function(e){var t=e.node;e=e.out;return!(!t.parentNode||"http://www.w3.org/2000/svg"!==t.parentNode.namespaceURI)||e}},Il.rolesOfType={widget:["button","checkbox","dialog","gridcell","link","log","marquee","menuitem","menuitemcheckbox","menuitemradio","option","progressbar","radio","scrollbar","searchbox","slider","spinbutton","status","switch","tab","tabpanel","textbox","timer","tooltip","tree","treeitem"]},Il),Yp=function(e){var t=null;return(e=Wp.role[e])&&e.implicit?ea(e.implicit):t},Kp=function(e){return!!Pp(e).length};function Xp(e){var t=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).popupRoles,n=wu(e);if(!(t=null!=t?t:So["aria-haspopup"].values).includes(n))return!1;if(t=function(e){for(;e=e.parent;)if(null!==wu(e,{noPresentational:!0}))return e;return null}(e),Zp(t))return!0;if(!(n=e.props.id))return!1;if(e.actualNode)return t=lr(e.actualNode).querySelectorAll('[aria-owns~="'.concat(n,'"][role~="combobox"]:not(select),\\n     [aria-controls~="').concat(n,'"][role~="combobox"]:not(select)')),Array.from(t).some(Zp);throw new Error("Unable to determine combobox popup without an actualNode")}var Zp=function(e){return e&&"combobox"===wu(e)},Jp=function(e){return e=Xn(e),ii(e)},Qp=function(e){return(e=qo.ariaRoles[e])&&Array.isArray(e.requiredAttrs)?$(e.requiredAttrs):[]},ef=function(e){return(e=qo.ariaRoles[e])&&Array.isArray(e.requiredContext)?$(e.requiredContext):null},tf=function(e){return(e=qo.ariaRoles[e])&&Array.isArray(e.requiredOwned)?$(e.requiredOwned):null},nf=function(e,t){var n,a=(e=e instanceof on?e:Xn(e)).attr(t),r=qo.ariaAttrs[t];if(!r)return!0;if(r.allowEmpty&&(!a||""===a.trim()))return!0;switch(r.type){case"boolean":return["true","false"].includes(a.toLowerCase());case"nmtoken":return"string"==typeof a&&r.values.includes(a.toLowerCase());case"nmtokens":return(n=Gc(a)).reduce((function(e,t){return e&&r.values.includes(t)}),0!==n.length);case"idref":try{var o=sr(e.actualNode);return!(!a||!o.getElementById(a))}catch(e){throw new TypeError("Cannot resolve id references for partial DOM")}case"idrefs":return No(e,t).some((function(e){return!!e}));case"string":return""!==a.trim();case"decimal":return!(!(n=a.match(/^[-+]?([0-9]*)\\.?([0-9]*)$/))||!n[1]&&!n[2]);case"int":return o=void 0!==r.minValue?r.minValue:-1/0,/^[-+]?[0-9]+$/.test(a)&&parseInt(a)>=o}},af=function(e){return!!qo.ariaAttrs[e]};function rf(e,t,n){var a=(r=n.props).nodeName,r=r.type,o=function(e){return e?(e=e.toLowerCase(),["mixed","true"].includes(e)?e:"false"):""}(n.attr("aria-checked"));return"input"!==a||"checkbox"!==r||!o||o===(a=function(e){return e.props.indeterminate?"mixed":e.props.checked?"true":"false"}(n))||(this.data({messageKey:"checkbox",checkState:a}),!1)}function of(e){var t,n,a=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).invalidTableRowAttrs,r=2<arguments.length?arguments[2]:void 0;a=null!=(t=null==a||null==(t=a.filter)?void 0:t.call(a,(function(e){return r.hasAttr(e)})))?t:[];return 0===a.length||!(t=(t=function(e){if(e.parent)return ca(e,'table:not([role]), [role~="treegrid"], [role~="table"], [role~="grid"]')}(r))&&wu(t))||"treegrid"===t||(n="row".concat(1<a.length?"Plural":"Singular"),this.data({messageKey:n,invalidAttrs:a,ownerRole:t}),!1)}var uf={row:of,checkbox:rf};var lf={};function sf(e){return 3===e.props.nodeType?0<e.props.nodeValue.trim().length:vi(e,!1,!0)}function cf(e,t,n,a){var r=$o(e);if(!(n=n||ef(r)))return null;for(var o=n.includes("group"),u=a?e:e.parent;u;){var i=wu(u,{noPresentational:!0});if(i){if("group"!==i||!o)return n.includes(i)?null:n;t.includes(r)&&n.push(r),n=n.filter((function(e){return"group"!==e}))}u=u.parent}return n}ae(lf,{getAriaRolesByType:function(){return zp},getAriaRolesSupportingNameFromContent:function(){return $p},getElementSpec:function(){return gu},getElementsByContentType:function(){return Ho},getGlobalAriaAttrs:function(){return Uo},implicitHtmlRoles:function(){return nu}});var df={ARTICLE:!0,ASIDE:!0,NAV:!0,SECTION:!0},pf={application:!0,article:!0,banner:!1,complementary:!0,contentinfo:!0,form:!0,main:!0,navigation:!0,region:!0,search:!1};var ff={},Df=(ae(ff,{Color:function(){return xc},centerPointOfRect:function(){return Df},elementHasImage:function(){return Ii},elementIsDistinct:function(){return hf},filteredRectStack:function(){return bf},flattenColors:function(){return Ff},flattenShadowColors:function(){return wf},getBackgroundColor:function(){return Nf},getBackgroundStack:function(){return Ef},getContrast:function(){return Of},getForegroundColor:function(){return Sf},getOwnBackgroundColor:function(){return kc},getRectStack:function(){return gf},getStackingContext:function(){return xf},getTextShadowColors:function(){return Cf},hasValidContrastRatio:function(){return Mf},incompleteData:function(){return Pi},stackingContextToColor:function(){return Af}}),function(e){if(!(e.left>t.innerWidth||e.top>t.innerHeight))return{x:Math.min(Math.ceil(e.left+e.width/2),t.innerWidth-1),y:Math.min(Math.ceil(e.top+e.height/2),t.innerHeight-1)}});function mf(e){return e.getPropertyValue("font-family").split(/[,;]/g).map((function(e){return e.trim().toLowerCase()}))}var hf=function(e,n){var a,r=t.getComputedStyle(e);return"none"!==r.getPropertyValue("background-image")||!!["border-bottom","border-top","outline"].reduce((function(e,t){var n=new xc;return n.parseString(r.getPropertyValue(t+"-color")),e||"none"!==r.getPropertyValue(t+"-style")&&0<parseFloat(r.getPropertyValue(t+"-width"))&&0!==n.alpha}),!1)||(a=t.getComputedStyle(n),mf(r)[0]!==mf(a)[0])||(e=["text-decoration-line","text-decoration-style","font-weight","font-style","font-size"].reduce((function(e,t){return e||r.getPropertyValue(t)!==a.getPropertyValue(t)}),!1),(n=r.getPropertyValue("text-decoration")).split(" ").length<3?e||n!==a.getPropertyValue("text-decoration"):e)},gf=function(e){var t=ko(e);return!(e=Di(e))||e.length<=1?[t]:e.some((function(e){return void 0===e}))?null:(e.splice(0,0,t),e)},bf=function(e){var t,n,a=gf(e);return a&&1===a.length?a[0]:a&&1<a.length?(t=a.shift(),a.forEach((function(r,o){var u,i;0!==o&&(u=a[o-1],i=a[o],n=u.every((function(e,t){return e===i[t]}))||t.includes(e))})),n?a[0]:(Pi.set("bgColor","elmPartiallyObscuring"),null)):(Pi.set("bgColor","outsideViewport"),null)},vf={normal:function(e,t){return t},multiply:function(e,t){return t*e},screen:function(e,t){return e+t-e*t},overlay:function(e,t){return this["hard-light"](t,e)},darken:function(e,t){return Math.min(e,t)},lighten:function(e,t){return Math.max(e,t)},"color-dodge":function(e,t){return 0===e?0:1===t?1:Math.min(1,e/(1-t))},"color-burn":function(e,t){return 1===e?1:0===t?0:1-Math.min(1,(1-e)/t)},"hard-light":function(e,t){return t<=.5?this.multiply(e,2*t):this.screen(e,2*t-1)},"soft-light":function(e,t){return t<=.5?e-(1-2*t)*e*(1-e):e+(2*t-1)*((e<=.25?((16*e-12)*e+4)*e:Math.sqrt(e))-e)},difference:function(e,t){return Math.abs(e-t)},exclusion:function(e,t){return e+t-2*e*t}};function yf(e,t,n,a,r){return t*(1-a)*e+t*a*vf[r](n/255,e/255)*255+(1-t)*a*n}var Ff=function(e,t){var n,a,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"normal",o=yf(e.red,e.alpha,t.red,t.alpha,r),u=yf(e.green,e.alpha,t.green,t.alpha,r),i=(r=yf(e.blue,e.alpha,t.blue,t.alpha,r),n=e.alpha+t.alpha*(1-e.alpha),i=0,a=1,Math.min(Math.max(i,n),a));return 0===i?new xc(o,u,r,i):(n=Math.round(o/i),a=Math.round(u/i),o=Math.round(r/i),new xc(n,a,o,i))};function wf(e,t){var n=(1-(r=e.alpha))*t.red+r*e.red,a=(1-r)*t.green+r*e.green,r=(1-r)*t.blue+r*e.blue;t=e.alpha+t.alpha*(1-e.alpha);return new xc(n,a,r,t)}function Ef(e){for(var n=Di(e).map((function(n){return function(e){var n=e.indexOf(a.body),r=kc(t.getComputedStyle(a.documentElement));return 1<n&&0===r.alpha&&!Ii(a.documentElement)&&(1<n&&(e.splice(n,1),e.push(a.body)),0<(r=e.indexOf(a.documentElement)))&&(e.splice(r,1),e.push(a.documentElement)),e}(n=Sc(n,e))})),r=0;r<n.length;r++){var o=n[r];if(o[0]!==e)return Pi.set("bgColor","bgOverlap"),null;if(0!==r&&!function(e,t){if(e!==t){if(null===e||null===t)return;if(e.length!==t.length)return;for(var n=0;n<e.length;++n)if(e[n]!==t[n])return}return 1}(o,n[0]))return Pi.set("bgColor","elmPartiallyObscuring"),null}return n[0]||null}var Cf=function(e){var n,a,r,o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},u=o.minRatio,i=o.maxRatio,l=t.getComputedStyle(e);return"none"===(o=l.getPropertyValue("text-shadow"))?[]:(n=l.getPropertyValue("font-size"),a=parseInt(n),yn(!1===isNaN(a),"Unable to determine font-size value ".concat(n)),r=[],function(e){var t={pixels:[]},n=e.trim(),a=[t];if(!n)return[];for(;n;){var r=n.match(/^rgba?\\([0-9,.\\s]+\\)/i)||n.match(/^[a-z]+/i)||n.match(/^#[0-9a-f]+/i),o=n.match(/^([0-9.-]+)px/i)||n.match(/^(0)/);if(r)yn(!t.colorStr,"Multiple colors identified in text-shadow: ".concat(e)),n=n.replace(r[0],"").trim(),t.colorStr=r[0];else if(o)yn(t.pixels.length<3,"Too many pixel units in text-shadow: ".concat(e)),n=n.replace(o[0],"").trim(),r=parseFloat(("."===o[1][0]?"0":"")+o[1]),t.pixels.push(r);else{if(","!==n[0])throw new Error("Unable to process text-shadows: ".concat(e));yn(2<=t.pixels.length,"Missing pixel value in text-shadow: ".concat(e)),a.push(t={pixels:[]}),n=n.substr(1).trim()}}return a}(o).forEach((function(e){var t=e.colorStr,n=(e=e.pixels,t=t||l.getPropertyValue("color"),(e=G(e,3))[0]),o=e[1];e=void 0===(e=e[2])?0:e;(!u||a*u<=e)&&(!i||e<a*i)&&(t=function(e){var t=e.colorStr,n=e.offsetX,a=e.offsetY,r=e.blurRadius;e=e.fontSize;return r<n||r<a?new xc(0,0,0,0):((n=new xc).parseString(t),n.alpha*=function(e,t){return 0===e?1:.185/(e/t+.4)}(r,e),n)}({colorStr:t,offsetY:n,offsetX:o,blurRadius:e,fontSize:a}),r.push(t))})),r)};function xf(e,t){var n,a,r,o=Xn(e);return o._stackingContext||(a=[],r=new Map,(t=null!=(n=t)?n:Ef(e)).forEach((function(e){var t=(t=e=Xn(e),(o=new xc).parseString(t.getComputedStylePropertyValue("background-color")),o),n=e._stackingOrder.filter((function(e){return!!e.vNode})),o=(n.forEach((function(e,t){e=e.vNode;var o=null==(o=n[t-1])?void 0:o.vNode;o=Tf(r,e,o);0!==t||r.get(e)||a.unshift(o),r.set(e,o)})),null==(o=n[n.length-1])?void 0:o.vNode);e=Tf(r,e,o);n.length||a.unshift(e),e.bgColor=t})),o._stackingContext=a)}function Af(e){var t;return null!=(t=e.descendants)&&t.length?(t=e.descendants.reduce(kf,Bf()),(t=Ff(t,e.bgColor,e.descendants[0].blendMode)).alpha*=e.opacity):(t=e.bgColor).alpha*=e.opacity,{color:t,blendMode:e.blendMode}}function kf(e,t){e=e instanceof xc?e:Af(e).color;var n=Af(t).color;return Ff(n,e,t.blendMode)}function Bf(e,t){return{vNode:e,ancestor:t,opacity:parseFloat(null!=(t=null==e?void 0:e.getComputedStylePropertyValue("opacity"))?t:1),bgColor:new xc(0,0,0,0),blendMode:(null==e?void 0:e.getComputedStylePropertyValue("mix-blend-mode"))||void 0,descendants:[]}}function Tf(e,t,n){var a=e.get(n);e=null!=(e=e.get(t))?e:Bf(t,a);return a&&n!==t&&!a.descendants.includes(e)&&a.descendants.unshift(e),e}function Nf(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:.1,o=Xn(e),u=o._cache.getBackgroundColor;return u?(n.push.apply(n,$(u.bgElms)),Pi.set("bgColor",u.incompleteData),u.bgColor):(u=function(e,n,r){var o=Ef(e);if(!o)return null;var u=fi(e);(r=Cf(e,{minRatio:r})).length&&(r=[{color:r.reduce(wf)}]);for(var i=0;i<o.length;i++){var l=o[i],s=t.getComputedStyle(l);if(Ii(l,s))return n.push(l),null;var c=kc(s);if(0!==c.alpha){if("inline"!==s.getPropertyValue("display")&&!Rf(l,u))return n.push(l),Pi.set("bgColor","elmPartiallyObscured"),null;if(n.push(l),1===c.alpha)break}}var d=(r=(d=xf(e,o)).map(Af).concat(r),function(e,n){var r,o,u,i,l=[];return n||(n=a.documentElement,i=a.body,n=t.getComputedStyle(n),r=t.getComputedStyle(i),o=kc(n),i=0!==(u=kc(r)).alpha&&Rf(i,e.getBoundingClientRect()),(0!==u.alpha&&0===o.alpha||i&&1!==u.alpha)&&l.unshift({color:u,blendMode:_f(r.getPropertyValue("mix-blend-mode"))}),0===o.alpha)||i&&1===u.alpha||l.unshift({color:o,blendMode:_f(n.getPropertyValue("mix-blend-mode"))}),l}(e,o.includes(a.body)));return r.unshift.apply(r,$(d)),0===r.length?new xc(255,255,255,1):(e=r.reduce((function(e,t){return Ff(t.color,e.color instanceof xc?e.color:e,t.blendMode)})),Ff(e.color instanceof xc?e.color:e,new xc(255,255,255,1)))}(e,n,r),o._cache.getBackgroundColor={bgColor:u,bgElms:n,incompleteData:Pi.get("bgColor")},u)}function Rf(e,n){n=Array.isArray(n)?n:[n];var a=e.getBoundingClientRect(),r=a.right,o=a.bottom,u=t.getComputedStyle(e).getPropertyValue("overflow");return(["scroll","auto"].includes(u)||e instanceof t.HTMLHtmlElement)&&(r=a.left+e.scrollWidth,o=a.top+e.scrollHeight),n.every((function(e){return e.top>=a.top&&e.bottom<=o&&e.left>=a.left&&e.right<=r}))}function _f(e){return e||void 0}var Of=function(e,t){return t&&e?(t.alpha<1&&(t=Ff(t,e)),e=e.getRelativeLuminance(),t=t.getRelativeLuminance(),(Math.max(t,e)+.05)/(Math.min(t,e)+.05)):null};function Sf(e,n,a){for(var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},o=t.getComputedStyle(e),u=[],i=0,l=[function(){var e,t,n=o,a=void 0===(a=(a=r).textStrokeEmMin)?0:a;return 0===(t=parseFloat(n.getPropertyValue("-webkit-text-stroke-width")))||(e=n.getPropertyValue("font-size"),t/=parseFloat(e),isNaN(t))||t<a?null:(e=n.getPropertyValue("-webkit-text-stroke-color"),(new xc).parseString(e))},function(){return e=o,(new xc).parseString(e.getPropertyValue("-webkit-text-fill-color")||e.getPropertyValue("color"));var e},function(){return Cf(e,{minRatio:0})}];i<l.length;i++){var s=(0,l[i])();if(s&&(u=u.concat(s),1===s.alpha))break}var c,d,p=u.reduce((function(e,t){return Ff(e,t)}));return null===(a=null==a?Nf(e,[]):a)?(c=Pi.get("bgColor"),Pi.set("fgColor",c),null):(d=function e(t,n){var a,r=Q(t);try{for(r.s();!(a=r.n()).done;){var o,u=a.value;if((null==(o=u.vNode)?void 0:o.actualNode)===n)return u;var i=e(u.descendants,n);if(i)return i}}catch(e){r.e(e)}finally{r.f()}}(c=xf(e),e),Ff(function(e,t,n){for(;t;){var a;1===t.opacity&&t.ancestor||(e.alpha*=t.opacity,a=(null==(a=t.ancestor)?void 0:a.descendants)||n,(a=(a=1!==t.opacity?a.slice(0,a.indexOf(t)):a).map(Af)).length&&(a=a.reduce((function(e,t){return Ff(t.color,e.color instanceof xc?e.color:e)}),{color:new xc(0,0,0,0),blendMode:"normal"}),e=Ff(e,a))),t=t.ancestor}return e}(p,d,c),new xc(255,255,255,1)))}var Mf=function(e,t,n,a){return e=Of(e,t),{isValid:(t=a&&Math.ceil(72*n)/96<14||!a&&Math.ceil(72*n)/96<18?4.5:3)<e,contrastRatio:e,expectedContrastRatio:t}},Pf=Dr((function(e,n){function a(e,t){return r.getPropertyValue(e)===t}var r=t.getComputedStyle(e,n);return a("content","none")||a("display","none")||a("visibility","hidden")||!1===a("position","absolute")||0===kc(r).alpha&&a("background-image","none")?0:(e=If(r.getPropertyValue("width")),n=If(r.getPropertyValue("height")),"px"!==e.unit||"px"!==n.unit?0===e.value||0===n.value?0:1/0:e.value*n.value)}));function If(e){var t=(e=G(e.match(/^([0-9.]+)([a-z]+)$/i)||[],3))[1];e=void 0===(e=e[2])?"":e;return{value:parseFloat(void 0===t?"":t),unit:e.toLowerCase()}}function jf(e,t){return e=e.getRelativeLuminance(),t=t.getRelativeLuminance(),(Math.max(e,t)+.05)/(Math.min(e,t)+.05)}var Lf=["block","list-item","table","flex","grid","inline-block"];function qf(e){return e=t.getComputedStyle(e).getPropertyValue("display"),-1!==Lf.indexOf(e)||"table-"===e.substr(0,6)}var zf=["block","list-item","table","flex","grid","inline-block"];function Vf(e){return e=t.getComputedStyle(e).getPropertyValue("display"),-1!==zf.indexOf(e)||"table-"===e.substr(0,6)}function $f(e){return e=parseInt(e.attr("tabindex"),10),!isNaN(e)&&e<0}function Hf(e,t){return t=Uf(t),e=Uf(e),!(!t||!e)&&t.includes(e)}function Uf(e){return e=ai(e,{emoji:!0,nonBmp:!0,punctuations:!0}),Zo(e)}function Gf(e){return""!==(e||"").trim()}function Wf(e,t){var n=1<arguments.length&&void 0!==t&&t;return e.map((function(e){return{vChild:e,nested:n}}))}function Yf(e,t){return e=e.boundingClientRect,t=t.boundingClientRect,e.top>=t.top&&e.left>=t.left&&e.bottom<=t.bottom&&e.right<=t.right}function Kf(e){return{width:Math.round(10*e.width)/10,height:Math.round(10*e.height)/10}}function Xf(e,t){return e.actualNode.contains(t.actualNode)&&!ki(t)}function Zf(e,t){var n=t.width;t=t.height;return e<=n+.05&&e<=t+.05}function Jf(e){return e.map((function(e){return e.actualNode}))}function Qf(e,t){var n=null==(n=t.data)?void 0:n.headingOrder,a=tD(t.node.ancestry,1);return n&&(t=n.map((function(e){return U({},e,{ancestry:a.concat(e.ancestry)})})),-1===(n=function(e,t){for(;t.length;){var n=eD(e,t);if(-1!==n)return n;t=tD(t,1)}return-1}(e,a))?e.push.apply(e,$(t)):e.splice.apply(e,[n,0].concat($(t)))),e}function eD(e,t){return e.findIndex((function(e){return Id(e.ancestry,t)}))}function tD(e,t){return e.slice(0,e.length-t)}ae(Ll={},{aria:function(){return Op},color:function(){return ff},dom:function(){return ir},forms:function(){return nD},matches:function(){return hu},math:function(){return vo},standards:function(){return lf},table:function(){return oD},text:function(){return To},utils:function(){return un}});var nD={},aD=(ae(nD,{isAriaCombobox:function(){return Hu},isAriaListbox:function(){return $u},isAriaRange:function(){return Gu},isAriaTextbox:function(){return Vu},isDisabled:function(){return rD},isNativeSelect:function(){return zu},isNativeTextbox:function(){return qu}}),["fieldset","button","select","input","textarea"]),rD=function e(t){var n,a,r=t._isDisabled;return"boolean"!=typeof r&&(n=t.props.nodeName,a=t.attr("aria-disabled"),r=!(!aD.includes(n)||!t.hasAttr("disabled"))||(a?"true"===a.toLowerCase():!!t.parent&&e(t.parent)),t._isDisabled=r),r},oD={},uD=(ae(oD,{getAllCells:function(){return uD},getCellPosition:function(){return Wo},getHeaders:function(){return lD},getScope:function(){return Yo},isColumnHeader:function(){return Ko},isDataCell:function(){return sD},isDataTable:function(){return cD},isHeader:function(){return dD},isRowHeader:function(){return Xo},toArray:function(){return Go},toGrid:function(){return Go},traverse:function(){return pD}}),function(e){for(var t,n,a=[],r=0,o=e.rows.length;r<o;r++)for(t=0,n=e.rows[r].cells.length;t<n;t++)a.push(e.rows[r].cells[t]);return a});function iD(e,t,n){for(var a,r="row"===e?"_rowHeaders":"_colHeaders",u="row"===e?Xo:Ko,i=(s=n[t.y][t.x]).colSpan-1,l=s.getAttribute("rowspan"),s=(l=0===parseInt(l)||0===s.rowspan?n.length:s.rowSpan,t.y+(l-1)),c=t.x+i,d="row"===e?t.y:0,p="row"===e?0:t.x,f=[],D=s;d<=D&&!a;D--)for(var m=c;p<=m;m--){var h=n[D]?n[D][m]:void 0;if(h){var g=o.utils.getNodeFromTree(h);if(g[r]){a=g[r];break}f.push(h)}}return a=(a||[]).concat(f.filter(u)),f.forEach((function(e){o.utils.getNodeFromTree(e)[r]=a})),a}var lD=function(e,t){if(e.getAttribute("headers")){var n=No(e,"headers");if(n.filter((function(e){return e})).length)return n}return t=t||Go(pr(e,"table")),e=iD("row",n=Wo(e,t),t),n=iD("col",n,t),[].concat(e,n).reverse()},sD=function(e){var t;return!(!e.children.length&&!e.textContent.trim())&&(t=e.getAttribute("role"),Vo(t)?["cell","gridcell"].includes(t):"TD"===e.nodeName.toUpperCase())},cD=function(e){var n=(e.getAttribute("role")||"").toLowerCase();if(("presentation"===n||"none"===n)&&!Qo(e))return!1;if("true"===e.getAttribute("contenteditable")||pr(e,'[contenteditable="true"]'))return!0;if("grid"===n||"treegrid"===n||"table"===n)return!0;if("landmark"===Bi(n))return!0;if("0"===e.getAttribute("datatable"))return!1;if(e.getAttribute("summary"))return!0;if(e.tHead||e.tFoot||e.caption)return!0;for(var a=0,r=e.children.length;a<r;a++)if("COLGROUP"===e.children[a].nodeName.toUpperCase())return!0;for(var o,u,i,l=0,s=e.rows.length,c=!1,d=0;d<s;d++)for(var p,f=0,D=(p=e.rows[d]).cells.length;f<D;f++){if("TH"===(o=p.cells[f]).nodeName.toUpperCase())return!0;if(c||o.offsetWidth===o.clientWidth&&o.offsetHeight===o.clientHeight||(c=!0),o.getAttribute("scope")||o.getAttribute("headers")||o.getAttribute("abbr"))return!0;if(["columnheader","rowheader"].includes((o.getAttribute("role")||"").toLowerCase()))return!0;if(1===o.children.length&&"ABBR"===o.children[0].nodeName.toUpperCase())return!0;l++}if(e.getElementsByTagName("table").length)return!1;if(s<2)return!1;if(1===(n=e.rows[Math.ceil(s/2)]).cells.length&&1===n.cells[0].colSpan)return!1;if(5<=n.cells.length)return!0;if(c)return!0;for(d=0;d<s;d++){if(p=e.rows[d],u&&u!==t.getComputedStyle(p).getPropertyValue("background-color"))return!0;if(u=t.getComputedStyle(p).getPropertyValue("background-color"),i&&i!==t.getComputedStyle(p).getPropertyValue("background-image"))return!0;i=t.getComputedStyle(p).getPropertyValue("background-image")}return 20<=s||!(Ir(e).width>.95*jr(t).width||l<10||e.querySelector("object, embed, iframe, applet"))},dD=function(e){return!(!Ko(e)&&!Xo(e))||!!e.getAttribute("id")&&(e=wn(e.getAttribute("id")),!!a.querySelector('[headers~="'.concat(e,'"]')))},pD=function(e,t,n,a){if(Array.isArray(t)&&(a=n,n=t,t={x:0,y:0}),"string"==typeof e)switch(e){case"left":e={x:-1,y:0};break;case"up":e={x:0,y:-1};break;case"right":e={x:1,y:0};break;case"down":e={x:0,y:1}}return function e(t,n,a,r){var o,u=a[n.y]?a[n.y][n.x]:void 0;return u?"function"==typeof r&&!0===(o=r(u,n,a))?[u]:((o=e(t,{x:n.x+t.x,y:n.y+t.y},a,r)).unshift(u),o):[]}(e,{x:t.x+e.x,y:t.y+e.y},n,a)};var fD=/[;,\\s]/,DD=/^[0-9.]+$/;function mD(e){return e=t.getComputedStyle(function(e){for(var t=e,n=e.textContent.trim(),a=n;a===n&&void 0!==t;){var r=-1;if(0===(e=t).children.length)return e;for(;r++,""===(a=e.children[r].textContent.trim())&&r+1<e.children.length;);t=e.children[r]}return e}(e)),{fontWeight:function(e){switch(e){case"lighter":return 100;case"normal":return 400;case"bold":return 700;case"bolder":return 900}return e=parseInt(e),isNaN(e)?400:e}(e.getPropertyValue("font-weight")),fontSize:parseInt(e.getPropertyValue("font-size")),isItalic:"italic"===e.getPropertyValue("font-style")}}function hD(e,t,n){return n.reduce((function(n,a){return n||(!a.size||e.fontSize/a.size>t.fontSize)&&(!a.weight||e.fontWeight-a.weight>t.fontWeight)&&(!a.italic||e.isItalic&&!t.isItalic)}),!1)}var gD=zp("landmark"),bD=["alert","log","status"];function vD(e){return"caption"===e.props.nodeName}qs=zr;var yD=function(e,t,n){return n.initiator};var FD={emoji:!0,nonBmp:!1,punctuations:!0};var wD=function(e,t){try{return"svg"===t.props.nodeName||!!ca(t,"svg")}catch(e){return!1}};var ED=function(e,t){var n=$o(t);return!(n&&!["none","presentation"].includes(n)&&!(Mo[n]||{}).accessibleNameRequired&&!Qo(t))};var CD=[function(e,t){return xD(t)},function(e,t){return"area"!==t.props.nodeName},function(e,t){return!wD(0,t)},function(e,t){return Qo(t)},function(e,t){return ki(t)||!AD(t)},function(e){return!Ri(e,{noLengthCompare:!0})}];function xD(e){return"widget"===Bi(e)}var AD=Dr((function e(t){return!(null==t||!t.parent)&&(!(!xD(t.parent)||!ki(t.parent))||e(t.parent))})),kD={"abstractrole-evaluate":function(e,t,n){return 0<(n=Gc(n.attr("role")).filter((function(e){return"abstract"===Bi(e)}))).length&&(this.data(n),!0)},"accesskeys-after":function(e){var t={};return e.filter((function(e){if(e.data){var n=e.data.toUpperCase();if(!t[n])return(t[n]=e).relatedNodes=[],!0;t[n].relatedNodes.push(e.relatedNodes[0])}return!1})).map((function(e){return e.result=!!e.relatedNodes.length,e}))},"accesskeys-evaluate":function(e,t,n){return _r(n)||(this.data(n.attr("accesskey")),this.relatedNodes([e])),!0},"alt-space-value-evaluate":function(e,t,n){return"string"==typeof(n=n.attr("alt"))&&/^\\s+$/.test(n)},"aria-allowed-attr-evaluate":function(e,t,n){var a,r=[],o=wu(n),u=Sp(o),i=(Array.isArray(t[o])&&(u=Zd(t[o].concat(u))),Q(n.attrNames));try{for(i.s();!(a=i.n()).done;){var l=a.value;af(l)&&!u.includes(l)&&r.push(l)}}catch(e){i.e(e)}finally{i.f()}return!r.length||(this.data(r.map((function(e){return e+'="'+n.attr(e)+'"'}))),!(o||Sd(n)||Qo(n))&&void 0)},"aria-allowed-attr-matches":function(e,t){var n=/^aria-/,a=t.attrNames;if(a.length)for(var r=0,o=a.length;r<o;r++)if(n.test(a[r]))return!0;return!1},"aria-allowed-role-evaluate":function(e){var t=2<arguments.length?arguments[2]:void 0,n=void 0===(n=(a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).allowImplicit)||n,a=void 0===(a=a.ignoredTags)?[]:a,r=t.props.nodeName;return!!a.map((function(e){return e.toLowerCase()})).includes(r)||!(a=qp(t,n)).length||(this.data(a),!Pu(t)&&void 0)},"aria-allowed-role-matches":function(e,t){return null!==$o(t,{dpub:!0,fallback:!0})},"aria-busy-evaluate":function(e,t,n){return"true"===n.attr("aria-busy")},"aria-conditional-attr-evaluate":function(e,t,n){var a=wu(n);return!uf[a]||uf[a].call(this,e,t,n)},"aria-conditional-checkbox-attr-evaluate":rf,"aria-conditional-row-attr-evaluate":of,"aria-errormessage-evaluate":function(e,t,n){t=Array.isArray(t)?t:[];var a=n.attr("aria-errormessage"),r=n.hasAttr("aria-errormessage"),o=n.attr("aria-invalid");return!n.hasAttr("aria-invalid")||"false"===o||-1!==t.indexOf(a)||!r||(this.data(Gc(a)),function(e){if(""===e.trim())return qo.ariaAttrs["aria-errormessage"].allowEmpty;var t;try{t=e&&No(n,"aria-errormessage")[0]}catch(t){return void this.data({messageKey:"idrefs",values:Gc(e)})}return t?Pu(t)?"alert"===t.getAttribute("role")||"assertive"===t.getAttribute("aria-live")||"polite"===t.getAttribute("aria-live")||-1<Gc(n.attr("aria-describedby")).indexOf(e):(this.data({messageKey:"hidden",values:Gc(e)}),!1):void 0}.call(this,a))},"aria-has-attr-matches":function(e,t){var n=/^aria-/;return t.attrNames.some((function(e){return n.test(e)}))},"aria-hidden-body-evaluate":function(e,t,n){return"true"!==n.attr("aria-hidden")},"aria-hidden-focus-matches":function(e){return function e(t){return!t||"true"!==t.getAttribute("aria-hidden")&&e(Mr(t))}(Mr(e))},"aria-label-evaluate":function(e,t,n){return!!Zo(Oo(n))},"aria-labelledby-evaluate":function(e,t,n){try{return!!Zo(_o(n))}catch(e){}},"aria-level-evaluate":function(e,t,n){if(n=n.attr("aria-level"),!(6<(n=parseInt(n,10))))return!0},"aria-prohibited-attr-evaluate":function(e){var t,n=2<arguments.length?arguments[2]:void 0,a=(null==(a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{})?void 0:a.elementsAllowedAriaLabel)||[],r=n.props.nodeName,o=wu(n,{chromium:!0});return 0!==(a=function(e,t,n){var a=qo.ariaRoles[e];return a?a.prohibitedAttrs||[]:e||n.includes(t)?[]:["aria-label","aria-labelledby"]}(o,r,a).filter((function(e){return!!n.attrNames.includes(e)&&""!==Zo(n.attr(e))}))).length&&(t=n.hasAttr("role")?"hasRole":"noRole",t+=1<a.length?"Plural":"Singular",this.data({role:o,nodeName:r,messageKey:t,prohibited:a}),o=Bu(n,{subtreeDescendant:!0}),""===Zo(o)||void 0)},"aria-required-attr-evaluate":function(e){var t,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},a=2<arguments.length?arguments[2]:void 0,r=$o(a),o=a.attrNames,u=Qp(r);return Array.isArray(n[r])&&(u=Zd(n[r],u)),!(r&&o.length&&u.length&&(n=a,"separator"!==r||Qo(n))&&(o=a,"combobox"!==r||"false"!==o.attr("aria-expanded"))&&(t=gu(a),(n=u.filter((function(e){return!(a.attr(e)||void 0!==(null==(n=(n=t).implicitAttrs)?void 0:n[e]));var n}))).length&&(this.data(n),1)))},"aria-required-children-evaluate":function(e,t,n){t=t&&Array.isArray(t.reviewEmpty)?t.reviewEmpty:[];var a,o,u=$o(n,{dpub:!0}),i=tf(u);return null===i||(a=(n=function(e,t){function n(e){if(1!==(e=r[e]).props.nodeType)return"continue";var n,o=wu(e,{noPresentational:!0}),u=(n=e,Uo().find((function(e){return n.hasAttr(e)}))),i=!!u||Qo(e);!o&&!i||["group","rowgroup"].includes(o)&&t.some((function(e){return e===o}))?r.push.apply(r,$(e.children)):(o||i)&&a.push({role:o,attr:u||"tabindex",ownedElement:e})}for(var a=[],r=Au(e).filter((function(e){return 1!==e.props.nodeType||Pu(e)})),o=0;o<r.length;o++)n(o);return{ownedRoles:a,ownedElements:r}}(n,i)).ownedRoles,n=n.ownedElements,(o=a.filter((function(e){return e=e.role,!i.includes(e)}))).length?(this.relatedNodes(o.map((function(e){return e.ownedElement}))),this.data({messageKey:"unallowed",values:o.map((function(e){var t=e.ownedElement,n=(e=e.attr,t.props),a=n.nodeName;return 3===n.nodeType?"#text":(n=$o(t,{dpub:!0}))?"[role=".concat(n,"]"):e?a+"[".concat(e,"]"):a})).filter((function(e,t,n){return n.indexOf(e)===t})).join(", ")}),!1):!(o=function(e,t){for(var n=0;n<t.length;n++){var a=function(n){var a=t[n].role;if(e.includes(a))return e=e.filter((function(e){return e!==a})),{v:null}}(n);if("object"===r(a))return a.v}return e.length?e:null}(i,a))||(this.data(o),!(!t.includes(u)||n.some(sf))&&void 0))},"aria-required-children-matches":function(e,t){return t=$o(t,{dpub:!0}),!!tf(t)},"aria-required-parent-evaluate":function(e,t,n){var a=t&&Array.isArray(t.ownGroupRoles)?t.ownGroupRoles:[],r=cf(n,a);if(!r)return!0;var o=function(e){for(var t,n=[];e;)e.getAttribute("id")&&(t=wn(e.getAttribute("id")),t=sr(e).querySelector("[aria-owns~=".concat(t,"]")))&&n.push(t),e=e.parentElement;return n.length?n:null}(e);if(o)for(var u=0,i=o.length;u<i;u++)if(!(r=cf(Xn(o[u]),a,r,!0)))return!0;return this.data(r),!1},"aria-required-parent-matches":function(e,t){return t=$o(t),!!ef(t)},"aria-roledescription-evaluate":function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=wu(2<arguments.length?arguments[2]:void 0);return!!(t.supportedRoles||[]).includes(n)||!(!n||"presentation"===n||"none"===n)&&void 0},"aria-unsupported-attr-evaluate":function(e,t,n){return!!(n=n.attrNames.filter((function(t){var n=qo.ariaAttrs[t];return!!af(t)&&(t=n.unsupported,"object"!==r(t)?!!t:!hu(e,t.exceptions))}))).length&&(this.data(n),!0)},"aria-valid-attr-evaluate":function(e,t,n){t=Array.isArray(t.value)?t.value:[];var a=[],r=/^aria-/;return n.attrNames.forEach((function(e){-1===t.indexOf(e)&&r.test(e)&&!af(e)&&a.push(e)})),!a.length||(this.data(a),!1)},"aria-valid-attr-value-evaluate":function(e,t,n){t=Array.isArray(t.value)?t.value:[];var a="",r="",u=[],i=/^aria-/,l=["aria-errormessage"],s={"aria-controls":function(){return"false"!==n.attr("aria-expanded")&&"false"!==n.attr("aria-selected")},"aria-current":function(e){e||(a='aria-current="'.concat(n.attr("aria-current"),'"'),r="ariaCurrent")},"aria-owns":function(){return"false"!==n.attr("aria-expanded")},"aria-describedby":function(e){e||(a='aria-describedby="'.concat(n.attr("aria-describedby"),'"'),r=o._tree&&o._tree[0]._hasShadowRoot?"noIdShadow":"noId")},"aria-labelledby":function(e){e||(a='aria-labelledby="'.concat(n.attr("aria-labelledby"),'"'),r=o._tree&&o._tree[0]._hasShadowRoot?"noIdShadow":"noId")}};return n.attrNames.forEach((function(e){if(!l.includes(e)&&!t.includes(e)&&i.test(e)){var o,c=n.attr(e);try{o=nf(n,e)}catch(o){return a="".concat(e,'="').concat(c,'"'),void(r="idrefs")}s[e]&&!s[e](o)||o||(""===c&&(o=e,"string"!==(null==(o=qo.ariaAttrs[e])?void 0:o.type))?(a=e,r="empty"):u.push("".concat(e,'="').concat(c,'"')))}})),u.length?(this.data(u),!1):!a||void this.data({messageKey:r,needsReview:a})},"attr-non-space-content-evaluate":function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=2<arguments.length?arguments[2]:void 0;if(t.attribute&&"string"==typeof t.attribute)return n.hasAttr(t.attribute)?(n=n.attr(t.attribute),!!Zo(n)||(this.data({messageKey:"emptyAttr"}),!1)):(this.data({messageKey:"noAttr"}),!1);throw new TypeError("attr-non-space-content requires options.attribute to be a string")},"autocomplete-appropriate-evaluate":function(e,t,n){var a,o,u;return"input"!==n.props.nodeName||(o={bday:["text","search","date"],email:["text","search","email"],username:["text","search","email"],"street-address":["text"],tel:["text","search","tel"],"tel-country-code":["text","search","tel"],"tel-national":["text","search","tel"],"tel-area-code":["text","search","tel"],"tel-local":["text","search","tel"],"tel-local-prefix":["text","search","tel"],"tel-local-suffix":["text","search","tel"],"tel-extension":["text","search","tel"],"cc-number":a=["text","search","number","tel"],"cc-exp":["text","search","month","tel"],"cc-exp-month":a,"cc-exp-year":a,"cc-csc":a,"transaction-amount":a,"bday-day":a,"bday-month":a,"bday-year":a,"new-password":["text","search","password"],"current-password":["text","search","password"],url:u=["text","search","url"],photo:u,impp:u},"object"===r(t)&&Object.keys(t).forEach((function(e){o[e]||(o[e]=[]),o[e]=o[e].concat(t[e])})),u=(a=n.attr("autocomplete").split(/\\s+/g).map((function(e){return e.toLowerCase()})))[a.length-1],!!oi.stateTerms.includes(u))||(a=o[u],u=n.hasAttr("type")?Zo(n.attr("type")).toLowerCase():"text",u=vp().includes(u)?u:"text",void 0===a?"text"===u:a.includes(u))},"autocomplete-matches":function(e,t){if(!(n=t.attr("autocomplete"))||""===Zo(n))return!1;if(n=t.props.nodeName,!1===["textarea","input","select"].includes(n))return!1;if("input"===n&&["submit","reset","button","hidden"].includes(t.props.type))return!1;if(n=t.attr("aria-disabled")||"false",t.hasAttr("disabled")||"true"===n.toLowerCase())return!1;var n=t.attr("role"),a=t.attr("tabindex");return("-1"!==a||!n||void 0!==(n=qo.ariaRoles[n])&&"widget"===n.type)&&!("-1"===a&&t.actualNode&&!zr(t)&&!Pu(t))},"autocomplete-valid-evaluate":function(e,t,n){return n=n.attr("autocomplete")||"",ui(n,t)},"avoid-inline-spacing-evaluate":function(e,t){return!(0<(t=t.cssProperties.filter((function(t){if("important"===e.style.getPropertyPriority(t))return t}))).length&&(this.data(t),1))},"bypass-matches":function(e,t,n){return!yD(0,0,n)||!!e.querySelector("a[href]")},"caption-evaluate":function(e,t,n){return!cp(n,"track").some((function(e){return"captions"===(e.attr("kind")||"").toLowerCase()}))&&void 0},"caption-faked-evaluate":function(e){var t=Go(e),n=t[0];return t.length<=1||n.length<=1||e.rows.length<=1||n.reduce((function(e,t,a){return e||t!==n[a+1]&&void 0!==n[a+1]}),!1)},"color-contrast-evaluate":function(e,n,a){var r=n.ignoreUnicode,o=n.ignoreLength,u=n.ignorePseudo,i=n.boldValue,l=n.boldTextPt,s=n.largeTextPt,c=n.contrastRatio,d=n.shadowOutlineEmMax,p=n.pseudoSizeThreshold;if(!zr(e))return this.data({messageKey:"hidden"}),!0;var f=ju(a,!1,!0);if(r&&(v=Ju(r=f,b={nonBmp:!0}),r=""===Zo(ai(r,b)),v)&&r)this.data({messageKey:"nonBmp"});else{var D,m,h,g,b=t.getComputedStyle(e),v=parseFloat(b.getPropertyValue("font-size"));r=b.getPropertyValue("font-weight"),i=parseFloat(r)>=i||"bold"===r,r=Math.ceil(72*v)/96,r=(l=i&&r<l||!i&&r<s?c.normal:c.large).expected,s=l.minThreshold,c=l.maxThreshold,l=function(e,t){var n=void 0===(n=t.pseudoSizeThreshold)?.25:n;if(!(t=void 0!==(t=t.ignorePseudo)&&t)){var a=(t=e.boundingClientRect).width*t.height*n;do{if(a<Pf(e.actualNode,":before")+Pf(e.actualNode,":after"))return e}while(e=e.parent)}}(a,{ignorePseudo:u,pseudoSizeThreshold:p});if(!l)return p=Sf(e,!(a=[]),u=Nf(e,a,d),n),m=D=n=null,0===(e=Cf(e,{minRatio:.001,maxRatio:d})).length?n=Of(u,p):p&&u&&(m=[].concat($(e),[u]).reduce(wf),d=Of(u,p),e=Of(u,m),h=Of(m,p),(n=Math.max(d,e,h))!==d)&&(D=h<e?"shadowOnBgColor":"fgOnShadowColor"),d=r<n,"number"==typeof s&&("number"!=typeof n||n<s)||"number"==typeof c&&("number"!=typeof n||c<n)?(this.data({contrastRatio:n}),!0):(h=Math.floor(100*n)/100,null===u?g=Pi.get("bgColor"):d||(g=D),e=1===f.length,(s=1==h)?g=Pi.set("bgColor","equalRatio"):d||!e||o||(g="shortTextContent"),this.data({fgColor:p?p.toHexString():void 0,bgColor:u?u.toHexString():void 0,contrastRatio:h,fontSize:"".concat((72*v/96).toFixed(1),"pt (").concat(v,"px)"),fontWeight:i?"bold":"normal",messageKey:g,expectedContrastRatio:r+":1",shadowColor:m?m.toHexString():void 0}),null===p||null===u||s||e&&!o&&!d?(g=null,Pi.clear(),void this.relatedNodes(a)):(d||this.relatedNodes(a),d));this.data({fontSize:"".concat((72*v/96).toFixed(1),"pt (").concat(v,"px)"),fontWeight:i?"bold":"normal",messageKey:"pseudoContent",expectedContrastRatio:r+":1"}),this.relatedNodes(l.actualNode)}},"color-contrast-matches":function(e,n){var r=(o=n.props).nodeName,o=o.type;if("option"!==r&&("select"!==r||e.options.length)&&!("input"===r&&["hidden","range","color","checkbox","radio","image"].includes(o)||rD(n)||io(n))){if(["input","select","textarea"].includes(r)){if(o=t.getComputedStyle(e),o=parseInt(o.getPropertyValue("text-indent"),10)){var u={top:(u=e.getBoundingClientRect()).top,bottom:u.bottom,left:u.left+o,right:u.right+o};if(!zc(u,e))return!1}return!0}if(o=dr(n,"label"),"label"===r||o){if(u=o||e,r=o?Xn(o):n,u.htmlFor&&(u=(o=sr(u).getElementById(u.htmlFor))&&Xn(o))&&rD(u))return!1;if((o=cp(r,'input:not([type="hidden"],[type="image"],[type="button"],[type="submit"],[type="reset"]), select, textarea')[0])&&rD(o))return!1}for(var i,l=[],s=n;s;)s.props.id&&(i=Pp(s).filter((function(e){return Gc(e.getAttribute("aria-labelledby")||"").includes(s.props.id)})).map((function(e){return Xn(e)})),l.push.apply(l,$(i))),s=s.parent;if(!(0<l.length&&l.every(rD))&&""!==(r=ju(u=n,!1,!0))&&""!==ai(r,FD)&&u.children.some((function(e){return"#text"===e.props.nodeName&&!Qu(e)}))){for(var c=a.createRange(),d=n.children,p=0;p<d.length;p++){var f=d[p];3===f.actualNode.nodeType&&""!==Zo(f.actualNode.nodeValue)&&c.selectNodeContents(f.actualNode)}for(var D=c.getClientRects(),m=0;m<D.length;m++)if(zc(D[m],e))return!0}}return!1},"css-orientation-lock-evaluate":function(e,t,n,a){a=void 0===(a=(a||{}).cssom)?void 0:a;var r=void 0===(t=(t||{}).degreeThreshold)?0:t;if(a&&a.length){function o(){var e=c[s],t=(e=l[e]).root;if(!(e=e.rules.filter(d)).length)return"continue";e.forEach((function(e){e=e.cssRules,Array.from(e).forEach((function(e){var n=function(e){var t=e.selectorText;e=e.style;return!(!t||e.length<=0)&&(!(!(t=e.transform||e.webkitTransform||e.msTransform||!1)&&!e.rotate)&&(t=function(e){return e&&(e=e.match(/(rotate|rotateZ|rotate3d|matrix|matrix3d)\\(([^)]+)\\)(?!.*(rotate|rotateZ|rotate3d|matrix|matrix3d))/))?p((e=G(e,3))[1],e=e[2]):0}(t),!!(t+=e=p("rotate",e.rotate))&&(t=Math.abs(t),!(Math.abs(t-180)%180<=r)&&Math.abs(t-90)%90<=r)))}(e);n&&"HTML"!==e.selectorText.toUpperCase()&&(e=Array.from(t.querySelectorAll(e.selectorText))||[],i=i.concat(e)),u=u||n}))}))}for(var u=!1,i=[],l=a.reduce((function(e,t){var n=t.sheet,a=t.root;return e[t=(t=t.shadowId)||"topDocument"]||(e[t]={root:a,rules:[]}),n&&n.cssRules&&(a=Array.from(n.cssRules),e[t].rules=e[t].rules.concat(a)),e}),{}),s=0,c=Object.keys(l);s<c.length;s++)o();return!u||(i.length&&this.relatedNodes(i),!1)}function d(e){var t=e.type;e=e.cssText;return 4===t&&(/orientation:\\s*landscape/i.test(e)||/orientation:\\s*portrait/i.test(e))}function p(e,t){switch(e){case"rotate":case"rotateZ":return f(t);case"rotate3d":var n=G(t.split(",").map((function(e){return e.trim()})),4),a=n[2];n=n[3];return 0===parseInt(a)?void 0:f(n);case"matrix":case"matrix3d":var r,o;return(a=(a=t).split(",")).length<=6?(r=(o=G(a,2))[0],o=o[1],D(Math.atan2(parseFloat(o),parseFloat(r)))):(o=parseFloat(a[8]),r=Math.asin(o),o=Math.cos(r),D(Math.acos(parseFloat(a[0])/o)));default:return 0}}function f(e){var t=G(e.match(/(deg|grad|rad|turn)/)||[],1)[0];if(!t)return 0;var n=parseFloat(e.replace(t,""));switch(t){case"rad":return D(n);case"grad":var a=n;return(a%=400)<0&&(a+=400),Math.round(a/400*360);case"turn":return Math.round(360/(1/n));default:return parseInt(n)}}function D(e){return Math.round(e*(180/Math.PI))}},"data-table-large-matches":function(e){return!!cD(e)&&3<=(e=Go(e)).length&&3<=e[0].length&&3<=e[1].length&&3<=e[2].length},"data-table-matches":function(e){return cD(e)},"deprecatedrole-evaluate":function(e,t,n){n=wu(n,{dpub:!0,fallback:!0});var a=qo.ariaRoles[n];return!(null==a||!a.deprecated||(this.data(n),0))},"dlitem-evaluate":function(e){var t=(e=Mr(e)).nodeName.toUpperCase(),n=$o(e);return"DIV"===t&&["presentation","none",null].includes(n)&&(t=(e=Mr(e)).nodeName.toUpperCase(),n=$o(e)),"DL"===t&&!(n&&!["presentation","none","list"].includes(n))},"doc-has-title-evaluate":function(){var e=a.title;return!!Zo(e)},"duplicate-id-active-matches":function(e){var t=e.getAttribute("id").trim();return t='*[id="'.concat(wn(t),'"]'),t=Array.from(sr(e).querySelectorAll(t)),!Kp(e)&&t.some(Qo)},"duplicate-id-after":function(e){var t=[];return e.filter((function(e){return-1===t.indexOf(e.data)&&(t.push(e.data),!0)}))},"duplicate-id-aria-matches":function(e){return Kp(e)},"duplicate-id-evaluate":function(e){var t,n=e.getAttribute("id").trim();return!n||(t=sr(e),(t=Array.from(t.querySelectorAll('[id="'.concat(wn(n),'"]'))).filter((function(t){return t!==e}))).length&&this.relatedNodes(t),this.data(n),0===t.length)},"duplicate-id-misc-matches":function(e){var t=e.getAttribute("id").trim();return t='*[id="'.concat(wn(t),'"]'),t=Array.from(sr(e).querySelectorAll(t)),!Kp(e)&&t.every((function(e){return!Qo(e)}))},"duplicate-img-label-evaluate":function(e,t,n){return!["none","presentation"].includes(wu(n))&&!!(t=ca(n,t.parentSelector))&&""!==(t=ju(t,!0).toLowerCase())&&t===ni(n).toLowerCase()},"exists-evaluate":function(){},"explicit-evaluate":function(e,t,n){var a=this;if(!n.attr("id"))return!1;if(n.actualNode){var r=sr(n.actualNode),o=wn(n.attr("id"));r=Array.from(r.querySelectorAll('label[for="'.concat(o,'"]')));if(this.relatedNodes(r),!r.length)return!1;try{return r.some((function(e){return!zr(e)||(e=Zo(Ro(e,{inControlContext:!0,startNode:n})),a.data({explicitLabel:e}),!!e)}))}catch(e){}}},"fallbackrole-evaluate":function(e,t,n){var a=Gc(n.attr("role"));return!(a.length<=1)&&(!(!bu(n)&&2===a.length&&a.includes("none")&&a.includes("presentation"))||void 0)},"focusable-content-evaluate":function(e,t,n){var a=n.tabbableElements;return!!a&&0<a.filter((function(e){return e!==n})).length},"focusable-disabled-evaluate":function(e,t,n){var a=["button","fieldset","input","select","textarea"];return!((n=n.tabbableElements)&&n.length&&(n=n.filter((function(e){return a.includes(e.props.nodeName)})),this.relatedNodes(n.map((function(e){return e.actualNode}))),0!==n.length)&&!_i())||!!n.every((function(e){var t=e.getComputedStylePropertyValue("pointer-events"),n=parseInt(e.getComputedStylePropertyValue("width")),a=parseInt(e.getComputedStylePropertyValue("height"));return e.actualNode.onfocus||(0===n||0===a)&&"none"===t}))&&void 0},"focusable-element-evaluate":function(e,t,n){return!(!n.hasAttr("contenteditable")||!function e(t){return"true"===(t=t.attr("contenteditable"))||""===t||"false"!==t&&(!!(t=ca(n.parent,"[contenteditable]"))&&e(t))}(n))||ki(n)},"focusable-modal-open-evaluate":function(e,t,n){return!(n=n.tabbableElements.map((function(e){return e.actualNode})))||!n.length||!_i()||void this.relatedNodes(n)},"focusable-no-name-evaluate":function(e,t,n){var a=n.attr("tabindex");if(!(Qo(n)&&-1<a))return!1;try{return!ni(n)}catch(e){}},"focusable-not-tabbable-evaluate":function(e,t,n){var a=["button","fieldset","input","select","textarea"];return!((n=n.tabbableElements)&&n.length&&(n=n.filter((function(e){return!a.includes(e.props.nodeName)})),this.relatedNodes(n.map((function(e){return e.actualNode}))),0!==n.length)&&!_i())||!!n.every((function(e){var t=e.getComputedStylePropertyValue("pointer-events"),n=parseInt(e.getComputedStylePropertyValue("width")),a=parseInt(e.getComputedStylePropertyValue("height"));return e.actualNode.onfocus||(0===n||0===a)&&"none"===t}))&&void 0},"frame-focusable-content-evaluate":function(e,t,n){if(n.children)try{return!n.children.some((function e(t){if(ki(t))return!0;if(!t.children){if(1===t.props.nodeType)throw new Error("Cannot determine children");return!1}return t.children.some((function(t){return e(t)}))}))}catch(e){}},"frame-focusable-content-matches":function(e,t,n){var a;return!n.initiator&&!n.focusable&&1<(null==(a=n.size)?void 0:a.width)*(null==(a=n.size)?void 0:a.height)},"frame-tested-after":function(e){var t={};return e.filter((function(e){var n;return"html"!==e.node.ancestry[e.node.ancestry.length-1]?(n=e.node.ancestry.flat(1/0).join(" > "),t[n]=e,!0):(n=e.node.ancestry.slice(0,e.node.ancestry.length-1).flat(1/0).join(" > "),t[n]&&(t[n].result=!0),!1)}))},"frame-tested-evaluate":function(e,t){return!t.isViolation&&void 0},"frame-title-has-text-matches":function(e){return e=e.getAttribute("title"),!!Zo(e)},"has-alt-evaluate":function(e,t,n){var a=n.props.nodeName;return!!["img","input","area"].includes(a)&&n.hasAttr("alt")},"has-descendant-after":function(e){return e.some((function(e){return!0===e.result}))&&e.forEach((function(e){e.result=!0})),e},"has-descendant-evaluate":function(e,t,n){if(t&&t.selector&&"string"==typeof t.selector)return!(!t.passForModal||!_i())||(n=ep(n,t.selector,Pu),this.relatedNodes(n.map((function(e){return e.actualNode}))),0<n.length);throw new TypeError("has-descendant requires options.selector to be a string")},"has-global-aria-attribute-evaluate":function(e,t,n){var a=Uo().filter((function(e){return n.hasAttr(e)}));return this.data(a),0<a.length},"has-implicit-chromium-role-matches":function(e,t){return null!==bu(t,{chromium:!0})},"has-lang-evaluate":function(e,t,n){var r=void 0!==a&&Nn(a);return t.attributes.includes("xml:lang")&&t.attributes.includes("lang")&&Gf(n.attr("xml:lang"))&&!Gf(n.attr("lang"))&&!r?(this.data({messageKey:"noXHTML"}),!1):!!t.attributes.some((function(e){return Gf(n.attr(e))}))||(this.data({messageKey:"noLang"}),!1)},"has-text-content-evaluate":function(e,t,n){try{return""!==Zo(Bu(n))}catch(e){}},"has-widget-role-evaluate":function(e){return null!==(e=e.getAttribute("role"))&&("widget"===(e=Bi(e))||"composite"===e)},"heading-matches":function(e,t){return"heading"===wu(t)},"heading-order-after":function(e){(t=$(t=e)).sort((function(e,t){return e=e.node,t=t.node,e.ancestry.length-t.ancestry.length}));var t,n=t.reduce(Qf,[]).filter((function(e){return-1!==e.level}));return e.forEach((function(e){e.result=function(e,t){var n=null!=(n=null==(n=t[e=eD(t,e.node.ancestry)])?void 0:n.level)?n:-1;t=null!=(t=null==(t=t[e-1])?void 0:t.level)?t:-1;return 0===e||(-1!==n?n-t<=1:void 0)}(e,n)})),e},"heading-order-evaluate":function(){var e,t=Kn.get("headingOrder");return t||(t=(e=ep(o._tree[0],"h1, h2, h3, h4, h5, h6, [role=heading], iframe, frame",Pu)).map((function(e){return{ancestry:[Gn(e.actualNode)],level:(t=(t=wu(e))&&t.includes("heading"),n=e.attr("aria-level"),a=parseInt(n,10),e=G(e.props.nodeName.match(/h(\\d)/)||[],2)[1],t?e&&!n?parseInt(e,10):isNaN(a)||a<1?e?parseInt(e,10):2:a||-1:-1)};var t,n,a})),this.data({headingOrder:t}),Kn.set("headingOrder",e)),!0},"help-same-as-label-evaluate":function(e,t,n){n=si(n);var a=e.getAttribute("title");return!!n&&(a||(a="",e.getAttribute("aria-describedby")&&(a=No(e,"aria-describedby").map((function(e){return e?Ro(e):""})).join(""))),Zo(a)===Zo(n))},"hidden-content-evaluate":function(e,n,a){if(!["SCRIPT","HEAD","TITLE","NOSCRIPT","STYLE","TEMPLATE"].includes(e.nodeName.toUpperCase())&&vi(a)){if("none"===(a=t.getComputedStyle(e)).getPropertyValue("display"))return;if("hidden"===a.getPropertyValue("visibility")&&(!(e=(a=Mr(e))&&t.getComputedStyle(a))||"hidden"!==e.getPropertyValue("visibility")))return}return!0},"hidden-explicit-label-evaluate":function(e,t,n){if(n.hasAttr("id")){if(!n.actualNode)return;var a,r=sr(e);e=wn(e.getAttribute("id"));if((r=r.querySelector('label[for="'.concat(e,'"]')))&&!Pu(r)){try{a=ni(n).trim()}catch(e){return}return""===a}}return!1},"html-namespace-matches":function(e,t){return!wD(0,t)},"html5-scope-evaluate":function(e){return!Ai(a)||"TH"===e.nodeName.toUpperCase()},"identical-links-same-purpose-after":function(e){if(e.length<2)return e;function t(e){var t=n[e],u=t.data,i=u.name,l=u.urlProps;if(o[i])return"continue";var s=(u=n.filter((function(t,n){return t.data.name===i&&n!==e}))).every((function(e){return function e(t,n){var a,o;return!(!t||!n)&&(a=Object.getOwnPropertyNames(t),o=Object.getOwnPropertyNames(n),a.length===o.length)&&a.every((function(a){var o=t[a];a=n[a];return r(o)===r(a)&&("object"===r(o)||"object"===r(a)?e(o,a):o===a)}))}(e.data.urlProps,l)}));u.length&&!s&&(t.result=void 0),t.relatedNodes=[],(s=t.relatedNodes).push.apply(s,$(u.map((function(e){return e.relatedNodes[0]})))),o[i]=u,a.push(t)}for(var n=e.filter((function(e){return void 0!==e.result})),a=[],o={},u=0;u<n.length;u++)t(u);return a},"identical-links-same-purpose-evaluate":function(e,t,n){if(n=To.accessibleTextVirtual(n),n=To.sanitize(To.removeUnicode(n,{emoji:!0,nonBmp:!0,punctuations:!0})).toLowerCase())return n={name:n,urlProps:ir.urlPropsFromAttribute(e,"href")},this.data(n),this.relatedNodes([e]),!0},"identical-links-same-purpose-matches":function(e,t){return!(!ni(t)||(t=wu(e))&&"link"!==t)},"implicit-evaluate":function(e,t,n){try{var a,r=ca(n,"label");return!!r&&(a=Zo(ni(r,{inControlContext:!0,startNode:n})),r.actualNode&&this.relatedNodes([r.actualNode]),this.data({implicitLabel:a}),!!a)}catch(e){}},"inline-style-property-evaluate":function(e,n){var a=n.cssProperty,r=n.absoluteValues,o=n.minValue,u=n.maxValue,i=void 0===(i=n.normalValue)?0:i,l=n.noImportant;n=n.multiLineOnly;return!!(!l&&"important"!==e.style.getPropertyPriority(a)||n&&!Oi(e))||(l={},"number"==typeof o&&(l.minValue=o),"number"==typeof u&&(l.maxValue=u),n=e.style.getPropertyValue(a),["inherit","unset","revert","revert-layer"].includes(n)?(this.data(U({value:n},l)),!0):(n=function(e,n){var a=n.cssProperty,r=n.absoluteValues;n=n.normalValue;return"normal"===(a=(e=t.getComputedStyle(e)).getPropertyValue(a))?n:(n=parseFloat(a),r?n:(r=parseFloat(e.getPropertyValue("font-size")),e=Math.round(n/r*100)/100,isNaN(e)?a:e))}(e,{absoluteValues:r,cssProperty:a,normalValue:i}),this.data(U({value:n},l)),"number"==typeof n?("number"!=typeof o||o<=n)&&("number"!=typeof u||n<=u):void 0))},"inserted-into-focus-order-matches":function(e){return wi(e)},"internal-link-present-evaluate":function(e,t,n){return cp(n,"a[href]").some((function(e){return/^#[^/!]/.test(e.attr("href"))}))},"invalid-children-evaluate":function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=2<arguments.length?arguments[2]:void 0,a=[],r=[];if(n.children){for(var o=Wf(n.children);o.length;){var u=(i=o.shift()).vChild,i=i.nested;if(t.divGroups&&!i&&"div"===(l=u).props.nodeName&&null===$o(l)){if(!u.children)return;var l=Wf(u.children,!0);o.push.apply(o,$(l))}else l=function(e,t,n){var a=void 0===(a=n.validRoles)?[]:a,r=(n=void 0===(n=n.validNodeNames)?[]:n,(u=e.props).nodeName),o=u.nodeType,u=u.nodeValue;t=t?"div > ":"";return 3===o&&""!==u.trim()?t+"#text":!(1!==o||!Pu(e))&&((u=$o(e))?!a.includes(u)&&t+"[role=".concat(u,"]"):!n.includes(r)&&t+r)}(u,i,t),l&&(r.includes(l)||r.push(l),1===(null==u||null==(i=u.actualNode)?void 0:i.nodeType))&&a.push(u.actualNode)}return 0!==r.length&&(this.data({values:r.join(", ")}),this.relatedNodes(a),!0)}},"invalidrole-evaluate":function(e,t,n){return!!(n=Gc(n.attr("role"))).every((function(e){return!Vo(e,{allowAbstract:!0})}))&&(this.data(n),!0)},"is-element-focusable-evaluate":function(e,t,n){return Qo(n)},"is-initiator-matches":yD,"is-on-screen-evaluate":qs,"is-visible-matches":zr,"is-visible-on-screen-matches":function(e,t){return zr(t)},"label-content-name-mismatch-evaluate":function(e,t,n){var a=null==t?void 0:t.pixelThreshold,r=null!=(r=null==t?void 0:t.occurrenceThreshold)?r:null==t?void 0:t.occuranceThreshold;if(t=Ro(e).toLowerCase(),!(ri(t)<1))return!(e=Zo(Bu(n,{subtreeDescendant:!0,ignoreIconLigature:!0,pixelThreshold:a,occurrenceThreshold:r})).toLowerCase())||(ri(e)<1?!!Hf(e,t)||void 0:Hf(e,t))},"label-content-name-mismatch-matches":function(e,t){var n=wu(e);return!!(n&&zp("widget").includes(n)&&$p().includes(n)&&(Zo(Oo(t))||Zo(_o(e)))&&Zo(ju(t)))},"label-matches":function(e,t){return"input"!==t.props.nodeName||!1===t.hasAttr("type")||(t=t.attr("type").toLowerCase(),!1===["hidden","image","button","submit","reset"].includes(t))},"landmark-has-body-context-matches":function(e,t){return e.hasAttribute("role")||!dr(t,"article, aside, main, nav, section")},"landmark-is-top-level-evaluate":function(e){var t=zp("landmark"),n=Mr(e),a=wu(e);for(this.data({role:a});n;){var r=n.getAttribute("role");if((r=r||"FORM"===n.nodeName.toUpperCase()?r:bu(n))&&t.includes(r)&&("main"!==r||"complementary"!==a))return!1;n=Mr(n)}return!0},"landmark-is-unique-after":function(e){var t=[];return e.filter((function(e){var n=t.find((function(t){return e.data.role===t.data.role&&e.data.accessibleText===t.data.accessibleText}));return n?(n.result=!1,n.relatedNodes.push(e.relatedNodes[0]),!1):(t.push(e),e.relatedNodes=[],!0)}))},"landmark-is-unique-evaluate":function(e,t,n){var a=wu(e);return n=(n=ni(n))?n.toLowerCase():null,this.data({role:a,accessibleText:n}),this.relatedNodes([e]),!0},"landmark-unique-matches":function(e,t){var n,a,r,o=["article","aside","main","nav","section"].join(",");return n=t.actualNode,a=zp("landmark"),!!(r=wu(n))&&("HEADER"===(n=n.nodeName.toUpperCase())||"FOOTER"===n?!ca(t,o):"SECTION"===n||"FORM"===n?!!ni(t):0<=a.indexOf(r)||"region"===r)&&Pu(e)},"layout-table-matches":function(e){return!cD(e)&&!Qo(e)},"link-in-text-block-evaluate":function(e,t){var n=t.requiredContrastRatio;if(t=t.allowSameColor,qf(e))return!1;for(var a=Mr(e);a&&1===a.nodeType&&!qf(a);)a=Mr(a);if(a){this.relatedNodes([a]);var r=Sf(e),o=Sf(a),u=(e=Nf(e),Nf(a)),i=r&&o?jf(r,o):void 0;if((i=i&&Math.floor(100*i)/100)&&n<=i)return!0;var l=e&&u?jf(e,u):void 0;if((l=l&&Math.floor(100*l)/100)&&n<=l)return!0;if(l){if(i)return!(!t||1!==i||1!==l)||(1===i&&1<l?this.data({messageKey:"bgContrast",contrastRatio:l,requiredContrastRatio:n,nodeBackgroundColor:e?e.toHexString():void 0,parentBackgroundColor:u?u.toHexString():void 0}):this.data({messageKey:"fgContrast",contrastRatio:i,requiredContrastRatio:n,nodeColor:r?r.toHexString():void 0,parentColor:o?o.toHexString():void 0}),!1)}else l=null!=(t=Pi.get("bgColor"))?t:"bgContrast",this.data({messageKey:l}),Pi.clear()}},"link-in-text-block-matches":function(e){var t=Zo(e.innerText),n=e.getAttribute("role");return!(n&&"link"!==n||!t||!zr(e))&&Ri(e)},"link-in-text-block-style-evaluate":function(e){if(Vf(e))return!1;for(var n=Mr(e);n&&1===n.nodeType&&!Vf(n);)n=Mr(n);return n?(this.relatedNodes([n]),!!hf(e,n)||!!function(e){for(var n=0,a=["before","after"];n<a.length;n++){var r=a[n];if("none"!==t.getComputedStyle(e,":".concat(r)).getPropertyValue("content"))return 1}}(e)&&void this.data({messageKey:"pseudoContent"})):void 0},"listitem-evaluate":function(e,t,n){var a;if(n=n.parent)return a=n.props.nodeName,n=$o(n),!!["presentation","none","list"].includes(n)||(n&&Vo(n)?(this.data({messageKey:"roleNotValid"}),!1):["ul","ol","menu"].includes(a))},"matches-definition-evaluate":function(e,t,n){return hu(n,t.matcher)},"meta-refresh-evaluate":function(e,t,n){var a=(r=t||{}).minDelay,r=r.maxDelay;return!(n=G((n.attr("content")||"").trim().split(fD),1)[0]).match(DD)||(n=parseFloat(n),this.data({redirectDelay:n}),"number"==typeof a&&n<=t.minDelay)||"number"==typeof r&&n>t.maxDelay},"meta-viewport-scale-evaluate":function(e,t,n){var a,r=void 0===(r=(t=t||{}).scaleMinimum)?2:r;return t=void 0!==(t=t.lowerBound)&&t,!((n=n.attr("content")||"")&&(n=n.split(/[;,]/).reduce((function(e,t){var n;return(t=t.trim())&&(n=(t=G(t.split("="),2))[0],t=t[1],n)&&t&&(n=n.toLowerCase().trim(),t=t.toLowerCase().trim(),"maximum-scale"===n&&"yes"===t&&(t=1),"maximum-scale"===n&&parseFloat(t)<0||(e[n]=t)),e}),{}),!(t&&n["maximum-scale"]&&parseFloat(n["maximum-scale"])<t))&&(t||"no"!==n["user-scalable"]?(a=parseFloat(n["user-scalable"]),!t&&n["user-scalable"]&&(a||0===a)&&-1<a&&a<1?(this.data("user-scalable"),1):n["maximum-scale"]&&parseFloat(n["maximum-scale"])<r&&(this.data("maximum-scale"),1)):(this.data("user-scalable=no"),1)))},"multiple-label-evaluate":function(e){var t=wn(e.getAttribute("id")),n=e.parentNode,a=(a=sr(e)).documentElement||a,r=Array.from(a.querySelectorAll('label[for="'.concat(t,'"]')));for(r.length&&(r=r.filter((function(e){return!_r(e)})));n;)"LABEL"===n.nodeName.toUpperCase()&&-1===r.indexOf(n)&&r.push(n),n=n.parentNode;return this.relatedNodes(r),1<r.length&&(1<(a=r.filter(Pu)).length||!No(e,"aria-labelledby").includes(a[0]))&&void 0},"nested-interactive-matches":function(e,t){return!!(t=wu(t))&&!!qo.ariaRoles[t].childrenPresentational},"no-autoplay-audio-evaluate":function(e,t){var n,a;if(e.duration)return t=void 0===(t=t.allowedDuration)?3:t,((n=e).currentSrc?(a=function(e){if(e=e.match(/#t=(.*)/))return G(e,2)[1].split(",").map((function(e){if(/:/.test(e)){for(var t=e.split(":"),n=0,a=1;0<t.length;)n+=a*parseInt(t.pop(),10),a*=60;return parseFloat(n)}return parseFloat(e)}))}(n.currentSrc))?1!==a.length?Math.abs(a[1]-a[0]):Math.abs(n.duration-a[0]):Math.abs(n.duration-(n.currentTime||0)):0)<=t&&!e.hasAttribute("loop")||!!e.hasAttribute("controls");console.warn("axe.utils.preloadMedia did not load metadata")},"no-autoplay-audio-matches":function(e){return!!e.currentSrc&&!e.hasAttribute("paused")&&!e.hasAttribute("muted")},"no-empty-role-matches":function(e,t){return!!t.hasAttr("role")&&!!t.attr("role").trim()},"no-explicit-name-required-matches":ED,"no-focusable-content-evaluate":function(e,t,n){if(n.children)try{var a,r=function e(t){if(!t.children){if(1===t.props.nodeType)throw new Error("Cannot determine children");return[]}var n=[];return t.children.forEach((function(t){"widget"===Bi(t)&&Qo(t)?n.push(t):n.push.apply(n,$(e(t)))})),n}(n);return!r.length||(0<(a=r.filter($f)).length?(this.data({messageKey:"notHidden"}),this.relatedNodes(a)):this.relatedNodes(r),!1)}catch(e){}},"no-implicit-explicit-label-evaluate":function(e,t,n){var a,r,o=wu(n,{noImplicit:!0});this.data(o);try{a=Zo(Tu(n)).toLowerCase(),r=Zo(ni(n)).toLowerCase()}catch(e){return}return!(!r&&!a||(r||!a)&&r.includes(a))&&void 0},"no-naming-method-matches":function(e,t){var n=gu(t).namingMethods;return!(n&&0!==n.length||"combobox"===$o(t)&&cp(t,'input:not([type="hidden"])').length||Xp(t,{popupRoles:["listbox"]}))},"no-negative-tabindex-matches":function(e,t){return t=parseInt(t.attr("tabindex"),10),isNaN(t)||0<=t},"no-role-matches":function(e,t){return!t.attr("role")},"non-empty-if-present-evaluate":function(e,t,n){var a=n.props.nodeName,r=(n.attr("type")||"").toLowerCase();return(n=n.attr("value"))&&this.data({messageKey:"has-label"}),!("input"!==a||!["submit","reset"].includes(r))&&null===n},"not-html-matches":function(e,t){return"html"!==t.props.nodeName},"object-is-loaded-matches":function(e,t){return[ED,function(e){var t;return null==e||null==(t=e.ownerDocument)||!t.createRange||((t=e.ownerDocument.createRange()).setStart(e,0),t.setEnd(e,e.childNodes.length),0===t.getClientRects().length)}].every((function(n){return n(e,t)}))},"only-dlitems-evaluate":function(e,t,n){var a=["definition","term","list"];return(n=n.children.reduce((function(e,t){var n=t.actualNode;return"DIV"===n.nodeName.toUpperCase()&&null===wu(n)?e.concat(t.children):e.concat(t)}),[]).reduce((function(e,t){var n,r=(t=t.actualNode).nodeName.toUpperCase();return 1===t.nodeType&&Pu(t)?(n=$o(t),("DT"!==r&&"DD"!==r||n)&&!a.includes(n)&&e.badNodes.push(t)):3===t.nodeType&&""!==t.nodeValue.trim()&&(e.hasNonEmptyTextNode=!0),e}),{badNodes:[],hasNonEmptyTextNode:!1})).badNodes.length&&this.relatedNodes(n.badNodes),!!n.badNodes.length||n.hasNonEmptyTextNode},"only-listitems-evaluate":function(e,t,n){var a=!1,r=!1,o=!0,u=[],i=[],l=[];if(n.children.forEach((function(e){var t,n,s=e.actualNode;3===s.nodeType&&""!==s.nodeValue.trim()?a=!0:1===s.nodeType&&Pu(s)&&(o=!1,t="LI"===s.nodeName.toUpperCase(),n="listitem"===(e=wu(e)),t||n||u.push(s),t&&!n&&(i.push(s),l.includes(e)||l.push(e)),n)&&(r=!0)})),a||u.length)this.relatedNodes(u);else{if(o||r)return!1;this.relatedNodes(i),this.data({messageKey:"roleNotValid",roles:l.join(", ")})}return!0},"p-as-heading-evaluate":function(e,t,n){var a=(u=Array.from(e.parentNode.children)).indexOf(e),r=(t=t||{}).margins||[],o=u.slice(a+1).find((function(e){return"P"===e.nodeName.toUpperCase()})),u=u.slice(0,a).reverse().find((function(e){return"P"===e.nodeName.toUpperCase()})),i=(a=mD(e),o?mD(o):null),l=(u=u?mD(u):null,t.passLength);return t=t.failLength,e=e.textContent.trim().length,(o=null==o?void 0:o.textContent.trim().length)*l<e||!i||!hD(a,i,r)||!!((l=dr(n,"blockquote"))&&"BLOCKQUOTE"===l.nodeName.toUpperCase()||u&&!hD(a,u,r)||o*t<e)&&void 0},"p-as-heading-matches":function(e){var t=Array.from(e.parentNode.childNodes),n=e.textContent.trim();return!(0===n.length||2<=(n.match(/[.!?:;](?![.!?:;])/g)||[]).length)&&0!==t.slice(t.indexOf(e)+1).filter((function(e){return"P"===e.nodeName.toUpperCase()&&""!==e.textContent.trim()})).length},"page-no-duplicate-after":function(e){return e.filter((function(e){return"ignored"!==e.data}))},"page-no-duplicate-evaluate":function(e,t,n){if(!t||!t.selector||"string"!=typeof t.selector)throw new TypeError("page-no-duplicate requires options.selector to be a string");var a="page-no-duplicate;"+t.selector;if(!Kn.get(a))return Kn.set(a,!0),a=ep(o._tree[0],t.selector,Pu),"string"==typeof t.nativeScopeFilter&&(a=a.filter((function(e){return e.actualNode.hasAttribute("role")||!dr(e,t.nativeScopeFilter)}))),this.relatedNodes(a.filter((function(e){return e!==n})).map((function(e){return e.actualNode}))),a.length<=1;this.data("ignored")},"presentation-role-conflict-matches":function(e,t){return null!==bu(t,{chromiumRoles:!0})},"presentational-role-evaluate":function(e,t,n){var a=$o(n);if(["presentation","none"].includes(a)&&["iframe","frame"].includes(n.props.nodeName)&&n.hasAttr("title"))this.data({messageKey:"iframe",nodeName:n.props.nodeName});else{var r,o=wu(n);if(["presentation","none"].includes(o))return this.data({role:o}),!0;["presentation","none"].includes(a)&&(a=Uo().some((function(e){return n.hasAttr(e)})),r=Qo(n),this.data({messageKey:a&&!r?"globalAria":!a&&r?"focusable":"both",role:o}))}return!1},"region-after":function(e){var t=e.filter((function(e){return e.data.isIframe}));return e.forEach((function(e){if(!e.result&&1!==e.node.ancestry.length){var n,a=e.node.ancestry.slice(0,-1),r=Q(t);try{for(r.s();!(n=r.n()).done;){var o=n.value;if(Id(a,o.node.ancestry)){e.result=o.result;break}}}catch(e){r.e(e)}finally{r.f()}}})),t.forEach((function(e){e.result||(e.result=!0)})),e},"region-evaluate":function(e,t,n){return this.data({isIframe:["iframe","frame"].includes(n.props.nodeName)}),!Kn.get("regionlessNodes",(function(){return function e(t,n){var r=t.actualNode;if("button"===wu(t)||function(e,t){var n=e.actualNode,a=wu(e);return n=(n.getAttribute("aria-live")||"").toLowerCase().trim(),!!(["assertive","polite"].includes(n)||bD.includes(a)||gD.includes(a)||t.regionMatcher&&hu(e,t.regionMatcher))}(t,n)||["iframe","frame"].includes(t.props.nodeName)||Tc(t.actualNode)&&ho(t.actualNode,"href")||!Pu(r)){for(var o=t;o;)o._hasRegionDescendant=!0,o=o.parent;return["iframe","frame"].includes(t.props.nodeName)?[t]:[]}return r!==a.body&&yi(r,!0)?[t]:t.children.filter((function(e){return 1===(e=e.actualNode).nodeType})).map((function(t){return e(t,n)})).reduce((function(e,t){return e.concat(t)}),[])}(o._tree[0],t).map((function(e){for(;e.parent&&!e.parent._hasRegionDescendant&&e.parent.actualNode!==a.body;)e=e.parent;return e})).filter((function(e,t,n){return n.indexOf(e)===t}))})).includes(n)},"same-caption-summary-evaluate":function(e,t,n){var a;if(void 0!==n.children)return a=n.attr("summary"),!(!(n=!!(n=n.children.find(vD))&&Zo(Bu(n)))||!a)&&Zo(a).toLowerCase()===Zo(n).toLowerCase()},"scope-value-evaluate":function(e,t){return e=e.getAttribute("scope").toLowerCase(),-1!==t.values.indexOf(e)},"scrollable-region-focusable-matches":function(e,t){return void 0!==Ad(e,13)&&!1===Xp(t)&&cp(t,"*").some((function(e){return vi(e,!0,!0)}))},"skip-link-evaluate":function(e){return!!(e=ho(e,"href"))&&(Pu(e)||void 0)},"skip-link-matches":function(e){return Tc(e)&&Lr(e)},"structured-dlitems-evaluate":function(e,t,n){var a=n.children;if(!a||!a.length)return!1;for(var r,o=!1,u=!1,i=0;i<a.length;i++){if((o="DT"===(r=a[i].props.nodeName.toUpperCase())||o)&&"DD"===r)return!1;"DD"===r&&(u=!0)}return o||u},"svg-namespace-matches":wD,"svg-non-empty-title-evaluate":function(e,t,n){if(n.children){if(n=n.children.find((function(e){return"title"===e.props.nodeName})),!n)return this.data({messageKey:"noTitle"}),!1;try{if(""===Bu(n,{includeHidden:!0}).trim())return this.data({messageKey:"emptyTitle"}),!1}catch(e){return}return!0}},"tabindex-evaluate":function(e,t,n){return n=parseInt(n.attr("tabindex"),10),!!isNaN(n)||n<=0},"table-or-grid-role-matches":function(e,t){return t=wu(t),["treegrid","grid","table"].includes(t)},"target-offset-evaluate":function(e,t,n){var a,r,o=(null==t?void 0:t.minOffset)||24,u=[],i=o,l=Q(ao(n,o));try{for(l.s();!(a=l.n()).done;){var s,c=a.value;"widget"===Bi(c)&&Qo(c)&&(r=yo(n,c),o<=.05+(s=Math.round(10*r)/10)||(i=Math.min(i,s),u.push(c)))}}catch(e){l.e(e)}finally{l.f()}return 0===u.length?(this.data({closestOffset:i,minOffset:o}),!0):(this.relatedNodes(u.map((function(e){return e.actualNode}))),u.some(ki)?(this.data({closestOffset:i,minOffset:o}),!ki(n)&&void 0):void this.data({messageKey:"nonTabbableNeighbor",closestOffset:i,minOffset:o}))},"target-size-evaluate":function(e,t,n){t=(null==t?void 0:t.minSize)||24;var a,r,o=n.boundingClientRect,u=Zf.bind(null,t),i=ao(n),l=(a=n,i.filter((function(e){return!Yf(e,a)&&Xf(a,e)}))),s=(i=function(e,t){var n,a=[],r=[],o=Q(t);try{for(o.s();!(n=o.n()).done;){var u=n.value;!Xf(e,u)&&wo(e,u)&&"none"!==u.getComputedStylePropertyValue("pointer-events")&&(Yf(e,u)?a:r).push(u)}}catch(e){o.e(e)}finally{o.f()}return{fullyObscuringElms:a,partialObscuringElms:r}}(n,i)).fullyObscuringElms;i=i.partialObscuringElms;return s.length&&!l.length?(this.relatedNodes(Jf(s)),this.data({messageKey:"obscured"}),!0):(r=!ki(n)&&void 0,u(o)||l.length?(i=function(e,t){return e=e.boundingClientRect,0===t.length?null:(t=t.map((function(e){return e.boundingClientRect})),function(e,t){return e.reduce((function(e,n){var a=Zf(t,e);return a!==Zf(t,n)?a?e:n:(a=e.width*e.height,n.width*n.height<a?e:n)}))}(Eo(e,t)))}(n,n=i.filter((function(e){return"widget"===Bi(e)&&Qo(e)}))),!l.length||!s.length&&u(i||o)?0===n.length||u(i)?(this.data(U({minSize:t},Kf(i||o))),this.relatedNodes(Jf(n)),!0):(s=n.every(ki),u="partiallyObscured".concat(s?"":"NonTabbable"),this.data(U({messageKey:u,minSize:t},Kf(i))),this.relatedNodes(Jf(n)),s?r:void 0):(this.data({minSize:t,messageKey:"contentOverflow"}),void this.relatedNodes(Jf(l)))):(this.data(U({minSize:t},Kf(o))),r))},"td-has-header-evaluate":function(e){var t=[],n=uD(e),a=Go(e);return n.forEach((function(e){yi(e)&&sD(e)&&!Jp(e)&&!lD(e,a).some((function(e){return null!==e&&!!yi(e)}))&&t.push(e)})),!t.length||(this.relatedNodes(t),!1)},"td-headers-attr-evaluate":function(e){for(var t=[],n=[],a=[],r=0;r<e.rows.length;r++)for(var o=e.rows[r],u=0;u<o.cells.length;u++)t.push(o.cells[u]);var i=t.reduce((function(e,t){return t.getAttribute("id")&&e.push(t.getAttribute("id")),e}),[]);return t.forEach((function(e){var t,r=!1;if(e.hasAttribute("headers")&&Pu(e))return(t=e.getAttribute("headers").trim())?void(0!==(t=Gc(t)).length&&(e.getAttribute("id")&&(r=-1!==t.indexOf(e.getAttribute("id").trim())),t=t.some((function(e){return!i.includes(e)})),r||t)&&a.push(e)):n.push(e)})),0<a.length?(this.relatedNodes(a),!1):!n.length||void this.relatedNodes(n)},"th-has-data-cells-evaluate":function(e){var t=uD(e),n=this,a=[],r=(t=(t.forEach((function(e){var t;(t=((t=e.getAttribute("headers"))&&(a=a.concat(t.split(/\\s+/))),e.getAttribute("aria-labelledby")))&&(a=a.concat(t.split(/\\s+/)))})),t.filter((function(e){return""!==Zo(e.textContent)&&("TH"===e.nodeName.toUpperCase()||-1!==["rowheader","columnheader"].indexOf(e.getAttribute("role")))}))),Go(e)),o=!0;return t.forEach((function(e){var t,u;e.getAttribute("id")&&a.includes(e.getAttribute("id"))||(t=Wo(e,r),u=!1,(u=!(u=Ko(e)?pD("down",t,r).find((function(t){return!Ko(t)&&lD(t,r).includes(e)})):u)&&Xo(e)?pD("right",t,r).find((function(t){return!Xo(t)&&lD(t,r).includes(e)})):u)||n.relatedNodes(e),o=o&&u)})),!!o||void 0},"title-only-evaluate":function(e,t,n){var a=si(n),r=Cu(n);return n=n.attr("aria-describedby"),!(a||!r&&!n)},"unique-frame-title-after":function(e){var t={};return e.forEach((function(e){t[e.data]=void 0!==t[e.data]?++t[e.data]:0})),e.forEach((function(e){e.result=!!t[e.data]})),e},"unique-frame-title-evaluate":function(e,t,n){return n=Zo(n.attr("title")).toLowerCase(),this.data(n),!0},"unsupportedrole-evaluate":function(e,t,n){n=wu(n,{dpub:!0,fallback:!0});var a=zo(n);return a&&this.data(n),a},"valid-lang-evaluate":function(e,t,n){var a=[];return t.attributes.forEach((function(e){var r,o,u=n.attr(e);"string"==typeof u&&(r=nd(u),o=t.value?!t.value.map(nd).includes(r):!Ep(r),""!==r&&o||""!==u&&!Zo(u))&&a.push(e+'="'+n.attr(e)+'"')})),!!a.length&&!("html"!==n.props.nodeName&&!Fi(n)||(this.data(a),0))},"valid-scrollable-semantics-evaluate":function(e,t){return(n=$o(n=e))&&(pf[n]||t.roles.includes(n))||(t=(t=e).nodeName.toUpperCase(),df[t])||!1;var n},"widget-not-inline-matches":function(e,t){return CD.every((function(n){return n(e,t)}))},"window-is-top-matches":function(e){return e.ownerDocument.defaultView.self===e.ownerDocument.defaultView.top},"xml-lang-mismatch-evaluate":function(e,t,n){return nd(n.attr("lang"))===nd(n.attr("xml:lang"))},"xml-lang-mismatch-matches":function(e){var t=nd(e.getAttribute("lang"));e=nd(e.getAttribute("xml:lang"));return Ep(t)&&Ep(e)}},BD=function(e){this.id=e.id,this.data=null,this.relatedNodes=[],this.result=null};function TD(e){if("string"!=typeof e)return e;if(kD[e])return kD[e];if(/^\\s*function[\\s\\w]*\\(/.test(e))return new Function("return "+e+";")();throw new ReferenceError("Function ID does not exist in the metadata-function-map: ".concat(e))}function ND(e){var t=0<arguments.length&&void 0!==e?e:{};return Array.isArray(t)||"object"!==r(t)?{value:t}:t}function RD(e){e&&(this.id=e.id,this.configure(e))}RD.prototype.enabled=!0,RD.prototype.run=function(e,t,n,a,r){var o=((t=t||{}).hasOwnProperty("enabled")?t:this).enabled,u=this.getOptions(t.options);if(o){var i;o=new BD(this),t=Qn(o,t,a,r);try{i=this.evaluate.call(t,e.actualNode,u,e,n)}catch(t){return e&&e.actualNode&&(t.errorNode=new Jn(e).toJSON()),void r(t)}t.isAsync||(o.result=i,a(o))}else a(null)},RD.prototype.runSync=function(e,t,n){if(!(void 0===(r=(t=t||{}).enabled)?this.enabled:r))return null;var a,r=this.getOptions(t.options),o=new BD(this);(t=Qn(o,t)).async=function(){throw new Error("Cannot run async check while in a synchronous run")};try{a=this.evaluate.call(t,e.actualNode,r,e,n)}catch(t){throw e&&e.actualNode&&(t.errorNode=new Jn(e).toJSON()),t}return o.result=a,o},RD.prototype.configure=function(e){var t=this;e.evaluate&&!kD[e.evaluate]||(this._internalCheck=!0),e.hasOwnProperty("enabled")&&(this.enabled=e.enabled),e.hasOwnProperty("options")&&(this._internalCheck?this.options=ND(e.options):this.options=e.options),["evaluate","after"].filter((function(t){return e.hasOwnProperty(t)})).forEach((function(n){return t[n]=TD(e[n])}))},RD.prototype.getOptions=function(e){return this._internalCheck?ar(this.options,ND(e||{})):e||this.options};var _D=RD,OD=function(e){this.id=e.id,this.result=tn.NA,this.pageLevel=e.pageLevel,this.impact=null,this.nodes=[]};function SD(e,t){this._audit=t,this.id=e.id,this.selector=e.selector||"*",e.impact&&(yn(tn.impact.includes(e.impact),"Impact ".concat(e.impact," is not a valid impact")),this.impact=e.impact),this.excludeHidden="boolean"!=typeof e.excludeHidden||e.excludeHidden,this.enabled="boolean"!=typeof e.enabled||e.enabled,this.pageLevel="boolean"==typeof e.pageLevel&&e.pageLevel,this.reviewOnFail="boolean"==typeof e.reviewOnFail&&e.reviewOnFail,this.any=e.any||[],this.all=e.all||[],this.none=e.none||[],this.tags=e.tags||[],this.preload=!!e.preload,this.actIds=e.actIds,e.matches&&(this.matches=TD(e.matches))}function MD(e){var t,n;if(e.length)return t=!1,n={},e.forEach((function(e){var a=e.results.filter((function(e){return e}));(n[e.type]=a).length&&(t=!0)})),t?n:null}SD.prototype.matches=function(){return!0},SD.prototype.gather=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n="mark_gather_start_"+this.id,a="mark_gather_end_"+this.id,r="mark_isVisibleToScreenReaders_start_"+this.id,o="mark_isVisibleToScreenReaders_end_"+this.id,u=(t.performanceTimer&&Yd.mark(n),mp(this.selector,e));return this.excludeHidden&&(t.performanceTimer&&Yd.mark(r),u=u.filter(Pu),t.performanceTimer)&&(Yd.mark(o),Yd.measure("rule_"+this.id+"#gather_axe.utils.isVisibleToScreenReaders",r,o)),t.performanceTimer&&(Yd.mark(a),Yd.measure("rule_"+this.id+"#gather",n,a)),u},SD.prototype.runChecks=function(e,t,n,a,r,o){var u=this,i=ha();this[e].forEach((function(e){var r=u._audit.checks[e.id||e],o=dd(r,u.id,n);i.defer((function(e,n){r.run(t,o,a,e,n)}))})),i.then((function(t){t=t.filter((function(e){return e})),r({type:e,results:t})})).catch(o)},SD.prototype.runChecksSync=function(e,t,n,a){var r=this,o=[];return this[e].forEach((function(e){e=r._audit.checks[e.id||e];var u=dd(e,r.id,n);o.push(e.runSync(t,u,a))})),{type:e,results:o=o.filter((function(e){return e}))}},SD.prototype.run=function(e){var t,n=this,a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=2<arguments.length?arguments[2]:void 0,o=3<arguments.length?arguments[3]:void 0,i=(a.performanceTimer&&this._trackPerformance(),ha()),l=new OD(this);try{t=this.gatherAndMatchNodes(e,a)}catch(t){return void o(new u({cause:t,ruleId:this.id}))}a.performanceTimer&&this._logGatherPerformance(t),t.forEach((function(t){i.defer((function(r,o){var u=ha();["any","all","none"].forEach((function(r){u.defer((function(o,u){n.runChecks(r,t,a,e,o,u)}))})),u.then((function(e){var o=MD(e);o&&(o.node=new Jn(t,a),l.nodes.push(o),n.reviewOnFail)&&(["any","all"].forEach((function(e){o[e].forEach((function(e){!1===e.result&&(e.result=void 0)}))})),o.none.forEach((function(e){!0===e.result&&(e.result=void 0)}))),r()})).catch((function(e){return o(e)}))}))})),i.defer((function(e){return setTimeout(e,0)})),a.performanceTimer&&this._logRulePerformance(),i.then((function(){return r(l)})).catch((function(e){return o(e)}))},SD.prototype.runSync=function(e){var t,n=this,a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=(a.performanceTimer&&this._trackPerformance(),new OD(this));try{t=this.gatherAndMatchNodes(e,a)}catch(t){throw new u({cause:t,ruleId:this.id})}return a.performanceTimer&&this._logGatherPerformance(t),t.forEach((function(t){var o=[],u=(["any","all","none"].forEach((function(r){o.push(n.runChecksSync(r,t,a,e))})),MD(o));u&&(u.node=t.actualNode?new Jn(t,a):null,r.nodes.push(u),n.reviewOnFail)&&(["any","all"].forEach((function(e){u[e].forEach((function(e){!1===e.result&&(e.result=void 0)}))})),u.none.forEach((function(e){!0===e.result&&(e.result=void 0)})))})),a.performanceTimer&&this._logRulePerformance(),r},SD.prototype._trackPerformance=function(){this._markStart="mark_rule_start_"+this.id,this._markEnd="mark_rule_end_"+this.id,this._markChecksStart="mark_runchecks_start_"+this.id,this._markChecksEnd="mark_runchecks_end_"+this.id},SD.prototype._logGatherPerformance=function(e){nn("gather (",e.length,"):",Yd.timeElapsed()+"ms"),Yd.mark(this._markChecksStart)},SD.prototype._logRulePerformance=function(){Yd.mark(this._markChecksEnd),Yd.mark(this._markEnd),Yd.measure("runchecks_"+this.id,this._markChecksStart,this._markChecksEnd),Yd.measure("rule_"+this.id,this._markStart,this._markEnd)},SD.prototype.gatherAndMatchNodes=function(e,t){var n=this,a="mark_matches_start_"+this.id,r="mark_matches_end_"+this.id,o=this.gather(e,t);return t.performanceTimer&&Yd.mark(a),o=o.filter((function(t){return n.matches(t.actualNode,t,e)})),t.performanceTimer&&(Yd.mark(r),Yd.measure("rule_"+this.id+"#matches",a,r)),o},SD.prototype.after=function(e,t){var n,a,r,o=this,u=Za(n=this).map((function(e){return(e=n._audit.checks[e.id||e])&&"function"==typeof e.after?e:null})).filter(Boolean),i=this.id;return u.forEach((function(n){u=e.nodes,a=n.id,r=[],u.forEach((function(e){Za(e).forEach((function(t){t.id===a&&(t.node=e.node,r.push(t))}))}));var a,r,u=r,l=dd(n,i,t),s=n.after(u,l);o.reviewOnFail&&s.forEach((function(e){var t=(o.any.includes(e.id)||o.all.includes(e.id))&&!1===e.result,n=o.none.includes(e.id)&&!0===e.result;(t||n)&&(e.result=void 0)})),u.forEach((function(e){delete e.node,-1===s.indexOf(e)&&(e.filtered=!0)}))})),e.nodes=(a=["any","all","none"],r=(u=e).nodes.filter((function(e){var t=0;return a.forEach((function(n){e[n]=e[n].filter((function(e){return!0!==e.filtered})),t+=e[n].length})),0<t})),r=u.pageLevel&&r.length?[r.reduce((function(e,t){if(e)return a.forEach((function(n){e[n].push.apply(e[n],t[n])})),e}))]:r),e},SD.prototype.configure=function(e){e.hasOwnProperty("selector")&&(this.selector=e.selector),e.hasOwnProperty("excludeHidden")&&(this.excludeHidden="boolean"!=typeof e.excludeHidden||e.excludeHidden),e.hasOwnProperty("enabled")&&(this.enabled="boolean"!=typeof e.enabled||e.enabled),e.hasOwnProperty("pageLevel")&&(this.pageLevel="boolean"==typeof e.pageLevel&&e.pageLevel),e.hasOwnProperty("reviewOnFail")&&(this.reviewOnFail="boolean"==typeof e.reviewOnFail&&e.reviewOnFail),e.hasOwnProperty("any")&&(this.any=e.any),e.hasOwnProperty("all")&&(this.all=e.all),e.hasOwnProperty("none")&&(this.none=e.none),e.hasOwnProperty("tags")&&(this.tags=e.tags),e.hasOwnProperty("actIds")&&(this.actIds=e.actIds),e.hasOwnProperty("matches")&&(this.matches=TD(e.matches)),e.impact&&(yn(tn.impact.includes(e.impact),"Impact ".concat(e.impact," is not a valid impact")),this.impact=e.impact)};var PD=SD,ID=re(Xt()),jD=/\\{\\{.+?\\}\\}/g;function LD(){return t.origin&&"null"!==t.origin?t.origin:t.location&&t.location.origin&&"null"!==t.location.origin?t.location.origin:void 0}function qD(e,t,n){for(var a=0,r=e.length;a<r;a++)t[n](e[a])}function zD(e){K(this,zD),this.lang="en",this.defaultConfig=e,this.standards=qo,this._init(),this._defaultLocale=null}function VD(e,t,n){return n.performanceTimer&&Yd.mark("mark_rule_start_"+e.id),function(a,r){e.run(t,n,(function(e){a(e)}),(function(t){n.debug?r(t):(t=Object.assign(new OD(e),{result:tn.CANTTELL,description:"An error occured while running this rule",message:t.message,stack:t.stack,error:t,errorNode:t.errorNode}),a(t))}))}}function $D(e,t,n){var a=e.brand,r=e.application;e=e.lang;return tn.helpUrlBase+a+"/"+(n||o.version.substring(0,o.version.lastIndexOf(".")))+"/"+t+"?application="+encodeURIComponent(r)+(e&&"en"!==e?"&lang="+encodeURIComponent(e):"")}Z(zD,[{key:"_setDefaultLocale",value:function(){if(!this._defaultLocale){for(var e={checks:{},rules:{},failureSummaries:{},incompleteFallbackMessage:"",lang:this.lang},t=Object.keys(this.data.checks),n=0;n<t.length;n++){var a=t[n],r=(u=this.data.checks[a].messages).pass,o=u.fail,u=u.incomplete;e.checks[a]={pass:r,fail:o,incomplete:u}}for(var i=Object.keys(this.data.rules),l=0;l<i.length;l++){var s=i[l],c=(d=this.data.rules[s]).description,d=d.help;e.rules[s]={description:c,help:d}}for(var p=Object.keys(this.data.failureSummaries),f=0;f<p.length;f++){var D=p[f],m=this.data.failureSummaries[D].failureMessage;e.failureSummaries[D]={failureMessage:m}}e.incompleteFallbackMessage=this.data.incompleteFallbackMessage,this._defaultLocale=e}}},{key:"_resetLocale",value:function(){var e=this._defaultLocale;e&&this.applyLocale(e)}},{key:"_applyCheckLocale",value:function(e){for(var t,n,a,o=Object.keys(e),u=0;u<o.length;u++){var i=o[u];if(!this.data.checks[i])throw new Error('Locale provided for unknown check: "'.concat(i,'"'));this.data.checks[i]=(t=this.data.checks[i],a=n=void 0,n=(i=e[i]).pass,a=i.fail,"string"==typeof n&&jD.test(n)&&(n=ID.default.compile(n)),"string"==typeof a&&jD.test(a)&&(a=ID.default.compile(a)),U({},t,{messages:{pass:n||t.messages.pass,fail:a||t.messages.fail,incomplete:"object"===r(t.messages.incomplete)?U({},t.messages.incomplete,i.incomplete):i.incomplete}}))}}},{key:"_applyRuleLocale",value:function(e){for(var t,n,a=Object.keys(e),r=0;r<a.length;r++){var o=a[r];if(!this.data.rules[o])throw new Error('Locale provided for unknown rule: "'.concat(o,'"'));this.data.rules[o]=(t=this.data.rules[o],n=void 0,n=(o=e[o]).help,o=o.description,"string"==typeof n&&jD.test(n)&&(n=ID.default.compile(n)),"string"==typeof o&&jD.test(o)&&(o=ID.default.compile(o)),U({},t,{help:n||t.help,description:o||t.description}))}}},{key:"_applyFailureSummaries",value:function(e){for(var t=Object.keys(e),n=0;n<t.length;n++){var a=t[n];if(!this.data.failureSummaries[a])throw new Error('Locale provided for unknown failureMessage: "'.concat(a,'"'));this.data.failureSummaries[a]=function(e,t){return U({},e,{failureMessage:(t="string"==typeof(t=t.failureMessage)&&jD.test(t)?ID.default.compile(t):t)||e.failureMessage})}(this.data.failureSummaries[a],e[a])}}},{key:"applyLocale",value:function(e){var t,n;this._setDefaultLocale(),e.checks&&this._applyCheckLocale(e.checks),e.rules&&this._applyRuleLocale(e.rules),e.failureSummaries&&this._applyFailureSummaries(e.failureSummaries,"failureSummaries"),e.incompleteFallbackMessage&&(this.data.incompleteFallbackMessage=(t=this.data.incompleteFallbackMessage,(n="string"==typeof(n=e.incompleteFallbackMessage)&&jD.test(n)?ID.default.compile(n):n)||t)),e.lang&&(this.lang=e.lang)}},{key:"setAllowedOrigins",value:function(e){var t,n=LD(),a=(this.allowedOrigins=[],Q(e));try{for(a.s();!(t=a.n()).done;){var r=t.value;if(r===tn.allOrigins)return void(this.allowedOrigins=["*"]);r!==tn.sameOrigin?this.allowedOrigins.push(r):n&&this.allowedOrigins.push(n)}}catch(e){a.e(e)}finally{a.f()}}},{key:"_init",value:function(){(t=this.defaultConfig)?(e=ea(t)).commons=t.commons:e={},e.reporter=e.reporter||null,e.noHtml=e.noHtml||!1,e.allowedOrigins||(t=LD(),e.allowedOrigins=t?[t]:[]),e.rules=e.rules||[],e.checks=e.checks||[],e.data=U({checks:{},rules:{}},e.data);var e,t=e;this.lang=t.lang||"en",this.reporter=t.reporter,this.commands={},this.rules=[],this.checks={},this.brand="axe",this.application="axeAPI",this.tagExclude=["experimental"],this.noHtml=t.noHtml,this.allowedOrigins=t.allowedOrigins,qD(t.rules,this,"addRule"),qD(t.checks,this,"addCheck"),this.data={},this.data.checks=t.data&&t.data.checks||{},this.data.rules=t.data&&t.data.rules||{},this.data.failureSummaries=t.data&&t.data.failureSummaries||{},this.data.incompleteFallbackMessage=t.data&&t.data.incompleteFallbackMessage||"",this._constructHelpUrls()}},{key:"registerCommand",value:function(e){this.commands[e.id]=e.callback}},{key:"addRule",value:function(e){e.metadata&&(this.data.rules[e.id]=e.metadata);var t=this.getRule(e.id);t?t.configure(e):this.rules.push(new PD(e,this))}},{key:"addCheck",value:function(e){var t=e.metadata;"object"===r(t)&&(this.data.checks[e.id]=t,"object"===r(t.messages))&&Object.keys(t.messages).filter((function(e){return t.messages.hasOwnProperty(e)&&"string"==typeof t.messages[e]})).forEach((function(e){0===t.messages[e].indexOf("function")&&(t.messages[e]=new Function("return "+t.messages[e]+";")())})),this.checks[e.id]?this.checks[e.id].configure(e):this.checks[e.id]=new _D(e)}},{key:"run",value:function(e,t,n,a){this.normalizeOptions(t),o._selectCache=[],i=this.rules,r=e,u=t;var r,u,i=i.reduce((function(e,t){return pp(t,r,u)&&(t.preload?e.later:e.now).push(t),e}),{now:[],later:[]}),l=i.now,s=i.later,c=ha();l.forEach((function(n){c.defer(VD(n,e,t))})),i=ha();(l=(s.length&&i.defer((function(e){ip(t).then((function(t){return e(t)})).catch((function(t){console.warn("Couldn't load preload assets: ",t),e(void 0)}))})),ha())).defer(c),l.defer(i),l.then((function(r){var u,i=r.pop(),l=(i&&i.length&&(i=i[0])&&(e=U({},e,i)),r[0]);s.length?(u=ha(),s.forEach((function(n){n=VD(n,e,t),u.defer(n)})),u.then((function(e){o._selectCache=void 0,n(l.concat(e).filter((function(e){return!!e})))})).catch(a)):(o._selectCache=void 0,n(l.filter((function(e){return!!e}))))})).catch(a)}},{key:"after",value:function(e,t){var n=this.rules;return e.map((function(e){var a=Ja(n,"id",e.id);if(a)return a.after(e,t);throw new Error("Result for unknown rule. You may be running mismatch axe-core versions")}))}},{key:"getRule",value:function(e){return this.rules.find((function(t){return t.id===e}))}},{key:"normalizeOptions",value:function(e){var t=[],n=[];if(this.rules.forEach((function(e){n.push(e.id),e.tags.forEach((function(e){t.includes(e)||t.push(e)}))})),["object","string"].includes(r(e.runOnly))){if("string"==typeof e.runOnly&&(e.runOnly=[e.runOnly]),Array.isArray(e.runOnly)){var a=e.runOnly.find((function(e){return t.includes(e)})),u=e.runOnly.find((function(e){return n.includes(e)}));if(a&&u)throw new Error("runOnly cannot be both rules and tags");e.runOnly=u?{type:"rule",values:e.runOnly}:{type:"tag",values:e.runOnly}}if((a=e.runOnly).value&&!a.values&&(a.values=a.value,delete a.value),!Array.isArray(a.values)||0===a.values.length)throw new Error("runOnly.values must be a non-empty array");if(["rule","rules"].includes(a.type))a.type="rule",a.values.forEach((function(e){if(!n.includes(e))throw new Error("unknown rule \`"+e+"\` in options.runOnly")}));else{if(!["tag","tags",void 0].includes(a.type))throw new Error("Unknown runOnly type '".concat(a.type,"'"));a.type="tag",u=a.values.filter((function(e){return!t.includes(e)&&!/wcag2[1-3]a{1,3}/.test(e)})),0!==u.length&&o.log("Could not find tags \`"+u.join("\`, \`")+"\`")}}return"object"===r(e.rules)&&Object.keys(e.rules).forEach((function(e){if(!n.includes(e))throw new Error("unknown rule \`"+e+"\` in options.rules")})),e}},{key:"setBranding",value:function(e){var t={brand:this.brand,application:this.application};"string"==typeof e&&(this.application=e),e&&e.hasOwnProperty("brand")&&e.brand&&"string"==typeof e.brand&&(this.brand=e.brand),e&&e.hasOwnProperty("application")&&e.application&&"string"==typeof e.application&&(this.application=e.application),this._constructHelpUrls(t)}},{key:"_constructHelpUrls",value:function(){var e=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null,n=(o.version.match(/^[1-9][0-9]*\\.[0-9]+/)||["x.y"])[0];this.rules.forEach((function(a){e.data.rules[a.id]||(e.data.rules[a.id]={});var r=e.data.rules[a.id];("string"!=typeof r.helpUrl||t&&r.helpUrl===$D(t,a.id,n))&&(r.helpUrl=$D(e,a.id,n))}))}},{key:"resetRulesAndChecks",value:function(){this._init(),this._resetLocale()}}]);var HD=zD;function UD(){Kn.get("globalDocumentSet")&&(Kn.set("globalDocumentSet",!1),a=null),Kn.get("globalWindowSet")&&(Kn.set("globalWindowSet",!1),t=null)}var GD=function(){UD(),o._memoizedFns.forEach((function(e){return e.clear()})),Kn.clear(),o._tree=void 0,o._selectorData=void 0,o._selectCache=void 0},WD=function(e,t,n,a){try{e=new Ed(e),o._tree=e.flatTree,o._selectorData=qn(e.flatTree)}catch(r){return GD(),a(r)}var r=ha(),u=o._audit;t.performanceTimer&&Yd.auditStart(),e.frames.length&&!1!==t.iframes&&r.defer((function(n,a){tr(e,t,"rules",null,n,a)})),r.defer((function(n,a){u.run(e,t,n,a)})),r.then((function(r){try{t.performanceTimer&&Yd.auditEnd();var o=er(r.map((function(e){return{results:e}})));e.initiator&&((o=u.after(o,t)).forEach(sp),o=o.map(mn));try{n(o,GD)}catch(r){GD(),nn(r)}}catch(r){GD(),a(r)}})).catch((function(e){GD(),a(e)}))};function YD(e){this._run=e.run,this._collect=e.collect,this._registry={},e.commands.forEach((function(e){o._audit.registerCommand(e)}))}function KD(e){var t,n=(e=G(e,3))[0],u=e[1],i=(e=e[2],new TypeError("axe.run arguments are invalid"));if(!md(t=n)&&!hd(t)){if(void 0!==e)throw i;e=u,u=n,n=a}if("object"!==r(u)){if(void 0!==e)throw i;e=u,u={}}if("function"!=typeof e&&void 0!==e)throw i;return(u=ea(u)).reporter=null!=(t=null!=(t=u.reporter)?t:null==(i=o._audit)?void 0:i.reporter)?t:"v1",{context:n,options:u,callback:e}}t.top!==t&&(Ga.subscribe("axe.start",(function(e,t,n){function r(e){e instanceof Error==0&&(e=new Error(e)),n(e)}var u=n,i=e&&e.context||{},l=(i.hasOwnProperty("include")&&!i.include.length&&(i.include=[a]),e&&e.options||{});switch(e.command){case"rules":return WD(i,l,(function(e,t){u(e),t()}),r);case"cleanup-plugin":return Tp(u,r);default:if(o._audit&&o._audit.commands&&o._audit.commands[e.command])return o._audit.commands[e.command](e,n)}})),Ga.subscribe("axe.ping",(function(e,t,n){n({axe:!0})}))),YD.prototype.run=function(){return this._run.apply(this,arguments)},YD.prototype.collect=function(){return this._collect.apply(this,arguments)},YD.prototype.cleanup=function(e){var t=o.utils.queue(),n=this;Object.keys(this._registry).forEach((function(e){t.defer((function(t){n._registry[e].cleanup(t)}))})),t.then(e)},YD.prototype.add=function(e){this._registry[e.id]=e};var XD=function(){};function ZD(e){var t=e.node,n=V(e,y);n.node=t.toJSON();for(var a=0,r=["any","all","none"];a<r.length;a++){var o=r[a];n[o]=n[o].map((function(e){var t=e.relatedNodes;return U({},V(e,F),{relatedNodes:t.map((function(e){return e.toJSON()}))})}))}return n}var JD=function(e,t,n){if("function"==typeof t&&(n=t,t={}),!e||!Array.isArray(e))return n(e);n(e.map((function(e){for(var t=U({},e),n=0,a=["passes","violations","incomplete","inapplicable"];n<a.length;n++){var r=a[n];t[r]&&Array.isArray(t[r])&&(t[r]=t[r].map((function(e){var t,n=e.node;e=V(e,C);return U({node:n="function"==typeof(null==(t=n)?void 0:t.toJSON)?n.toJSON():n},e)})))}return t})))};Vs={base:{Audit:HD,CheckResult:BD,Check:_D,Context:Ed,RuleResult:OD,Rule:PD,metadataFunctionMap:kD},public:{reporters:Np},helpers:{failureSummary:ad,incompleteFallbackMessage:rd,processAggregate:ud},utils:{setDefaultFrameMessenger:Ha,cacheNodeSelectors:Jc,getNodesMatchingExpression:Yc,convertSelector:ia},commons:{dom:{nativelyHidden:yr,displayHidden:Fr,visibilityHidden:wr,contentVisibiltyHidden:Er,ariaHidden:Cr,opacityHidden:xr,scrollHidden:Ar,overflowHidden:kr,clipHidden:Br,areaHidden:Tr,detailsHidden:Nr}}};o._thisWillBeDeletedDoNotUse=Vs,o.constants=tn,o.log=nn,o.AbstractVirtualNode=on,o.SerialVirtualNode=Bp,o.VirtualNode=Uc,o._cache=Kn,o.imports=Po,o.cleanup=Tp,o.configure=function(e){var t=o._audit;if(!t)throw new Error("No audit configured");if(e.axeVersion||e.ver){var n=e.axeVersion||e.ver;if(!/^\\d+\\.\\d+\\.\\d+(-canary)?/.test(n))throw new Error("Invalid configured version ".concat(n));var a=(r=G(n.split("-"),2))[0],r=r[1],u=(a=G(a.split(".").map(Number),3))[0],i=a[1],l=(a=a[2],(s=G(o.version.split("-"),2))[0]),s=s[1],c=(l=G(l.split(".").map(Number),3))[0],d=l[1];l=l[2];if(u!==c||d<i||d===i&&l<a||u===c&&i===d&&a===l&&r&&r!==s)throw new Error("Configured version ".concat(n," is not compatible with current axe version ").concat(o.version))}if(e.reporter&&("function"==typeof e.reporter||Rp(e.reporter))&&(t.reporter=e.reporter),e.checks){if(!Array.isArray(e.checks))throw new TypeError("Checks property must be an array");e.checks.forEach((function(e){if(!e.id)throw new TypeError("Configured check ".concat(JSON.stringify(e)," is invalid. Checks must be an object with at least an id property"));t.addCheck(e)}))}var p,f=[];if(e.rules){if(!Array.isArray(e.rules))throw new TypeError("Rules property must be an array");e.rules.forEach((function(e){if(!e.id)throw new TypeError("Configured rule ".concat(JSON.stringify(e)," is invalid. Rules must be an object with at least an id property"));f.push(e.id),t.addRule(e)}))}if(e.disableOtherRules&&t.rules.forEach((function(e){!1===f.includes(e.id)&&(e.enabled=!1)})),void 0!==e.branding?t.setBranding(e.branding):t._constructHelpUrls(),e.tagExclude&&(t.tagExclude=e.tagExclude),e.locale&&t.applyLocale(e.locale),e.standards&&(p=e.standards,Object.keys(Lo).forEach((function(e){p[e]&&(Lo[e]=ar(Lo[e],p[e]))}))),e.noHtml&&(t.noHtml=!0),e.allowedOrigins){if(!Array.isArray(e.allowedOrigins))throw new TypeError("Allowed origins property must be an array");if(e.allowedOrigins.includes("*"))throw new Error('"*" is not allowed. Use "'.concat(tn.allOrigins,'" instead'));t.setAllowedOrigins(e.allowedOrigins)}},o.frameMessenger=function(e){Ga.updateMessenger(e)},o.getRules=function(e){var t=(e=e||[]).length?o._audit.rules.filter((function(t){return!!e.filter((function(e){return-1!==t.tags.indexOf(e)})).length})):o._audit.rules,n=o._audit.data.rules||{};return t.map((function(e){var t=n[e.id]||{};return{ruleId:e.id,description:t.description,help:t.help,helpUrl:t.helpUrl,tags:e.tags,actIds:e.actIds}}))},o._load=function(e){o._audit=new HD(e)},o.plugins={},o.registerPlugin=function(e){o.plugins[e.id]=new YD(e)},o.hasReporter=Rp,o.getReporter=_p,o.addReporter=function(e,t,n){Np[e]=t,n&&(xp=t)},o.reset=function(){var e=o._audit;if(!e)throw new Error("No audit configured");e.resetRulesAndChecks(),Object.keys(Lo).forEach((function(e){Lo[e]=jo[e]}))},o._runRules=WD,o.runVirtualRule=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},a=(n.reporter=n.reporter||o._audit.reporter||"v1",o._selectorData={},t instanceof on||(t=new Bp(t)),xd(e));if(a)return a=(a=Object.create(a,{excludeHidden:{value:!1}})).runSync({initiator:!0,include:[t],exclude:[],frames:[],page:!1,focusable:!0,size:{},flatTree:[]},n),sp(a),mn(a),(a=bn([a])).violations.forEach((function(e){return e.nodes.forEach((function(e){e.failureSummary=ad(e)}))})),U({},pd(),a,{toolOptions:n});throw new Error("unknown rule \`"+e+"\`")},o.run=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var u=n[0],i=!!a;if(!(c=t&&"Node"in t&&"NodeList"in t)||!i){if(!u||!u.ownerDocument)throw new Error('Required "window" or "document" globals not defined and cannot be deduced from the context. Either set the globals before running or pass in a valid Element.');i||(Kn.set("globalDocumentSet",!0),a=u.ownerDocument),c||(Kn.set("globalWindowSet",!0),t=a.defaultView)}u=(i=KD(n)).context;var l=i.options,s=void 0===(c=i.callback)?XD:c,c=(i=function(e){var t,n,a;return"function"==typeof Promise&&e===XD?t=new Promise((function(e,t){n=t,a=e})):a=n=XD,{thenable:t,reject:n,resolve:a}}(s)).thenable,d=i.resolve,p=i.reject;try{yn(o._audit,"No audit configured"),yn(!o._running,"Axe is already running. Use \`await axe.run()\` to wait for the previous run to finish before starting a new run.")}catch(e){i=e;var f=s;if(UD(),"function"!=typeof f||f===XD)throw i;return void f(i.message)}return o._running=!0,l.performanceTimer&&o.utils.performanceTimer.start(),o._runRules(u,l,(function(e,t){l.performanceTimer&&o.utils.performanceTimer.end();try{var n=e,a=l,r=function(e){o._running=!1,t();try{s(null,e)}catch(e){o.log(e)}d(e)};void 0!==(n=_p(a.reporter)(n,a,r))&&r(n)}catch(e){o._running=!1,t(),s(e),p(e)}}),(function(e){l.performanceTimer&&o.utils.performanceTimer.end(),o._running=!1,UD(),s(e),p(e)})),c},o.setup=function(e){if(o._tree)throw new Error("Axe is already setup. Call \`axe.teardown()\` before calling \`axe.setup\` again.");return o._tree=td(e),o._selectorData=qn(o._tree),o._tree[0]},o.teardown=GD,o.runPartial=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a=(r=KD(t)).options,r=r.context,u=(yn(o._audit,"Axe is not configured. Audit is missing."),yn(!o._running,"Axe is already running. Use \`await axe.run()\` to wait for the previous run to finish before starting a new run."),new Ed(r,o._tree));return o._tree=u.flatTree,o._selectorData=qn(u.flatTree),o._running=!0,new Promise((function(e,t){o._audit.run(u,a,e,t)})).then((function(e){e=e.map((function(e){var t=e.nodes;e=V(e,v);return U({nodes:t.map(ZD)},e)}));var t,n=u.frames.map((function(e){return e=e.node,new Jn(e,a).toJSON()}));return u.initiator&&(t=pd()),o._running=!1,GD(),{results:e,frames:n,environmentData:t}})).catch((function(e){return o._running=!1,GD(),Promise.reject(e)}))},o.finishRun=function(e){var t,n=ea(n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}),a=(e.find((function(e){return e.environmentData}))||{}).environmentData;o._audit.normalizeOptions(n),n.reporter=null!=(p=null!=(p=n.reporter)?p:null==(p=o._audit)?void 0:p.reporter)?p:"v1";var r=[],u=Q(p=e);try{for(u.s();!(t=u.n()).done;){var i,l=t.value,s=r.shift();l&&(l.frameSpec=null!=s?s:null,i=function(e){var t=e.frames,n=e.frameSpec;return n?t.map((function(e){return Jn.mergeSpecs(e,n)})):t}(l),r.unshift.apply(r,$(i)))}}catch(e){u.e(e)}finally{u.f()}var c,d,p=er(e);return(p=o._audit.after(p,n)).forEach(sp),p=p.map(mn),c=p,d=U({environmentData:a},n),new Promise((function(e){_p(d.reporter)(c,d,e)}))},o.commons=Ll,o.utils=un,o.addReporter("na",(function(e,t,n){console.warn('"na" reporter will be deprecated in axe v4.0. Use the "v2" reporter instead.'),"function"==typeof t&&(n=t,t={});var a=t.environmentData,r=V(r=t,w);n(U({},pd(a),{toolOptions:r},ud(e,t)))})),o.addReporter("no-passes",(function(e,t,n){"function"==typeof t&&(n=t,t={});var a=t.environmentData,r=V(r=t,E);t.resultTypes=["violations"],e=ud(e,t).violations,n(U({},pd(a),{toolOptions:r,violations:e}))})),o.addReporter("rawEnv",(function(e,t,n){"function"==typeof t&&(n=t,t={});var a=t.environmentData;t=V(t,x),JD(e,t,(function(e){var t=pd(a);n({raw:e,env:t})}))})),o.addReporter("raw",JD),o.addReporter("v1",(function(e,t,n){function a(e){e.nodes.forEach((function(e){e.failureSummary=ad(e)}))}"function"==typeof t&&(n=t,t={});var r=t.environmentData,o=V(o=t,A);(e=ud(e,t)).incomplete.forEach(a),e.violations.forEach(a),n(U({},pd(r),{toolOptions:o},e))})),o.addReporter("v2",(function(e,t,n){"function"==typeof t&&(n=t,t={});var a=t.environmentData,r=V(r=t,k);e=ud(e,t),n(U({},pd(a),{toolOptions:r},e))}),!0),o._load({lang:"en",data:{rules:{accesskeys:{description:"Ensures every accesskey attribute value is unique",help:"accesskey attribute value should be unique"},"area-alt":{description:"Ensures <area> elements of image maps have alternate text",help:"Active <area> elements must have alternate text"},"aria-allowed-attr":{description:"Ensures ARIA attributes are allowed for an element's role",help:"Elements must only use allowed ARIA attributes"},"aria-allowed-role":{description:"Ensures role attribute has an appropriate value for the element",help:"ARIA role should be appropriate for the element"},"aria-command-name":{description:"Ensures every ARIA button, link and menuitem has an accessible name",help:"ARIA commands must have an accessible name"},"aria-dialog-name":{description:"Ensures every ARIA dialog and alertdialog node has an accessible name",help:"ARIA dialog and alertdialog nodes should have an accessible name"},"aria-hidden-body":{description:"Ensures aria-hidden='true' is not present on the document body.",help:"aria-hidden='true' must not be present on the document body"},"aria-hidden-focus":{description:"Ensures aria-hidden elements are not focusable nor contain focusable elements",help:"ARIA hidden element must not be focusable or contain focusable elements"},"aria-input-field-name":{description:"Ensures every ARIA input field has an accessible name",help:"ARIA input fields must have an accessible name"},"aria-meter-name":{description:"Ensures every ARIA meter node has an accessible name",help:"ARIA meter nodes must have an accessible name"},"aria-progressbar-name":{description:"Ensures every ARIA progressbar node has an accessible name",help:"ARIA progressbar nodes must have an accessible name"},"aria-required-attr":{description:"Ensures elements with ARIA roles have all required ARIA attributes",help:"Required ARIA attributes must be provided"},"aria-required-children":{description:"Ensures elements with an ARIA role that require child roles contain them",help:"Certain ARIA roles must contain particular children"},"aria-required-parent":{description:"Ensures elements with an ARIA role that require parent roles are contained by them",help:"Certain ARIA roles must be contained by particular parents"},"aria-roledescription":{description:"Ensure aria-roledescription is only used on elements with an implicit or explicit role",help:"aria-roledescription must be on elements with a semantic role"},"aria-roles":{description:"Ensures all elements with a role attribute use a valid value",help:"ARIA roles used must conform to valid values"},"aria-text":{description:'Ensures "role=text" is used on elements with no focusable descendants',help:'"role=text" should have no focusable descendants'},"aria-toggle-field-name":{description:"Ensures every ARIA toggle field has an accessible name",help:"ARIA toggle fields must have an accessible name"},"aria-tooltip-name":{description:"Ensures every ARIA tooltip node has an accessible name",help:"ARIA tooltip nodes must have an accessible name"},"aria-treeitem-name":{description:"Ensures every ARIA treeitem node has an accessible name",help:"ARIA treeitem nodes should have an accessible name"},"aria-valid-attr-value":{description:"Ensures all ARIA attributes have valid values",help:"ARIA attributes must conform to valid values"},"aria-valid-attr":{description:"Ensures attributes that begin with aria- are valid ARIA attributes",help:"ARIA attributes must conform to valid names"},"audio-caption":{description:"Ensures <audio> elements have captions",help:"<audio> elements must have a captions track"},"autocomplete-valid":{description:"Ensure the autocomplete attribute is correct and suitable for the form field",help:"autocomplete attribute must be used correctly"},"avoid-inline-spacing":{description:"Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",help:"Inline text spacing must be adjustable with custom stylesheets"},blink:{description:"Ensures <blink> elements are not used",help:"<blink> elements are deprecated and must not be used"},"button-name":{description:"Ensures buttons have discernible text",help:"Buttons must have discernible text"},bypass:{description:"Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content",help:"Page must have means to bypass repeated blocks"},"color-contrast-enhanced":{description:"Ensures the contrast between foreground and background colors meets WCAG 2 AAA enhanced contrast ratio thresholds",help:"Elements must meet enhanced color contrast ratio thresholds"},"color-contrast":{description:"Ensures the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",help:"Elements must meet minimum color contrast ratio thresholds"},"css-orientation-lock":{description:"Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations",help:"CSS Media queries must not lock display orientation"},"definition-list":{description:"Ensures <dl> elements are structured correctly",help:"<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements"},dlitem:{description:"Ensures <dt> and <dd> elements are contained by a <dl>",help:"<dt> and <dd> elements must be contained by a <dl>"},"document-title":{description:"Ensures each HTML document contains a non-empty <title> element",help:"Documents must have <title> element to aid in navigation"},"duplicate-id-active":{description:"Ensures every id attribute value of active elements is unique",help:"IDs of active elements must be unique"},"duplicate-id-aria":{description:"Ensures every id attribute value used in ARIA and in labels is unique",help:"IDs used in ARIA and labels must be unique"},"duplicate-id":{description:"Ensures every id attribute value is unique",help:"id attribute value must be unique"},"empty-heading":{description:"Ensures headings have discernible text",help:"Headings should not be empty"},"empty-table-header":{description:"Ensures table headers have discernible text",help:"Table header text should not be empty"},"focus-order-semantics":{description:"Ensures elements in the focus order have a role appropriate for interactive content",help:"Elements in the focus order should have an appropriate role"},"form-field-multiple-labels":{description:"Ensures form field does not have multiple label elements",help:"Form field must not have multiple label elements"},"frame-focusable-content":{description:"Ensures <frame> and <iframe> elements with focusable content do not have tabindex=-1",help:"Frames with focusable content must not have tabindex=-1"},"frame-tested":{description:"Ensures <iframe> and <frame> elements contain the axe-core script",help:"Frames should be tested with axe-core"},"frame-title-unique":{description:"Ensures <iframe> and <frame> elements contain a unique title attribute",help:"Frames must have a unique title attribute"},"frame-title":{description:"Ensures <iframe> and <frame> elements have an accessible name",help:"Frames must have an accessible name"},"heading-order":{description:"Ensures the order of headings is semantically correct",help:"Heading levels should only increase by one"},"hidden-content":{description:"Informs users about hidden content.",help:"Hidden content on the page should be analyzed"},"html-has-lang":{description:"Ensures every HTML document has a lang attribute",help:"<html> element must have a lang attribute"},"html-lang-valid":{description:"Ensures the lang attribute of the <html> element has a valid value",help:"<html> element must have a valid value for the lang attribute"},"html-xml-lang-mismatch":{description:"Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",help:"HTML elements with lang and xml:lang must have the same base language"},"identical-links-same-purpose":{description:"Ensure that links with the same accessible name serve a similar purpose",help:"Links with the same name must have a similar purpose"},"image-alt":{description:"Ensures <img> elements have alternate text or a role of none or presentation",help:"Images must have alternate text"},"image-redundant-alt":{description:"Ensure image alternative is not repeated as text",help:"Alternative text of images should not be repeated as text"},"input-button-name":{description:"Ensures input buttons have discernible text",help:"Input buttons must have discernible text"},"input-image-alt":{description:'Ensures <input type="image"> elements have alternate text',help:"Image buttons must have alternate text"},"label-content-name-mismatch":{description:"Ensures that elements labelled through their content must have their visible text as part of their accessible name",help:"Elements must have their visible text as part of their accessible name"},"label-title-only":{description:"Ensures that every form element has a visible label and is not solely labeled using hidden labels, or the title or aria-describedby attributes",help:"Form elements should have a visible label"},label:{description:"Ensures every form element has a label",help:"Form elements must have labels"},"landmark-banner-is-top-level":{description:"Ensures the banner landmark is at top level",help:"Banner landmark should not be contained in another landmark"},"landmark-complementary-is-top-level":{description:"Ensures the complementary landmark or aside is at top level",help:"Aside should not be contained in another landmark"},"landmark-contentinfo-is-top-level":{description:"Ensures the contentinfo landmark is at top level",help:"Contentinfo landmark should not be contained in another landmark"},"landmark-main-is-top-level":{description:"Ensures the main landmark is at top level",help:"Main landmark should not be contained in another landmark"},"landmark-no-duplicate-banner":{description:"Ensures the document has at most one banner landmark",help:"Document should not have more than one banner landmark"},"landmark-no-duplicate-contentinfo":{description:"Ensures the document has at most one contentinfo landmark",help:"Document should not have more than one contentinfo landmark"},"landmark-no-duplicate-main":{description:"Ensures the document has at most one main landmark",help:"Document should not have more than one main landmark"},"landmark-one-main":{description:"Ensures the document has a main landmark",help:"Document should have one main landmark"},"landmark-unique":{help:"Ensures landmarks are unique",description:"Landmarks should have a unique role or role/label/title (i.e. accessible name) combination"},"link-in-text-block":{description:"Ensure links are distinguished from surrounding text in a way that does not rely on color",help:"Links must be distinguishable without relying on color"},"link-name":{description:"Ensures links have discernible text",help:"Links must have discernible text"},list:{description:"Ensures that lists are structured correctly",help:"<ul> and <ol> must only directly contain <li>, <script> or <template> elements"},listitem:{description:"Ensures <li> elements are used semantically",help:"<li> elements must be contained in a <ul> or <ol>"},marquee:{description:"Ensures <marquee> elements are not used",help:"<marquee> elements are deprecated and must not be used"},"meta-refresh-no-exceptions":{description:'Ensures <meta http-equiv="refresh"> is not used for delayed refresh',help:"Delayed refresh must not be used"},"meta-refresh":{description:'Ensures <meta http-equiv="refresh"> is not used for delayed refresh',help:"Delayed refresh under 20 hours must not be used"},"meta-viewport-large":{description:'Ensures <meta name="viewport"> can scale a significant amount',help:"Users should be able to zoom and scale the text up to 500%"},"meta-viewport":{description:'Ensures <meta name="viewport"> does not disable text scaling and zooming',help:"Zooming and scaling must not be disabled"},"nested-interactive":{description:"Ensures interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",help:"Interactive controls must not be nested"},"no-autoplay-audio":{description:"Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",help:"<video> or <audio> elements must not play automatically"},"object-alt":{description:"Ensures <object> elements have alternate text",help:"<object> elements must have alternate text"},"p-as-heading":{description:"Ensure bold, italic text and font-size is not used to style <p> elements as a heading",help:"Styled <p> elements must not be used as headings"},"page-has-heading-one":{description:"Ensure that the page, or at least one of its frames contains a level-one heading",help:"Page should contain a level-one heading"},"presentation-role-conflict":{description:"Elements marked as presentational should not have global ARIA or tabindex to ensure all screen readers ignore them",help:"Ensure elements marked as presentational are consistently ignored"},region:{description:"Ensures all page content is contained by landmarks",help:"All page content should be contained by landmarks"},"role-img-alt":{description:"Ensures [role='img'] elements have alternate text",help:"[role='img'] elements must have an alternative text"},"scope-attr-valid":{description:"Ensures the scope attribute is used correctly on tables",help:"scope attribute should be used correctly"},"scrollable-region-focusable":{description:"Ensure elements that have scrollable content are accessible by keyboard",help:"Scrollable region must have keyboard access"},"select-name":{description:"Ensures select element has an accessible name",help:"Select element must have an accessible name"},"server-side-image-map":{description:"Ensures that server-side image maps are not used",help:"Server-side image maps must not be used"},"skip-link":{description:"Ensure all skip links have a focusable target",help:"The skip-link target should exist and be focusable"},"svg-img-alt":{description:"Ensures <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",help:"<svg> elements with an img role must have an alternative text"},tabindex:{description:"Ensures tabindex attribute values are not greater than 0",help:"Elements should not have tabindex greater than zero"},"table-duplicate-name":{description:"Ensure the <caption> element does not contain the same text as the summary attribute",help:"tables should not have the same summary and caption"},"table-fake-caption":{description:"Ensure that tables with a caption use the <caption> element.",help:"Data or header cells must not be used to give caption to a data table."},"target-size":{description:"Ensure touch target have sufficient size and space",help:"All touch targets must be 24px large, or leave sufficient space"},"td-has-header":{description:"Ensure that each non-empty data cell in a <table> larger than 3 by 3  has one or more table headers",help:"Non-empty <td> elements in larger <table> must have an associated table header"},"td-headers-attr":{description:"Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",help:"Table cells that use the headers attribute must only refer to cells in the same table"},"th-has-data-cells":{description:"Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",help:"Table headers in a data table must refer to data cells"},"valid-lang":{description:"Ensures lang attributes have valid values",help:"lang attribute must have a valid value"},"video-caption":{description:"Ensures <video> elements have captions",help:"<video> elements must have captions"}},checks:{abstractrole:{impact:"serious",messages:{pass:"Abstract roles are not used",fail:{singular:"Abstract role cannot be directly used: \${data.values}",plural:"Abstract roles cannot be directly used: \${data.values}"}}},"aria-allowed-attr":{impact:"critical",messages:{pass:"ARIA attributes are used correctly for the defined role",fail:{singular:"ARIA attribute is not allowed: \${data.values}",plural:"ARIA attributes are not allowed: \${data.values}"},incomplete:"Check that there is no problem if the ARIA attribute is ignored on this element: \${data.values}"}},"aria-allowed-role":{impact:"minor",messages:{pass:"ARIA role is allowed for given element",fail:{singular:"ARIA role \${data.values} is not allowed for given element",plural:"ARIA roles \${data.values} are not allowed for given element"},incomplete:{singular:"ARIA role \${data.values} must be removed when the element is made visible, as it is not allowed for the element",plural:"ARIA roles \${data.values} must be removed when the element is made visible, as they are not allowed for the element"}}},"aria-busy":{impact:"serious",messages:{pass:"Element has an aria-busy attribute",fail:'Element uses aria-busy="true" while showing a loader'}},"aria-conditional-attr":{impact:"serious",messages:{pass:"ARIA attribute is allowed",fail:{checkbox:'Remove aria-checked, or set it to "\${data.checkState}" to match the real checkbox state',rowSingular:"This attribute is supported with treegrid rows, but not \${data.ownerRole}: \${data.invalidAttrs}",rowPlural:"These attributes are supported with treegrid rows, but not \${data.ownerRole}: \${data.invalidAttrs}"}}},"aria-errormessage":{impact:"critical",messages:{pass:"aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique",fail:{singular:"aria-errormessage value \`\${data.values}\` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)",plural:"aria-errormessage values \`\${data.values}\` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)",hidden:"aria-errormessage value \`\${data.values}\` cannot reference a hidden element"},incomplete:{singular:"ensure aria-errormessage value \`\${data.values}\` references an existing element",plural:"ensure aria-errormessage values \`\${data.values}\` reference existing elements",idrefs:"unable to determine if aria-errormessage element exists on the page: \${data.values}"}}},"aria-hidden-body":{impact:"critical",messages:{pass:"No aria-hidden attribute is present on document body",fail:"aria-hidden=true should not be present on the document body"}},"aria-level":{impact:"serious",messages:{pass:"aria-level values are valid",incomplete:"aria-level values greater than 6 are not supported in all screenreader and browser combinations"}},"aria-prohibited-attr":{impact:"serious",messages:{pass:"ARIA attribute is allowed",fail:{hasRolePlural:'\${data.prohibited} attributes cannot be used with role "\${data.role}".',hasRoleSingular:'\${data.prohibited} attribute cannot be used with role "\${data.role}".',noRolePlural:"\${data.prohibited} attributes cannot be used on a \${data.nodeName} with no valid role attribute.",noRoleSingular:"\${data.prohibited} attribute cannot be used on a \${data.nodeName} with no valid role attribute."},incomplete:{hasRoleSingular:'\${data.prohibited} attribute is not well supported with role "\${data.role}".',hasRolePlural:'\${data.prohibited} attributes are not well supported with role "\${data.role}".',noRoleSingular:"\${data.prohibited} attribute is not well supported on a \${data.nodeName} with no valid role attribute.",noRolePlural:"\${data.prohibited} attributes are not well supported on a \${data.nodeName} with no valid role attribute."}}},"aria-required-attr":{impact:"critical",messages:{pass:"All required ARIA attributes are present",fail:{singular:"Required ARIA attribute not present: \${data.values}",plural:"Required ARIA attributes not present: \${data.values}"}}},"aria-required-children":{impact:"critical",messages:{pass:"Required ARIA children are present",fail:{singular:"Required ARIA child role not present: \${data.values}",plural:"Required ARIA children role not present: \${data.values}",unallowed:"Element has children which are not allowed: \${data.values}"},incomplete:{singular:"Expecting ARIA child role to be added: \${data.values}",plural:"Expecting ARIA children role to be added: \${data.values}"}}},"aria-required-parent":{impact:"critical",messages:{pass:"Required ARIA parent role present",fail:{singular:"Required ARIA parent role not present: \${data.values}",plural:"Required ARIA parents role not present: \${data.values}"}}},"aria-roledescription":{impact:"serious",messages:{pass:"aria-roledescription used on a supported semantic role",incomplete:"Check that the aria-roledescription is announced by supported screen readers",fail:"Give the element a role that supports aria-roledescription"}},"aria-unsupported-attr":{impact:"critical",messages:{pass:"ARIA attribute is supported",fail:"ARIA attribute is not widely supported in screen readers and assistive technologies: \${data.values}"}},"aria-valid-attr-value":{impact:"critical",messages:{pass:"ARIA attribute values are valid",fail:{singular:"Invalid ARIA attribute value: \${data.values}",plural:"Invalid ARIA attribute values: \${data.values}"},incomplete:{noId:"ARIA attribute element ID does not exist on the page: \${data.needsReview}",noIdShadow:"ARIA attribute element ID does not exist on the page or is a descendant of a different shadow DOM tree: \${data.needsReview}",ariaCurrent:'ARIA attribute value is invalid and will be treated as "aria-current=true": \${data.needsReview}',idrefs:"Unable to determine if ARIA attribute element ID exists on the page: \${data.needsReview}",empty:"ARIA attribute value is ignored while empty: \${data.needsReview}"}}},"aria-valid-attr":{impact:"critical",messages:{pass:"ARIA attribute name is valid",fail:{singular:"Invalid ARIA attribute name: \${data.values}",plural:"Invalid ARIA attribute names: \${data.values}"}}},deprecatedrole:{impact:"minor",messages:{pass:"ARIA role is not deprecated",fail:"The role used is deprecated: \${data}"}},fallbackrole:{impact:"serious",messages:{pass:"Only one role value used",fail:"Use only one role value, since fallback roles are not supported in older browsers",incomplete:"Use only role 'presentation' or 'none' since they are synonymous."}},"has-global-aria-attribute":{impact:"minor",messages:{pass:{singular:"Element has global ARIA attribute: \${data.values}",plural:"Element has global ARIA attributes: \${data.values}"},fail:"Element does not have global ARIA attribute"}},"has-widget-role":{impact:"minor",messages:{pass:"Element has a widget role.",fail:"Element does not have a widget role."}},invalidrole:{impact:"critical",messages:{pass:"ARIA role is valid",fail:{singular:"Role must be one of the valid ARIA roles: \${data.values}",plural:"Roles must be one of the valid ARIA roles: \${data.values}"}}},"is-element-focusable":{impact:"minor",messages:{pass:"Element is focusable.",fail:"Element is not focusable."}},"no-implicit-explicit-label":{impact:"moderate",messages:{pass:"There is no mismatch between a <label> and accessible name",incomplete:"Check that the <label> does not need be part of the ARIA \${data} field's name"}},unsupportedrole:{impact:"critical",messages:{pass:"ARIA role is supported",fail:"The role used is not widely supported in screen readers and assistive technologies: \${data}"}},"valid-scrollable-semantics":{impact:"minor",messages:{pass:"Element has valid semantics for an element in the focus order.",fail:"Element has invalid semantics for an element in the focus order."}},"color-contrast-enhanced":{impact:"serious",messages:{pass:"Element has sufficient color contrast of \${data.contrastRatio}",fail:{default:"Element has insufficient color contrast of \${data.contrastRatio} (foreground color: \${data.fgColor}, background color: \${data.bgColor}, font size: \${data.fontSize}, font weight: \${data.fontWeight}). Expected contrast ratio of \${data.expectedContrastRatio}",fgOnShadowColor:"Element has insufficient color contrast of \${data.contrastRatio} between the foreground and shadow color (foreground color: \${data.fgColor}, text-shadow color: \${data.shadowColor}, font size: \${data.fontSize}, font weight: \${data.fontWeight}). Expected contrast ratio of \${data.expectedContrastRatio}",shadowOnBgColor:"Element has insufficient color contrast of \${data.contrastRatio} between the shadow color and background color (text-shadow color: \${data.shadowColor}, background color: \${data.bgColor}, font size: \${data.fontSize}, font weight: \${data.fontWeight}). Expected contrast ratio of \${data.expectedContrastRatio}"},incomplete:{default:"Unable to determine contrast ratio",bgImage:"Element's background color could not be determined due to a background image",bgGradient:"Element's background color could not be determined due to a background gradient",imgNode:"Element's background color could not be determined because element contains an image node",bgOverlap:"Element's background color could not be determined because it is overlapped by another element",fgAlpha:"Element's foreground color could not be determined because of alpha transparency",elmPartiallyObscured:"Element's background color could not be determined because it's partially obscured by another element",elmPartiallyObscuring:"Element's background color could not be determined because it partially overlaps other elements",outsideViewport:"Element's background color could not be determined because it's outside the viewport",equalRatio:"Element has a 1:1 contrast ratio with the background",shortTextContent:"Element content is too short to determine if it is actual text content",nonBmp:"Element content contains only non-text characters",pseudoContent:"Element's background color could not be determined due to a pseudo element"}}},"color-contrast":{impact:"serious",messages:{pass:{default:"Element has sufficient color contrast of \${data.contrastRatio}",hidden:"Element is hidden"},fail:{default:"Element has insufficient color contrast of \${data.contrastRatio} (foreground color: \${data.fgColor}, background color: \${data.bgColor}, font size: \${data.fontSize}, font weight: \${data.fontWeight}). Expected contrast ratio of \${data.expectedContrastRatio}",fgOnShadowColor:"Element has insufficient color contrast of \${data.contrastRatio} between the foreground and shadow color (foreground color: \${data.fgColor}, text-shadow color: \${data.shadowColor}, font size: \${data.fontSize}, font weight: \${data.fontWeight}). Expected contrast ratio of \${data.expectedContrastRatio}",shadowOnBgColor:"Element has insufficient color contrast of \${data.contrastRatio} between the shadow color and background color (text-shadow color: \${data.shadowColor}, background color: \${data.bgColor}, font size: \${data.fontSize}, font weight: \${data.fontWeight}). Expected contrast ratio of \${data.expectedContrastRatio}"},incomplete:{default:"Unable to determine contrast ratio",bgImage:"Element's background color could not be determined due to a background image",bgGradient:"Element's background color could not be determined due to a background gradient",imgNode:"Element's background color could not be determined because element contains an image node",bgOverlap:"Element's background color could not be determined because it is overlapped by another element",fgAlpha:"Element's foreground color could not be determined because of alpha transparency",elmPartiallyObscured:"Element's background color could not be determined because it's partially obscured by another element",elmPartiallyObscuring:"Element's background color could not be determined because it partially overlaps other elements",outsideViewport:"Element's background color could not be determined because it's outside the viewport",equalRatio:"Element has a 1:1 contrast ratio with the background",shortTextContent:"Element content is too short to determine if it is actual text content",nonBmp:"Element content contains only non-text characters",pseudoContent:"Element's background color could not be determined due to a pseudo element"}}},"link-in-text-block-style":{impact:"serious",messages:{pass:"Links can be distinguished from surrounding text by visual styling",incomplete:{default:"Check if the link needs styling to distinguish it from nearby text",pseudoContent:"Check if the link's pseudo style is sufficient to distinguish it from the surrounding text"},fail:"The link has no styling (such as underline) to distinguish it from the surrounding text"}},"link-in-text-block":{impact:"serious",messages:{pass:"Links can be distinguished from surrounding text in some way other than by color",fail:{fgContrast:"The link has insufficient color contrast of \${data.contrastRatio}:1 with the surrounding text. (Minimum contrast is \${data.requiredContrastRatio}:1, link text: \${data.nodeColor}, surrounding text: \${data.parentColor})",bgContrast:"The link background has insufficient color contrast of \${data.contrastRatio} (Minimum contrast is \${data.requiredContrastRatio}:1, link background color: \${data.nodeBackgroundColor}, surrounding background color: \${data.parentBackgroundColor})"},incomplete:{default:"Element's foreground contrast ratio could not be determined",bgContrast:"Element's background contrast ratio could not be determined",bgImage:"Element's contrast ratio could not be determined due to a background image",bgGradient:"Element's contrast ratio could not be determined due to a background gradient",imgNode:"Element's contrast ratio could not be determined because element contains an image node",bgOverlap:"Element's contrast ratio could not be determined because of element overlap"}}},"autocomplete-appropriate":{impact:"serious",messages:{pass:"the autocomplete value is on an appropriate element",fail:"the autocomplete value is inappropriate for this type of input"}},"autocomplete-valid":{impact:"serious",messages:{pass:"the autocomplete attribute is correctly formatted",fail:"the autocomplete attribute is incorrectly formatted"}},accesskeys:{impact:"serious",messages:{pass:"Accesskey attribute value is unique",fail:"Document has multiple elements with the same accesskey"}},"focusable-content":{impact:"serious",messages:{pass:"Element contains focusable elements",fail:"Element should have focusable content"}},"focusable-disabled":{impact:"serious",messages:{pass:"No focusable elements contained within element",incomplete:"Check if the focusable elements immediately move the focus indicator",fail:"Focusable content should be disabled or be removed from the DOM"}},"focusable-element":{impact:"serious",messages:{pass:"Element is focusable",fail:"Element should be focusable"}},"focusable-modal-open":{impact:"serious",messages:{pass:"No focusable elements while a modal is open",incomplete:"Check that focusable elements are not tabbable in the current state"}},"focusable-no-name":{impact:"serious",messages:{pass:"Element is not in tab order or has accessible text",fail:"Element is in tab order and does not have accessible text",incomplete:"Unable to determine if element has an accessible name"}},"focusable-not-tabbable":{impact:"serious",messages:{pass:"No focusable elements contained within element",incomplete:"Check if the focusable elements immediately move the focus indicator",fail:"Focusable content should have tabindex='-1' or be removed from the DOM"}},"frame-focusable-content":{impact:"serious",messages:{pass:"Element does not have focusable descendants",fail:"Element has focusable descendants",incomplete:"Could not determine if element has descendants"}},"landmark-is-top-level":{impact:"moderate",messages:{pass:"The \${data.role} landmark is at the top level.",fail:"The \${data.role} landmark is contained in another landmark."}},"no-focusable-content":{impact:"serious",messages:{pass:"Element does not have focusable descendants",fail:{default:"Element has focusable descendants",notHidden:"Using a negative tabindex on an element inside an interactive control does not prevent assistive technologies from focusing the element (even with 'aria-hidden=true')"},incomplete:"Could not determine if element has descendants"}},"page-has-heading-one":{impact:"moderate",messages:{pass:"Page has at least one level-one heading",fail:"Page must have a level-one heading"}},"page-has-main":{impact:"moderate",messages:{pass:"Document has at least one main landmark",fail:"Document does not have a main landmark"}},"page-no-duplicate-banner":{impact:"moderate",messages:{pass:"Document does not have more than one banner landmark",fail:"Document has more than one banner landmark"}},"page-no-duplicate-contentinfo":{impact:"moderate",messages:{pass:"Document does not have more than one contentinfo landmark",fail:"Document has more than one contentinfo landmark"}},"page-no-duplicate-main":{impact:"moderate",messages:{pass:"Document does not have more than one main landmark",fail:"Document has more than one main landmark"}},tabindex:{impact:"serious",messages:{pass:"Element does not have a tabindex greater than 0",fail:"Element has a tabindex greater than 0"}},"alt-space-value":{impact:"critical",messages:{pass:"Element has a valid alt attribute value",fail:"Element has an alt attribute containing only a space character, which is not ignored by all screen readers"}},"duplicate-img-label":{impact:"minor",messages:{pass:"Element does not duplicate existing text in <img> alt text",fail:"Element contains <img> element with alt text that duplicates existing text"}},"explicit-label":{impact:"critical",messages:{pass:"Form element has an explicit <label>",fail:"Form element does not have an explicit <label>",incomplete:"Unable to determine if form element has an explicit <label>"}},"help-same-as-label":{impact:"minor",messages:{pass:"Help text (title or aria-describedby) does not duplicate label text",fail:"Help text (title or aria-describedby) text is the same as the label text"}},"hidden-explicit-label":{impact:"critical",messages:{pass:"Form element has a visible explicit <label>",fail:"Form element has explicit <label> that is hidden",incomplete:"Unable to determine if form element has explicit <label> that is hidden"}},"implicit-label":{impact:"critical",messages:{pass:"Form element has an implicit (wrapped) <label>",fail:"Form element does not have an implicit (wrapped) <label>",incomplete:"Unable to determine if form element has an implicit (wrapped} <label>"}},"label-content-name-mismatch":{impact:"serious",messages:{pass:"Element contains visible text as part of it's accessible name",fail:"Text inside the element is not included in the accessible name"}},"multiple-label":{impact:"moderate",messages:{pass:"Form field does not have multiple label elements",incomplete:"Multiple label elements is not widely supported in assistive technologies. Ensure the first label contains all necessary information."}},"title-only":{impact:"serious",messages:{pass:"Form element does not solely use title attribute for its label",fail:"Only title used to generate label for form element"}},"landmark-is-unique":{impact:"moderate",messages:{pass:"Landmarks must have a unique role or role/label/title (i.e. accessible name) combination",fail:"The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable"}},"has-lang":{impact:"serious",messages:{pass:"The <html> element has a lang attribute",fail:{noXHTML:"The xml:lang attribute is not valid on HTML pages, use the lang attribute.",noLang:"The <html> element does not have a lang attribute"}}},"valid-lang":{impact:"serious",messages:{pass:"Value of lang attribute is included in the list of valid languages",fail:"Value of lang attribute not included in the list of valid languages"}},"xml-lang-mismatch":{impact:"moderate",messages:{pass:"Lang and xml:lang attributes have the same base language",fail:"Lang and xml:lang attributes do not have the same base language"}},dlitem:{impact:"serious",messages:{pass:"Description list item has a <dl> parent element",fail:"Description list item does not have a <dl> parent element"}},listitem:{impact:"serious",messages:{pass:'List item has a <ul>, <ol> or role="list" parent element',fail:{default:"List item does not have a <ul>, <ol> parent element",roleNotValid:'List item does not have a <ul>, <ol> parent element without a role, or a role="list"'}}},"only-dlitems":{impact:"serious",messages:{pass:"dl element only has direct children that are allowed inside; <dt>, <dd>, or <div> elements",fail:"dl element has direct children that are not allowed: \${data.values}"}},"only-listitems":{impact:"serious",messages:{pass:"List element only has direct children that are allowed inside <li> elements",fail:"List element has direct children that are not allowed: \${data.values}"}},"structured-dlitems":{impact:"serious",messages:{pass:"When not empty, element has both <dt> and <dd> elements",fail:"When not empty, element does not have at least one <dt> element followed by at least one <dd> element"}},caption:{impact:"critical",messages:{pass:"The multimedia element has a captions track",incomplete:"Check that captions is available for the element"}},"frame-tested":{impact:"critical",messages:{pass:"The iframe was tested with axe-core",fail:"The iframe could not be tested with axe-core",incomplete:"The iframe still has to be tested with axe-core"}},"no-autoplay-audio":{impact:"moderate",messages:{pass:"<video> or <audio> does not output audio for more than allowed duration or has controls mechanism",fail:"<video> or <audio> outputs audio for more than allowed duration and does not have a controls mechanism",incomplete:"Check that the <video> or <audio> does not output audio for more than allowed duration or provides a controls mechanism"}},"css-orientation-lock":{impact:"serious",messages:{pass:"Display is operable, and orientation lock does not exist",fail:"CSS Orientation lock is applied, and makes display inoperable",incomplete:"CSS Orientation lock cannot be determined"}},"meta-viewport-large":{impact:"minor",messages:{pass:"<meta> tag does not prevent significant zooming on mobile devices",fail:"<meta> tag limits zooming on mobile devices"}},"meta-viewport":{impact:"critical",messages:{pass:"<meta> tag does not disable zooming on mobile devices",fail:"\${data} on <meta> tag disables zooming on mobile devices"}},"target-offset":{impact:"serious",messages:{pass:"Target has sufficient offset from its closest neighbor (\${data.closestOffset}px should be at least \${data.minOffset}px)",fail:"Target has insufficient offset from its closest neighbor (\${data.closestOffset}px should be at least \${data.minOffset}px)",incomplete:{default:"Element with negative tabindex has insufficient offset from its closest neighbor (\${data.closestOffset}px should be at least \${data.minOffset}px). Is this a target?",nonTabbableNeighbor:"Target has insufficient offset from a neighbor with negative tabindex (\${data.closestOffset}px should be at least \${data.minOffset}px). Is the neighbor a target?"}}},"target-size":{impact:"serious",messages:{pass:{default:"Control has sufficient size (\${data.width}px by \${data.height}px, should be at least \${data.minSize}px by \${data.minSize}px)",obscured:"Control is ignored because it is fully obscured and thus not clickable"},fail:{default:"Target has insufficient size (\${data.width}px by \${data.height}px, should be at least \${data.minSize}px by \${data.minSize}px)",partiallyObscured:"Target has insufficient size because it is partially obscured (smallest space is \${data.width}px by \${data.height}px, should be at least \${data.minSize}px by \${data.minSize}px)"},incomplete:{default:"Element with negative tabindex has insufficient size (\${data.width}px by \${data.height}px, should be at least \${data.minSize}px by \${data.minSize}px). Is this a target?",contentOverflow:"Element size could not be accurately determined due to overflow content",partiallyObscured:"Element with negative tabindex has insufficient size because it is partially obscured (smallest space is \${data.width}px by \${data.height}px, should be at least \${data.minSize}px by \${data.minSize}px). Is this a target?",partiallyObscuredNonTabbable:"Target has insufficient size because it is partially obscured by a neighbor with negative tabindex (smallest space is \${data.width}px by \${data.height}px, should be at least \${data.minSize}px by \${data.minSize}px). Is the neighbor a target?"}}},"header-present":{impact:"serious",messages:{pass:"Page has a heading",fail:"Page does not have a heading"}},"heading-order":{impact:"moderate",messages:{pass:"Heading order valid",fail:"Heading order invalid",incomplete:"Unable to determine previous heading"}},"identical-links-same-purpose":{impact:"minor",messages:{pass:"There are no other links with the same name, that go to a different URL",incomplete:"Check that links have the same purpose, or are intentionally ambiguous."}},"internal-link-present":{impact:"serious",messages:{pass:"Valid skip link found",fail:"No valid skip link found"}},landmark:{impact:"serious",messages:{pass:"Page has a landmark region",fail:"Page does not have a landmark region"}},"meta-refresh-no-exceptions":{impact:"minor",messages:{pass:"<meta> tag does not immediately refresh the page",fail:"<meta> tag forces timed refresh of page"}},"meta-refresh":{impact:"critical",messages:{pass:"<meta> tag does not immediately refresh the page",fail:"<meta> tag forces timed refresh of page (less than 20 hours)"}},"p-as-heading":{impact:"serious",messages:{pass:"<p> elements are not styled as headings",fail:"Heading elements should be used instead of styled <p> elements",incomplete:"Unable to determine if <p> elements are styled as headings"}},region:{impact:"moderate",messages:{pass:"All page content is contained by landmarks",fail:"Some page content is not contained by landmarks"}},"skip-link":{impact:"moderate",messages:{pass:"Skip link target exists",incomplete:"Skip link target should become visible on activation",fail:"No skip link target"}},"unique-frame-title":{impact:"serious",messages:{pass:"Element's title attribute is unique",fail:"Element's title attribute is not unique"}},"duplicate-id-active":{impact:"serious",messages:{pass:"Document has no active elements that share the same id attribute",fail:"Document has active elements with the same id attribute: \${data}"}},"duplicate-id-aria":{impact:"critical",messages:{pass:"Document has no elements referenced with ARIA or labels that share the same id attribute",fail:"Document has multiple elements referenced with ARIA with the same id attribute: \${data}"}},"duplicate-id":{impact:"minor",messages:{pass:"Document has no static elements that share the same id attribute",fail:"Document has multiple static elements with the same id attribute: \${data}"}},"aria-label":{impact:"serious",messages:{pass:"aria-label attribute exists and is not empty",fail:"aria-label attribute does not exist or is empty"}},"aria-labelledby":{impact:"serious",messages:{pass:"aria-labelledby attribute exists and references elements that are visible to screen readers",fail:"aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty",incomplete:"ensure aria-labelledby references an existing element"}},"avoid-inline-spacing":{impact:"serious",messages:{pass:"No inline styles with '!important' that affect text spacing has been specified",fail:{singular:"Remove '!important' from inline style \${data.values}, as overriding this is not supported by most browsers",plural:"Remove '!important' from inline styles \${data.values}, as overriding this is not supported by most browsers"}}},"button-has-visible-text":{impact:"critical",messages:{pass:"Element has inner text that is visible to screen readers",fail:"Element does not have inner text that is visible to screen readers",incomplete:"Unable to determine if element has children"}},"doc-has-title":{impact:"serious",messages:{pass:"Document has a non-empty <title> element",fail:"Document does not have a non-empty <title> element"}},exists:{impact:"minor",messages:{pass:"Element does not exist",incomplete:"Element exists"}},"has-alt":{impact:"critical",messages:{pass:"Element has an alt attribute",fail:"Element does not have an alt attribute"}},"has-visible-text":{impact:"minor",messages:{pass:"Element has text that is visible to screen readers",fail:"Element does not have text that is visible to screen readers",incomplete:"Unable to determine if element has children"}},"important-letter-spacing":{impact:"serious",messages:{pass:"Letter-spacing in the style attribute is not set to !important, or meets the minimum",fail:"letter-spacing in the style attribute must not use !important, or be at \${data.minValue}em (current \${data.value}em)"}},"important-line-height":{impact:"serious",messages:{pass:"line-height in the style attribute is not set to !important, or meets the minimum",fail:"line-height in the style attribute must not use !important, or be at \${data.minValue}em (current \${data.value}em)"}},"important-word-spacing":{impact:"serious",messages:{pass:"word-spacing in the style attribute is not set to !important, or meets the minimum",fail:"word-spacing in the style attribute must not use !important, or be at \${data.minValue}em (current \${data.value}em)"}},"is-on-screen":{impact:"serious",messages:{pass:"Element is not visible",fail:"Element is visible"}},"non-empty-alt":{impact:"critical",messages:{pass:"Element has a non-empty alt attribute",fail:{noAttr:"Element has no alt attribute",emptyAttr:"Element has an empty alt attribute"}}},"non-empty-if-present":{impact:"critical",messages:{pass:{default:"Element does not have a value attribute","has-label":"Element has a non-empty value attribute"},fail:"Element has a value attribute and the value attribute is empty"}},"non-empty-placeholder":{impact:"serious",messages:{pass:"Element has a placeholder attribute",fail:{noAttr:"Element has no placeholder attribute",emptyAttr:"Element has an empty placeholder attribute"}}},"non-empty-title":{impact:"serious",messages:{pass:"Element has a title attribute",fail:{noAttr:"Element has no title attribute",emptyAttr:"Element has an empty title attribute"}}},"non-empty-value":{impact:"critical",messages:{pass:"Element has a non-empty value attribute",fail:{noAttr:"Element has no value attribute",emptyAttr:"Element has an empty value attribute"}}},"presentational-role":{impact:"minor",messages:{pass:'Element\\'s default semantics were overriden with role="\${data.role}"',fail:{default:'Element\\'s default semantics were not overridden with role="none" or role="presentation"',globalAria:"Element's role is not presentational because it has a global ARIA attribute",focusable:"Element's role is not presentational because it is focusable",both:"Element's role is not presentational because it has a global ARIA attribute and is focusable",iframe:'Using the "title" attribute on an \${data.nodeName} element with a presentational role behaves inconsistently between screen readers'}}},"role-none":{impact:"minor",messages:{pass:'Element\\'s default semantics were overriden with role="none"',fail:'Element\\'s default semantics were not overridden with role="none"'}},"role-presentation":{impact:"minor",messages:{pass:'Element\\'s default semantics were overriden with role="presentation"',fail:'Element\\'s default semantics were not overridden with role="presentation"'}},"svg-non-empty-title":{impact:"serious",messages:{pass:"Element has a child that is a title",fail:{noTitle:"Element has no child that is a title",emptyTitle:"Element child title is empty"},incomplete:"Unable to determine element has a child that is a title"}},"caption-faked":{impact:"serious",messages:{pass:"The first row of a table is not used as a caption",fail:"The first child of the table should be a caption instead of a table cell"}},"html5-scope":{impact:"moderate",messages:{pass:"Scope attribute is only used on table header elements (<th>)",fail:"In HTML 5, scope attributes may only be used on table header elements (<th>)"}},"same-caption-summary":{impact:"minor",messages:{pass:"Content of summary attribute and <caption> are not duplicated",fail:"Content of summary attribute and <caption> element are identical",incomplete:"Unable to determine if <table> element has a caption"}},"scope-value":{impact:"critical",messages:{pass:"Scope attribute is used correctly",fail:"The value of the scope attribute may only be 'row' or 'col'"}},"td-has-header":{impact:"critical",messages:{pass:"All non-empty data cells have table headers",fail:"Some non-empty data cells do not have table headers"}},"td-headers-attr":{impact:"serious",messages:{pass:"The headers attribute is exclusively used to refer to other cells in the table",incomplete:"The headers attribute is empty",fail:"The headers attribute is not exclusively used to refer to other cells in the table"}},"th-has-data-cells":{impact:"serious",messages:{pass:"All table header cells refer to data cells",fail:"Not all table header cells refer to data cells",incomplete:"Table data cells are missing or empty"}},"hidden-content":{impact:"minor",messages:{pass:"All content on the page has been analyzed.",fail:"There were problems analyzing the content on this page.",incomplete:"There is hidden content on the page that was not analyzed. You will need to trigger the display of this content in order to analyze it."}}},failureSummaries:{any:{failureMessage:function(e){var t="Fix any of the following:",n=e;if(n)for(var a=-1,r=n.length-1;a<r;)t+="\\n  "+n[a+=1].split("\\n").join("\\n  ");return t}},none:{failureMessage:function(e){var t="Fix all of the following:",n=e;if(n)for(var a=-1,r=n.length-1;a<r;)t+="\\n  "+n[a+=1].split("\\n").join("\\n  ");return t}}},incompleteFallbackMessage:"axe couldn't tell the reason. Time to break out the element inspector!"},rules:[{id:"accesskeys",selector:"[accesskey]",excludeHidden:!1,tags:["cat.keyboard","best-practice"],all:[],any:[],none:["accesskeys"]},{id:"area-alt",selector:"map area[href]",excludeHidden:!1,tags:["cat.text-alternatives","wcag2a","wcag244","wcag412","section508","section508.22.a","ACT","TTv5","TT6.a"],actIds:["c487ae"],all:[],any:[{options:{attribute:"alt"},id:"non-empty-alt"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-allowed-attr",matches:"aria-allowed-attr-matches",tags:["cat.aria","wcag2a","wcag412"],actIds:["5c01ea"],all:[{options:{validTreeRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]},id:"aria-allowed-attr"},{options:{invalidTableRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]},id:"aria-conditional-attr"}],any:[],none:["aria-unsupported-attr",{options:{elementsAllowedAriaLabel:["applet","input"]},id:"aria-prohibited-attr"}]},{id:"aria-allowed-role",excludeHidden:!1,selector:"[role]",matches:"aria-allowed-role-matches",tags:["cat.aria","best-practice"],all:[],any:[{options:{allowImplicit:!0,ignoredTags:[]},id:"aria-allowed-role"}],none:[]},{id:"aria-command-name",selector:'[role="link"], [role="button"], [role="menuitem"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","ACT","TTv5","TT6.a"],actIds:["97a4e1"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-dialog-name",selector:'[role="dialog"], [role="alertdialog"]',matches:"no-naming-method-matches",tags:["cat.aria","best-practice"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-hidden-body",selector:"body",excludeHidden:!1,matches:"is-initiator-matches",tags:["cat.aria","wcag2a","wcag412"],all:[],any:["aria-hidden-body"],none:[]},{id:"aria-hidden-focus",selector:'[aria-hidden="true"]',matches:"aria-hidden-focus-matches",excludeHidden:!1,tags:["cat.name-role-value","wcag2a","wcag412","TTv5","TT6.a"],actIds:["6cfa84"],all:["focusable-modal-open","focusable-disabled","focusable-not-tabbable"],any:[],none:[]},{id:"aria-input-field-name",selector:'[role="combobox"], [role="listbox"], [role="searchbox"], [role="slider"], [role="spinbutton"], [role="textbox"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","ACT","TTv5","TT5.c"],actIds:["e086e5"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["no-implicit-explicit-label"]},{id:"aria-meter-name",selector:'[role="meter"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag111"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-progressbar-name",selector:'[role="progressbar"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag111"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-required-attr",selector:"[role]",tags:["cat.aria","wcag2a","wcag412"],actIds:["4e8ab6"],all:[],any:["aria-required-attr"],none:[]},{id:"aria-required-children",selector:"[role]",matches:"aria-required-children-matches",tags:["cat.aria","wcag2a","wcag131"],actIds:["bc4a75","ff89c9"],all:[],any:[{options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","menu","menubar","table","tablist","tree","treegrid","rowgroup"]},id:"aria-required-children"},"aria-busy"],none:[]},{id:"aria-required-parent",selector:"[role]",matches:"aria-required-parent-matches",tags:["cat.aria","wcag2a","wcag131"],actIds:["ff89c9"],all:[],any:[{options:{ownGroupRoles:["listitem","treeitem"]},id:"aria-required-parent"}],none:[]},{id:"aria-roledescription",selector:"[aria-roledescription]",tags:["cat.aria","wcag2a","wcag412","deprecated"],enabled:!1,all:[],any:[{options:{supportedRoles:["button","img","checkbox","radio","combobox","menuitemcheckbox","menuitemradio"]},id:"aria-roledescription"}],none:[]},{id:"aria-roles",selector:"[role]",matches:"no-empty-role-matches",tags:["cat.aria","wcag2a","wcag412"],actIds:["674b10"],all:[],any:[],none:["invalidrole","abstractrole","unsupportedrole","deprecatedrole"]},{id:"aria-text",selector:"[role=text]",tags:["cat.aria","best-practice"],all:[],any:["no-focusable-content"],none:[]},{id:"aria-toggle-field-name",selector:'[role="checkbox"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="radio"], [role="switch"], [role="option"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","ACT","TTv5","TT5.c"],actIds:["e086e5"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["no-implicit-explicit-label"]},{id:"aria-tooltip-name",selector:'[role="tooltip"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-treeitem-name",selector:'[role="treeitem"]',matches:"no-naming-method-matches",tags:["cat.aria","best-practice"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-valid-attr-value",matches:"aria-has-attr-matches",tags:["cat.aria","wcag2a","wcag412"],actIds:["6a7281"],all:[{options:[],id:"aria-valid-attr-value"},"aria-errormessage","aria-level"],any:[],none:[]},{id:"aria-valid-attr",matches:"aria-has-attr-matches",tags:["cat.aria","wcag2a","wcag412"],actIds:["5f99a7"],all:[],any:[{options:[],id:"aria-valid-attr"}],none:[]},{id:"audio-caption",selector:"audio",enabled:!1,excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag121","section508","section508.22.a","deprecated"],actIds:["2eb176","afb423"],all:[],any:[],none:["caption"]},{id:"autocomplete-valid",matches:"autocomplete-matches",tags:["cat.forms","wcag21aa","wcag135","ACT"],actIds:["73f2c2"],all:[{options:{stateTerms:["none","false","true","disabled","enabled","undefined","null"]},id:"autocomplete-valid"}],any:[],none:[]},{id:"avoid-inline-spacing",selector:"[style]",matches:"is-visible-on-screen-matches",tags:["cat.structure","wcag21aa","wcag1412","ACT"],actIds:["24afc2","9e45ec","78fd32"],all:[{options:{cssProperty:"letter-spacing",minValue:.12},id:"important-letter-spacing"},{options:{cssProperty:"word-spacing",minValue:.16},id:"important-word-spacing"},{options:{multiLineOnly:!0,cssProperty:"line-height",minValue:1.5,normalValue:1},id:"important-line-height"}],any:[],none:[]},{id:"blink",selector:"blink",excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag222","section508","section508.22.j","TTv5","TT2.b"],all:[],any:[],none:["is-on-screen"]},{id:"button-name",selector:"button",matches:"no-explicit-name-required-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","ACT","TTv5","TT6.a"],actIds:["97a4e1","m6b1q3"],all:[],any:["button-has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:[]},{id:"bypass",selector:"html",pageLevel:!0,matches:"bypass-matches",reviewOnFail:!0,tags:["cat.keyboard","wcag2a","wcag241","section508","section508.22.o","TTv5","TT9.a"],actIds:["cf77f2","047fe0","b40fd1","3e12e1","ye5d6e"],all:[],any:["internal-link-present",{options:{selector:":is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]"},id:"header-present"},{options:{selector:"main, [role=main]"},id:"landmark"}],none:[]},{id:"color-contrast-enhanced",matches:"color-contrast-matches",excludeHidden:!1,enabled:!1,tags:["cat.color","wcag2aaa","wcag146","ACT"],actIds:["09o5cg"],all:[],any:[{options:{ignoreUnicode:!0,ignoreLength:!1,ignorePseudo:!1,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:7,minThreshold:4.5},large:{expected:4.5,minThreshold:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.1,textStrokeEmMin:.03},id:"color-contrast-enhanced"}],none:[]},{id:"color-contrast",matches:"color-contrast-matches",excludeHidden:!1,tags:["cat.color","wcag2aa","wcag143","ACT","TTv5","TT13.c"],actIds:["afw4f7","09o5cg"],all:[],any:[{options:{ignoreUnicode:!0,ignoreLength:!1,ignorePseudo:!1,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:4.5},large:{expected:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.2,textStrokeEmMin:.03},id:"color-contrast"}],none:[]},{id:"css-orientation-lock",selector:"html",tags:["cat.structure","wcag134","wcag21aa","experimental"],actIds:["b33eff"],all:[{options:{degreeThreshold:2},id:"css-orientation-lock"}],any:[],none:[],preload:!0},{id:"definition-list",selector:"dl",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131"],all:[],any:[],none:["structured-dlitems",{options:{validRoles:["definition","term","listitem"],validNodeNames:["dt","dd"],divGroups:!0},id:"only-dlitems"}]},{id:"dlitem",selector:"dd, dt",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131"],all:[],any:["dlitem"],none:[]},{id:"document-title",selector:"html",matches:"is-initiator-matches",tags:["cat.text-alternatives","wcag2a","wcag242","ACT","TTv5","TT12.a"],actIds:["2779a5"],all:[],any:["doc-has-title"],none:[]},{id:"duplicate-id-active",selector:"[id]",matches:"duplicate-id-active-matches",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],actIds:["3ea0c8"],all:[],any:["duplicate-id-active"],none:[]},{id:"duplicate-id-aria",selector:"[id]",matches:"duplicate-id-aria-matches",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],actIds:["3ea0c8"],all:[],any:["duplicate-id-aria"],none:[]},{id:"duplicate-id",selector:"[id]",matches:"duplicate-id-misc-matches",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],actIds:["3ea0c8"],all:[],any:["duplicate-id"],none:[]},{id:"empty-heading",selector:'h1, h2, h3, h4, h5, h6, [role="heading"]',matches:"heading-matches",tags:["cat.name-role-value","best-practice"],actIds:["ffd0e9"],impact:"minor",all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"empty-table-header",selector:'th:not([role]), [role="rowheader"], [role="columnheader"]',tags:["cat.name-role-value","best-practice"],all:[],any:["has-visible-text"],none:[]},{id:"focus-order-semantics",selector:"div, h1, h2, h3, h4, h5, h6, [role=heading], p, span",matches:"inserted-into-focus-order-matches",tags:["cat.keyboard","best-practice","experimental"],all:[],any:[{options:[],id:"has-widget-role"},{options:{roles:["tooltip"]},id:"valid-scrollable-semantics"}],none:[]},{id:"form-field-multiple-labels",selector:"input, select, textarea",matches:"label-matches",tags:["cat.forms","wcag2a","wcag332","TTv5","TT5.c"],all:[],any:[],none:["multiple-label"]},{id:"frame-focusable-content",selector:"html",matches:"frame-focusable-content-matches",tags:["cat.keyboard","wcag2a","wcag211","TTv5","TT4.a"],actIds:["akn7bn"],all:[],any:["frame-focusable-content"],none:[]},{id:"frame-tested",selector:"html, frame, iframe",tags:["cat.structure","review-item","best-practice"],all:[{options:{isViolation:!1},id:"frame-tested"}],any:[],none:[]},{id:"frame-title-unique",selector:"frame[title], iframe[title]",matches:"frame-title-has-text-matches",tags:["cat.text-alternatives","wcag412","wcag2a","TTv5","TT12.d"],actIds:["4b1c6c"],all:[],any:[],none:["unique-frame-title"],reviewOnFail:!0},{id:"frame-title",selector:"frame, iframe",matches:"no-negative-tabindex-matches",tags:["cat.text-alternatives","wcag2a","wcag412","section508","section508.22.i","TTv5","TT12.d"],actIds:["cae760"],all:[],any:[{options:{attribute:"title"},id:"non-empty-title"},"aria-label","aria-labelledby","presentational-role"],none:[]},{id:"heading-order",selector:"h1, h2, h3, h4, h5, h6, [role=heading]",matches:"heading-matches",tags:["cat.semantics","best-practice"],all:[],any:["heading-order"],none:[]},{id:"hidden-content",selector:"*",excludeHidden:!1,tags:["cat.structure","experimental","review-item","best-practice"],all:[],any:["hidden-content"],none:[]},{id:"html-has-lang",selector:"html",matches:"is-initiator-matches",tags:["cat.language","wcag2a","wcag311","ACT","TTv5","TT11.a"],actIds:["b5c3f8"],all:[],any:[{options:{attributes:["lang","xml:lang"]},id:"has-lang"}],none:[]},{id:"html-lang-valid",selector:'html[lang]:not([lang=""]), html[xml\\\\:lang]:not([xml\\\\:lang=""])',tags:["cat.language","wcag2a","wcag311","ACT","TTv5","TT11.a"],actIds:["bf051a"],all:[],any:[],none:[{options:{attributes:["lang","xml:lang"]},id:"valid-lang"}]},{id:"html-xml-lang-mismatch",selector:"html[lang][xml\\\\:lang]",matches:"xml-lang-mismatch-matches",tags:["cat.language","wcag2a","wcag311","ACT"],actIds:["5b7ae0"],all:["xml-lang-mismatch"],any:[],none:[]},{id:"identical-links-same-purpose",selector:'a[href], area[href], [role="link"]',excludeHidden:!1,enabled:!1,matches:"identical-links-same-purpose-matches",tags:["cat.semantics","wcag2aaa","wcag249"],actIds:["b20e66"],all:["identical-links-same-purpose"],any:[],none:[]},{id:"image-alt",selector:"img",matches:"no-explicit-name-required-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a","TT7.b"],actIds:["23a2a8"],all:[],any:["has-alt","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:["alt-space-value"]},{id:"image-redundant-alt",selector:"img",tags:["cat.text-alternatives","best-practice"],all:[],any:[],none:[{options:{parentSelector:"button, [role=button], a[href], p, li, td, th"},id:"duplicate-img-label"}]},{id:"input-button-name",selector:'input[type="button"], input[type="submit"], input[type="reset"]',matches:"no-explicit-name-required-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","ACT","TTv5","TT5.c"],actIds:["97a4e1"],all:[],any:["non-empty-if-present",{options:{attribute:"value"},id:"non-empty-value"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:[]},{id:"input-image-alt",selector:'input[type="image"]',matches:"no-explicit-name-required-matches",tags:["cat.text-alternatives","wcag2a","wcag111","wcag412","section508","section508.22.a","ACT","TTv5","TT7.a"],actIds:["59796f"],all:[],any:[{options:{attribute:"alt"},id:"non-empty-alt"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"label-content-name-mismatch",matches:"label-content-name-mismatch-matches",tags:["cat.semantics","wcag21a","wcag253","experimental"],actIds:["2ee8b8"],all:[],any:[{options:{pixelThreshold:.1,occurrenceThreshold:3},id:"label-content-name-mismatch"}],none:[]},{id:"label-title-only",selector:"input, select, textarea",matches:"label-matches",tags:["cat.forms","best-practice"],all:[],any:[],none:["title-only"]},{id:"label",selector:"input, textarea",matches:"label-matches",tags:["cat.forms","wcag2a","wcag412","section508","section508.22.n","ACT","TTv5","TT5.c"],actIds:["e086e5"],all:[],any:["implicit-label","explicit-label","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},{options:{attribute:"placeholder"},id:"non-empty-placeholder"},"presentational-role"],none:["help-same-as-label","hidden-explicit-label"]},{id:"landmark-banner-is-top-level",selector:"header:not([role]), [role=banner]",matches:"landmark-has-body-context-matches",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-complementary-is-top-level",selector:"aside:not([role]), [role=complementary]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-contentinfo-is-top-level",selector:"footer:not([role]), [role=contentinfo]",matches:"landmark-has-body-context-matches",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-main-is-top-level",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-no-duplicate-banner",selector:"header:not([role]), [role=banner]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"header:not([role]), [role=banner]",nativeScopeFilter:"article, aside, main, nav, section"},id:"page-no-duplicate-banner"}],none:[]},{id:"landmark-no-duplicate-contentinfo",selector:"footer:not([role]), [role=contentinfo]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"footer:not([role]), [role=contentinfo]",nativeScopeFilter:"article, aside, main, nav, section"},id:"page-no-duplicate-contentinfo"}],none:[]},{id:"landmark-no-duplicate-main",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"main:not([role]), [role='main']"},id:"page-no-duplicate-main"}],none:[]},{id:"landmark-one-main",selector:"html",tags:["cat.semantics","best-practice"],all:[{options:{selector:"main:not([role]), [role='main']",passForModal:!0},id:"page-has-main"}],any:[],none:[]},{id:"landmark-unique",selector:"[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section",tags:["cat.semantics","best-practice"],matches:"landmark-unique-matches",all:[],any:["landmark-is-unique"],none:[]},{id:"link-in-text-block",selector:"a[href], [role=link]",matches:"link-in-text-block-matches",excludeHidden:!1,tags:["cat.color","wcag2a","wcag141","TTv5","TT13.a"],all:[],any:[{options:{requiredContrastRatio:3,allowSameColor:!0},id:"link-in-text-block"},"link-in-text-block-style"],none:[]},{id:"link-name",selector:"a[href]",tags:["cat.name-role-value","wcag2a","wcag412","wcag244","section508","section508.22.a","ACT","TTv5","TT6.a"],actIds:["c487ae"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["focusable-no-name"]},{id:"list",selector:"ul, ol",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131"],all:[],any:[],none:[{options:{validRoles:["listitem"],validNodeNames:["li"]},id:"only-listitems"}]},{id:"listitem",selector:"li",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131"],all:[],any:["listitem"],none:[]},{id:"marquee",selector:"marquee",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag222","TTv5","TT2.b"],all:[],any:[],none:["is-on-screen"]},{id:"meta-refresh-no-exceptions",selector:'meta[http-equiv="refresh"][content]',excludeHidden:!1,enabled:!1,tags:["cat.time-and-media","wcag2aaa","wcag224","wcag325"],actIds:["bisz58"],all:[],any:[{options:{minDelay:72e3,maxDelay:!1},id:"meta-refresh-no-exceptions"}],none:[]},{id:"meta-refresh",selector:'meta[http-equiv="refresh"][content]',excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag221","TTv5","TT8.a"],actIds:["bc659a","bisz58"],all:[],any:[{options:{minDelay:0,maxDelay:72e3},id:"meta-refresh"}],none:[]},{id:"meta-viewport-large",selector:'meta[name="viewport"]',matches:"is-initiator-matches",excludeHidden:!1,tags:["cat.sensory-and-visual-cues","best-practice"],all:[],any:[{options:{scaleMinimum:5,lowerBound:2},id:"meta-viewport-large"}],none:[]},{id:"meta-viewport",selector:'meta[name="viewport"]',matches:"is-initiator-matches",excludeHidden:!1,tags:["cat.sensory-and-visual-cues","wcag2aa","wcag144","ACT"],actIds:["b4f0c3"],all:[],any:[{options:{scaleMinimum:2},id:"meta-viewport"}],none:[]},{id:"nested-interactive",matches:"nested-interactive-matches",tags:["cat.keyboard","wcag2a","wcag412","TTv5","TT6.a"],actIds:["307n5z"],all:[],any:["no-focusable-content"],none:[]},{id:"no-autoplay-audio",excludeHidden:!1,selector:"audio[autoplay], video[autoplay]",matches:"no-autoplay-audio-matches",reviewOnFail:!0,tags:["cat.time-and-media","wcag2a","wcag142","ACT","TTv5","TT2.a"],actIds:["80f0bf"],preload:!0,all:[{options:{allowedDuration:3},id:"no-autoplay-audio"}],any:[],none:[]},{id:"object-alt",selector:"object[data]",matches:"object-is-loaded-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],actIds:["8fc3b6"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:[]},{id:"p-as-heading",selector:"p",matches:"p-as-heading-matches",tags:["cat.semantics","wcag2a","wcag131","experimental"],all:[{options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}],passLength:1,failLength:.5},id:"p-as-heading"}],any:[],none:[]},{id:"page-has-heading-one",selector:"html",tags:["cat.semantics","best-practice"],all:[{options:{selector:"h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]",passForModal:!0},id:"page-has-heading-one"}],any:[],none:[]},{id:"presentation-role-conflict",selector:'img[alt=\\'\\'], [role="none"], [role="presentation"]',matches:"has-implicit-chromium-role-matches",tags:["cat.aria","best-practice","ACT"],actIds:["46ca7f"],all:[],any:[],none:["is-element-focusable","has-global-aria-attribute"]},{id:"region",selector:"body *",tags:["cat.keyboard","best-practice"],all:[],any:[{options:{regionMatcher:"dialog, [role=dialog], [role=alertdialog], svg"},id:"region"}],none:[]},{id:"role-img-alt",selector:"[role='img']:not(img, area, input, object)",matches:"html-namespace-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a"],actIds:["23a2a8"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"scope-attr-valid",selector:"td[scope], th[scope]",tags:["cat.tables","best-practice"],all:["html5-scope",{options:{values:["row","col","rowgroup","colgroup"]},id:"scope-value"}],any:[],none:[]},{id:"scrollable-region-focusable",selector:"*:not(select,textarea)",matches:"scrollable-region-focusable-matches",tags:["cat.keyboard","wcag2a","wcag211","TTv5","TT4.a"],actIds:["0ssw9k"],all:[],any:["focusable-content","focusable-element"],none:[]},{id:"select-name",selector:"select",tags:["cat.forms","wcag2a","wcag412","section508","section508.22.n","ACT","TTv5","TT5.c"],actIds:["e086e5"],all:[],any:["implicit-label","explicit-label","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:["help-same-as-label","hidden-explicit-label"]},{id:"server-side-image-map",selector:"img[ismap]",tags:["cat.text-alternatives","wcag2a","wcag211","section508","section508.22.f","TTv5","TT4.a"],all:[],any:[],none:["exists"]},{id:"skip-link",selector:'a[href^="#"], a[href^="/#"]',matches:"skip-link-matches",tags:["cat.keyboard","best-practice"],all:[],any:["skip-link"],none:[]},{id:"svg-img-alt",selector:'[role="img"], [role="graphics-symbol"], svg[role="graphics-document"]',matches:"svg-namespace-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a"],actIds:["7d6734"],all:[],any:["svg-non-empty-title","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"tabindex",selector:"[tabindex]",tags:["cat.keyboard","best-practice"],all:[],any:["tabindex"],none:[]},{id:"table-duplicate-name",selector:"table",tags:["cat.tables","best-practice"],all:[],any:[],none:["same-caption-summary"]},{id:"table-fake-caption",selector:"table",matches:"data-table-matches",tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g"],all:["caption-faked"],any:[],none:[]},{id:"target-size",selector:"*",enabled:!1,matches:"widget-not-inline-matches",tags:["wcag22aa","wcag258","cat.sensory-and-visual-cues"],all:[],any:[{options:{minSize:24},id:"target-size"},{options:{minOffset:24},id:"target-offset"}],none:[]},{id:"td-has-header",selector:"table",matches:"data-table-large-matches",tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b"],all:["td-has-header"],any:[],none:[]},{id:"td-headers-attr",selector:"table",matches:"table-or-grid-role-matches",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b"],actIds:["a25f45"],all:["td-headers-attr"],any:[],none:[]},{id:"th-has-data-cells",selector:"table",matches:"data-table-matches",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","14.b"],actIds:["d0f69e"],all:["th-has-data-cells"],any:[],none:[]},{id:"valid-lang",selector:"[lang]:not(html), [xml\\\\:lang]:not(html)",tags:["cat.language","wcag2aa","wcag312","ACT","TTv5","TT11.b"],actIds:["de46e4"],all:[],any:[],none:[{options:{attributes:["lang","xml:lang"]},id:"valid-lang"}]},{id:"video-caption",selector:"video",tags:["cat.text-alternatives","wcag2a","wcag122","section508","section508.22.a","TTv5","TT17.a"],actIds:["eac66b"],all:[],any:[],none:["caption"]}],checks:[{id:"abstractrole",evaluate:"abstractrole-evaluate"},{id:"aria-allowed-attr",evaluate:"aria-allowed-attr-evaluate",options:{validTreeRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]}},{id:"aria-allowed-role",evaluate:"aria-allowed-role-evaluate",options:{allowImplicit:!0,ignoredTags:[]}},{id:"aria-busy",evaluate:"aria-busy-evaluate"},{id:"aria-conditional-attr",evaluate:"aria-conditional-attr-evaluate",options:{invalidTableRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]}},{id:"aria-errormessage",evaluate:"aria-errormessage-evaluate"},{id:"aria-hidden-body",evaluate:"aria-hidden-body-evaluate"},{id:"aria-level",evaluate:"aria-level-evaluate"},{id:"aria-prohibited-attr",evaluate:"aria-prohibited-attr-evaluate",options:{elementsAllowedAriaLabel:["applet","input"]}},{id:"aria-required-attr",evaluate:"aria-required-attr-evaluate"},{id:"aria-required-children",evaluate:"aria-required-children-evaluate",options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","menu","menubar","table","tablist","tree","treegrid","rowgroup"]}},{id:"aria-required-parent",evaluate:"aria-required-parent-evaluate",options:{ownGroupRoles:["listitem","treeitem"]}},{id:"aria-roledescription",evaluate:"aria-roledescription-evaluate",options:{supportedRoles:["button","img","checkbox","radio","combobox","menuitemcheckbox","menuitemradio"]}},{id:"aria-unsupported-attr",evaluate:"aria-unsupported-attr-evaluate"},{id:"aria-valid-attr-value",evaluate:"aria-valid-attr-value-evaluate",options:[]},{id:"aria-valid-attr",evaluate:"aria-valid-attr-evaluate",options:[]},{id:"deprecatedrole",evaluate:"deprecatedrole-evaluate"},{id:"fallbackrole",evaluate:"fallbackrole-evaluate"},{id:"has-global-aria-attribute",evaluate:"has-global-aria-attribute-evaluate"},{id:"has-widget-role",evaluate:"has-widget-role-evaluate",options:[]},{id:"invalidrole",evaluate:"invalidrole-evaluate"},{id:"is-element-focusable",evaluate:"is-element-focusable-evaluate"},{id:"no-implicit-explicit-label",evaluate:"no-implicit-explicit-label-evaluate"},{id:"unsupportedrole",evaluate:"unsupportedrole-evaluate"},{id:"valid-scrollable-semantics",evaluate:"valid-scrollable-semantics-evaluate",options:{roles:["tooltip"]}},{id:"color-contrast-enhanced",evaluate:"color-contrast-evaluate",options:{ignoreUnicode:!0,ignoreLength:!1,ignorePseudo:!1,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:7,minThreshold:4.5},large:{expected:4.5,minThreshold:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.1,textStrokeEmMin:.03}},{id:"color-contrast",evaluate:"color-contrast-evaluate",options:{ignoreUnicode:!0,ignoreLength:!1,ignorePseudo:!1,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:4.5},large:{expected:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.2,textStrokeEmMin:.03}},{id:"link-in-text-block-style",evaluate:"link-in-text-block-style-evaluate"},{id:"link-in-text-block",evaluate:"link-in-text-block-evaluate",options:{requiredContrastRatio:3,allowSameColor:!0}},{id:"autocomplete-appropriate",evaluate:"autocomplete-appropriate-evaluate",deprecated:!0},{id:"autocomplete-valid",evaluate:"autocomplete-valid-evaluate",options:{stateTerms:["none","false","true","disabled","enabled","undefined","null"]}},{id:"accesskeys",evaluate:"accesskeys-evaluate",after:"accesskeys-after"},{id:"focusable-content",evaluate:"focusable-content-evaluate"},{id:"focusable-disabled",evaluate:"focusable-disabled-evaluate"},{id:"focusable-element",evaluate:"focusable-element-evaluate"},{id:"focusable-modal-open",evaluate:"focusable-modal-open-evaluate"},{id:"focusable-no-name",evaluate:"focusable-no-name-evaluate"},{id:"focusable-not-tabbable",evaluate:"focusable-not-tabbable-evaluate"},{id:"frame-focusable-content",evaluate:"frame-focusable-content-evaluate"},{id:"landmark-is-top-level",evaluate:"landmark-is-top-level-evaluate"},{id:"no-focusable-content",evaluate:"no-focusable-content-evaluate"},{id:"page-has-heading-one",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:"h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]",passForModal:!0}},{id:"page-has-main",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:"main:not([role]), [role='main']",passForModal:!0}},{id:"page-no-duplicate-banner",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"header:not([role]), [role=banner]",nativeScopeFilter:"article, aside, main, nav, section"}},{id:"page-no-duplicate-contentinfo",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"footer:not([role]), [role=contentinfo]",nativeScopeFilter:"article, aside, main, nav, section"}},{id:"page-no-duplicate-main",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"main:not([role]), [role='main']"}},{id:"tabindex",evaluate:"tabindex-evaluate"},{id:"alt-space-value",evaluate:"alt-space-value-evaluate"},{id:"duplicate-img-label",evaluate:"duplicate-img-label-evaluate",options:{parentSelector:"button, [role=button], a[href], p, li, td, th"}},{id:"explicit-label",evaluate:"explicit-evaluate"},{id:"help-same-as-label",evaluate:"help-same-as-label-evaluate",enabled:!1},{id:"hidden-explicit-label",evaluate:"hidden-explicit-label-evaluate"},{id:"implicit-label",evaluate:"implicit-evaluate"},{id:"label-content-name-mismatch",evaluate:"label-content-name-mismatch-evaluate",options:{pixelThreshold:.1,occurrenceThreshold:3}},{id:"multiple-label",evaluate:"multiple-label-evaluate"},{id:"title-only",evaluate:"title-only-evaluate"},{id:"landmark-is-unique",evaluate:"landmark-is-unique-evaluate",after:"landmark-is-unique-after"},{id:"has-lang",evaluate:"has-lang-evaluate",options:{attributes:["lang","xml:lang"]}},{id:"valid-lang",evaluate:"valid-lang-evaluate",options:{attributes:["lang","xml:lang"]}},{id:"xml-lang-mismatch",evaluate:"xml-lang-mismatch-evaluate"},{id:"dlitem",evaluate:"dlitem-evaluate"},{id:"listitem",evaluate:"listitem-evaluate"},{id:"only-dlitems",evaluate:"invalid-children-evaluate",options:{validRoles:["definition","term","listitem"],validNodeNames:["dt","dd"],divGroups:!0}},{id:"only-listitems",evaluate:"invalid-children-evaluate",options:{validRoles:["listitem"],validNodeNames:["li"]}},{id:"structured-dlitems",evaluate:"structured-dlitems-evaluate"},{id:"caption",evaluate:"caption-evaluate"},{id:"frame-tested",evaluate:"frame-tested-evaluate",after:"frame-tested-after",options:{isViolation:!1}},{id:"no-autoplay-audio",evaluate:"no-autoplay-audio-evaluate",options:{allowedDuration:3}},{id:"css-orientation-lock",evaluate:"css-orientation-lock-evaluate",options:{degreeThreshold:2}},{id:"meta-viewport-large",evaluate:"meta-viewport-scale-evaluate",options:{scaleMinimum:5,lowerBound:2}},{id:"meta-viewport",evaluate:"meta-viewport-scale-evaluate",options:{scaleMinimum:2}},{id:"target-offset",evaluate:"target-offset-evaluate",options:{minOffset:24}},{id:"target-size",evaluate:"target-size-evaluate",options:{minSize:24}},{id:"header-present",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:":is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]"}},{id:"heading-order",evaluate:"heading-order-evaluate",after:"heading-order-after"},{id:"identical-links-same-purpose",evaluate:"identical-links-same-purpose-evaluate",after:"identical-links-same-purpose-after"},{id:"internal-link-present",evaluate:"internal-link-present-evaluate"},{id:"landmark",evaluate:"has-descendant-evaluate",options:{selector:"main, [role=main]"}},{id:"meta-refresh-no-exceptions",evaluate:"meta-refresh-evaluate",options:{minDelay:72e3,maxDelay:!1}},{id:"meta-refresh",evaluate:"meta-refresh-evaluate",options:{minDelay:0,maxDelay:72e3}},{id:"p-as-heading",evaluate:"p-as-heading-evaluate",options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}],passLength:1,failLength:.5}},{id:"region",evaluate:"region-evaluate",after:"region-after",options:{regionMatcher:"dialog, [role=dialog], [role=alertdialog], svg"}},{id:"skip-link",evaluate:"skip-link-evaluate"},{id:"unique-frame-title",evaluate:"unique-frame-title-evaluate",after:"unique-frame-title-after"},{id:"duplicate-id-active",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"duplicate-id-aria",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"duplicate-id",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"aria-label",evaluate:"aria-label-evaluate"},{id:"aria-labelledby",evaluate:"aria-labelledby-evaluate"},{id:"avoid-inline-spacing",evaluate:"avoid-inline-spacing-evaluate",options:{cssProperties:["line-height","letter-spacing","word-spacing"]}},{id:"button-has-visible-text",evaluate:"has-text-content-evaluate"},{id:"doc-has-title",evaluate:"doc-has-title-evaluate"},{id:"exists",evaluate:"exists-evaluate"},{id:"has-alt",evaluate:"has-alt-evaluate"},{id:"has-visible-text",evaluate:"has-text-content-evaluate"},{id:"important-letter-spacing",evaluate:"inline-style-property-evaluate",options:{cssProperty:"letter-spacing",minValue:.12}},{id:"important-line-height",evaluate:"inline-style-property-evaluate",options:{multiLineOnly:!0,cssProperty:"line-height",minValue:1.5,normalValue:1}},{id:"important-word-spacing",evaluate:"inline-style-property-evaluate",options:{cssProperty:"word-spacing",minValue:.16}},{id:"is-on-screen",evaluate:"is-on-screen-evaluate"},{id:"non-empty-alt",evaluate:"attr-non-space-content-evaluate",options:{attribute:"alt"}},{id:"non-empty-if-present",evaluate:"non-empty-if-present-evaluate"},{id:"non-empty-placeholder",evaluate:"attr-non-space-content-evaluate",options:{attribute:"placeholder"}},{id:"non-empty-title",evaluate:"attr-non-space-content-evaluate",options:{attribute:"title"}},{id:"non-empty-value",evaluate:"attr-non-space-content-evaluate",options:{attribute:"value"}},{id:"presentational-role",evaluate:"presentational-role-evaluate"},{id:"role-none",evaluate:"matches-definition-evaluate",deprecated:!0,options:{matcher:{attributes:{role:"none"}}}},{id:"role-presentation",evaluate:"matches-definition-evaluate",deprecated:!0,options:{matcher:{attributes:{role:"presentation"}}}},{id:"svg-non-empty-title",evaluate:"svg-non-empty-title-evaluate"},{id:"caption-faked",evaluate:"caption-faked-evaluate"},{id:"html5-scope",evaluate:"html5-scope-evaluate"},{id:"same-caption-summary",evaluate:"same-caption-summary-evaluate"},{id:"scope-value",evaluate:"scope-value-evaluate",options:{values:["row","col","rowgroup","colgroup"]}},{id:"td-has-header",evaluate:"td-has-header-evaluate"},{id:"td-headers-attr",evaluate:"td-headers-attr-evaluate"},{id:"th-has-data-cells",evaluate:"th-has-data-cells-evaluate"},{id:"hidden-content",evaluate:"hidden-content-evaluate"}]})}("object"==typeof window?window:this);`});var ak={};S(ak,{default:()=>XY});async function Dh(){let t=window.axe,e=`lighthouse-${Math.random()}`;t.configure({branding:{application:e},noHtml:!0});let n=await t.run(document,{elementRef:!0,runOnly:{type:"tag",values:["wcag2a","wcag2aa"]},resultTypes:["violations","inapplicable"],rules:{accesskeys:{enabled:!0},"area-alt":{enabled:!1},"aria-allowed-role":{enabled:!0},"aria-dialog-name":{enabled:!0},"aria-roledescription":{enabled:!1},"aria-treeitem-name":{enabled:!0},"aria-text":{enabled:!0},"audio-caption":{enabled:!1},blink:{enabled:!1},"duplicate-id":{enabled:!1},"empty-heading":{enabled:!0},"frame-focusable-content":{enabled:!1},"frame-title-unique":{enabled:!1},"heading-order":{enabled:!0},"html-xml-lang-mismatch":{enabled:!0},"identical-links-same-purpose":{enabled:!0},"image-redundant-alt":{enabled:!0},"input-button-name":{enabled:!0},"label-content-name-mismatch":{enabled:!0},"landmark-one-main":{enabled:!0},"link-in-text-block":{enabled:!0},marquee:{enabled:!1},"meta-viewport":{enabled:!0},"nested-interactive":{enabled:!1},"no-autoplay-audio":{enabled:!1},"role-img-alt":{enabled:!1},"scrollable-region-focusable":{enabled:!1},"select-name":{enabled:!0},"server-side-image-map":{enabled:!1},"skip-link":{enabled:!0},"svg-img-alt":{enabled:!1},tabindex:{enabled:!0},"table-duplicate-name":{enabled:!0},"table-fake-caption":{enabled:!0},"target-size":{enabled:!0},"td-has-header":{enabled:!0}}});return document.documentElement.scrollTop=0,{violations:n.violations.map(Sp),incomplete:n.incomplete.map(Sp),notApplicable:n.inapplicable.map(r=>({id:r.id})),passes:n.passes.map(r=>({id:r.id})),version:n.testEngine.version}}async function JY(){let t={x:window.scrollX,y:window.scrollY};try{return await Dh()}finally{window.scrollTo(t.x,t.y)}}function Sp(t){let e=t.nodes.map(a=>{let{target:o,failureSummary:i,element:c}=a,u=getNodeDetails(c),l=new Set,m=s(f=>[null,"minor","moderate","serious","critical"].indexOf(f),"impactToNumber"),p=[...a.any,...a.all,...a.none].sort((f,y)=>m(y.impact)-m(f.impact));for(let f of p)for(let y of f.relatedNodes||[]){let b=y.element;if(l.size>=3)break;b&&c!==b&&l.add(b)}let g=[...l].map(getNodeDetails);return{target:o,failureSummary:i,node:u,relatedNodes:g}}),n=t.error,r;return n instanceof Error&&(r={name:n.name,message:n.message}),{id:t.id,impact:t.impact||void 0,tags:t.tags,nodes:e,error:r}}var Eh,XY,ok=v(()=>{"use strict";d();Ue();rk();un();s(Dh,"runA11yChecks");s(JY,"runA11yChecksAndResetScroll");s(Sp,"createAxeRuleResultArtifact");Eh=class extends X{static{s(this,"Accessibility")}meta={supportedModes:["snapshot","navigation"]};static pageFns={runA11yChecks:Dh,createAxeRuleResultArtifact:Sp};getArtifact(e){return e.driver.executionContext.evaluate(JY,{args:[],useIsolation:!0,deps:[nk,Ee.getNodeDetails,Sp,Dh]})}},XY=Eh});function ik(t){if(!(/No node.*found/.test(t.message)||/Node.*does not belong to the document/.test(t.message)))throw t}async function sk(t,e){try{return(await t.sendCommand("DOM.resolveNode",{backendNodeId:e})).object.objectId}catch(n){return ik(n)}}async function ck(t,e){try{let{nodeId:n}=await t.sendCommand("DOM.pushNodeByPathToFrontend",{path:e}),{object:{objectId:r}}=await t.sendCommand("DOM.resolveNode",{nodeId:n});return r}catch(n){return ik(n)}}var Th=v(()=>{"use strict";d();s(ik,"handlePotentialMissingNodeError");s(sk,"resolveNodeIdToObjectId");s(ck,"resolveDevtoolsNodePathToObjectId")});var uk={};S(uk,{default:()=>eK});function ZY(){let t=s(r=>{try{return new URL(r,window.location.href).href}catch{return""}},"resolveURLOrEmpty");function e(r){return(r.getAttribute("onclick")||"").slice(0,1024)}return s(e,"getTruncatedOnclick"),getElementsInDocument("a").map(r=>r instanceof HTMLAnchorElement?{href:r.href,rawHref:r.getAttribute("href")||"",onclick:e(r),role:r.getAttribute("role")||"",name:r.name,text:r.innerText,rel:r.rel,target:r.target,id:r.getAttribute("id")||"",node:getNodeDetails(r)}:{href:t(r.href.baseVal),rawHref:r.getAttribute("href")||"",onclick:e(r),role:r.getAttribute("role")||"",text:r.textContent||"",rel:"",target:r.target.baseVal||"",id:r.getAttribute("id")||"",node:getNodeDetails(r)})}async function QY(t,e){let n=await ck(t,e);return n?(await t.sendCommand("DOMDebugger.getEventListeners",{objectId:n})).listeners.map(({type:a})=>({type:a})):[]}var Sh,eK,lk=v(()=>{"use strict";d();Ue();un();Th();s(ZY,"collectAnchorElements");s(QY,"getEventListeners");Sh=class extends X{static{s(this,"AnchorElements")}meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){let n=e.driver.defaultSession,r=await e.driver.executionContext.evaluate(ZY,{args:[],useIsolation:!0,deps:[Ee.getElementsInDocument,Ee.getNodeDetails]});await n.sendCommand("DOM.enable"),await n.sendCommand("DOM.getDocument",{depth:-1,pierce:!0});let a=r.map(async i=>{let c=await QY(n,i.node.devtoolsNodePath);return{...i,listeners:c}}),o=await Promise.all(a);return await n.sendCommand("DOM.disable"),o}},eK=Sh});function dk(){return{promise:Promise.resolve(),cancel(){}}}function xp(t){let e=s(()=>{throw new Error("waitForFrameNavigated.cancel() called before it was defined")},"cancel");return{promise:new Promise((r,a)=>{t.once("Page.frameNavigated",r),e=s(()=>{t.off("Page.frameNavigated",r),a(new Error("Wait for navigated cancelled"))},"cancel")}),cancel:e}}function tK(t,e,n){let r=s(()=>{throw new Error("waitForFcp.cancel() called before it was defined")},"cancel");return{promise:new Promise((o,i)=>{let c=setTimeout(()=>{i(new G(G.errors.NO_FCP))},n),u,l=s(p=>{p.name==="firstContentfulPaint"&&(u=setTimeout(()=>{o(),r()},e))},"lifecycleListener");t.on("Page.lifecycleEvent",l);let m=!1;r=s(()=>{m||(m=!0,t.off("Page.lifecycleEvent",l),c&&clearTimeout(c),u&&clearTimeout(u),i(new Error("Wait for FCP canceled")))},"cancel")}),cancel:r}}function xh(t,e,n){let r=!1,a,o=s(()=>{throw new Error("waitForNetworkIdle.cancel() called before it was defined")},"cancel"),{networkQuietThresholdMs:i,busyEvent:c,idleEvent:u,isIdle:l}=n;return{promise:new Promise((p,g)=>{let f=s(()=>{e.once(c,y),a=setTimeout(()=>{o(),p()},i)},"onIdle"),y=s(()=>{e.once(u,f),a&&clearTimeout(a)},"onBusy"),b=s(()=>{r=!0,l(e)?f():y()},"domContentLoadedListener"),D=s(()=>{if(!r){N.verbose("waitFor","Waiting on DomContentLoaded");return}let A=e.getInflightRequests();if(N.isVerbose()&&A.length<20&&A.length>0){N.verbose("waitFor",`=== Waiting on ${A.length} requests to finish`);for(let R of A)N.verbose("waitFor",`Waiting on ${R.url.slice(0,120)} to finish`)}},"logStatus");e.on("requeststarted",D),e.on("requestfinished",D),e.on(c,D),n.pretendDCLAlreadyFired?b():t.once("Page.domContentEventFired",b);let T=!1;o=s(()=>{T||(T=!0,a&&clearTimeout(a),n.pretendDCLAlreadyFired||t.off("Page.domContentEventFired",b),e.removeListener(c,y),e.removeListener(u,f),e.removeListener("requeststarted",D),e.removeListener("requestfinished",D),e.removeListener(c,D))},"cancel")}),cancel:o}}function nK(t,e){if(!e)return{promise:Promise.resolve(),cancel:()=>{}};let n,r=!1;async function a(u,l){if(r)return;let m=await u.evaluate(aK,{args:[],useIsolation:!0});if(!r&&typeof m=="number")if(m>=e)N.verbose("waitFor",`CPU has been idle for ${m} ms`),l();else{N.verbose("waitFor",`CPU has been idle for ${m} ms`);let p=e-m;n=setTimeout(()=>a(u,l),p)}}s(a,"checkForQuiet");let o=s(()=>{throw new Error("waitForCPUIdle.cancel() called before it was defined")},"cancel"),i=new Ka(t);return{promise:new Promise((u,l)=>{i.evaluate(rK,{args:[],useIsolation:!0}).then(()=>a(i,u)).catch(l),o=s(()=>{r||(r=!0,n&&clearTimeout(n),l(new Error("Wait for CPU idle canceled")))},"cancel")}),cancel:o}}function rK(){if(window.____lastLongTask!==void 0)return;window.____lastLongTask=performance.now(),new window.PerformanceObserver(e=>{let n=e.getEntries();for(let r of n)if(r.entryType==="longtask"){let a=r.startTime+r.duration;window.____lastLongTask=Math.max(window.____lastLongTask||0,a)}}).observe({type:"longtask",buffered:!0})}function aK(){return new Promise(t=>{let e=performance.now(),n=window.____lastLongTask||0;setTimeout(()=>{let r=window.____lastLongTask||0,a=n===r?e-n:0;t(a)},150)})}function Ch(t,e){let n=s(()=>{throw new Error("waitForLoadEvent.cancel() called before it was defined")},"cancel");return{promise:new Promise((a,o)=>{let i,c=s(function(){i=setTimeout(a,e)},"loadListener");t.once("Page.loadEventFired",c);let u=!1;n=s(()=>{u||(u=!0,t.off("Page.loadEventFired",c),i&&clearTimeout(i))},"cancel")}),cancel:n}}async function oK(t){try{return t.setNextProtocolTimeout(1e3),await t.sendCommand("Runtime.evaluate",{expression:'"ping"',returnByValue:!0,timeout:1e3}),!1}catch{return!0}}async function mk(t,e,n){let{pauseAfterFcpMs:r,pauseAfterLoadMs:a,networkQuietThresholdMs:o,cpuQuietThresholdMs:i,maxWaitForLoadedMs:c,maxWaitForFcpMs:u}=n,{waitForFcp:l,waitForLoadEvent:m,waitForNetworkIdle:p,waitForCPUIdle:g}=n._waitForTestOverrides||iK,f,y=u?l(t,r,u):dk(),b=m(t,a),D=p(t,e,{networkQuietThresholdMs:o,busyEvent:"network-2-busy",idleEvent:"network-2-idle",isIdle:V=>V.is2Idle()}),T=p(t,e,{networkQuietThresholdMs:o,busyEvent:"network-critical-busy",idleEvent:"network-critical-idle",isIdle:V=>V.isCriticalIdle()}),A=dk(),R=Promise.all([y.promise,b.promise,D.promise,T.promise]).then(()=>(A=g(t,i),A.promise)).then(()=>s(async function(){return N.verbose("waitFor","loadEventFired and network considered idle"),{timedOut:!1}},"cleanupFn")).catch(V=>function(){throw V}),F=new Promise((V,z)=>{f=setTimeout(V,c)}).then(V=>async()=>{if(N.warn("waitFor","Timed out waiting for page load. Checking if page is hung..."),await oK(t))throw N.warn("waitFor","Page appears to be hung, killing JavaScript..."),await t.sendCommand("Emulation.setScriptExecutionDisabled",{value:!0}),await t.sendCommand("Runtime.terminateExecution"),new G(G.errors.PAGE_HUNG);let z=e.getInflightRequests().map(ne=>ne.url);return z.length>0&&N.warn("waitFor","Remaining inflight requests URLs",z),{timedOut:!0}}),M=await Promise.race([R,F]);return f&&clearTimeout(f),y.cancel(),b.cancel(),D.cancel(),A.cancel(),M()}function pk(t){function e(){let n=s(()=>{},"resolve"),r=new Promise(a=>n=a);return console.log(["You have enabled Lighthouse navigation debug mode.",'When you have finished inspecting the page, evaluate "continueLighthouseRun()"',"in the console to continue with the Lighthouse run."].join(" ")),window.continueLighthouseRun=n,r}return s(e,"createInPagePromise"),t.defaultSession.setNextProtocolTimeout(2**31-1),t.executionContext.evaluate(e,{args:[]})}var iK,Cp=v(()=>{"use strict";d();He();Bt();hp();s(dk,"waitForNothing");s(xp,"waitForFrameNavigated");s(tK,"waitForFcp");s(xh,"waitForNetworkIdle");s(nK,"waitForCPUIdle");s(rK,"registerPerformanceObserverInPage");s(aK,"checkTimeSinceLastLongTaskInPage");s(Ch,"waitForLoadEvent");s(oK,"isPageHung");iK={waitForFcp:tK,waitForLoadEvent:Ch,waitForCPUIdle:nK,waitForNetworkIdle:xh};s(mk,"waitForFullyLoaded");s(pk,"waitForUserToContinue")});var fk={};S(fk,{DevtoolsMessageLog:()=>Ap,default:()=>Lt});var Ah,Ap,Lt,Kn=v(()=>{"use strict";d();Ue();Ah=class t extends X{static{s(this,"DevtoolsLog")}static symbol=Symbol("DevtoolsLog");meta={symbol:t.symbol,supportedModes:["timespan","navigation"]};constructor(){super(),this._messageLog=new Ap(/^(Page|Network|Target|Runtime)\./),this._onProtocolMessage=e=>this._messageLog.record(e)}async startSensitiveInstrumentation({driver:e}){this._messageLog.reset(),this._messageLog.beginRecording(),e.targetManager.on("protocolevent",this._onProtocolMessage),await e.defaultSession.sendCommand("Page.enable")}async stopSensitiveInstrumentation({driver:e}){this._messageLog.endRecording(),e.targetManager.off("protocolevent",this._onProtocolMessage)}async getArtifact(){return this._messageLog.messages}},Ap=class{static{s(this,"DevtoolsMessageLog")}constructor(e){this._filter=e,this._messages=[],this._isRecording=!1}get messages(){return this._messages}reset(){this._messages=[]}beginRecording(){this._isRecording=!0}endRecording(){this._isRecording=!1}record(e){this._isRecording&&typeof e.method=="string"&&(this._filter&&!this._filter.test(e.method)||this._messages.push(e))}},Lt=Ah});var gk={};S(gk,{default:()=>uK});var sK,cK,Fh,uK,hk=v(()=>{"use strict";d();Ue();Cp();Kn();sK=100,cK=100,Fh=class t extends X{static{s(this,"BFCacheFailures")}meta={supportedModes:["navigation","timespan"],dependencies:{DevtoolsLog:Lt.symbol}};static processBFCacheEventList(e){let n={Circumstantial:{},PageSupportNeeded:{},SupportPending:{}};for(let r of e){let a=n[r.type];a[r.reason]=[]}return{notRestoredReasonsTree:n}}static processBFCacheEventTree(e){let n={Circumstantial:{},PageSupportNeeded:{},SupportPending:{}};function r(a){for(let o of a.explanations){let i=n[o.type],c=i[o.reason]||[];c.push(a.url),i[o.reason]=c}for(let o of a.children)r(o)}return s(r,"traverse"),r(e),{notRestoredReasonsTree:n}}static processBFCacheEvent(e){return e?.notRestoredExplanationsTree?t.processBFCacheEventTree(e.notRestoredExplanationsTree):t.processBFCacheEventList(e?.notRestoredExplanations||[])}async activelyCollectBFCacheEvent(e){let n=e.driver.defaultSession,r;function a(u){r=u}s(a,"onBfCacheNotUsed"),n.on("Page.backForwardCacheNotUsed",a);let o=await n.sendCommand("Page.getNavigationHistory"),i=o.entries[o.currentIndex];await Promise.all([n.sendCommand("Page.navigate",{url:"chrome://terms"}),Ch(n,cK).promise]);let[,c]=await Promise.all([n.sendCommand("Page.navigateToHistoryEntry",{entryId:i.id}),xp(n).promise]);if(await new Promise(u=>setTimeout(u,sK)),c.type!=="BackForwardCacheRestore"&&!r)throw new Error("bfcache failed but the failure reasons were not emitted in time");return n.off("Page.backForwardCacheNotUsed",a),r}passivelyCollectBFCacheEvents(e){let n=[];for(let r of e.dependencies.DevtoolsLog)r.method==="Page.backForwardCacheNotUsed"&&n.push(r.params);return n}async getArtifact(e){let n=this.passivelyCollectBFCacheEvents(e);if(e.gatherMode==="navigation"&&!e.settings.usePassiveGathering){let r=await this.activelyCollectBFCacheEvent(e);r&&n.push(r)}return n.map(t.processBFCacheEvent)}},uK=Fh});var yk={};S(yk,{default:()=>dK});function lK(){return caches.keys().then(t=>Promise.all(t.map(e=>caches.open(e)))).then(t=>{let e=[];return Promise.all(t.map(n=>n.keys().then(r=>{e.push(...r.map(a=>a.url))}))).then(n=>e)})}var Rh,dK,vk=v(()=>{"use strict";d();Ue();s(lK,"getCacheContents");Rh=class extends X{static{s(this,"CacheContents")}meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){return await e.driver.executionContext.evaluate(lK,{args:[]})}},dK=Rh});var bk={};S(bk,{default:()=>pK});function mK(t){if(typeof t.value<"u"||t.type==="undefined")return String(t.value);if(typeof t.description=="string"&&t.description!==t.className)return t.description;let e=t.subtype||t.type,n=t.className||"Object";return`[${e} ${n}]`}var _h,pK,wk=v(()=>{"use strict";d();Ue();s(mK,"remoteObjectToString");_h=class extends X{static{s(this,"ConsoleMessages")}meta={supportedModes:["timespan","navigation"]};constructor(){super(),this._logEntries=[],this._onConsoleAPICalled=this.onConsoleAPICalled.bind(this),this._onExceptionThrown=this.onExceptionThrown.bind(this),this._onLogEntryAdded=this.onLogEntry.bind(this)}onConsoleAPICalled(e){let{type:n}=e;if(n!=="warning"&&n!=="error")return;let a=(e.args||[]).map(mK).join(" ");if(!a&&!e.stackTrace)return;let{url:o,lineNumber:i,columnNumber:c}=e.stackTrace?.callFrames[0]||{},u={eventType:"consoleAPI",source:n==="warning"?"console.warn":"console.error",level:n,text:a,stackTrace:e.stackTrace,timestamp:e.timestamp,url:o,lineNumber:i,columnNumber:c};this._logEntries.push(u)}onExceptionThrown(e){let n=e.exceptionDetails.exception?e.exceptionDetails.exception.description:e.exceptionDetails.text;if(!n)return;let r={eventType:"exception",source:"exception",level:"error",text:n,stackTrace:e.exceptionDetails.stackTrace,timestamp:e.timestamp,url:e.exceptionDetails.url,scriptId:e.exceptionDetails.scriptId,lineNumber:e.exceptionDetails.lineNumber,columnNumber:e.exceptionDetails.columnNumber};this._logEntries.push(r)}onLogEntry(e){let{source:n,level:r,text:a,stackTrace:o,timestamp:i,url:c,lineNumber:u}=e.entry,l=e.entry.stackTrace?.callFrames[0];this._logEntries.push({eventType:"protocolLog",source:n,level:r,text:a,stackTrace:o,timestamp:i,url:c,scriptId:l?.scriptId,lineNumber:u,columnNumber:l?.columnNumber})}async startInstrumentation(e){let n=e.driver.defaultSession;n.on("Log.entryAdded",this._onLogEntryAdded),await n.sendCommand("Log.enable"),await n.sendCommand("Log.startViolationsReport",{config:[{name:"discouragedAPIUse",threshold:-1}]}),n.on("Runtime.consoleAPICalled",this._onConsoleAPICalled),n.on("Runtime.exceptionThrown",this._onExceptionThrown),await n.sendCommand("Runtime.enable")}async stopInstrumentation({driver:e}){await e.defaultSession.sendCommand("Log.stopViolationsReport"),await e.defaultSession.off("Log.entryAdded",this._onLogEntryAdded),await e.defaultSession.sendCommand("Log.disable"),await e.defaultSession.off("Runtime.consoleAPICalled",this._onConsoleAPICalled),await e.defaultSession.off("Runtime.exceptionThrown",this._onExceptionThrown),await e.defaultSession.sendCommand("Runtime.disable")}async getArtifact(){return this._logEntries}},pK=_h});var Dk={};S(Dk,{default:()=>fK});var kh,fK,Ek=v(()=>{"use strict";d();He();Ue();da();kh=class extends X{static{s(this,"CSSUsage")}constructor(){super(),this._session=void 0,this._sheetPromises=new Map,this._ruleUsage=void 0,this._onStylesheetAdded=this._onStylesheetAdded.bind(this)}meta={supportedModes:["snapshot","timespan","navigation"]};async _onStylesheetAdded(e){if(!this._session)throw new Error("Session not initialized");let n=e.header.styleSheetId,r=this._session.sendCommand("CSS.getStyleSheetText",{styleSheetId:n}).then(a=>({header:e.header,content:a.text})).catch(a=>(N.warn("CSSUsage",`Error fetching content of stylesheet with URL "${e.header.sourceURL}"`),en.captureException(a,{tags:{gatherer:"CSSUsage"},extra:{url:e.header.sourceURL},level:"error"}),a));this._sheetPromises.set(n,r)}async startCSSUsageTracking(e){let n=e.driver.defaultSession;this._session=n,n.on("CSS.styleSheetAdded",this._onStylesheetAdded),await n.sendCommand("DOM.enable"),await n.sendCommand("CSS.enable"),await n.sendCommand("CSS.startRuleUsageTracking")}async stopCSSUsageTracking(e){let n=e.driver.defaultSession,r=await n.sendCommand("CSS.stopRuleUsageTracking");this._ruleUsage=r.ruleUsage,n.off("CSS.styleSheetAdded",this._onStylesheetAdded)}async startInstrumentation(e){e.gatherMode==="timespan"&&await this.startCSSUsageTracking(e)}async stopInstrumentation(e){e.gatherMode==="timespan"&&await this.stopCSSUsageTracking(e)}async getArtifact(e){let n=e.driver.defaultSession,r=e.driver.executionContext;e.gatherMode!=="timespan"&&(await this.startCSSUsageTracking(e),await r.evaluateAsync("getComputedStyle(document.body)"),await this.stopCSSUsageTracking(e));let a=new Map,o=await Promise.all(this._sheetPromises.values());for(let i of o)i instanceof Error||a.set(i.content,i);if(await n.sendCommand("CSS.disable"),await n.sendCommand("DOM.disable"),!this._ruleUsage)throw new Error("Issue collecting rule usages");return{rules:this._ruleUsage,stylesheets:Array.from(a.values())}}},fK=kh});var Tk={};S(Tk,{default:()=>gK});var Ih,gK,Sk=v(()=>{"use strict";d();Kn();Ue();Ih=class extends X{static{s(this,"DevtoolsLogCompat")}meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Lt.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.DevtoolsLog}}},gK=Ih});var xk={};S(xk,{default:()=>yK});function hK(){if(!document.doctype)return null;let t=document.compatMode,{name:e,publicId:n,systemId:r}=document.doctype;return{name:e,publicId:n,systemId:r,documentCompatMode:t}}var Mh,yK,Ck=v(()=>{"use strict";d();Ue();s(hK,"getDoctype");Mh=class extends X{static{s(this,"Doctype")}meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(hK,{args:[],useIsolation:!0})}},yK=Mh});var Ak={};S(Ak,{default:()=>bK});function vK(t=document.body,e=!0){let n=null,r=-1,a=-1,o=0,i=null,c=s(function(l,m=1){m>r&&(n=l,r=m),l.children.length>a&&(i=l,a=l.children.length);let p=l.firstElementChild;for(;p;)c(p,m+1),e&&p.shadowRoot&&c(p.shadowRoot,m+1),p=p.nextElementSibling,o++;return{maxDepth:r,maxWidth:a,numElements:o}},"_calcDOMWidthAndHeight"),u=c(t);return{depth:{max:u.maxDepth,...getNodeDetails(n)},width:{max:u.maxWidth,...getNodeDetails(i)},totalBodyElements:u.numElements}}var Nh,bK,Fk=v(()=>{"use strict";d();Ue();un();s(vK,"getDOMStats");Nh=class extends X{static{s(this,"DOMStats")}meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){let n=e.driver;await n.defaultSession.sendCommand("DOM.enable");let r=await n.executionContext.evaluate(vK,{args:[],useIsolation:!0,deps:[Ee.getNodeDetails]});return await n.defaultSession.sendCommand("DOM.disable"),r}},bK=Nh});var Rk={};S(Rk,{default:()=>CK});var wK,DK,EK,TK,SK,xK,Lh,CK,_k=v(()=>{"use strict";d();He();Ue();lt();St();da();De();Kn();wK=5e3,DK=2e3*1024,EK=.92,TK=.85,SK=4096,xK=/^image\/((x|ms|x-ms)-)?(png|bmp|jpeg)$/,Lh=class t extends X{static{s(this,"OptimizedImages")}meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Lt.symbol}};constructor(){super(),this._encodingStartAt=0}static filterImageRequests(e){let n=new Set;return e.reduce((r,a)=>{if(n.has(a.url)||!a.finished||a.isOutOfProcessIframe)return r;n.add(a.url);let o=a.resourceType===Y.TYPES.Image&&xK.test(a.mimeType),i=Y.getResourceSizeOnNetwork(a);return o&&i>SK&&r.push({requestId:a.requestId,url:a.url,mimeType:a.mimeType,resourceSize:i}),r},[])}_getEncodedResponse(e,n,r){n=Y.getRequestIdForBackend(n);let o={requestId:n,encoding:r,quality:r==="jpeg"?EK:TK,sizeOnly:!0};return e.sendCommand("Audits.getEncodedResponse",o)}async calculateImageStats(e,n){let r=n.resourceSize;if(Date.now()-this._encodingStartAt>wK||r>DK)return{originalSize:r,jpegSize:void 0,webpSize:void 0};let a=await this._getEncodedResponse(e,n.requestId,"jpeg"),o=await this._getEncodedResponse(e,n.requestId,"webp");return{originalSize:r,jpegSize:a.encodedSize,webpSize:o.encodedSize}}async computeOptimizedImages(e,n){this._encodingStartAt=Date.now();let r=[];for(let a of n)try{let i={failed:!1,...await this.calculateImageStats(e,a),...a};r.push(i)}catch(o){N.warn("optimized-images",o.message),en.captureException(o,{tags:{gatherer:"OptimizedImages"},extra:{imageUrl:te.elideDataURI(a.url)},level:"warning"});let i={failed:!0,errMsg:o.message,...a};r.push(i)}return r}async getArtifact(e){let n=e.dependencies.DevtoolsLog,r=await $.request(n,e),a=t.filterImageRequests(r).sort((c,u)=>u.resourceSize-c.resourceSize),o=await this.computeOptimizedImages(e.driver.defaultSession,a),i=o.filter(c=>!c.failed);if(o.length&&!i.length)throw new Error("All image optimizations failed");return o}},CK=Lh});var Fp,Ph=v(()=>{d();Fp={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}});function AK(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var kk,Ik=v(()=>{d();s(AK,"ZStream");kk=AK});function vs(t,e,n,r,a){if(e.subarray&&t.subarray){t.set(e.subarray(n,n+r),a);return}for(var o=0;o<r;o++)t[a+o]=e[n+o]}var Oh,pa,Uh=v(()=>{"use strict";d();s(vs,"arraySet");Oh=Uint8Array,pa=Uint16Array});function ws(t){for(var e=t.length;--e>=0;)t[e]=0}function jh(t,e,n,r,a){this.static_tree=t,this.extra_bits=e,this.extra_base=n,this.elems=r,this.max_length=a,this.has_stree=t&&t.length}function qh(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function Kk(t){return t<256?Au[t]:Au[256+(t>>>7)]}function Ru(t,e){t.pending_buf[t.pending++]=e&255,t.pending_buf[t.pending++]=e>>>8&255}function Bn(t,e,n){t.bi_valid>Bh-n?(t.bi_buf|=e<<t.bi_valid&65535,Ru(t,t.bi_buf),t.bi_buf=e>>Bh-t.bi_valid,t.bi_valid+=n-Bh):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=n)}function Nr(t,e,n){Bn(t,n[e*2],n[e*2+1])}function Jk(t,e){var n=0;do n|=t&1,t>>>=1,n<<=1;while(--e>0);return n>>>1}function OK(t){t.bi_valid===16?(Ru(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)}function UK(t,e){var n=e.dyn_tree,r=e.max_code,a=e.stat_desc.static_tree,o=e.stat_desc.has_stree,i=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,u=e.stat_desc.max_length,l,m,p,g,f,y,b=0;for(g=0;g<=Zo;g++)t.bl_count[g]=0;for(n[t.heap[t.heap_max]*2+1]=0,l=t.heap_max+1;l<qk;l++)m=t.heap[l],g=n[n[m*2+1]*2+1]+1,g>u&&(g=u,b++),n[m*2+1]=g,!(m>r)&&(t.bl_count[g]++,f=0,m>=c&&(f=i[m-c]),y=n[m*2],t.opt_len+=y*(g+f),o&&(t.static_len+=y*(a[m*2+1]+f)));if(b!==0){do{for(g=u-1;t.bl_count[g]===0;)g--;t.bl_count[g]--,t.bl_count[g+1]+=2,t.bl_count[u]--,b-=2}while(b>0);for(g=u;g!==0;g--)for(m=t.bl_count[g];m!==0;)p=t.heap[--l],!(p>r)&&(n[p*2+1]!==g&&(t.opt_len+=(g-n[p*2+1])*n[p*2],n[p*2+1]=g),m--)}}function Xk(t,e,n){var r=new Array(Zo+1),a=0,o,i;for(o=1;o<=Zo;o++)r[o]=a=a+n[o-1]<<1;for(i=0;i<=e;i++){var c=t[i*2+1];c!==0&&(t[i*2]=Jk(r[c]++,c))}}function BK(){var t,e,n,r,a,o=new Array(Zo+1);for(n=0,r=0;r<Wh-1;r++)for(Yh[r]=n,t=0;t<1<<Hh[r];t++)Fu[n++]=r;for(Fu[n-1]=r,a=0,r=0;r<16;r++)for(_p[r]=a,t=0;t<1<<Rp[r];t++)Au[a++]=r;for(a>>=7;r<bs;r++)for(_p[r]=a<<7,t=0;t<1<<Rp[r]-7;t++)Au[256+a++]=r;for(e=0;e<=Zo;e++)o[e]=0;for(t=0;t<=143;)fa[t*2+1]=8,t++,o[8]++;for(;t<=255;)fa[t*2+1]=9,t++,o[9]++;for(;t<=279;)fa[t*2+1]=7,t++,o[7]++;for(;t<=287;)fa[t*2+1]=8,t++,o[8]++;for(Xk(fa,Cu+1,o),t=0;t<bs;t++)xu[t*2+1]=5,xu[t*2]=Jk(t,5);Vk=new jh(fa,Hh,_u+1,Cu,Zo),$k=new jh(xu,Rp,0,bs,Zo),Yk=new jh(new Array(0),LK,0,Vh,NK)}function Zk(t){var e;for(e=0;e<Cu;e++)t.dyn_ltree[e*2]=0;for(e=0;e<bs;e++)t.dyn_dtree[e*2]=0;for(e=0;e<Vh;e++)t.bl_tree[e*2]=0;t.dyn_ltree[$h*2]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function Qk(t){t.bi_valid>8?Ru(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function jK(t,e,n,r){Qk(t),r&&(Ru(t,n),Ru(t,~n)),vs(t.pending_buf,t.window,e,n,t.pending),t.pending+=n}function Lk(t,e,n,r){var a=e*2,o=n*2;return t[a]<t[o]||t[a]===t[o]&&r[e]<=r[n]}function zh(t,e,n){for(var r=t.heap[n],a=n<<1;a<=t.heap_len&&(a<t.heap_len&&Lk(e,t.heap[a+1],t.heap[a],t.depth)&&a++,!Lk(e,r,t.heap[a],t.depth));)t.heap[n]=t.heap[a],n=a,a<<=1;t.heap[n]=r}function Pk(t,e,n){var r,a,o=0,i,c;if(t.last_lit!==0)do r=t.pending_buf[t.d_buf+o*2]<<8|t.pending_buf[t.d_buf+o*2+1],a=t.pending_buf[t.l_buf+o],o++,r===0?Nr(t,a,e):(i=Fu[a],Nr(t,i+_u+1,e),c=Hh[i],c!==0&&(a-=Yh[i],Bn(t,a,c)),r--,i=Kk(r),Nr(t,i,n),c=Rp[i],c!==0&&(r-=_p[i],Bn(t,r,c)));while(o<t.last_lit);Nr(t,$h,e)}function Gh(t,e){var n=e.dyn_tree,r=e.stat_desc.static_tree,a=e.stat_desc.has_stree,o=e.stat_desc.elems,i,c,u=-1,l;for(t.heap_len=0,t.heap_max=qk,i=0;i<o;i++)n[i*2]!==0?(t.heap[++t.heap_len]=u=i,t.depth[i]=0):n[i*2+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=u<2?++u:0,n[l*2]=1,t.depth[l]=0,t.opt_len--,a&&(t.static_len-=r[l*2+1]);for(e.max_code=u,i=t.heap_len>>1;i>=1;i--)zh(t,n,i);l=o;do i=t.heap[1],t.heap[1]=t.heap[t.heap_len--],zh(t,n,1),c=t.heap[1],t.heap[--t.heap_max]=i,t.heap[--t.heap_max]=c,n[l*2]=n[i*2]+n[c*2],t.depth[l]=(t.depth[i]>=t.depth[c]?t.depth[i]:t.depth[c])+1,n[i*2+1]=n[c*2+1]=l,t.heap[1]=l++,zh(t,n,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],UK(t,e),Xk(n,u,t.bl_count)}function Ok(t,e,n){var r,a=-1,o,i=e[0*2+1],c=0,u=7,l=4;for(i===0&&(u=138,l=3),e[(n+1)*2+1]=65535,r=0;r<=n;r++)o=i,i=e[(r+1)*2+1],!(++c<u&&o===i)&&(c<l?t.bl_tree[o*2]+=c:o!==0?(o!==a&&t.bl_tree[o*2]++,t.bl_tree[zk*2]++):c<=10?t.bl_tree[Hk*2]++:t.bl_tree[Gk*2]++,c=0,a=o,i===0?(u=138,l=3):o===i?(u=6,l=3):(u=7,l=4))}function Uk(t,e,n){var r,a=-1,o,i=e[0*2+1],c=0,u=7,l=4;for(i===0&&(u=138,l=3),r=0;r<=n;r++)if(o=i,i=e[(r+1)*2+1],!(++c<u&&o===i)){if(c<l)do Nr(t,o,t.bl_tree);while(--c!==0);else o!==0?(o!==a&&(Nr(t,o,t.bl_tree),c--),Nr(t,zk,t.bl_tree),Bn(t,c-3,2)):c<=10?(Nr(t,Hk,t.bl_tree),Bn(t,c-3,3)):(Nr(t,Gk,t.bl_tree),Bn(t,c-11,7));c=0,a=o,i===0?(u=138,l=3):o===i?(u=6,l=3):(u=7,l=4)}}function qK(t){var e;for(Ok(t,t.dyn_ltree,t.l_desc.max_code),Ok(t,t.dyn_dtree,t.d_desc.max_code),Gh(t,t.bl_desc),e=Vh-1;e>=3&&t.bl_tree[Wk[e]*2+1]===0;e--);return t.opt_len+=3*(e+1)+5+5+4,e}function zK(t,e,n,r){var a;for(Bn(t,e-257,5),Bn(t,n-1,5),Bn(t,r-4,4),a=0;a<r;a++)Bn(t,t.bl_tree[Wk[a]*2+1],3);Uk(t,t.dyn_ltree,e-1),Uk(t,t.dyn_dtree,n-1)}function HK(t){var e=4093624447,n;for(n=0;n<=31;n++,e>>>=1)if(e&1&&t.dyn_ltree[n*2]!==0)return Mk;if(t.dyn_ltree[9*2]!==0||t.dyn_ltree[10*2]!==0||t.dyn_ltree[13*2]!==0)return Nk;for(n=32;n<_u;n++)if(t.dyn_ltree[n*2]!==0)return Nk;return Mk}function eI(t){Bk||(BK(),Bk=!0),t.l_desc=new qh(t.dyn_ltree,Vk),t.d_desc=new qh(t.dyn_dtree,$k),t.bl_desc=new qh(t.bl_tree,Yk),t.bi_buf=0,t.bi_valid=0,Zk(t)}function Kh(t,e,n,r){Bn(t,(_K<<1)+(r?1:0),3),jK(t,e,n,!0)}function tI(t){Bn(t,jk<<1,3),Nr(t,$h,fa),OK(t)}function nI(t,e,n,r){var a,o,i=0;t.level>0?(t.strm.data_type===RK&&(t.strm.data_type=HK(t)),Gh(t,t.l_desc),Gh(t,t.d_desc),i=qK(t),a=t.opt_len+3+7>>>3,o=t.static_len+3+7>>>3,o<=a&&(a=o)):a=o=n+5,n+4<=a&&e!==-1?Kh(t,e,n,r):t.strategy===FK||o===a?(Bn(t,(jk<<1)+(r?1:0),3),Pk(t,fa,xu)):(Bn(t,(kK<<1)+(r?1:0),3),zK(t,t.l_desc.max_code+1,t.d_desc.max_code+1,i+1),Pk(t,t.dyn_ltree,t.dyn_dtree)),Zk(t),r&&Qk(t)}function ga(t,e,n){return t.pending_buf[t.d_buf+t.last_lit*2]=e>>>8&255,t.pending_buf[t.d_buf+t.last_lit*2+1]=e&255,t.pending_buf[t.l_buf+t.last_lit]=n&255,t.last_lit++,e===0?t.dyn_ltree[n*2]++:(t.matches++,e--,t.dyn_ltree[(Fu[n]+_u+1)*2]++,t.dyn_dtree[Kk(e)*2]++),t.last_lit===t.lit_bufsize-1}var FK,Mk,Nk,RK,_K,jk,kK,IK,MK,Wh,_u,Cu,bs,Vh,qk,Zo,Bh,NK,$h,zk,Hk,Gk,Hh,Rp,LK,Wk,PK,fa,xu,Au,Fu,Yh,_p,Vk,$k,Yk,Bk,rI=v(()=>{"use strict";d();Uh();FK=4,Mk=0,Nk=1,RK=2;s(ws,"zero");_K=0,jk=1,kK=2,IK=3,MK=258,Wh=29,_u=256,Cu=_u+1+Wh,bs=30,Vh=19,qk=2*Cu+1,Zo=15,Bh=16,NK=7,$h=256,zk=16,Hk=17,Gk=18,Hh=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],Rp=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],LK=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Wk=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],PK=512,fa=new Array((Cu+2)*2);ws(fa);xu=new Array(bs*2);ws(xu);Au=new Array(PK);ws(Au);Fu=new Array(MK-IK+1);ws(Fu);Yh=new Array(Wh);ws(Yh);_p=new Array(bs);ws(_p);s(jh,"StaticTreeDesc");s(qh,"TreeDesc");s(Kk,"d_code");s(Ru,"put_short");s(Bn,"send_bits");s(Nr,"send_code");s(Jk,"bi_reverse");s(OK,"bi_flush");s(UK,"gen_bitlen");s(Xk,"gen_codes");s(BK,"tr_static_init");s(Zk,"init_block");s(Qk,"bi_windup");s(jK,"copy_block");s(Lk,"smaller");s(zh,"pqdownheap");s(Pk,"compress_block");s(Gh,"build_tree");s(Ok,"scan_tree");s(Uk,"send_tree");s(qK,"build_bl_tree");s(zK,"send_all_trees");s(HK,"detect_data_type");Bk=!1;s(eI,"_tr_init");s(Kh,"_tr_stored_block");s(tI,"_tr_align");s(nI,"_tr_flush_block");s(ga,"_tr_tally")});function GK(t,e,n,r){for(var a=t&65535|0,o=t>>>16&65535|0,i=0;n!==0;){i=n>2e3?2e3:n,n-=i;do a=a+e[r++]|0,o=o+a|0;while(--i);a%=65521,o%=65521}return a|o<<16|0}var aI,oI=v(()=>{d();s(GK,"adler32");aI=GK});function WK(){for(var t,e=[],n=0;n<256;n++){t=n;for(var r=0;r<8;r++)t=t&1?3988292384^t>>>1:t>>>1;e[n]=t}return e}function $K(t,e,n,r){var a=VK,o=r+n;t^=-1;for(var i=r;i<o;i++)t=t>>>8^a[(t^e[i])&255];return t^-1}var VK,ha,iI=v(()=>{d();s(WK,"makeTable");VK=WK();s($K,"crc32");ha=$K});function eo(t,e){return t.msg=Fp[e],e}function uI(t){return(t<<1)-(t>4?9:0)}function Qo(t){for(var e=t.length;--e>=0;)t[e]=0}function Xa(t){var e=t.state,n=e.pending;n>t.avail_out&&(n=t.avail_out),n!==0&&(vs(t.output,e.pending_buf,e.pending_out,n,t.next_out),t.next_out+=n,e.pending_out+=n,t.total_out+=n,t.avail_out-=n,e.pending-=n,e.pending===0&&(e.pending_out=0))}function ln(t,e){nI(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Xa(t.strm)}function it(t,e){t.pending_buf[t.pending++]=e}function ku(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=e&255}function dJ(t,e,n,r){var a=t.avail_in;return a>r&&(a=r),a===0?0:(t.avail_in-=a,vs(e,t.input,t.next_in,a,n),t.state.wrap===1?t.adler=aI(t.adler,e,a,n):t.state.wrap===2&&(t.adler=ha(t.adler,e,a,n)),t.next_in+=a,t.total_in+=a,a)}function lI(t,e){var n=t.max_chain_length,r=t.strstart,a,o,i=t.prev_length,c=t.nice_match,u=t.strstart>t.w_size-mr?t.strstart-(t.w_size-mr):0,l=t.window,m=t.w_mask,p=t.prev,g=t.strstart+Qa,f=l[r+i-1],y=l[r+i];t.prev_length>=t.good_match&&(n>>=2),c>t.lookahead&&(c=t.lookahead);do if(a=e,!(l[a+i]!==y||l[a+i-1]!==f||l[a]!==l[r]||l[++a]!==l[r+1])){r+=2,a++;do;while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<g);if(o=Qa-(g-r),r=g-Qa,o>i){if(t.match_start=e,i=o,o>=c)break;f=l[r+i-1],y=l[r+i]}}while((e=p[e&m])>u&&--n!==0);return i<=t.lookahead?i:t.lookahead}function Nu(t){var e=t.w_size,n,r,a,o,i;do{if(o=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-mr)){vs(t.window,t.window,e,e,0),t.match_start-=e,t.strstart-=e,t.block_start-=e,r=t.hash_size,n=r;do a=t.head[--n],t.head[n]=a>=e?a-e:0;while(--r);r=e,n=r;do a=t.prev[--n],t.prev[n]=a>=e?a-e:0;while(--r);o+=e}if(t.strm.avail_in===0)break;if(r=dJ(t.strm,t.window,t.strstart+t.lookahead,o),t.lookahead+=r,t.lookahead+t.insert>=dt)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=(t.ins_h<<t.hash_shift^t.window[i+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[i+dt-1])&t.hash_mask,t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<dt)););}while(t.lookahead<mr&&t.strm.avail_in!==0)}function mJ(t,e){var n=65535;for(n>t.pending_buf_size-5&&(n=t.pending_buf_size-5);;){if(t.lookahead<=1){if(Nu(t),t.lookahead===0&&e===ni)return tn;if(t.lookahead===0)break}t.strstart+=t.lookahead,t.lookahead=0;var r=t.block_start+n;if((t.strstart===0||t.strstart>=r)&&(t.lookahead=t.strstart-r,t.strstart=r,ln(t,!1),t.strm.avail_out===0)||t.strstart-t.block_start>=t.w_size-mr&&(ln(t,!1),t.strm.avail_out===0))return tn}return t.insert=0,e===to?(ln(t,!0),t.strm.avail_out===0?ti:Ts):(t.strstart>t.block_start&&(ln(t,!1),t.strm.avail_out===0),tn)}function Xh(t,e){for(var n,r;;){if(t.lookahead<mr){if(Nu(t),t.lookahead<mr&&e===ni)return tn;if(t.lookahead===0)break}if(n=0,t.lookahead>=dt&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+dt-1])&t.hash_mask,n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),n!==0&&t.strstart-n<=t.w_size-mr&&(t.match_length=lI(t,n)),t.match_length>=dt)if(r=ga(t,t.strstart-t.match_start,t.match_length-dt),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=dt){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+dt-1])&t.hash_mask,n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(--t.match_length!==0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else r=ga(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(r&&(ln(t,!1),t.strm.avail_out===0))return tn}return t.insert=t.strstart<dt-1?t.strstart:dt-1,e===to?(ln(t,!0),t.strm.avail_out===0?ti:Ts):t.last_lit&&(ln(t,!1),t.strm.avail_out===0)?tn:Mu}function Ds(t,e){for(var n,r,a;;){if(t.lookahead<mr){if(Nu(t),t.lookahead<mr&&e===ni)return tn;if(t.lookahead===0)break}if(n=0,t.lookahead>=dt&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+dt-1])&t.hash_mask,n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=dt-1,n!==0&&t.prev_length<t.max_lazy_match&&t.strstart-n<=t.w_size-mr&&(t.match_length=lI(t,n),t.match_length<=5&&(t.strategy===ZK||t.match_length===dt&&t.strstart-t.match_start>4096)&&(t.match_length=dt-1)),t.prev_length>=dt&&t.match_length<=t.prev_length){a=t.strstart+t.lookahead-dt,r=ga(t,t.strstart-1-t.prev_match,t.prev_length-dt),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=a&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+dt-1])&t.hash_mask,n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(--t.prev_length!==0);if(t.match_available=0,t.match_length=dt-1,t.strstart++,r&&(ln(t,!1),t.strm.avail_out===0))return tn}else if(t.match_available){if(r=ga(t,0,t.window[t.strstart-1]),r&&ln(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return tn}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(r=ga(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<dt-1?t.strstart:dt-1,e===to?(ln(t,!0),t.strm.avail_out===0?ti:Ts):t.last_lit&&(ln(t,!1),t.strm.avail_out===0)?tn:Mu}function pJ(t,e){for(var n,r,a,o,i=t.window;;){if(t.lookahead<=Qa){if(Nu(t),t.lookahead<=Qa&&e===ni)return tn;if(t.lookahead===0)break}if(t.match_length=0,t.lookahead>=dt&&t.strstart>0&&(a=t.strstart-1,r=i[a],r===i[++a]&&r===i[++a]&&r===i[++a])){o=t.strstart+Qa;do;while(r===i[++a]&&r===i[++a]&&r===i[++a]&&r===i[++a]&&r===i[++a]&&r===i[++a]&&r===i[++a]&&r===i[++a]&&a<o);t.match_length=Qa-(o-a),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=dt?(n=ga(t,1,t.match_length-dt),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(n=ga(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),n&&(ln(t,!1),t.strm.avail_out===0))return tn}return t.insert=0,e===to?(ln(t,!0),t.strm.avail_out===0?ti:Ts):t.last_lit&&(ln(t,!1),t.strm.avail_out===0)?tn:Mu}function fJ(t,e){for(var n;;){if(t.lookahead===0&&(Nu(t),t.lookahead===0)){if(e===ni)return tn;break}if(t.match_length=0,n=ga(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,n&&(ln(t,!1),t.strm.avail_out===0))return tn}return t.insert=0,e===to?(ln(t,!0),t.strm.avail_out===0?ti:Ts):t.last_lit&&(ln(t,!1),t.strm.avail_out===0)?tn:Mu}function Lr(t,e,n,r,a){this.good_length=t,this.max_lazy=e,this.nice_length=n,this.max_chain=r,this.func=a}function gJ(t){t.window_size=2*t.w_size,Qo(t.head),t.max_lazy_match=Es[t.level].max_lazy,t.good_match=Es[t.level].good_length,t.nice_match=Es[t.level].nice_length,t.max_chain_length=Es[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=dt-1,t.match_available=0,t.ins_h=0}function hJ(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ey,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new pa(sJ*2),this.dyn_dtree=new pa((2*oJ+1)*2),this.bl_tree=new pa((2*iJ+1)*2),Qo(this.dyn_ltree),Qo(this.dyn_dtree),Qo(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new pa(cJ+1),this.heap=new pa(2*Zh+1),Qo(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new pa(2*Zh+1),Qo(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function yJ(t){var e;return!t||!t.state?eo(t,no):(t.total_in=t.total_out=0,t.data_type=tJ,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?ty:ei,t.adler=e.wrap===2?0:1,e.last_flush=ni,eI(e),Za)}function ny(t){var e=yJ(t);return e===Za&&gJ(t.state),e}function dI(t,e,n,r,a,o){if(!t)return no;var i=1;if(e===XK&&(e=6),r<0?(i=0,r=-r):r>15&&(i=2,r-=16),a<1||a>nJ||n!==ey||r<8||r>15||e<0||e>9||o<0||o>eJ)return eo(t,no);r===8&&(r=9);var c=new hJ;return t.state=c,c.strm=t,c.wrap=i,c.gzhead=null,c.w_bits=r,c.w_size=1<<c.w_bits,c.w_mask=c.w_size-1,c.hash_bits=a+7,c.hash_size=1<<c.hash_bits,c.hash_mask=c.hash_size-1,c.hash_shift=~~((c.hash_bits+dt-1)/dt),c.window=new Oh(c.w_size*2),c.head=new pa(c.hash_size),c.prev=new pa(c.w_size),c.lit_bufsize=1<<a+6,c.pending_buf_size=c.lit_bufsize*4,c.pending_buf=new Oh(c.pending_buf_size),c.d_buf=1*c.lit_bufsize,c.l_buf=(1+2)*c.lit_bufsize,c.level=e,c.strategy=o,c.method=n,ny(t)}function mI(t,e){var n,r,a,o;if(!t||!t.state||e>sI||e<0)return t?eo(t,no):no;if(r=t.state,!t.output||!t.input&&t.avail_in!==0||r.status===Iu&&e!==to)return eo(t,t.avail_out===0?Jh:no);if(r.strm=t,n=r.last_flush,r.last_flush=e,r.status===ty)if(r.wrap===2)t.adler=0,it(r,31),it(r,139),it(r,8),r.gzhead?(it(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),it(r,r.gzhead.time&255),it(r,r.gzhead.time>>8&255),it(r,r.gzhead.time>>16&255),it(r,r.gzhead.time>>24&255),it(r,r.level===9?2:r.strategy>=kp||r.level<2?4:0),it(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(it(r,r.gzhead.extra.length&255),it(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=ha(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=Qh):(it(r,0),it(r,0),it(r,0),it(r,0),it(r,0),it(r,r.level===9?2:r.strategy>=kp||r.level<2?4:0),it(r,lJ),r.status=ei);else{var i=ey+(r.w_bits-8<<4)<<8,c=-1;r.strategy>=kp||r.level<2?c=0:r.level<6?c=1:r.level===6?c=2:c=3,i|=c<<6,r.strstart!==0&&(i|=uJ),i+=31-i%31,r.status=ei,ku(r,i),r.strstart!==0&&(ku(r,t.adler>>>16),ku(r,t.adler&65535)),t.adler=1}if(r.status===Qh)if(r.gzhead.extra){for(a=r.pending;r.gzindex<(r.gzhead.extra.length&65535)&&!(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=ha(t.adler,r.pending_buf,r.pending-a,a)),Xa(t),a=r.pending,r.pending===r.pending_buf_size));)it(r,r.gzhead.extra[r.gzindex]&255),r.gzindex++;r.gzhead.hcrc&&r.pending>a&&(t.adler=ha(t.adler,r.pending_buf,r.pending-a,a)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=Ip)}else r.status=Ip;if(r.status===Ip)if(r.gzhead.name){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=ha(t.adler,r.pending_buf,r.pending-a,a)),Xa(t),a=r.pending,r.pending===r.pending_buf_size)){o=1;break}r.gzindex<r.gzhead.name.length?o=r.gzhead.name.charCodeAt(r.gzindex++)&255:o=0,it(r,o)}while(o!==0);r.gzhead.hcrc&&r.pending>a&&(t.adler=ha(t.adler,r.pending_buf,r.pending-a,a)),o===0&&(r.gzindex=0,r.status=Mp)}else r.status=Mp;if(r.status===Mp)if(r.gzhead.comment){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=ha(t.adler,r.pending_buf,r.pending-a,a)),Xa(t),a=r.pending,r.pending===r.pending_buf_size)){o=1;break}r.gzindex<r.gzhead.comment.length?o=r.gzhead.comment.charCodeAt(r.gzindex++)&255:o=0,it(r,o)}while(o!==0);r.gzhead.hcrc&&r.pending>a&&(t.adler=ha(t.adler,r.pending_buf,r.pending-a,a)),o===0&&(r.status=Np)}else r.status=Np;if(r.status===Np&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&Xa(t),r.pending+2<=r.pending_buf_size&&(it(r,t.adler&255),it(r,t.adler>>8&255),t.adler=0,r.status=ei)):r.status=ei),r.pending!==0){if(Xa(t),t.avail_out===0)return r.last_flush=-1,Za}else if(t.avail_in===0&&uI(e)<=uI(n)&&e!==to)return eo(t,Jh);if(r.status===Iu&&t.avail_in!==0)return eo(t,Jh);if(t.avail_in!==0||r.lookahead!==0||e!==ni&&r.status!==Iu){var u=r.strategy===kp?fJ(r,e):r.strategy===QK?pJ(r,e):Es[r.level].func(r,e);if((u===ti||u===Ts)&&(r.status=Iu),u===tn||u===ti)return t.avail_out===0&&(r.last_flush=-1),Za;if(u===Mu&&(e===YK?tI(r):e!==sI&&(Kh(r,0,0,!1),e===KK&&(Qo(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),Xa(t),t.avail_out===0))return r.last_flush=-1,Za}return e!==to?Za:r.wrap<=0?cI:(r.wrap===2?(it(r,t.adler&255),it(r,t.adler>>8&255),it(r,t.adler>>16&255),it(r,t.adler>>24&255),it(r,t.total_in&255),it(r,t.total_in>>8&255),it(r,t.total_in>>16&255),it(r,t.total_in>>24&255)):(ku(r,t.adler>>>16),ku(r,t.adler&65535)),Xa(t),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?Za:cI)}function pI(t){var e;return!t||!t.state?no:(e=t.state.status,e!==ty&&e!==Qh&&e!==Ip&&e!==Mp&&e!==Np&&e!==ei&&e!==Iu?eo(t,no):(t.state=null,e===ei?eo(t,JK):Za))}var ni,YK,KK,to,sI,Za,cI,no,JK,Jh,XK,ZK,kp,QK,eJ,tJ,ey,nJ,rJ,aJ,Zh,oJ,iJ,sJ,cJ,dt,Qa,mr,uJ,ty,Qh,Ip,Mp,Np,ei,Iu,tn,Mu,ti,Ts,lJ,Es,fI=v(()=>{d();Uh();rI();oI();iI();Ph();ni=0,YK=1,KK=3,to=4,sI=5,Za=0,cI=1,no=-2,JK=-3,Jh=-5,XK=-1,ZK=1,kp=2,QK=3,eJ=4,tJ=2,ey=8,nJ=9,rJ=29,aJ=256,Zh=aJ+1+rJ,oJ=30,iJ=19,sJ=2*Zh+1,cJ=15,dt=3,Qa=258,mr=Qa+dt+1,uJ=32,ty=42,Qh=69,Ip=73,Mp=91,Np=103,ei=113,Iu=666,tn=1,Mu=2,ti=3,Ts=4,lJ=3;s(eo,"err");s(uI,"rank");s(Qo,"zero");s(Xa,"flush_pending");s(ln,"flush_block_only");s(it,"put_byte");s(ku,"putShortMSB");s(dJ,"read_buf");s(lI,"longest_match");s(Nu,"fill_window");s(mJ,"deflate_stored");s(Xh,"deflate_fast");s(Ds,"deflate_slow");s(pJ,"deflate_rle");s(fJ,"deflate_huff");s(Lr,"Config");Es=[new Lr(0,0,0,0,mJ),new Lr(4,4,8,4,Xh),new Lr(4,5,16,8,Xh),new Lr(4,6,32,32,Xh),new Lr(4,4,16,16,Ds),new Lr(8,16,32,32,Ds),new Lr(8,16,128,128,Ds),new Lr(8,32,128,256,Ds),new Lr(32,128,258,1024,Ds),new Lr(32,258,258,4096,Ds)];s(gJ,"lm_init");s(hJ,"DeflateState");s(yJ,"deflateResetKeep");s(ny,"deflateReset");s(dI,"deflateInit2");s(mI,"deflate");s(pI,"deflateEnd")});var gI=v(()=>{d()});var Bp={};S(Bp,{DEFLATE:()=>xs,DEFLATERAW:()=>Ss,GUNZIP:()=>Pp,GZIP:()=>Lu,INFLATE:()=>Op,INFLATERAW:()=>Pu,NONE:()=>ry,UNZIP:()=>Ou,Z_BEST_COMPRESSION:()=>CJ,Z_BEST_SPEED:()=>xJ,Z_BINARY:()=>MJ,Z_BLOCK:()=>DI,Z_BUF_ERROR:()=>TJ,Z_DATA_ERROR:()=>EJ,Z_DEFAULT_COMPRESSION:()=>AJ,Z_DEFAULT_STRATEGY:()=>IJ,Z_DEFLATED:()=>TI,Z_ERRNO:()=>wJ,Z_FILTERED:()=>FJ,Z_FINISH:()=>wI,Z_FIXED:()=>kJ,Z_FULL_FLUSH:()=>bI,Z_HUFFMAN_ONLY:()=>RJ,Z_NEED_DICT:()=>bJ,Z_NO_COMPRESSION:()=>SJ,Z_NO_FLUSH:()=>hI,Z_OK:()=>Up,Z_PARTIAL_FLUSH:()=>yI,Z_RLE:()=>_J,Z_STREAM_END:()=>EI,Z_STREAM_ERROR:()=>DJ,Z_SYNC_FLUSH:()=>vI,Z_TEXT:()=>NJ,Z_TREES:()=>vJ,Z_UNKNOWN:()=>LJ,Zlib:()=>Pr});function Pr(t){if(t<xs||t>Ou)throw new TypeError("Bad argument");this.mode=t,this.init_done=!1,this.write_in_progress=!1,this.pending_close=!1,this.windowBits=0,this.level=0,this.memLevel=0,this.strategy=0,this.dictionary=null}function PJ(t,e){for(var n=0;n<t.length;n++)this[e+n]=t[n]}var ry,xs,Op,Lu,Pp,Ss,Pu,Ou,hI,yI,vI,bI,wI,DI,vJ,Up,EI,bJ,wJ,DJ,EJ,TJ,SJ,xJ,CJ,AJ,FJ,RJ,_J,kJ,IJ,MJ,NJ,LJ,TI,Lp,SI=v(()=>{d();Ph();Ik();fI();gI();ry=0,xs=1,Op=2,Lu=3,Pp=4,Ss=5,Pu=6,Ou=7,hI=0,yI=1,vI=2,bI=3,wI=4,DI=5,vJ=6,Up=0,EI=1,bJ=2,wJ=-1,DJ=-2,EJ=-3,TJ=-5,SJ=0,xJ=1,CJ=9,AJ=-1,FJ=1,RJ=2,_J=3,kJ=4,IJ=0,MJ=0,NJ=1,LJ=2,TI=8;s(Pr,"Zlib");Pr.prototype.init=function(t,e,n,r,a){this.windowBits=t,this.level=e,this.memLevel=n,this.strategy=r,(this.mode===Lu||this.mode===Pp)&&(this.windowBits+=16),this.mode===Ou&&(this.windowBits+=32),(this.mode===Ss||this.mode===Pu)&&(this.windowBits=-this.windowBits),this.strm=new kk;var o;switch(this.mode){case xs:case Lu:case Ss:o=dI(this.strm,this.level,TI,this.windowBits,this.memLevel,this.strategy);break;case Op:case Pp:case Pu:case Ou:o=(this.strm,this.windowBits,void 0);break;default:throw new Error("Unknown mode "+this.mode)}if(o!==Up){this._error(o);return}this.write_in_progress=!1,this.init_done=!0};Pr.prototype.params=function(){throw new Error("deflateParams Not supported")};Pr.prototype._writeCheck=function(){if(!this.init_done)throw new Error("write before init");if(this.mode===ry)throw new Error("already finalized");if(this.write_in_progress)throw new Error("write already in progress");if(this.pending_close)throw new Error("close is pending")};Pr.prototype.write=function(t,e,n,r,a,o,i){this._writeCheck(),this.write_in_progress=!0;var c=this;return process.nextTick(function(){c.write_in_progress=!1;var u=c._write(t,e,n,r,a,o,i);c.callback(u[0],u[1]),c.pending_close&&c.close()}),this};s(PJ,"bufferSet");Pr.prototype.writeSync=function(t,e,n,r,a,o,i){return this._writeCheck(),this._write(t,e,n,r,a,o,i)};Pr.prototype._write=function(t,e,n,r,a,o,i){if(this.write_in_progress=!0,t!==hI&&t!==yI&&t!==vI&&t!==bI&&t!==wI&&t!==DI)throw new Error("Invalid flush value");e==null&&(e=new Buffer(0),r=0,n=0),a._set?a.set=a._set:a.set=PJ;var c=this.strm;c.avail_in=r,c.input=e,c.next_in=n,c.avail_out=i,c.output=a,c.next_out=o;var u;switch(this.mode){case xs:case Lu:case Ss:u=mI(c,t);break;case Ou:case Op:case Pp:case Pu:u=void 0;break;default:throw new Error("Unknown mode "+this.mode)}return u!==EI&&u!==Up&&this._error(u),this.write_in_progress=!1,[c.avail_in,c.avail_out]};Pr.prototype.close=function(){if(this.write_in_progress){this.pending_close=!0;return}this.pending_close=!1,this.mode===xs||this.mode===Lu||this.mode===Ss?pI(this.strm):(this.strm,void 0),this.mode=ry};Pr.prototype.reset=function(){switch(this.mode){case xs:case Ss:Lp=ny(this.strm);break;case Op:case Pu:Lp=(this.strm,void 0);break}Lp!==Up&&this._error(Lp)};Pr.prototype._error=function(t){this.onerror(Fp[t]+": "+this.strm.msg,t),this.write_in_progress=!1,this.pending_close&&this.close()}});function OJ(t,e){if(!t)throw new Error(e)}function xI(t,e,n){return typeof e=="function"&&(n=e,e={}),UJ(new jp(e),t,n)}function UJ(t,e,n){var r=[],a=0;t.on("error",i),t.on("end",c),t.end(e),o();function o(){for(var u;(u=t.read())!==null;)r.push(u),a+=u.length;t.once("readable",o)}s(o,"flow");function i(u){t.removeListener("end",c),t.removeListener("readable",o),n(u)}s(i,"onError");function c(){var u=Buffer.concat(r,a);r=[],n(null,u),t.close()}s(c,"onEnd")}function oy(t){if(!(this instanceof oy))return new oy(t);jt.call(this,t,re.DEFLATE)}function iy(t){if(!(this instanceof iy))return new iy(t);jt.call(this,t,re.INFLATE)}function jp(t){if(!(this instanceof jp))return new jp(t);jt.call(this,t,re.GZIP)}function sy(t){if(!(this instanceof sy))return new sy(t);jt.call(this,t,re.GUNZIP)}function cy(t){if(!(this instanceof cy))return new cy(t);jt.call(this,t,re.DEFLATERAW)}function uy(t){if(!(this instanceof uy))return new uy(t);jt.call(this,t,re.INFLATERAW)}function ly(t){if(!(this instanceof ly))return new ly(t);jt.call(this,t,re.UNZIP)}function jt(t,e){if(this._opts=t=t||{},this._chunkSize=t.chunkSize||re.Z_DEFAULT_CHUNK,Cn.call(this,t),t.flush&&t.flush!==re.Z_NO_FLUSH&&t.flush!==re.Z_PARTIAL_FLUSH&&t.flush!==re.Z_SYNC_FLUSH&&t.flush!==re.Z_FULL_FLUSH&&t.flush!==re.Z_FINISH&&t.flush!==re.Z_BLOCK)throw new Error("Invalid flush flag: "+t.flush);if(this._flushFlag=t.flush||re.Z_NO_FLUSH,t.chunkSize&&(t.chunkSize<re.Z_MIN_CHUNK||t.chunkSize>re.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+t.chunkSize);if(t.windowBits&&(t.windowBits<re.Z_MIN_WINDOWBITS||t.windowBits>re.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+t.windowBits);if(t.level&&(t.level<re.Z_MIN_LEVEL||t.level>re.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+t.level);if(t.memLevel&&(t.memLevel<re.Z_MIN_MEMLEVEL||t.memLevel>re.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+t.memLevel);if(t.strategy&&t.strategy!=re.Z_FILTERED&&t.strategy!=re.Z_HUFFMAN_ONLY&&t.strategy!=re.Z_RLE&&t.strategy!=re.Z_FIXED&&t.strategy!=re.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+t.strategy);if(t.dictionary&&!Buffer.isBuffer(t.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._binding=new re.Zlib(e);var n=this;this._hadError=!1,this._binding.onerror=function(o,i){n._binding=null,n._hadError=!0;var c=new Error(o);c.errno=i,c.code=re.codes[i],n.emit("error",c)};var r=re.Z_DEFAULT_COMPRESSION;typeof t.level=="number"&&(r=t.level);var a=re.Z_DEFAULT_STRATEGY;typeof t.strategy=="number"&&(a=t.strategy),this._binding.init(t.windowBits||re.Z_DEFAULT_WINDOWBITS,r,t.memLevel||re.Z_DEFAULT_MEMLEVEL,a,t.dictionary),this._buffer=new Buffer(this._chunkSize),this._offset=0,this._closed=!1,this._level=r,this._strategy=a,this.once("end",this.close)}var re,ay,CI=v(()=>{d();Wg();SI();Ga();s(OJ,"assert");re={};Object.keys(Bp).forEach(function(t){re[t]=Bp[t]});re.Z_MIN_WINDOWBITS=8;re.Z_MAX_WINDOWBITS=15;re.Z_DEFAULT_WINDOWBITS=15;re.Z_MIN_CHUNK=64;re.Z_MAX_CHUNK=1/0;re.Z_DEFAULT_CHUNK=16*1024;re.Z_MIN_MEMLEVEL=1;re.Z_MAX_MEMLEVEL=9;re.Z_DEFAULT_MEMLEVEL=8;re.Z_MIN_LEVEL=-1;re.Z_MAX_LEVEL=9;re.Z_DEFAULT_LEVEL=re.Z_DEFAULT_COMPRESSION;ay={Z_OK:re.Z_OK,Z_STREAM_END:re.Z_STREAM_END,Z_NEED_DICT:re.Z_NEED_DICT,Z_ERRNO:re.Z_ERRNO,Z_STREAM_ERROR:re.Z_STREAM_ERROR,Z_DATA_ERROR:re.Z_DATA_ERROR,Z_MEM_ERROR:re.Z_MEM_ERROR,Z_BUF_ERROR:re.Z_BUF_ERROR,Z_VERSION_ERROR:re.Z_VERSION_ERROR};Object.keys(ay).forEach(function(t){ay[ay[t]]=t});s(xI,"gzip");s(UJ,"zlibBuffer");s(oy,"Deflate");s(iy,"Inflate");s(jp,"Gzip");s(sy,"Gunzip");s(cy,"DeflateRaw");s(uy,"InflateRaw");s(ly,"Unzip");s(jt,"Zlib");Ut(jt,Cn);jt.prototype.params=function(t,e,n){if(t<re.Z_MIN_LEVEL||t>re.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+t);if(e!=re.Z_FILTERED&&e!=re.Z_HUFFMAN_ONLY&&e!=re.Z_RLE&&e!=re.Z_FIXED&&e!=re.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+e);if(this._level!==t||this._strategy!==e){var r=this;this.flush(re.Z_SYNC_FLUSH,function(){r._binding.params(t,e),r._hadError||(r._level=t,r._strategy=e,n&&n())})}else process.nextTick(n)};jt.prototype.reset=function(){return this._binding.reset()};jt.prototype._flush=function(t){this._transform(new Buffer(0),"",t)};jt.prototype.flush=function(t,e){var n=this._writableState;if((typeof t=="function"||t===void 0&&!e)&&(e=t,t=re.Z_FULL_FLUSH),n.ended)e&&process.nextTick(e);else if(n.ending)e&&this.once("end",e);else if(n.needDrain){var r=this;this.once("drain",function(){r.flush(e)})}else this._flushFlag=t,this.write(new Buffer(0),"",e)};jt.prototype.close=function(t){if(t&&process.nextTick(t),!this._closed){this._closed=!0,this._binding.close();var e=this;process.nextTick(function(){e.emit("close")})}};jt.prototype._transform=function(t,e,n){var r,a=this._writableState,o=a.ending||a.ended,i=o&&(!t||a.length===t.length);if(!t===null&&!Buffer.isBuffer(t))return n(new Error("invalid input"));i?r=re.Z_FINISH:(r=this._flushFlag,t.length>=a.length&&(this._flushFlag=this._opts.flush||re.Z_NO_FLUSH)),this._processChunk(t,r,n)};jt.prototype._processChunk=function(t,e,n){var r=t&&t.length,a=this._chunkSize-this._offset,o=0,i=this,c=typeof n=="function";if(!c){var u=[],l=0,m;this.on("error",function(b){m=b});do var p=this._binding.writeSync(e,t,o,r,this._buffer,this._offset,a);while(!this._hadError&&y(p[0],p[1]));if(this._hadError)throw m;var g=Buffer.concat(u,l);return this.close(),g}var f=this._binding.write(e,t,o,r,this._buffer,this._offset,a);f.buffer=t,f.callback=y;function y(b,D){if(!i._hadError){var T=a-D;if(OJ(T>=0,"have should not go down"),T>0){var A=i._buffer.slice(i._offset,i._offset+T);i._offset+=T,c?i.push(A):(u.push(A),l+=A.length)}if((D===0||i._offset>=i._chunkSize)&&(a=i._chunkSize,i._offset=0,i._buffer=new Buffer(i._chunkSize)),D===0){if(o+=r-b,r=b,!c)return!0;var R=i._binding.write(e,t,o,r,i._buffer,i._offset,i._chunkSize);R.callback=y,R.buffer=t;return}if(!c)return!1;n()}}s(y,"callback")};Ut(oy,jt);Ut(iy,jt);Ut(jp,jt);Ut(sy,jt);Ut(cy,jt);Ut(uy,jt);Ut(ly,jt)});async function qp(t,e,n=1e3){return e=Y.getRequestIdForBackend(e),t.setNextProtocolTimeout(n),(await t.sendCommand("Network.getResponseBody",{requestId:e})).body}var dy=v(()=>{"use strict";d();St();s(qp,"fetchResponseBodyFromCache")});var AI={};S(AI,{default:()=>GJ});var BJ,jJ,qJ,zJ,HJ,my,GJ,FI=v(()=>{"use strict";d();Bi();CI();He();Ue();lt();St();Kn();dy();De();BJ="chrome-extension:",jJ=["content-encoding","x-original-content-encoding","x-content-encoding-over-network"],qJ=["gzip","br","deflate"],zJ=["image","audio","video"],HJ=[Y.TYPES.Document,Y.TYPES.Script,Y.TYPES.Stylesheet,Y.TYPES.XHR,Y.TYPES.Fetch,Y.TYPES.EventSource],my=class t extends X{static{s(this,"ResponseCompression")}meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Lt.symbol}};static filterUnoptimizedResponses(e){let n=[];return e.forEach(r=>{if(r.isOutOfProcessIframe)return;let a=r.mimeType,o=r.resourceType||Y.TYPES.Other,i=r.resourceSize,u=!(a&&zJ.some(p=>a.startsWith(p)))&&HJ.includes(o),l=r.url.startsWith(BJ);if(!u||!i||!r.finished||l||!r.transferSize||r.statusCode===304)return;(r.responseHeaders||[]).find(p=>jJ.includes(p.name.toLowerCase())&&qJ.includes(p.value))||n.push({requestId:r.requestId,url:r.url,mimeType:a,transferSize:r.transferSize,resourceSize:i,gzipSize:0})}),n}async getCompressibleRecords(e,n){let r=e.driver.defaultSession,a=t.filterUnoptimizedResponses(n);return Promise.all(a.map(o=>qp(r,o.requestId).then(i=>i?new Promise((c,u)=>xI(i,(l,m)=>{if(l)return u(l);o.gzipSize=H.byteLength(m,"utf8"),c(o)})):o).catch(i=>{if(!i?.message?.includes("No resource with given identifier found"))throw i.extra={url:te.elideDataURI(o.url)},i;return N.error("ResponseCompression",i.message),o.gzipSize=void 0,o})))}async getArtifact(e){let n=e.dependencies.DevtoolsLog,r=await $.request(n,e);return this.getCompressibleRecords(e,r)}},GJ=my});var RI={};S(RI,{default:()=>$J});function WJ(){window.___linkMediaChanges=[],Object.defineProperty(HTMLLinkElement.prototype,"media",{set:function(t){let e={href:this.href,media:t,msSinceHTMLEnd:Date.now()-performance.timing.responseEnd,matches:window.matchMedia(t).matches};window.___linkMediaChanges.push(e),this.setAttribute("media",t)}})}async function VJ(){let t=window.___linkMediaChanges;try{let e=[...document.querySelectorAll("link")].filter(r=>{let a=r.rel==="stylesheet"&&window.matchMedia(r.media).matches&&!r.disabled,o=r.rel==="import"&&!r.hasAttribute("async");return a||o}).map(r=>({tagName:"LINK",url:r.href,href:r.href,rel:r.rel,media:r.media,disabled:r.disabled,mediaChanges:t.filter(a=>a.href===r.href)})),n=[...document.querySelectorAll("head script[src]")].filter(r=>r instanceof SVGScriptElement?!1:!r.hasAttribute("async")&&!r.hasAttribute("defer")&&!/^data:/.test(r.src)&&!/^blob:/.test(r.src)&&r.getAttribute("type")!=="module").map(r=>({tagName:"SCRIPT",url:r.src,src:r.src}));return[...e,...n]}catch(e){let n="Unable to gather Scripts/Stylesheets/HTML Imports on the page";throw new Error(`${n}: ${e.message}`)}}var py,$J,_I=v(()=>{"use strict";d();De();Kn();Ue();s(WJ,"installMediaListener");s(VJ,"collectTagsThatBlockFirstPaint");py=class t extends X{static{s(this,"TagsBlockingFirstPaint")}meta={supportedModes:["navigation"],dependencies:{DevtoolsLog:Lt.symbol}};static _filteredAndIndexedByUrl(e){let n=new Map;for(let r of e){if(!r.finished)continue;let a=r.initiator.type==="parser",o=/(css|script)/.test(r.mimeType)&&a,i=r.failed;(r.mimeType&&r.mimeType.includes("html")||o||i&&a)&&n.set(r.url,r)}return n}static async findBlockingTags(e,n){let r=n.reduce((c,u)=>Math.min(c,u.networkEndTime),1/0),a=await e.executionContext.evaluate(VJ,{args:[]}),o=t._filteredAndIndexedByUrl(n),i=[];for(let c of a){let u=o.get(c.url);if(!u||u.isLinkPreload)continue;let l=u.networkEndTime,m;if(c.tagName==="LINK"){let f=c.mediaChanges.filter(y=>!y.matches).map(y=>y.msSinceHTMLEnd);if(f.length>0){let y=Math.min(...f),b=Math.max(u.networkRequestTime,r+y/1e3);l=Math.min(l,b)}m=c.mediaChanges}let{tagName:p,url:g}=c;i.push({tag:{tagName:p,url:g,mediaChanges:m},transferSize:u.transferSize,startTime:u.networkRequestTime,endTime:l}),o.delete(c.url)}return i}async startSensitiveInstrumentation(e){let{executionContext:n}=e.driver;await n.evaluateOnNewDocument(WJ,{args:[]})}async getArtifact(e){let n=e.dependencies.DevtoolsLog,r=await $.request(n,e);return t.findBlockingTags(e.driver,r)}},$J=py});function JJ(t,e){let r=t.match(/Chrome\/([\d.]+)/)?.[1]||"99.0.1234.0",[a]=r.split(".",1),o=[{brand:"Chromium",version:a},{brand:"Google Chrome",version:a},{brand:"Lighthouse",version:Xm}],i={platform:"Android",platformVersion:"11.0",architecture:"",model:"moto g power (2022)"},c={platform:"macOS",platformVersion:"10.15.7",architecture:"x86",model:""},u=e==="mobile";return{brands:o,fullVersion:r,...u?i:c,mobile:u}}async function zp(t,e){if(e.emulatedUserAgent!==!1){let n=e.emulatedUserAgent;await t.sendCommand("Network.setUserAgentOverride",{userAgent:n,userAgentMetadata:JJ(n,e.formFactor)})}if(e.screenEmulation.disabled!==!0){let{width:n,height:r,deviceScaleFactor:a,mobile:o}=e.screenEmulation,i={width:n,height:r,deviceScaleFactor:a,mobile:o};await t.sendCommand("Emulation.setDeviceMetricsOverride",i),await t.sendCommand("Emulation.setTouchEmulationEnabled",{enabled:i.mobile})}}async function kI(t,e){if(e.throttlingMethod!=="devtools")return II(t);await Promise.all([XJ(t,e.throttling),ZJ(t,e.throttling)])}async function Hp(t){await Promise.all([II(t),QJ(t)])}function XJ(t,e){let n={offline:!1,latency:e.requestLatencyMs||0,downloadThroughput:e.downloadThroughputKbps||0,uploadThroughput:e.uploadThroughputKbps||0};return n.downloadThroughput=Math.floor(n.downloadThroughput*1024/8),n.uploadThroughput=Math.floor(n.uploadThroughput*1024/8),t.sendCommand("Network.emulateNetworkConditions",n)}function II(t){return t.sendCommand("Network.emulateNetworkConditions",YJ)}function ZJ(t,e){let n=e.cpuSlowdownMultiplier;return t.sendCommand("Emulation.setCPUThrottlingRate",{rate:n})}function QJ(t){return t.sendCommand("Emulation.setCPUThrottlingRate",KJ)}var YJ,KJ,Gp=v(()=>{"use strict";d();rs();YJ={latency:0,downloadThroughput:0,uploadThroughput:0,offline:!1},KJ={rate:1};s(JJ,"parseUseragentIntoMetadata");s(zp,"emulate");s(kI,"throttle");s(Hp,"clearThrottling");s(XJ,"enableNetworkThrottling");s(II,"clearNetworkThrottling");s(ZJ,"enableCPUThrottling");s(QJ,"clearCPUThrottling")});var NI={};S(NI,{default:()=>oX});function MI(t){return t.replace(/(-\w)/g,e=>e[1].toUpperCase())}function nX(){let t=MI(window.screen.orientation.type);return{width:window.outerWidth,height:window.outerHeight,screenOrientation:{type:t,angle:window.screen.orientation.angle},deviceScaleFactor:window.devicePixelRatio}}function rX(){return{width:window.innerWidth,height:window.innerHeight}}function aX(){return new Promise(t=>{requestAnimationFrame(()=>requestAnimationFrame(t))})}var eX,tX,gy,oX,LI=v(()=>{"use strict";d();Ue();Gp();un();Cp();eX=30,tX=16383;s(MI,"kebabCaseToCamelCase");s(nX,"getObservedDeviceMetrics");s(rX,"getScreenshotAreaSize");s(aX,"waitForDoubleRaf");gy=class extends X{static{s(this,"FullPageScreenshot")}meta={supportedModes:["snapshot","timespan","navigation"]};async _resizeViewport(e,n){let r=e.driver.defaultSession,a=await r.sendCommand("Page.getLayoutMetrics"),o=Math.round(n.height*a.cssContentSize.height/a.cssLayoutViewport.clientHeight),i=Math.min(o,tX),c=e.driver.networkMonitor,u=xh(r,c,{pretendDCLAlreadyFired:!0,networkQuietThresholdMs:1e3,busyEvent:"network-critical-busy",idleEvent:"network-critical-idle",isIdle:l=>l.isCriticalIdle()});await r.sendCommand("Emulation.setDeviceMetricsOverride",{mobile:n.mobile,deviceScaleFactor:1,height:i,width:0}),await Promise.race([new Promise(l=>setTimeout(l,1e3*5)),u.promise]),u.cancel(),await e.driver.executionContext.evaluate(aX,{args:[]})}async _takeScreenshot(e){let r="data:image/webp;base64,"+(await e.driver.defaultSession.sendCommand("Page.captureScreenshot",{format:"webp",quality:eX})).data,a=await e.driver.executionContext.evaluate(rX,{args:[],useIsolation:!0});return{data:r,width:a.width,height:a.height}}async _resolveNodes(e){function n(){let i={};if(!window.__lighthouseNodesDontTouchOrAllVarianceGoesAway)return i;let c=window.__lighthouseNodesDontTouchOrAllVarianceGoesAway;for(let[u,l]of c.entries()){let m=getBoundingClientRect(u);i[l]=m}return i}s(n,"resolveNodes");function r({useIsolation:i}){return e.driver.executionContext.evaluate(n,{args:[],useIsolation:i,deps:[Ee.getBoundingClientRect]})}s(r,"resolveNodesInPage");let a=await r({useIsolation:!1}),o=await r({useIsolation:!0});return{...a,...o}}async getArtifact(e){let n=e.driver.defaultSession,r=e.driver.executionContext,a=e.settings,o=!a.screenEmulation.disabled,i={...a.screenEmulation};try{if(!a.usePassiveGathering){if(!o){let l=await r.evaluate(nX,{args:[],useIsolation:!0,deps:[MI]});i.height=l.height,i.width=l.width,i.deviceScaleFactor=l.deviceScaleFactor,i.mobile=a.formFactor==="mobile"}await this._resizeViewport(e,i)}let[c,u]=await Promise.all([this._takeScreenshot(e),this._resolveNodes(e)]);return{screenshot:c,nodes:u}}finally{a.usePassiveGathering||(o?await zp(n,a):await n.sendCommand("Emulation.setDeviceMetricsOverride",{mobile:i.mobile,deviceScaleFactor:i.deviceScaleFactor,height:i.height,width:0}))}}},oX=gy});var PI={};S(PI,{default:()=>iX});var hy,iX,OI=v(()=>{"use strict";d();He();Ue();hy=class t extends X{static{s(this,"GlobalListeners")}meta={supportedModes:["snapshot","timespan","navigation"]};static _filterForAllowlistedTypes(e){return e.type==="pagehide"||e.type==="unload"||e.type==="visibilitychange"}getListenerIndentifier(e){return`${e.type}:${e.scriptId}:${e.columnNumber}:${e.lineNumber}`}dedupeListeners(e){let n=new Set;return e.filter(r=>{let a=this.getListenerIndentifier(r);return n.has(a)?!1:(n.add(a),!0)})}async getArtifact(e){let n=e.driver.defaultSession,r=[];for(let a of e.driver.targetManager.mainFrameExecutionContexts()){let o;try{let{result:c}=await n.sendCommand("Runtime.evaluate",{expression:"window",returnByValue:!1,uniqueContextId:a.uniqueId});if(!c.objectId)throw new Error("Error fetching information about the global object");o=c.objectId}catch(c){N.warn("Execution context is no longer valid",a,c);continue}let i=await n.sendCommand("DOMDebugger.getEventListeners",{objectId:o});for(let c of i.listeners)if(t._filterForAllowlistedTypes(c)){let{type:u,scriptId:l,lineNumber:m,columnNumber:p}=c;r.push({type:u,scriptId:l,lineNumber:m,columnNumber:p})}}return this.dedupeListeners(r)}},iX=hy});var UI={};S(UI,{default:()=>cX});function sX(){let t=window.__HTMLElementBoundingClientRect||window.HTMLElement.prototype.getBoundingClientRect;return getElementsInDocument("iframe").map(n=>{let r=t.call(n),{top:a,bottom:o,left:i,right:c,width:u,height:l}=r;return{id:n.id,src:n.src,clientRect:{top:a,bottom:o,left:i,right:c,width:u,height:l},isPositionFixed:isPositionFixed(n),node:getNodeDetails(n)}})}var yy,cX,BI=v(()=>{"use strict";d();Ue();un();s(sX,"collectIFrameElements");yy=class extends X{static{s(this,"IFrameElements")}meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){return await e.driver.executionContext.evaluate(sX,{args:[],useIsolation:!0,deps:[Ee.getElementsInDocument,Ee.isPositionFixed,Ee.getNodeDetails]})}},cX=yy});var by={};S(by,{default:()=>gX,findMostSpecificMatchedCSSRule:()=>Bu,getEffectiveFontRule:()=>jI});function Uu(t){return!!t&&!!t.cssProperties.find(({name:e})=>e===uX)}function Bu(t=[],e){let n;for(let r=t.length-1;r>=0;r--)if(e(t[r].rule.style)){n=t[r].rule;break}if(n)return{type:"Regular",...n.style,parentRule:{origin:n.origin,selectors:n.selectorList.selectors}}}function mX(t=[]){for(let{inlineStyle:e,matchedCSSRules:n}of t){if(Uu(e))return{type:"Inline",...e};let r=Bu(n,Uu);if(r)return r}}function jI({attributesStyle:t,inlineStyle:e,matchedCSSRules:n,inherited:r}){if(Uu(e))return{type:"Inline",...e};let a=Bu(n,Uu);if(a)return a;if(Uu(t))return{type:"Attributes",...t};let o=mX(r);if(o)return o}function pX(t){return t?Array.from(t.trim()).length:0}async function fX(t,e){let n=await t.sendCommand("CSS.getMatchedStylesForNode",{nodeId:e}),r=jI(n);if(r)return{type:r.type,range:r.range,styleSheetId:r.styleSheetId,parentRule:r.parentRule&&{origin:r.parentRule.origin,selectors:r.parentRule.selectors}}}var uX,lX,dX,vy,gX,wy=v(()=>{"use strict";d();Ue();uX="font-size",lX=12,dX=50;s(Uu,"hasFontSizeDeclaration");s(Bu,"findMostSpecificMatchedCSSRule");s(mX,"findInheritedCSSRule");s(jI,"getEffectiveFontRule");s(pX,"getTextLength");s(fX,"fetchSourceRule");vy=class t extends X{static{s(this,"FontSize")}meta={supportedModes:["snapshot","navigation"]};static async fetchFailingNodeSourceRules(e,n){let r=n.sort((u,l)=>l.textLength-u.textLength).slice(0,dX);await e.sendCommand("DOM.getDocument",{depth:-1,pierce:!0});let{nodeIds:a}=await e.sendCommand("DOM.pushNodesByBackendIdsToFrontend",{backendNodeIds:r.map(u=>u.parentNode.backendNodeId)}),o=r.map(async(u,l)=>{u.nodeId=a[l];try{let m=await fX(e,a[l]);u.cssRule=m}catch{u.cssRule=void 0}return u}),i=await Promise.all(o),c=i.reduce((u,{textLength:l})=>u+=l,0);return{analyzedFailingNodesData:i,analyzedFailingTextLength:c}}getTextNodesInLayoutFromSnapshot(e){let n=e.strings,r=s(i=>n[i],"getString"),a=s(i=>parseFloat(n[i]),"getFloat"),o=[];for(let i=0;i<e.documents.length;i++){let c=e.documents[i];if(!c.nodes.backendNodeId||!c.nodes.parentIndex||!c.nodes.attributes||!c.nodes.nodeName)throw new Error("Unexpected response from DOMSnapshot.captureSnapshot.");let u=c.nodes,l=s(m=>({backendNodeId:u.backendNodeId[m],attributes:u.attributes[m].map(r),nodeName:r(u.nodeName[m])}),"getParentData");for(let m of c.textBoxes.layoutIndex){let p=n[c.layout.text[m]];if(!p)continue;let g=c.layout.nodeIndex[m],f=c.layout.styles[m],[y]=f,b=a(y),D=u.parentIndex[g],T=u.parentIndex[D],A=l(D),R=T!==void 0?l(T):void 0;o.push({nodeIndex:g,backendNodeId:u.backendNodeId[g],fontSize:b,textLength:pX(p),parentNode:{...A,parentNode:R}})}}return o}findFailingNodes(e){let n=[],r=0,a=0;for(let o of this.getTextNodesInLayoutFromSnapshot(e))r+=o.textLength,o.fontSize<lX&&(a+=o.textLength,n.push({nodeId:0,parentNode:o.parentNode,textLength:o.textLength,fontSize:o.fontSize}));return{totalTextLength:r,failingTextLength:a,failingNodes:n}}async getArtifact(e){let n=e.driver.defaultSession,r=new Map,a=s(p=>r.set(p.header.styleSheetId,p.header),"onStylesheetAdded");n.on("CSS.styleSheetAdded",a),await Promise.all([n.sendCommand("DOMSnapshot.enable"),n.sendCommand("DOM.enable"),n.sendCommand("CSS.enable")]);let o=await n.sendCommand("DOMSnapshot.captureSnapshot",{computedStyles:["font-size"]}),{totalTextLength:i,failingTextLength:c,failingNodes:u}=this.findFailingNodes(o),{analyzedFailingNodesData:l,analyzedFailingTextLength:m}=await t.fetchFailingNodeSourceRules(n,u);return n.off("CSS.styleSheetAdded",a),l.filter(p=>p.cssRule?.styleSheetId).forEach(p=>p.cssRule.stylesheet=r.get(p.cssRule.styleSheetId)),await Promise.all([n.sendCommand("DOMSnapshot.disable"),n.sendCommand("DOM.disable"),n.sendCommand("CSS.disable")]),{analyzedFailingNodesData:l,analyzedFailingTextLength:m,failingTextLength:c,totalTextLength:i}}},gX=vy});var GI={};S(GI,{default:()=>bX});function Ty(t){let e=t.getBoundingClientRect();return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}}function Sy(t,e){return t.parentElement&&t.parentElement.tagName==="PICTURE"?window.getComputedStyle(t.parentElement).getPropertyValue("position"):e.getPropertyValue("position")}function zI(t){return t.filter(n=>n.localName==="img").map(n=>{let r=window.getComputedStyle(n),a=!!n.parentElement&&n.parentElement.tagName==="PICTURE",o=!a&&!n.srcset;return{src:n.currentSrc,srcset:n.srcset,displayedWidth:n.width,displayedHeight:n.height,clientRect:Ty(n),attributeWidth:n.getAttribute("width"),attributeHeight:n.getAttribute("height"),naturalDimensions:o?{width:n.naturalWidth,height:n.naturalHeight}:void 0,cssRules:void 0,computedStyles:{position:Sy(n,r),objectFit:r.getPropertyValue("object-fit"),imageRendering:r.getPropertyValue("image-rendering")},isCss:!1,isPicture:a,loading:n.loading,isInShadowDOM:n.getRootNode()instanceof ShadowRoot,fetchPriority:n.fetchPriority,node:getNodeDetails(n)}})}function HI(t){let e=/^url\("([^"]+)"\)$/,n=[];for(let r of t){let a=window.getComputedStyle(r);if(!a.backgroundImage||!e.test(a.backgroundImage))continue;let i=a.backgroundImage.match(e)[1];n.push({src:i,srcset:"",displayedWidth:r.clientWidth,displayedHeight:r.clientHeight,clientRect:Ty(r),attributeWidth:null,attributeHeight:null,naturalDimensions:void 0,cssEffectiveRules:void 0,computedStyles:{position:Sy(r,a),objectFit:"",imageRendering:a.getPropertyValue("image-rendering")},isCss:!0,isPicture:!1,isInShadowDOM:r.getRootNode()instanceof ShadowRoot,node:getNodeDetails(r)})}return n}function hX(){let t=getElementsInDocument();return zI(t).concat(HI(t))}function yX(t){return new Promise((e,n)=>{let r=new Image;r.addEventListener("error",a=>n(new Error("determineNaturalSize failed img load"))),r.addEventListener("load",()=>{e({naturalWidth:r.naturalWidth,naturalHeight:r.naturalHeight})}),r.src=t})}function Wp(t,e){if(!t||!t.cssProperties)return;let n=t.cssProperties.find(({name:r})=>r===e);if(n)return n.value}function vX(t,e){let r=Bu(t,s(a=>Wp(a,e),"isDeclarationofInterest"));if(r)return Wp(r,e)}function Dy({attributesStyle:t,inlineStyle:e,matchedCSSRules:n},r){let a=Wp(e,r);if(a)return a;let o=Wp(t,r);if(o)return o;let i=vX(n,r);return i||null}function qI(t){return t.naturalDimensions?t.naturalDimensions.height*t.naturalDimensions.width:t.displayedHeight*t.displayedWidth}var Ey,bX,WI=v(()=>{"use strict";d();He();Ue();un();wy();s(Ty,"getClientRect");s(Sy,"getPosition");s(zI,"getHTMLImages");s(HI,"getCSSImages");s(hX,"collectImageElementInfo");s(yX,"determineNaturalSize");s(Wp,"findSizeDeclaration");s(vX,"findMostSpecificCSSRule");s(Dy,"getEffectiveSizingRule");s(qI,"getPixelArea");Ey=class extends X{static{s(this,"ImageElements")}meta={supportedModes:["snapshot","timespan","navigation"]};constructor(){super(),this._naturalSizeCache=new Map}async fetchElementWithSizeInformation(e,n){let r=n.src,a=this._naturalSizeCache.get(r);if(!a)try{e.defaultSession.setNextProtocolTimeout(250),a=await e.executionContext.evaluate(yX,{args:[r],useIsolation:!0}),this._naturalSizeCache.set(r,a)}catch{}a&&(n.naturalDimensions={width:a.naturalWidth,height:a.naturalHeight})}async fetchSourceRules(e,n,r){try{let{nodeId:a}=await e.sendCommand("DOM.pushNodeByPathToFrontend",{path:n});if(!a)return;let o=await e.sendCommand("CSS.getMatchedStylesForNode",{nodeId:a}),i=Dy(o,"width"),c=Dy(o,"height"),u=Dy(o,"aspect-ratio");r.cssEffectiveRules={width:i,height:c,aspectRatio:u}}catch(a){if(/No node.*found/.test(a.message))return;throw a}}async collectExtraDetails(e,n){let r=!1;setTimeout(o=>r=!0,5e3);let a=0;for(let o of n){if(r){a++;continue}!o.isInShadowDOM&&!o.isCss&&await this.fetchSourceRules(e.defaultSession,o.node.devtoolsNodePath,o),(o.isPicture||o.isCss||o.srcset)&&await this.fetchElementWithSizeInformation(e,o)}r&&N.warn("ImageElements",`Reached gathering budget of 5s. Skipped extra details for ${a}/${n.length}`)}async getArtifact(e){let n=e.driver.defaultSession,a=await e.driver.executionContext.evaluate(hX,{args:[],useIsolation:!0,deps:[Ee.getElementsInDocument,Ee.getBoundingClientRect,Ee.getNodeDetails,Ty,Sy,zI,HI]});return await Promise.all([n.sendCommand("DOM.enable"),n.sendCommand("CSS.enable"),n.sendCommand("DOM.getDocument",{depth:-1,pierce:!0})]),a.sort((o,i)=>qI(i)-qI(o)),await this.collectExtraDetails(e.driver,a),await Promise.all([n.sendCommand("DOM.disable"),n.sendCommand("CSS.disable")]),a}},bX=Ey});var VI={};S(VI,{default:()=>DX});function wX(){let t=[],e=new Map,n=new Map,r=getElementsInDocument("form");for(let i of r)e.set(i,{id:i.id,name:i.name,autocomplete:i.autocomplete,node:getNodeDetails(i)});let a=getElementsInDocument("label");for(let i of a)n.set(i,{for:i.htmlFor,node:getNodeDetails(i)});let o=getElementsInDocument("textarea, input, select");for(let i of o){let c=i.form,u=c?[...e.keys()].indexOf(c):void 0,l=[...i.labels||[]].map(p=>[...n.keys()].indexOf(p)),m;i.readOnly||(m=!i.dispatchEvent(new ClipboardEvent("paste",{cancelable:!0}))),t.push({parentFormIndex:u,labelIndices:l,id:i.id,name:i.name,type:i.type,placeholder:i instanceof HTMLSelectElement?void 0:i.placeholder,autocomplete:{property:i.autocomplete,attribute:i.getAttribute("autocomplete"),prediction:i.getAttribute("autofill-prediction")},preventsPaste:m,node:getNodeDetails(i)})}return{inputs:t,forms:[...e.values()],labels:[...n.values()]}}var xy,DX,$I=v(()=>{"use strict";d();Ue();un();s(wX,"collectElements");xy=class extends X{static{s(this,"Inputs")}meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){return e.driver.executionContext.evaluate(wX,{args:[],useIsolation:!0,deps:[Ee.getElementsInDocument,Ee.getNodeDetails]})}},DX=xy});var YI={};S(YI,{default:()=>EX});var Cy,EX,KI=v(()=>{"use strict";d();Ue();De();Kn();Cy=class extends X{static{s(this,"InspectorIssues")}meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Lt.symbol}};constructor(){super(),this._issues=[],this._onIssueAdded=this.onIssueAdded.bind(this)}onIssueAdded(e){this._issues.push(e.issue)}async startInstrumentation(e){let n=e.driver.defaultSession;n.on("Audits.issueAdded",this._onIssueAdded),await n.sendCommand("Audits.enable")}async stopInstrumentation(e){let n=e.driver.defaultSession;n.off("Audits.issueAdded",this._onIssueAdded),await n.sendCommand("Audits.disable")}async getArtifact(e){let n=e.dependencies.DevtoolsLog,r=await $.request(n,e),a={attributionReportingIssue:[],blockedByResponseIssue:[],bounceTrackingIssue:[],clientHintIssue:[],contentSecurityPolicyIssue:[],corsIssue:[],deprecationIssue:[],federatedAuthRequestIssue:[],genericIssue:[],heavyAdIssue:[],lowTextContrastIssue:[],mixedContentIssue:[],navigatorUserAgentIssue:[],quirksModeIssue:[],cookieIssue:[],sharedArrayBufferIssue:[],stylesheetLoadingIssue:[],federatedAuthUserInfoRequestIssue:[]},o=Object.keys(a);for(let i of o){let c=`${i}Details`,u=this._issues.map(l=>l.details[c]);for(let l of u){if(!l)continue;let m="request"in l&&l.request&&l.request.requestId;m?r.find(p=>p.requestId===m)&&a[i].push(l):a[i].push(l)}}return a}},EX=Cy});var JI={};S(JI,{default:()=>TX});var Ay,TX,XI=v(()=>{"use strict";d();He();Ue();Ay=class t extends X{static{s(this,"InstallabilityErrors")}meta={supportedModes:["snapshot","navigation"]};static async getInstallabilityErrors(e){let n={msg:"Get webapp installability errors",id:"lh:gather:getInstallabilityErrors"};N.time(n);let a=(await e.sendCommand("Page.getInstallabilityErrors")).installabilityErrors;return N.timeEnd(n),{errors:a}}async getArtifact(e){let n=e.driver;try{return await t.getInstallabilityErrors(n.defaultSession)}catch{return{errors:[{errorId:"protocol-timeout",errorArguments:[]}]}}}},TX=Ay});var ZI={};S(ZI,{default:()=>SX});var Fy,SX,QI=v(()=>{"use strict";d();Ue();Fy=class extends X{static{s(this,"JsUsage")}meta={supportedModes:["snapshot","timespan","navigation"]};constructor(){super(),this._scriptUsages=[]}async startInstrumentation(e){let n=e.driver.defaultSession;await n.sendCommand("Profiler.enable"),await n.sendCommand("Profiler.startPreciseCoverage",{detailed:!1})}async stopInstrumentation(e){let n=e.driver.defaultSession,r=await n.sendCommand("Profiler.takePreciseCoverage");this._scriptUsages=r.result,await n.sendCommand("Profiler.stopPreciseCoverage"),await n.sendCommand("Profiler.disable")}async getArtifact(){let e={};for(let n of this._scriptUsages)n.url===""||n.url==="_lighthouse-eval.js"||n.url!=="__puppeteer_evaluation_script__"&&(e[n.scriptId]=n);return e}},SX=Fy});var rM=L((CEe,nM)=>{"use strict";d();var xX=/^utf-?8|ascii|utf-?16-?le|ucs-?2|base-?64|latin-?1$/i,CX=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,AX=/\s|\uFEFF|\xA0/,FX=/\r?\n[\x20\x09]+/g,RX=/[;,"]/,_X=/[;,"]|\s/,kX=/^[!#$%&'*+\-\.^_`|~\da-zA-Z]+$/,ya={IDLE:1,URI:2,ATTR:4};function eM(t){return t.replace(CX,"")}s(eM,"trim");function Vp(t){return AX.test(t)}s(Vp,"hasWhitespace");function IX(t,e){for(;Vp(t[e]);)e++;return e}s(IX,"skipWhitespace");function tM(t){return _X.test(t)||!kX.test(t)}s(tM,"needsQuotes");function MX(t,e){return Object.keys(t).length===Object.keys(e).length&&Object.keys(t).every(n=>n in e&&t[n]===e[n])}s(MX,"shallowCompareObjects");var Gt=class t{static{s(this,"Link")}constructor(e){this.refs=[],e&&this.parse(e)}rel(e){for(var n=[],r=e.toLowerCase(),a=0;a<this.refs.length;a++)this.refs[a].rel.toLowerCase()===r&&n.push(this.refs[a]);return n}get(e,n){e=e.toLowerCase();for(var r=[],a=0;a<this.refs.length;a++)this.refs[a][e]===n&&r.push(this.refs[a]);return r}set(e){return this.refs.push(e),this}setUnique(e){return this.refs.some(n=>MX(n,e))||this.refs.push(e),this}has(e,n){e=e.toLowerCase();for(var r=0;r<this.refs.length;r++)if(this.refs[r][e]===n)return!0;return!1}parse(e,o){o=o||0,e=o?e.slice(o):e,e=eM(e).replace(FX,"");for(var r=ya.IDLE,a=e.length,o=0,i=null;o<a;)if(r===ya.IDLE){if(Vp(e[o])){o++;continue}else if(e[o]==="<"){i!=null&&(i.rel!=null?this.refs.push(...t.expandRelations(i)):this.refs.push(i));var c=e.indexOf(">",o);if(c===-1)throw new Error("Expected end of URI delimiter at offset "+o);i={uri:e.slice(o+1,c)},o=c,r=ya.URI}else throw new Error('Unexpected character "'+e[o]+'" at offset '+o);o++}else if(r===ya.URI)if(Vp(e[o])){o++;continue}else if(e[o]===";")r=ya.ATTR,o++;else if(e[o]===",")r=ya.IDLE,o++;else throw new Error('Unexpected character "'+e[o]+'" at offset '+o);else if(r===ya.ATTR){if(e[o]===";"||Vp(e[o])){o++;continue}var c=e.indexOf("=",o);c===-1&&(c=e.indexOf(";",o)),c===-1&&(c=e.length);var u=eM(e.slice(o,c)).toLowerCase(),l="";if(o=c+1,o=IX(e,o),e[o]==='"')for(o++;o<a;){if(e[o]==='"'){o++;break}e[o]==="\\"&&o++,l+=e[o],o++}else{for(var c=o+1;!RX.test(e[c])&&c<a;)c++;l=e.slice(o,c),o=c}switch(i[u]&&t.isSingleOccurenceAttr(u)||(u[u.length-1]==="*"?i[u]=t.parseExtendedValue(l):(l=u==="type"?l.toLowerCase():l,i[u]!=null?Array.isArray(i[u])?i[u].push(l):i[u]=[i[u],l]:i[u]=l)),e[o]){case",":r=ya.IDLE;break;case";":r=ya.ATTR;break}o++}else throw new Error('Unknown parser state "'+r+'"');return i!=null&&(i.rel!=null?this.refs.push(...t.expandRelations(i)):this.refs.push(i)),i=null,this}toString(){for(var e=[],n="",r=null,a=0;a<this.refs.length;a++)r=this.refs[a],n=Object.keys(this.refs[a]).reduce(function(o,i){return i==="uri"?o:o+"; "+t.formatAttribute(i,r[i])},"<"+r.uri+">"),e.push(n);return e.join(", ")}};Gt.isCompatibleEncoding=function(t){return xX.test(t)};Gt.parse=function(t,e){return new Gt().parse(t,e)};Gt.isSingleOccurenceAttr=function(t){return t==="rel"||t==="type"||t==="media"||t==="title"||t==="title*"};Gt.isTokenAttr=function(t){return t==="rel"||t==="type"||t==="anchor"};Gt.escapeQuotes=function(t){return t.replace(/"/g,'\\"')};Gt.expandRelations=function(t){var e=t.rel.split(" ");return e.map(function(n){var r=Object.assign({},t);return r.rel=n,r})};Gt.parseExtendedValue=function(t){var e=/([^']+)?(?:'([^']*)')?(.+)/.exec(t);return{language:e[2].toLowerCase(),encoding:Gt.isCompatibleEncoding(e[1])?null:e[1].toLowerCase(),value:Gt.isCompatibleEncoding(e[1])?decodeURIComponent(e[3]):e[3]}};Gt.formatExtendedAttribute=function(t,e){var n=(e.encoding||"utf-8").toUpperCase(),r=e.language||"en",a="";return Buffer.isBuffer(e.value)&&Gt.isCompatibleEncoding(n)?a=e.value.toString(n):Buffer.isBuffer(e.value)?a=e.value.toString("hex").replace(/[0-9a-f]{2}/gi,"%$1"):a=encodeURIComponent(e.value),t+"="+n+"'"+r+"'"+a};Gt.formatAttribute=function(t,e){return Array.isArray(e)?e.map(n=>Gt.formatAttribute(t,n)).join("; "):t[t.length-1]==="*"||typeof e!="string"?Gt.formatExtendedAttribute(t,e):(Gt.isTokenAttr(t)?e=tM(e)?'"'+Gt.escapeQuotes(e)+'"':Gt.escapeQuotes(e):tM(e)&&(e=encodeURIComponent(e),e=e.replace(/%20/g," ").replace(/%2C/g,",").replace(/%3B/g,";"),e='"'+e+'"'),t+"="+e)};nM.exports=Gt});var Ry,je,Wt=v(()=>{"use strict";d();we();Jo();De();Ry=class{static{s(this,"MainResource")}static async compute_(e,n){let{mainDocumentUrl:r}=e.URL;if(!r)throw new Error("mainDocumentUrl must exist to get the main resource");let a=await $.request(e.devtoolsLog,n),o=Qt.findResourceForUrl(a,r);if(!o)throw new Error("Unable to identify the main resource");return o}},je=W(Ry,["URL","devtoolsLog"])});var oM={};S(oM,{UIStrings:()=>ky,default:()=>UX});function LX(t,e){try{return new URL(t,e).href}catch{return null}}function PX(t){return t==="anonymous"?"anonymous":t==="use-credentials"?"use-credentials":null}function OX(){let t=getElementsInDocument("link"),e=[];for(let n of t){if(!(n instanceof HTMLLinkElement))continue;let r=n.getAttribute("href")||"",a=n.closest("head")?"head":"body";e.push({rel:n.rel,href:n.href,hreflang:n.hreflang,as:n.as,crossOrigin:n.crossOrigin,hrefRaw:r,source:a,fetchPriority:n.fetchPriority,node:getNodeDetails(n)})}return e}var aM,ky,NX,_y,UX,iM=v(()=>{"use strict";d();aM=zt(rM(),1);Ue();un();Kn();Wt();Rr();k();ky={headerParseWarning:"Error parsing `link` header ({error}): `{header}`"},NX=w("core/gather/gatherers/link-elements.js",ky);s(LX,"normalizeUrlOrNull");s(PX,"getCrossoriginFromHeader");s(OX,"getLinkElementsInDOM");_y=class t extends X{static{s(this,"LinkElements")}constructor(){super(),this.meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Lt.symbol}}}static getLinkElementsInDOM(e){return e.driver.executionContext.evaluate(OX,{args:[],useIsolation:!0,deps:[Ee.getNodeDetails,Ee.getElementsInDocument]})}static async getLinkElementsInHeaders(e,n){let r=await je.request({devtoolsLog:n,URL:e.baseArtifacts.URL},e),a=[];for(let o of r.responseHeaders){if(o.name.toLowerCase()!=="link")continue;let i=[];try{i=aM.default.parse(o.value).refs}catch(c){let u=rt.truncate(o.value,100),l=NX(ky.headerParseWarning,{error:c.message,header:u});e.baseArtifacts.LighthouseRunWarnings.push(l)}for(let c of i)a.push({rel:c.rel||"",href:LX(c.uri,e.baseArtifacts.URL.finalDisplayedUrl),hrefRaw:c.uri||"",hreflang:c.hreflang||"",as:c.as||"",crossOrigin:PX(c.crossorigin),source:"headers",fetchPriority:c.fetchpriority,node:null})}return a}async getArtifact(e){let n=e.dependencies.DevtoolsLog,r=await t.getLinkElementsInDOM(e),a=await t.getLinkElementsInHeaders(e,n),o=r.concat(a);for(let i of o)i.rel=i.rel.toLowerCase();return o}},UX=_y});var sM={};S(sM,{default:()=>BX});var Iy,BX,cM=v(()=>{"use strict";d();Ue();Kn();dy();Wt();Iy=class extends X{static{s(this,"MainDocumentContent")}meta={supportedModes:["navigation"],dependencies:{DevtoolsLog:Lt.symbol}};async getArtifact(e){let n=e.dependencies.DevtoolsLog,r=await je.request({devtoolsLog:n,URL:e.baseArtifacts.URL},e),a=e.driver.defaultSession;return qp(a,r.requestId)}},BX=Iy});var uM={};S(uM,{default:()=>qX});function jX(){let t={getElementsInDocument,getNodeDetails};return t.getElementsInDocument("head meta").map(n=>{let r=s(a=>{let o=n.attributes.getNamedItem(a);if(o)return o.value},"getAttribute");return{name:n.name.toLowerCase(),content:n.content,property:r("property"),httpEquiv:n.httpEquiv?n.httpEquiv.toLowerCase():void 0,charset:r("charset"),node:t.getNodeDetails(n)}})}var My,qX,lM=v(()=>{"use strict";d();Ue();un();s(jX,"collectMetaElements");My=class extends X{static{s(this,"MetaElements")}meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(jX,{args:[],useIsolation:!0,deps:[Ee.getElementsInDocument,Ee.getNodeDetails]})}},qX=My});var dM={};S(dM,{default:()=>zX});var Ny,zX,mM=v(()=>{"use strict";d();Ue();Kn();Ny=class t extends X{static{s(this,"NetworkUserAgent")}meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Lt.symbol}};static getNetworkUserAgent(e){for(let n of e){if(n.method!=="Network.requestWillBeSent")continue;let r=n.params.request.headers["User-Agent"];if(r)return r}return""}async getArtifact(e){return t.getNetworkUserAgent(e.dependencies.DevtoolsLog)}},zX=Ny});var pM={};S(pM,{default:()=>GX});function HX(){return getElementsInDocument("script").map(e=>({type:e.type||null,src:e.src||null,id:e.id||null,async:e.async,defer:e.defer,source:e.closest("head")?"head":"body",node:getNodeDetails(e)}))}var Ly,GX,fM=v(()=>{"use strict";d();Ue();De();St();un();Kn();s(HX,"collectAllScriptElements");Ly=class extends X{static{s(this,"ScriptElements")}meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Lt.symbol}};async _getArtifact(e,n){let a=await e.driver.executionContext.evaluate(HX,{args:[],useIsolation:!0,deps:[Ee.getNodeDetails,Ee.getElementsInDocument]}),o=n.filter(i=>i.resourceType===Y.TYPES.Script).filter(i=>!i.isOutOfProcessIframe);for(let i=0;i<o.length;i++){let c=o[i];a.find(l=>l.src===c.url)||a.push({type:null,src:c.url,id:null,async:!1,defer:!1,source:"network",node:null})}return a}async getArtifact(e){let n=e.dependencies.DevtoolsLog,r=await $.request(n,e);return this._getArtifact(e,r)}},GX=Ly});var gM={};S(gM,{default:()=>Oy});async function WX(t,e,n){if(n){let r=[];for(let a of t){let o=await e(a);r.push(o)}return r}else{let r=t.map(e);return await Promise.all(r)}}function VX(t){return t.embedderName?t.hasSourceURL&&t.url==="_lighthouse-eval.js":!0}var Py,Oy,Uy=v(()=>{"use strict";d();Ue();s(WX,"runInSeriesOrParallel");s(VX,"isLighthouseRuntimeEvaluateScript");Py=class t extends X{static{s(this,"Scripts")}static symbol=Symbol("Scripts");meta={symbol:t.symbol,supportedModes:["timespan","navigation"]};_scriptParsedEvents=[];_scriptContents=[];constructor(){super(),this.onScriptParsed=this.onScriptParsed.bind(this)}onScriptParsed(e){VX(e)||this._scriptParsedEvents.push(e)}async startInstrumentation(e){let n=e.driver.defaultSession;n.on("Debugger.scriptParsed",this.onScriptParsed),await n.sendCommand("Debugger.enable")}async stopInstrumentation(e){let n=e.driver.defaultSession,r=e.baseArtifacts.HostFormFactor;n.off("Debugger.scriptParsed",this.onScriptParsed),this._scriptContents=await WX(this._scriptParsedEvents,({scriptId:a})=>n.sendCommand("Debugger.getScriptSource",{scriptId:a}).then(o=>o.scriptSource).catch(()=>{}),r==="mobile"),await n.sendCommand("Debugger.disable")}async getArtifact(){return this._scriptParsedEvents.map((n,r)=>({name:n.url,...n,url:n.embedderName||n.url,content:this._scriptContents[r]}))}},Oy=Py});var hM={};S(hM,{default:()=>YX});function $X(){let t={getElementsInDocument,getNodeDetails},e="object, embed, applet";return t.getElementsInDocument(e).map(r=>({tagName:r.tagName,type:r.getAttribute("type"),src:r.getAttribute("src"),data:r.getAttribute("data"),code:r.getAttribute("code"),params:Array.from(r.children).filter(a=>a.tagName==="PARAM").map(a=>({name:a.getAttribute("name")||"",value:a.getAttribute("value")||""})),node:t.getNodeDetails(r)}))}var By,YX,yM=v(()=>{"use strict";d();Ue();un();s($X,"getEmbeddedContent");By=class extends X{static{s(this,"EmbeddedContent")}meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate($X,{args:[],deps:[Ee.getElementsInDocument,Ee.getNodeDetails]})}},YX=By});var vM={};S(vM,{default:()=>KX});var jy,KX,bM=v(()=>{"use strict";d();Ue();jy=class extends X{static{s(this,"RobotsTxt")}meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){let{finalDisplayedUrl:n}=e.baseArtifacts.URL,r=new URL("/robots.txt",n).href;return e.driver.fetcher.fetchResource(r).catch(a=>({status:null,content:null,errorMessage:a.message}))}},KX=jy});function zy(t,{x:e,y:n}){return t.left<=e&&t.right>=e&&t.top<=n&&t.bottom>=n}function qy(t,e){return e.top>=t.top&&e.right<=t.right&&e.bottom<=t.bottom&&e.left>=t.left}function wM(t){return t.filter(e=>e.width>1&&e.height>1)}function DM(t){let e=new Set(t);for(let n of t)for(let r of t)if(n!==r&&e.has(r)&&qy(r,n)){e.delete(n);break}return Array.from(e)}function $p(t){return{x:t.left+t.width/2,y:t.top+t.height/2}}function Yp(t,e){return t.left<=e.right&&e.left<=t.right&&t.top<=e.bottom&&e.top<=t.bottom}function Hy(t,e){if(t.length===0)throw new Error("No rects to take bounds of");let n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=Number.MAX_VALUE,o=-Number.MAX_VALUE;for(let c of t)n=Math.min(n,c.left),r=Math.max(r,c.right),a=Math.min(a,c.top),o=Math.max(o,c.bottom);let i=e/2;return n-=i,r+=i,a-=i,o+=i,{left:n,right:r,top:a,bottom:o,width:r-n,height:o-a}}function EM(t){return Hy(t,0)}function JX({left:t,top:e,right:n,bottom:r}){return{left:t,top:e,right:n,bottom:r,width:n-t,height:r-e}}function TM({x:t,y:e,width:n,height:r}){return{left:t,top:e,right:t+n,bottom:e+r,width:n,height:r}}function qu(t,e){let n=Math.min(t.bottom,e.bottom)-Math.max(t.top,e.top);if(n<=0)return 0;let r=Math.min(t.right,e.right)-Math.max(t.left,e.left);return r<=0?0:r*n}function SM(t,e){return JX({left:t.left+t.width/2-e/2,top:t.top+t.height/2-e/2,right:t.right-t.width/2+e/2,bottom:t.bottom-t.height/2+e/2})}function ju(t){return t.width*t.height}function xM(t){let e=t[0];for(let n of t)ju(n)>ju(e)&&(e=n);return e}function CM(t,e){for(let n of t)for(let r of e)if(!qy(n,r)&&!qy(r,n))return!1;return!0}var zu=v(()=>{"use strict";d();s(zy,"rectContainsPoint");s(qy,"rectContains");s(wM,"filterOutTinyRects");s(DM,"filterOutRectsContainedByOthers");s($p,"getRectCenterPoint");s(Yp,"rectsTouchOrOverlap");s(Hy,"getBoundingRectWithPadding");s(EM,"getBoundingRect");s(JX,"addRectWidthAndHeight");s(TM,"addRectTopAndBottom");s(qu,"getRectOverlapArea");s(SM,"getRectAtCenter");s(ju,"getRectArea");s(xM,"getLargestRect");s(CM,"allRectsContainedWithinEachOther")});var IM={};S(IM,{default:()=>eZ});function AM(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)}function Vy(t){let e=Array.from(t.getClientRects()).map(n=>{let{width:r,height:a,left:o,top:i,right:c,bottom:u}=n;return{width:r,height:a,left:o,top:i,right:c,bottom:u}});for(let n of t.children)e.push(...Vy(n));return e}function $y(t,e){return t.parentElement?t.parentElement.matches(e)?!0:$y(t.parentElement,e):!1}function FM(t){if(!t.parentElement)return!1;let e=t.parentElement,n=t.textContent||"";if((e.textContent||"").length-n.length<5)return!1;for(let a of t.parentElement.childNodes){if(a===t)continue;let o=(a.textContent||"").trim();if(a.nodeType===Node.TEXT_NODE&&o.length>0)return!0}return!1}function Yy(t){let{display:e}=getComputedStyle(t);return e!=="inline"&&e!=="inline-block"?!1:FM(t)?!0:t.parentElement?Yy(t.parentElement):!1}function RM(t,e){let n=window.innerHeight,r=Math.floor(e.y/n)*n;window.scrollY!==r&&window.scrollTo(0,r);let a=document.elementFromPoint(e.x,e.y-window.scrollY);return a===t||t.contains(a)}function _M(t){return document.querySelectorAll("*").forEach(e=>{let n=getComputedStyle(e).position;(n==="fixed"||n==="sticky")&&e.classList.add(t)}),s(function(){Array.from(document.getElementsByClassName(t)).forEach(n=>{n.classList.remove(t)})},"undo")}function kM(t,e){let n=[];window.scrollTo(0,0);let r=getElementsInDocument(t),a=[];r.forEach(c=>{$y(c,t)||Yy(c)||AM(c)&&a.push({tapTargetElement:c,clientRects:Vy(c)})});let o=_M(e),i=[];a.forEach(({tapTargetElement:c,clientRects:u})=>{let l=u.filter(m=>m.width!==0&&m.height!==0);l=l.filter(m=>{let p=getRectCenterPoint(m);return RM(c,p)}),l.length>0&&i.push({tapTargetElement:c,visibleClientRects:l})});for(let{tapTargetElement:c,visibleClientRects:u}of i)n.push({clientRects:u,href:c.href||"",node:getNodeDetails(c)});return o(),n}function QX(t,e){let n={x:window.scrollX,y:window.scrollY};try{return kM(t,e)}finally{window.scrollTo(n.x,n.y)}}var XX,ZX,Wy,eZ,MM=v(()=>{"use strict";d();Ue();un();zu();XX=["button","a","input","textarea","select","option","[role=button]","[role=checkbox]","[role=link]","[role=menuitem]","[role=menuitemcheckbox]","[role=menuitemradio]","[role=option]","[role=scrollbar]","[role=slider]","[role=spinbutton]"],ZX=XX.join(",");s(AM,"elementIsVisible");s(Vy,"getClientRects");s($y,"elementHasAncestorTapTarget");s(FM,"hasTextNodeSiblingsFormingTextBlock");s(Yy,"elementIsInTextBlock");s(RM,"elementCenterIsAtZAxisTop");s(_M,"disableFixedAndStickyElementPointerEvents");s(kM,"gatherTapTargets");s(QX,"gatherTapTargetsAndResetScroll");Wy=class extends X{static{s(this,"TapTargets")}constructor(){super(),this.meta={supportedModes:["snapshot","navigation"]}}async addStyleRule(e,n){let r=await e.sendCommand("Page.getFrameTree"),{styleSheetId:a}=await e.sendCommand("CSS.createStyleSheet",{frameId:r.frameTree.frame.id}),o=`.${n} { pointer-events: none !important }`;return await e.sendCommand("CSS.setStyleSheetText",{styleSheetId:a,text:o}),a}async removeStyleRule(e,n){await e.sendCommand("CSS.setStyleSheetText",{styleSheetId:n,text:""})}async getArtifact(e){let n=e.driver.defaultSession;await n.sendCommand("DOM.enable"),await n.sendCommand("CSS.enable");let r="lighthouse-disable-pointer-events",a=await this.addStyleRule(n,r),o=await e.driver.executionContext.evaluate(QX,{args:[ZX,r],useIsolation:!0,deps:[Ee.getNodeDetails,Ee.getElementsInDocument,_M,AM,$y,RM,Vy,FM,Yy,$p,Ee.getNodePath,Ee.getNodeSelector,Ee.getNodeLabel,kM]});return await this.removeStyleRule(n,a),await n.sendCommand("CSS.disable"),await n.sendCommand("DOM.disable"),o}},eZ=Wy});function NM(t){return new Promise((e,n)=>{let r=s(a=>{let o=a.versions.filter(c=>c.status!=="redundant"),i=o.find(c=>c.status==="activated");(!o.length||i)&&(t.off("ServiceWorker.workerVersionUpdated",r),t.sendCommand("ServiceWorker.disable").then(c=>e(a),n))},"versionUpdatedListener");t.on("ServiceWorker.workerVersionUpdated",r),t.sendCommand("ServiceWorker.enable").catch(n)})}function LM(t){return new Promise((e,n)=>{t.once("ServiceWorker.workerRegistrationUpdated",r=>{t.sendCommand("ServiceWorker.disable").then(a=>e(r),n)}),t.sendCommand("ServiceWorker.enable").catch(n)})}var PM=v(()=>{"use strict";d();s(NM,"getServiceWorkerVersions");s(LM,"getServiceWorkerRegistrations")});var OM={};S(OM,{default:()=>nZ});var Ky,nZ,UM=v(()=>{"use strict";d();Ue();PM();Ky=class extends X{static{s(this,"ServiceWorker")}meta={supportedModes:["navigation"]};async getArtifact(e){let n=e.driver.defaultSession,{versions:r}=await NM(n),{registrations:a}=await LM(n);return{versions:r,registrations:a}}},nZ=Ky});var BM=L(Cs=>{"use strict";d();Object.defineProperty(Cs,"__esModule",{value:!0});Cs.ParsedURL=Cs.normalizePath=void 0;function rZ(t){if(t.indexOf("..")===-1&&t.indexOf(".")===-1)return t;let e=(t[0]==="/"?t.substring(1):t).split("/"),n=[];for(let a of e)a!=="."&&(a===".."?n.pop():n.push(a));let r=n.join("/");return t[0]==="/"&&r&&(r="/"+r),r[r.length-1]!=="/"&&(t[t.length-1]==="/"||e[e.length-1]==="."||e[e.length-1]==="..")&&(r=r+"/"),r}s(rZ,"normalizePath");Cs.normalizePath=rZ;var Jy=class t{static{s(this,"ParsedURL")}isValid;url;scheme;user;host;port;path;queryParams;fragment;folderPathComponents;lastPathComponent;blobInnerScheme;#e;#r;constructor(e){this.isValid=!1,this.url=e,this.scheme="",this.user="",this.host="",this.port="",this.path="",this.queryParams="",this.fragment="",this.folderPathComponents="",this.lastPathComponent="";let n=this.url.startsWith("blob:"),a=(n?e.substring(5):e).match(t.urlRegex());if(a)this.isValid=!0,n?(this.blobInnerScheme=a[2].toLowerCase(),this.scheme="blob"):this.scheme=a[2].toLowerCase(),this.user=a[3]??"",this.host=a[4]??"",this.port=a[5]??"",this.path=a[6]??"/",this.queryParams=a[7]??"",this.fragment=a[8]??"";else{if(this.url.startsWith("data:")){this.scheme="data";return}if(this.url.startsWith("blob:")){this.scheme="blob";return}if(this.url==="about:blank"){this.scheme="about";return}this.path=this.url}let o=this.path.lastIndexOf("/");o!==-1?(this.folderPathComponents=this.path.substring(0,o),this.lastPathComponent=this.path.substring(o+1)):this.lastPathComponent=this.path}static concatenate(e,...n){return e.concat(...n)}static beginsWithWindowsDriveLetter(e){return/^[A-Za-z]:/.test(e)}static beginsWithScheme(e){return/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e)}static isRelativeURL(e){return!this.beginsWithScheme(e)||this.beginsWithWindowsDriveLetter(e)}get displayName(){return this.#e?this.#e:this.isDataURL()?this.dataURLDisplayName():this.isBlobURL()?this.url:this.isAboutBlank()?this.url:(this.#e=this.lastPathComponent,this.#e||(this.#e=(this.host||"")+"/"),this.#e==="/"&&(this.#e=this.url),this.#e)}static urlRegexInstance=null};Cs.ParsedURL=Jy});var qM=L((MTe,jM)=>{"use strict";d();var aZ=BM();jM.exports={ParsedURL:aZ}});var HM=L((LTe,zM)=>{"use strict";d();function oZ(t,e,n,r,a){let o=r||0,i=a!==void 0?a:t.length;for(;o<i;){let c=o+i>>1;n(e,t[c])>0?o=c+1:i=c}return i}s(oZ,"lowerBound");function iZ(t,e,n,r,a){let o=r||0,i=a!==void 0?a:t.length;for(;o<i;){let c=o+i>>1;n(e,t[c])>=0?o=c+1:i=c}return i}s(iZ,"upperBound");zM.exports={ArrayUtilities:{lowerBound:oZ,upperBound:iZ},DevToolsPath:{EmptyUrlString:""}}});var KM=L((Or,YM)=>{"use strict";d();var sZ=qM(),ri=HM();Object.defineProperty(Or,"__esModule",{value:!0});Or.SourceMap=Or.SourceMapEntry=Or.parseSourceMap=void 0;function VM(t){return t.startsWith(")]}")&&(t=t.substring(t.indexOf(`
+`))),t.charCodeAt(0)===65279&&(t=t.slice(1)),JSON.parse(t)}s(VM,"parseSourceMap");Or.parseSourceMap=VM;var ai=class{static{s(this,"SourceMapEntry")}lineNumber;columnNumber;sourceURL;sourceLineNumber;sourceColumnNumber;name;constructor(e,n,r,a,o,i){this.lineNumber=e,this.columnNumber=n,this.sourceURL=r,this.sourceLineNumber=a,this.sourceColumnNumber=o,this.name=i}static compare(e,n){return e.lineNumber!==n.lineNumber?e.lineNumber-n.lineNumber:e.columnNumber-n.columnNumber}};Or.SourceMapEntry=ai;var GM="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",$M=new Map;for(let t=0;t<GM.length;++t)$M.set(GM.charAt(t),t);var WM=new WeakMap,As=class t{static{s(this,"SourceMap")}#e;#r;#a;#i;#n;#t;constructor(e,n,r){this.#e=r,this.#r=e,this.#a=n,this.#i=n.startsWith("data:")?e:n,this.#n=null,this.#t=new Map,"sections"in this.#e&&this.#e.sections.find(a=>"url"in a)&&console.warn(`SourceMap "${n}" contains unsupported "URL" field in one of its sections.`),this.eachSection(this.parseSources.bind(this))}compiledURL(){return this.#r}url(){return this.#a}sourceURLs(){return[...this.#t.keys()]}embeddedContentByURL(e){let n=this.#t.get(e);return n?n.content:null}findEntry(e,n){let r=this.mappings(),a=ri.ArrayUtilities.upperBound(r,void 0,(o,i)=>e-i.lineNumber||n-i.columnNumber);return a?r[a-1]:null}findEntryRanges(e,n){let r=this.mappings(),a=ri.ArrayUtilities.upperBound(r,void 0,(T,A)=>e-A.lineNumber||n-A.columnNumber);if(!a)return null;let o=a-1,i=r[o].sourceURL;if(!i)return null;let c=a<r.length?r[a].lineNumber:2**31-1,u=a<r.length?r[a].columnNumber:2**31-1,l=new TextUtils.TextRange.TextRange(r[o].lineNumber,r[o].columnNumber,c,u),m=this.reversedMappings(i),p=r[o].sourceLineNumber,g=r[o].sourceColumnNumber,f=ri.ArrayUtilities.upperBound(m,void 0,(T,A)=>p-r[A].sourceLineNumber||g-r[A].sourceColumnNumber);if(!f)return null;let y=f<m.length?r[m[f]].sourceLineNumber:2**31-1,b=f<m.length?r[m[f]].sourceColumnNumber:2**31-1,D=new TextUtils.TextRange.TextRange(p,g,y,b);return{range:l,sourceRange:D,sourceURL:i}}sourceLineMapping(e,n,r){let a=this.mappings(),o=this.reversedMappings(e),i=ri.ArrayUtilities.lowerBound(o,n,m),c=ri.ArrayUtilities.upperBound(o,n,m);if(i>=o.length||a[o[i]].sourceLineNumber!==n)return null;let u=o.slice(i,c);if(!u.length)return null;let l=ri.ArrayUtilities.lowerBound(u,r,(p,g)=>p-a[g].sourceColumnNumber);return l>=u.length?a[u[u.length-1]]:a[u[l]];function m(p,g){return p-a[g].sourceLineNumber}}findReverseIndices(e,n,r){let a=this.mappings(),o=this.reversedMappings(e),i=ri.ArrayUtilities.upperBound(o,void 0,(u,l)=>n-a[l].sourceLineNumber||r-a[l].sourceColumnNumber),c=i;for(;c>0&&a[o[c-1]].sourceLineNumber===a[o[i-1]].sourceLineNumber&&a[o[c-1]].sourceColumnNumber===a[o[i-1]].sourceColumnNumber;)--c;return o.slice(c,i)}findReverseEntries(e,n,r){let a=this.mappings();return this.findReverseIndices(e,n,r).map(o=>a[o])}findReverseRanges(e,n,r){let a=this.mappings(),o=this.findReverseIndices(e,n,r),i=[];for(let c=0;c<o.length;++c){let u=o[c],l=u+1;for(;c+1<o.length&&l===o[c+1];)++l,++c;let m=a[u].lineNumber,p=a[u].columnNumber,g=l<a.length?a[l].lineNumber:2**31-1,f=l<a.length?a[l].columnNumber:2**31-1;i.push(new TextUtils.TextRange.TextRange(m,p,g,f))}return i}mappings(){return this.#o(),this.#n??[]}reversedMappings(e){return this.#o(),this.#t.get(e)?.reverseMappings??[]}#o(){this.#n===null&&(this.#n=[],this.eachSection(this.parseMap.bind(this)),this.mappings().sort(ai.compare),this.#s(this.#n),this.#e=null)}#s(e){let n=new Map;for(let a=0;a<e.length;a++){let o=e[a].sourceURL;if(!o)continue;let i=n.get(o);i||(i=[],n.set(o,i)),i.push(a)}for(let[a,o]of n.entries()){let i=this.#t.get(a);i&&(o.sort(r),i.reverseMappings=o)}function r(a,o){let i=e[a],c=e[o];return i.sourceLineNumber-c.sourceLineNumber||i.sourceColumnNumber-c.sourceColumnNumber||i.lineNumber-c.lineNumber||i.columnNumber-c.columnNumber}s(r,"sourceMappingComparator")}eachSection(e){if(this.#e)if("sections"in this.#e)for(let n of this.#e.sections)"map"in n&&e(n.map,n.offset.line,n.offset.column);else e(this.#e,0,0)}parseSources(e){let n=[],r=e.sourceRoot??"",a=new Set(e.x_google_ignoreList);for(let o=0;o<e.sources.length;++o){let i=e.sources[o];sZ.ParsedURL.ParsedURL.isRelativeURL(i)&&(r&&!r.endsWith("/")&&i&&!i.startsWith("/")?i=r.concat("/",i):i=r.concat(i));let c=i,u=e.sourcesContent&&e.sourcesContent[o];if(n.push(c),!this.#t.has(c)){let l=u??null,m=a.has(o);this.#t.set(c,{content:l,ignoreListHint:m,reverseMappings:null})}}WM.set(e,n)}parseMap(e,n,r){let a=0,o=0,i=0,c=0,u=WM.get(e),l=e.names??[],m=new t.StringCharIterator(e.mappings),p=u&&u[a];for(;;){if(m.peek()===",")m.next();else{for(;m.peek()===";";)n+=1,r=0,m.next();if(!m.hasNext())break}if(r+=this.decodeVLQ(m),!m.hasNext()||this.isSeparator(m.peek())){this.mappings().push(new ai(n,r));continue}let g=this.decodeVLQ(m);if(g&&(a+=g,u&&(p=u[a])),o+=this.decodeVLQ(m),i+=this.decodeVLQ(m),!m.hasNext()||this.isSeparator(m.peek())){this.mappings().push(new ai(n,r,p,o,i));continue}c+=this.decodeVLQ(m),this.mappings().push(new ai(n,r,p,o,i,l[c]))}}isSeparator(e){return e===","||e===";"}decodeVLQ(e){let n=0,r=0,a=t._VLQ_CONTINUATION_MASK;for(;a&t._VLQ_CONTINUATION_MASK;)a=$M.get(e.next())||0,n+=(a&t._VLQ_BASE_MASK)<<r,r+=t._VLQ_BASE_SHIFT;let o=n&1;return n>>=1,o?-n:n}mapsOrigin(){let e=this.mappings();if(e.length>0){let n=e[0];return n?.lineNumber===0||n.columnNumber===0}return!1}hasIgnoreListHint(e){return this.#t.get(e)?.ignoreListHint??!1}findRanges(e,n){let r=this.mappings(),a=[];if(!r.length)return[];let o=null;(r[0].lineNumber!==0||r[0].columnNumber!==0)&&n?.isStartMatching&&(o=TextUtils.TextRange.TextRange.createUnboundedFromLocation(0,0),a.push(o));for(let{sourceURL:i,lineNumber:c,columnNumber:u}of r){let l=i&&e(i);if(!o&&l){o=TextUtils.TextRange.TextRange.createUnboundedFromLocation(c,u),a.push(o);continue}o&&!l&&(o.endLine=c,o.endColumn=u,o=null)}return a}};Or.SourceMap=As;(function(t){t._VLQ_BASE_SHIFT=5,t._VLQ_BASE_MASK=32-1,t._VLQ_CONTINUATION_MASK=32;class e{static{s(this,"StringCharIterator")}string;position;constructor(r){this.string=r,this.position=0}next(){return this.string.charAt(this.position++)}peek(){return this.string.charAt(this.position)}hasNext(){return this.position<this.string.length}}t.StringCharIterator=e})(As=Or.SourceMap||(Or.SourceMap={}));YM.exports=As;As.parseSourceMap=VM});var Xy=L((jTe,XM)=>{"use strict";d();var JM={SourceMap:KM()};JM.SourceMap.prototype.computeLastGeneratedColumns=function(){let t=this.mappings();if(!(t.length&&t[0].lastColumnNumber!==void 0))for(let e=0;e<t.length-1;e++){let n=t[e],r=t[e+1];n.lineNumber===r.lineNumber&&(n.lastColumnNumber=r.columnNumber)}};XM.exports=JM});var ZM={};S(ZM,{default:()=>cZ});var Zy,Qy,cZ,QM=v(()=>{"use strict";d();Zy=zt(Xy(),1);Ue();Uy();Qy=class extends X{static{s(this,"SourceMaps")}meta={supportedModes:["timespan","navigation"],dependencies:{Scripts:Oy.symbol}};async fetchSourceMap(e,n){let r=await e.fetcher.fetchResource(n,{timeout:1500});if(r.content===null)throw new Error(`Failed fetching source map (${r.status})`);return Zy.default.SourceMap.parseSourceMap(r.content)}parseSourceMapFromDataUrl(e){let n=Buffer.from(e.split(",")[1],"base64");return Zy.default.SourceMap.parseSourceMap(n.toString())}_resolveUrl(e,n){try{return new URL(e,n).href}catch{return}}async _retrieveMapFromScript(e,n){if(!n.sourceMapURL)throw new Error("precondition failed: event.sourceMapURL should exist");let r=n.sourceMapURL.startsWith("data:"),a=n.name,o=r?n.sourceMapURL:this._resolveUrl(n.sourceMapURL,n.name);if(!o)return{scriptId:n.scriptId,scriptUrl:a,errorMessage:`Could not resolve map url: ${n.sourceMapURL}`};let i=r?void 0:o;try{let c=r?this.parseSourceMapFromDataUrl(o):await this.fetchSourceMap(e,o);if(typeof c.version!="number")throw new Error("Map has no numeric `version` field");if(!Array.isArray(c.sources))throw new Error("Map has no `sources` list");if(typeof c.mappings!="string")throw new Error("Map has no `mappings` field");return c.sections&&(c.sections=c.sections.filter(u=>u.map)),{scriptId:n.scriptId,scriptUrl:a,sourceMapUrl:i,map:c}}catch(c){return{scriptId:n.scriptId,scriptUrl:a,sourceMapUrl:i,errorMessage:c.toString()}}}async getArtifact(e){let n=e.dependencies.Scripts.filter(r=>r.sourceMapURL).map(r=>this._retrieveMapFromScript(e.driver,r));return Promise.all(n)}},cZ=Qy});var eN={};S(eN,{default:()=>dZ});async function lZ(){let t=[],e=d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests;for(let[n,r]of Object.entries(e))try{let a,o=new Promise(c=>a=setTimeout(()=>c(!1),1e3)),i=await Promise.race([r.test(window),o]);a&&clearTimeout(a),i&&t.push({id:r.id,name:n,version:i.version,npm:r.npm})}catch{}return t}var uZ,ev,dZ,tN=v(()=>{"use strict";d();ca();es();He();Ue();uZ=`function _createTimeoutHelper(){let e;return{timeoutPromise:new Promise(((t,o)=>{e=setTimeout((()=>o(new Error("Timed out"))),5e3)})),clearTimeout:()=>clearTimeout(e)}}var UNKNOWN_VERSION=null,d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests={GWT:{id:"gwt",icon:"gwt",url:"http://www.gwtproject.org/",test:function(e){var t=e.document,o=t.getElementById("__gwt_historyFrame"),n=t.gwt_uid,r=t.body.__listener,i=t.body.__eventBits,s=e.__gwt_activeModules,c=e.__gwt_jsonp__,u=e.__gwt_scriptsLoaded||e.__gwt_stylesLoaded||e.__gwt_activeModules;if(o||n||r||i||s||c||u){for(var a=t.getElementsByTagName("iframe"),l=UNKNOWN_VERSION,N=0;N<a.length;N++)try{if(a[N].tabIndex<0&&a[N].contentWindow&&a[N].contentWindow.$gwt_version){l=a[N].contentWindow.$gwt_version;break}}catch(e){}return"0.0.999"==l&&(l="Google Internal"),{version:l}}return!1}},Ink:{id:"ink",icon:"ink",url:"http://ink.sapo.pt/",test:function(e){return!(!e.Ink||!e.Ink.createModule)&&{version:UNKNOWN_VERSION}}},Vaadin:{id:"vaadin",icon:"vaadin",url:"https://vaadin.com/",test:function(e){return!(!e.vaadin||!e.vaadin.registerWidgetset)&&{version:UNKNOWN_VERSION}}},Bootstrap:{id:"bootstrap",icon:"bootstrap",url:"http://getbootstrap.com/",npm:"bootstrap",test:function(e){var t,o=e.$&&e.$.fn;if(o&&(["affix","alert","button","carousel","collapse","dropdown","modal","popover","scrollspy","tab","tooltip"].some((function(o){if(e.$.fn[o]){if(e.$.fn[o].Constructor&&e.$.fn[o].Constructor.VERSION)return t=e.$.fn[o].Constructor.VERSION,!0;if(new RegExp("\\\\$this\\\\.data\\\\((?:'|\\")(?:bs\\\\.){1}"+o).test(e.$.fn[o].toString()))return t=">= 3.0.0 & <= 3.1.1",!0;if(new RegExp("\\\\$this\\\\.data\\\\((?:'|\\")"+o).test(e.$.fn[o].toString()))return t=">= 2.0.0 & <= 2.3.2",!0}return!1})),t))return{version:t};return!1}},Zurb:{id:"zurb",icon:"zurb",url:"https://foundation.zurb.com/",npm:"foundation-sites",test:function(e){return!(!e.Foundation||!e.Foundation.Toggler)&&{version:e.Foundation.version||UNKNOWN_VERSION}}},Polymer:{id:"polymer",icon:"polymer",url:"https://www.polymer-project.org/",npm:"@polymer/polymer",test:function(e){return!(!e.Polymer||!e.Polymer.dom)&&{version:e.Polymer.version||UNKNOWN_VERSION}}},LitElement:{id:"litelement",icon:"polymer",url:"https://lit-element.polymer-project.org/",npm:"lit-element",test:function(e){if(e.litElementVersions&&e.litElementVersions.length){var t=[...e.litElementVersions].sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0})));return{version:t[t.length-1]}}return!1}},"lit-html":{id:"lit-html",icon:"polymer",url:"https://lit-html.polymer-project.org/",npm:"lit-element",test:function(e){if(e.litHtmlVersions&&e.litHtmlVersions.length){var t=[...e.litHtmlVersions].sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0})));return{version:t[t.length-1]}}return!1}},Highcharts:{id:"highcharts",icon:"highcharts",url:"http://www.highcharts.com",npm:"highcharts",test:function(e){return!(!e.Highcharts||!e.Highcharts.Point)&&{version:e.Highcharts.version||UNKNOWN_VERSION}}},InfoVis:{id:"jit",icon:"jit",url:"http://philogb.github.com/jit/",test:function(e){return!(!e.$jit||!e.$jit.PieChart)&&{version:e.$jit.version||UNKNOWN_VERSION}}},FlotCharts:{id:"flotcharts",icon:"flotcharts",url:"http://www.flotcharts.org/",npm:"flot",test:function(e){return!(!e.$||!e.$.plot)&&{version:e.$.plot.version||UNKNOWN_VERSION}}},CreateJS:{id:"createjs",icon:"createjs",url:"https://createjs.com/",npm:"createjs",test:function(e){return!(!e.createjs||!e.createjs.promote)&&{version:UNKNOWN_VERSION}}},"Google Maps":{id:"gmaps",icon:"gmaps",url:"https://developers.google.com/maps/",test:function(e){return!(!e.google||!e.google.maps)&&{version:e.google.maps.version||UNKNOWN_VERSION}}},jQuery:{id:"jquery",icon:"jquery",url:"http://jquery.com",npm:"jquery",test:function(e){var t=e.jQuery||e.$;return!!(t&&t.fn&&t.fn.jquery)&&{version:t.fn.jquery.replace(/[^\\d+\\.+]/g,"")||UNKNOWN_VERSION}}},"jQuery (Fast path)":{id:"jquery-fast",icon:"jquery",url:"http://jquery.com",npm:"jquery",test:function(e){var t=e.jQuery||e.$;return!(!t||!t.fn)&&{version:UNKNOWN_VERSION}}},"jQuery UI":{id:"jquery_ui",icon:"jquery_ui",url:"http://jqueryui.com",npm:"jquery-ui",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;if(t&&t.fn&&t.fn.jquery&&t.ui){for(var o="accordion,datepicker,dialog,draggable,droppable,progressbar,resizable,selectable,slider,menu,grid,tabs".split(","),n=[],r=0;r<o.length;r++)t.ui[o[r]]&&n.push(o[r].substr(0,1).toUpperCase()+o[r].substr(1));return{version:t.ui.version||UNKNOWN_VERSION,details:n.length?"Plugins used: "+n.join(","):""}}return!1}},Dojo:{id:"dojo",icon:"dojo",url:"http://dojotoolkit.org",npm:"dojo",test:function(e){return!(!e.dojo||!e.dojo.delegate)&&{version:e.dojo.version?e.dojo.version.toString():UNKNOWN_VERSION,details:"Details: "+(e.dijit?"Uses Dijit":"none")}}},Prototype:{id:"prototype",icon:"prototype",url:"http://prototypejs.org",test:function(e){return!(!e.Prototype||!e.Prototype.BrowserFeatures)&&{version:e.Prototype.Version||UNKNOWN_VERSION}}},Scriptaculous:{id:"scriptaculous",icon:"scriptaculous",url:"http://script.aculo.us",test:function(e){return!(!e.Scriptaculous||!e.Scriptaculous.load)&&{version:e.Scriptaculous.Version||UNKNOWN_VERSION}}},MooTools:{id:"mootools",icon:"mootools",url:"https://mootools.net/",test:function(e){return!(!e.MooTools||!e.MooTools.build)&&{version:e.MooTools.version||UNKNOWN_VERSION}}},Spry:{id:"spry",icon:"spry",url:"http://labs.adobe.com/technologies/spry",test:function(e){return!(!e.Spry||!e.Spry.Data)&&{version:UNKNOWN_VERSION}}},"YUI 2":{id:"yui",icon:"yui",url:"http://developer.yahoo.com/yui/2/",test:function(e){return!(!e.YAHOO||!e.YAHOO.util)&&{version:e.YAHOO.VERSION||UNKNOWN_VERSION}}},"YUI 3":{id:"yui3",icon:"yui3",url:"https://yuilibrary.com/",npm:"yui",test:function(e){return!(!e.YUI||!e.YUI.Env)&&{version:e.YUI.version||UNKNOWN_VERSION}}},Qooxdoo:{id:"qooxdoo",icon:"qooxdoo",url:"http://www.qooxdoo.org/",npm:"qooxdoo",test:function(e){return!(!e.qx||!e.qx.Bootstrap)&&{version:UNKNOWN_VERSION}}},"Ext JS":{id:"extjs",icon:"extjs",url:"https://www.sencha.com/products/extjs/",test:function(e){return e.Ext&&e.Ext.versions?{version:e.Ext.versions.core.version}:!!e.Ext&&{version:e.Ext.version||UNKNOWN_VERSION}}},Ezoic:{id:"ezoic",icon:"ezoic",url:"https://www.ezoic.com/",test:function(e){return!(!e.__ez||!e.__ez.template)&&{version:UNKNOWN_VERSION}}},base2:{id:"base2",icon:"base2",url:"http://code.google.com/p/base2",test:function(e){return!(!e.base2||!e.base2.dom)&&{version:e.base2.version||UNKNOWN_VERSION}}},"Closure Library":{id:"closure",icon:"closure",url:"https://developers.google.com/closure/library/",npm:"google-closure-library",test:function(e){return!(!e.goog||!e.goog.provide)&&{version:UNKNOWN_VERSION}}},"Rapha&euml;l":{id:"raphael",icon:"raphael",url:"http://dmitrybaranovskiy.github.io/raphael/",test:function(e){return!(!e.Raphael||!e.Raphael.circle)&&{version:e.Raphael.version||UNKNOWN_VERSION}}},React:{id:"react",icon:"react",url:"https://reactjs.org/",npm:"react",test:function(e){function t(e){return null!=e&&null!=e._reactRootContainer}var o=document.getElementById("react-root"),n=document.querySelector("*[data-reactroot]");return!!(t(document.body)||t(document.body.firstElementChild)||null!=document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return t(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()||o&&o.innerText.length>0||n||e.React&&e.React.Component)&&{version:e.React&&e.React.version||UNKNOWN_VERSION}}},"React (Fast path)":{id:"react-fast",icon:"react",url:"https://reactjs.org/",npm:"react",test:function(e){function t(e){return null!=e&&null!=e._reactRootContainer}var o=document.getElementById("react-root"),n=document.querySelector("*[data-reactroot]");return!!(t(document.body)||t(document.body.firstElementChild)||o||n||e.React)&&{version:e.React&&e.React.version||UNKNOWN_VERSION}}},"Next.js":{id:"next",icon:"next",url:"https://nextjs.org/",npm:"next",test:function(e){return!(!e.__NEXT_DATA__||!e.__NEXT_DATA__.buildId)&&{version:window.next&&window.next.version||UNKNOWN_VERSION}}},"Next.js (Fast path)":{id:"next-fast",icon:"next",url:"https://nextjs.org/",npm:"next",test:function(e){return!!e.__NEXT_DATA__&&{version:UNKNOWN_VERSION}}},Preact:{id:"preact",icon:"preact",url:"https://preactjs.com/",npm:"preact",test:function(e){var t="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("preactattr");function o(e){return"__k"in e&&"props"in e.__k&&"type"in e.__k||("_component"in e||"__preactattr_"in e||t&&null!=e[t])}function n(e){return null!=e&&o(e)&&e}var r=n(document.body)||n(document.body.firstElementChild);if(r||(r=document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return o(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()),r||e.preact){var i=UNKNOWN_VERSION;return r&&("__k"in r&&(i="10"),"__preactattr_"in r&&(i="8"),t&&null!=r[t]&&(i="7")),{version:i}}return!1}},"Preact (Fast path)":{id:"preact-fast",icon:"preact",url:"https://preactjs.com/",npm:"preact",test:function(e){var t=UNKNOWN_VERSION;function o(e){return null!=e&&function(e){return null!=e.__k?(t="10",!0):null!=e._component||null!=e.__preactattr_}(e)}return!(!o(document.body)&&!o(document.body.firstElementChild)&&!e.preact)&&{version:t}}},Modernizr:{id:"modernizr",icon:"modernizr",url:"https://modernizr.com/",npm:"modernizr",test:function(e){return!(!e.Modernizr||!e.Modernizr.addTest)&&{version:e.Modernizr._version||UNKNOWN_VERSION}}},"Processing.js":{id:"processingjs",icon:"processingjs",url:"http://processingjs.org",npm:"processing-js",test:function(e){return!(!e.Processing||!e.Processing.box)&&{version:Processing.version||UNKNOWN_VERSION}}},Backbone:{id:"backbone",icon:"backbone",url:"http://backbonejs.org/",npm:"backbone",test:function(e){return!(!e.Backbone||!e.Backbone.Model.extend)&&{version:e.Backbone.VERSION||UNKNOWN_VERSION}}},Leaflet:{id:"leaflet",icon:"leaflet",url:"http://leafletjs.com",npm:"leaflet",test:function(e){return!(!e.L||!e.L.GeoJSON||!e.L.marker&&!e.L.Marker)&&{version:e.L.version||e.L.VERSION||UNKNOWN_VERSION}}},Mapbox:{id:"mapbox",icon:"mapbox",url:"https://www.mapbox.com/",npm:"mapbox-gl",test:function(e){return!!(e.L&&e.L.mapbox&&e.L.mapbox.geocoder)&&{version:e.L.mapbox.VERSION||UNKNOWN_VERSION}}},"Lo-Dash":{id:"lodash",icon:"lodash",url:"https://lodash.com/",npm:"lodash",test:function(e){var t="function"==typeof(t=e._)&&t,o="function"==typeof(o=t&&t.chain)&&o,n=(o||t||function(){return{}})(1);return!(!t||!n.__wrapped__)&&{version:t.VERSION||UNKNOWN_VERSION}}},Underscore:{id:"underscore",icon:"underscore",url:"http://underscorejs.org/",npm:"underscore",test:function(e){return!(!e._||"function"!=typeof e._.tap||d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests["Lo-Dash"].test(e))&&{version:e._.VERSION||UNKNOWN_VERSION}}},Sammy:{id:"sammy",icon:"sammy",url:"http://sammyjs.org",test:function(e){return!(!e.Sammy||!e.Sammy.Application.curry)&&{version:e.Sammy.VERSION||UNKNOWN_VERSION}}},Rico:{id:"rico",icon:"rico",url:"http://openrico.sourceforge.net/examples/index.html",test:function(e){return!(!e.Rico||!window.Rico.checkIfComplete)&&{version:e.Rico.Version||UNKNOWN_VERSION}}},MochiKit:{id:"mochikit",icon:"mochikit",url:"https://mochi.github.io/mochikit/",test:function(e){return!(!e.MochiKit||!e.MochiKit.Base.module)&&{version:MochiKit.VERSION||UNKNOWN_VERSION}}},"gRapha&euml;l":{id:"graphael",icon:"graphael",url:"https://github.com/DmitryBaranovskiy/g.raphael",test:function(e){return!(!e.Raphael||!e.Raphael.fn.g)&&{version:UNKNOWN_VERSION}}},Glow:{id:"glow",icon:"glow",url:"http://www.bbc.co.uk/glow/",test:function(e){return e.gloader&&e.gloader.getRequests?{version:UNKNOWN_VERSION}:e.glow&&e.glow.dom?{version:e.glow.VERSION||UNKNOWN_VERSION}:!!e.Glow&&{version:e.Glow.version||UNKNOWN_VERSION}}},"Socket.IO":{id:"socketio",icon:"socketio",url:"https://socket.io/",npm:"socket.io",test:function(e){return!(!e.io||!e.io.sockets&&!e.io.Socket)&&{version:e.io.version||UNKNOWN_VERSION}}},Mustache:{id:"mustache",icon:"mustache",url:"http://mustache.github.io/",npm:"mustache",test:function(e){return!(!e.Mustache||!e.Mustache.to_html)&&{version:e.Mustache.version||UNKNOWN_VERSION}}},"Fabric.js":{id:"fabricjs",icon:"icon38",url:"http://fabricjs.com/",npm:"fabric",test:function(e){return!(!e.fabric||!e.fabric.util)&&{version:e.fabric.version||UNKNOWN_VERSION}}},FuseJS:{id:"fusejs",icon:"fusejs",url:"http://fusejs.io/",npm:"fuse.js",test:function(e){return!!e.Fuse&&{version:UNKNOWN_VERSION}}},"Tween.js":{id:"tweenjs",icon:"icon38",url:"https://github.com/tweenjs/tween.js",npm:"tween.js",test:function(e){return!(!e.TWEEN||!e.TWEEN.Easing)&&{version:UNKNOWN_VERSION}}},SproutCore:{id:"sproutcore",icon:"sproutcore",url:"http://sproutcore.com/",test:function(e){return!(!e.SC||!e.SC.Application)&&{version:UNKNOWN_VERSION}}},"Zepto.js":{id:"zepto",icon:"zepto",url:"http://zeptojs.com",npm:"zepto",test:function(e){return!(!e.Zepto||!e.Zepto.fn)&&{version:UNKNOWN_VERSION}}},"three.js":{id:"threejs",icon:"icon38",url:"https://threejs.org/",npm:"three",test:function(e){return e.THREE&&e.THREE.REVISION?{version:"r"+e.THREE.REVISION}:!!e.THREE&&{version:UNKNOWN_VERSION}}},PhiloGL:{id:"philogl",icon:"philogl",url:"http://www.senchalabs.org/philogl/",npm:"philogl",test:function(e){return!(!e.PhiloGL||!e.PhiloGL.Camera)&&{version:e.PhiloGL.version||UNKNOWN_VERSION}}},CamanJS:{id:"camanjs",icon:"camanjs",url:"http://camanjs.com/",npm:"caman",test:function(e){return e.Caman&&e.Caman.version?{version:e.Caman.version.release}:!!e.Caman&&{version:UNKNOWN_VERSION}}},yepnope:{id:"yepnope",icon:"yepnope",url:"http://yepnopejs.com/",test:function(e){return!(!e.yepnope||!e.yepnope.injectJs)&&{version:UNKNOWN_VERSION}}},LABjs:{id:"labjs",icon:"icon38",url:"https://github.com/getify/LABjs",test:function(e){return!(!e.$LAB||!e.$LAB.setOptions)&&{version:UNKNOWN_VERSION}}},"Head JS":{id:"headjs",icon:"headjs",url:"http://headjs.com/",npm:"headjs",test:function(e){return!(!e.head||!e.head.js)&&{version:UNKNOWN_VERSION}}},ControlJS:{id:"controljs",icon:"icon38",url:"http://stevesouders.com/controljs/",test:function(e){return!(!e.CJS||!e.CJS.start)&&{version:UNKNOWN_VERSION}}},RequireJS:{id:"requirejs",icon:"requirejs",url:"http://requirejs.org/",npm:"requirejs",test:function(e){var t=e.require||e.requirejs;return!(!t||!(t.load||t.s&&t.s.contexts&&t.s.contexts._&&(t.s.contexts._.loaded||t.s.contexts._.load)))&&{version:t.version||UNKNOWN_VERSION}}},RightJS:{id:"rightjs",icon:"rightjs",url:"http://rightjs.org/",test:function(e){return!(!e.RightJS||!e.RightJS.isNode)&&{version:e.RightJS.version||UNKNOWN_VERSION}}},"jQuery Tools":{id:"jquerytools",icon:"jquerytools",url:"http://jquerytools.github.io/",test:function(e){var t=e.jQuery||e.$;return!(!t||!t.tools)&&{version:t.tools.version||UNKNOWN_VERSION}}},Pusher:{id:"pusher",icon:"pusher",url:"https://pusher.com/docs/",npm:"pusher-js",test:function(e){return!(!e.Pusher||!e.Pusher.Channel)&&{version:e.Pusher.VERSION||UNKNOWN_VERSION}}},"Paper.js":{id:"paperjs",icon:"paperjs",url:"http://paperjs.org/",npm:"paper",test:function(e){return!(!e.paper||!e.paper.Point)&&{version:e.paper.version||UNKNOWN_VERSION}}},Swiffy:{id:"swiffy",icon:"icon38",url:"https://developers.google.com/swiffy/",test:function(e){return!(!e.swiffy||!e.swiffy.Stage)&&{version:UNKNOWN_VERSION}}},Move:{id:"move",icon:"move",url:"https://github.com/rsms/move",npm:"move",test:function(e){return!(!e.move||!e.move.compile)&&{version:e.move.version()||UNKNOWN_VERSION}}},AmplifyJS:{id:"amplifyjs",icon:"amplifyjs",url:"http://amplifyjs.com/",npm:"amplifyjs",test:function(e){return!(!e.amplify||!e.amplify.publish)&&{version:UNKNOWN_VERSION}}},"Popcorn.js":{id:"popcornjs",icon:"popcornjs",url:"https://github.com/mozilla/popcorn-js/",test:function(e){return!(!e.Popcorn||!e.Popcorn.Events)&&{version:e.Popcorn.version||UNKNOWN_VERSION}}},D3:{id:"d3",icon:"d3",url:"https://d3js.org/",npm:"d3",test:function(e){return!(!e.d3||!e.d3.select)&&{version:e.d3.version||UNKNOWN_VERSION}}},Handlebars:{id:"handlebars",icon:"handlebars",url:"http://handlebarsjs.com/",npm:"handlebars",test:function(e){return!(!e.Handlebars||!e.Handlebars.compile)&&{version:e.Handlebars.VERSION||UNKNOWN_VERSION}}},Handsontable:{id:"handsontable",icon:"handsontable",url:"https://handsontable.com/",npm:"handsontable",test:function(e){return!(!e.Handsontable||!e.Handsontable.Core)&&{version:e.Handsontable.version||UNKNOWN_VERSION}}},Knockout:{id:"knockout",icon:"knockout",url:"http://knockoutjs.com/",npm:"knockout",test:function(e){return!(!e.ko||!e.ko.applyBindings)&&{version:e.ko.version||UNKNOWN_VERSION}}},Spine:{id:"spine",icon:"icon38",url:"http://spine.github.io/",test:function(e){return!(!e.Spine||!e.Spine.Controller)&&{version:e.Spine.version||UNKNOWN_VERSION}}},"jQuery Mobile":{id:"jquery-mobile",icon:"jquery_mobile",url:"http://jquerymobile.com/",npm:"jquery-mobile",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;return!!(t&&t.fn&&t.fn.jquery&&t.mobile)&&{version:t.mobile.version||UNKNOWN_VERSION}}},"WebFont Loader":{id:"webfontloader",icon:"icon38",url:"https://github.com/typekit/webfontloader",npm:"webfontloader",test:function(e){return!(!e.WebFont||!e.WebFont.load)&&{version:UNKNOWN_VERSION}}},Angular:{id:"angular",icon:"angular",url:"https://angular.io/",npm:"@angular/core",test:function(e){var t=e.document.querySelector("[ng-version]");return t?{version:t.getAttribute("ng-version")||UNKNOWN_VERSION}:!!(e.ng&&e.ng.probe instanceof Function)&&{version:UNKNOWN_VERSION}}},AngularJS:{id:"angularjs",icon:"angularjs",url:"https://angularjs.org/",npm:"angular",test:function(e){var t=e.angular;return!!(t&&t.version&&t.version.full)&&{version:t.version.full}}},Ionic:{id:"ionic",icon:"ionic",url:"https://ionicframework.com/",npm:"@ionic/cli",test:function(e){var t=e.document.querySelector("ion-app");return!(!t||"ION-APP"!==t.nodeName)&&{version:UNKNOWN_VERSION}}},"Ember.js":{id:"emberjs",icon:"emberjs",url:"https://emberjs.com/",npm:"ember-source",test:function(e){var t=e.Ember||e.Em;return!(!t||!t.GUID_KEY)&&{version:t.VERSION||UNKNOWN_VERSION}}},"Hammer.js":{id:"hammerjs",icon:"hammerjs",url:"http://eightmedia.github.io/hammer.js/",npm:"hammerjs",test:function(e){return!(!e.Hammer||!e.Hammer.Pinch)&&{version:e.Hammer.VERSION||"&lt; 1.0.10"}}},"Visibility.js":{id:"visibilityjs",icon:"icon38",url:"https://github.com/ai/visibilityjs",npm:"visibilityjs",test:function(e){return!(!e.Visibility||!e.Visibility.every)&&{version:UNKNOWN_VERSION}}},"Velocity.js":{id:"velocityjs",icon:"icon38",url:"http://velocityjs.org/",npm:"velocity-animate",test:function(e){var t=e.jQuery||e.$,o=t?t.Velocity:e.Velocity;return o&&o.RegisterEffect&&o.version?{version:o.version.major+"."+o.version.minor+"."+o.version.patch}:!(!o||!o.RegisterEffect)&&{version:UNKNOWN_VERSION}}},"IfVisible.js":{id:"ifvisiblejs",icon:"icon38",url:"http://serkanyersen.github.io/ifvisible.js/",npm:"ifvisible.js",test:function(e){var t=e.ifvisible;return!(!t||"ifvisible.object.event.identifier"!==t.__ceGUID)&&{version:UNKNOWN_VERSION}}},"Pixi.js":{id:"pixi",icon:"pixi",url:"http://www.pixijs.com/",npm:"pixi.js",test:function(e){var t=e.PIXI;return!!(t&&t.WebGLRenderer&&t.VERSION)&&{version:t.VERSION.replace("v","")||UNKNOWN_VERSION}}},"DC.js":{id:"dcjs",icon:"dcjs",url:"http://dc-js.github.io/dc.js/",npm:"dc",test:function(e){var t=e.dc;return!(!t||!t.registerChart)&&{version:t.version||UNKNOWN_VERSION}}},"GreenSock JS":{id:"greensock",icon:"greensock",url:"https://greensock.com/gsap",npm:"gsap",test:function(e){return!(!e.TweenMax||!e.TweenMax.pauseAll)&&{version:e.TweenMax.version||UNKNOWN_VERSION}}},FastClick:{id:"fastclick",icon:"fastclick",url:"https://github.com/ftlabs/fastclick",npm:"fastclick",test:function(e){return!(!e.FastClick||!e.FastClick.notNeeded)&&{version:UNKNOWN_VERSION}}},Isotope:{id:"isotope",icon:"isotope",url:"https://isotope.metafizzy.co/",npm:"isotope-layout",test:function(e){return!!(e.Isotope||null!=e.$&&e.$.Isotope)&&{version:UNKNOWN_VERSION}}},Marionette:{id:"marionette",icon:"marionette",url:"https://marionettejs.com/",npm:"backbone.marionette",test:function(e){return!(!e.Marionette||!e.Marionette.Application)&&{version:e.Marionette.VERSION||UNKNOWN_VERSION}}},Can:{id:"canjs",icon:"canjs",url:"https://canjs.com/",npm:"can",test:function(e){return!(!e.can||!e.can.Construct)&&{version:e.can.VERSION||UNKNOWN_VERSION}}},Vue:{id:"vue",icon:"vue",url:"https://vuejs.org/",npm:"vue",test:function(e){return!(null===document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return null!=e.__vue__?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()&&!e.Vue)&&{version:e.Vue&&e.Vue.version||UNKNOWN_VERSION}}},"Vue (Fast path)":{id:"vue-fast",icon:"vue",url:"https://vuejs.org/",npm:"vue",test:function(e){return!!e.Vue&&{version:e.Vue&&e.Vue.version||UNKNOWN_VERSION}}},"Nuxt.js":{id:"nuxt",icon:"nuxt",url:"https://nuxtjs.org/",npm:"nuxt",test:function(e){return!!(e.__NUXT__||e.$nuxt||[...e.document.querySelectorAll("*")].some((e=>e.__vue__?.nuxt)))&&{version:UNKNOWN_VERSION}}},"Nuxt.js (Fast path)":{id:"nuxt-fast",icon:"nuxt",url:"https://nuxtjs.org/",npm:"nuxt",test:function(e){return!(!e.__NUXT__&&!e.$nuxt)&&{version:UNKNOWN_VERSION}}},Two:{id:"two",icon:"two",url:"https://two.js.org/",npm:"two.js",test:function(e){return!(!e.Two||!e.Two.Utils)&&{version:e.Two.Version||UNKNOWN_VERSION}}},Brewser:{id:"brewser",icon:"brewser",url:"https://robertpataki.github.io/brewser/",npm:"brewser",test:function(e){return!(!e.BREWSER||!e.BREWSER.ua)&&{version:BREWSER.VERSION||UNKNOWN_VERSION}}},"Material Design Lite":{id:"materialdesignlite",icon:"mdl",url:"https://getmdl.io/",npm:"material-design-lite",test:function(e){return!(!e.componentHandler||!e.componentHandler.upgradeElement)&&{version:UNKNOWN_VERSION}}},"Kendo UI":{id:"kendoui",icon:"kendoui",url:"https://github.com/telerik/kendo-ui-core",npm:"kendo-ui-core",test:function(e){return!!(e.kendo&&e.kendo.View&&e.kendo.View.extend)&&{version:e.kendo.version||UNKNOWN_VERSION}}},"Matter.js":{id:"matterjs",icon:"matter-js",url:"http://brm.io/matter-js/",npm:"matter-js",test:function(e){return!(!e.Matter||!e.Matter.Engine)&&{version:UNKNOWN_VERSION}}},Riot:{id:"riot",icon:"riot",url:"http://riotjs.com/",npm:"riot",test:function(e){return!(!e.riot||!e.riot.mixin)&&{version:e.riot.version||UNKNOWN_VERSION}}},"Sea.js":{id:"seajs",icon:"icon38",url:"https://seajs.github.io/seajs/docs/",npm:"seajs",test:function(e){return!(!e.seajs||!e.seajs.use)&&{version:e.seajs.version||UNKNOWN_VERSION}}},"Moment.js":{id:"momentjs",icon:"momentjs",url:"http://momentjs.com/",npm:"moment",test:function(e){return!(!e.moment||!e.moment.isMoment&&!e.moment.lang)&&{version:e.moment.version||UNKNOWN_VERSION}}},"Moment Timezone":{id:"moment-timezone",icon:"momentjs",url:"http://momentjs.com/timezone/",npm:"moment-timezone",test:function(e){return!(!e.moment||!e.moment.tz)&&{version:e.moment.tz.version||UNKNOWN_VERSION}}},ScrollMagic:{id:"scrollmagic",icon:"scrollmagic",url:"http://scrollmagic.io/",npm:"scrollmagic",test:function(e){return!(!e.ScrollMagic||!e.ScrollMagic.Controller)&&{version:ScrollMagic.version||UNKNOWN_VERSION}}},SWFObject:{id:"swfobject",icon:"icon38",url:"https://github.com/swfobject/swfobject",test:function(e){return e.swfobject&&e.swfobject.embedSWF?{version:e.swfobject.version||UNKNOWN_VERSION}:!(!e.deconcept||!e.deconcept.SWFObject)&&{version:UNKNOWN_VERSION}}},FlexSlider:{id:"flexslider",icon:"icon38",url:"https://woocommerce.com/flexslider/",npm:"flexslider",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;return!!(t&&t.fn&&t.fn.jquery&&t.flexslider)&&{version:UNKNOWN_VERSION}}},SPF:{id:"spf",icon:"icon38",url:"https://youtube.github.io/spfjs/",npm:"spf",test:function(e){return!(!e.spf||!e.spf.init)&&{version:UNKNOWN_VERSION}}},"Numeral.js":{id:"numeraljs",icon:"icon38",url:"http://numeraljs.com/",npm:"numeraljs",test:function(e){return!(!e.numeral||!e.isNumeral)&&{version:e.numeral.version||UNKNOWN_VERSION}}},"boomerang.js":{id:"boomerangjs",icon:"icon38",url:"https://soasta.github.io/boomerang/",npm:"boomerangjs",test:function(e){return!!(e.BOOMR&&e.BOOMR.utils&&e.BOOMR.init)&&{version:e.BOOMR.version||UNKNOWN_VERSION}}},Framer:{id:"framer",icon:"framer",url:"https://framer.com/",npm:"framerjs",test:function(e){return!(!e.Framer||!e.Framer.Layer)&&{version:e.Framer.Version.build||UNKNOWN_VERSION}}},Marko:{id:"marko",icon:"marko",url:"https://markojs.com/",npm:"marko",test:function(e){return!!document.querySelector("[data-marko-key], [data-marko]")&&{version:UNKNOWN_VERSION}}},AMP:{id:"amp",icon:"amp",url:"https://amp.dev/",npm:"https://www.npmjs.com/org/ampproject",test:function(e){var t=e.document.documentElement.getAttribute("amp-version");return!!t&&{version:t}}},Gatsby:{id:"gatsby",icon:"gatsby",url:"https://www.gatsbyjs.org/",npm:"gatsby",test:function(e){return!!document.getElementById("___gatsby")&&{version:UNKNOWN_VERSION}}},Shopify:{id:"shopify",icon:"shopify",url:"https://www.shopify.com/",npm:null,test:function(e){return!(!e.Shopify||!e.Shopify.shop)&&{version:UNKNOWN_VERSION}}},Magento:{id:"magento",icon:"magento",url:"https://magento.com/",npm:null,test:function(e){const t=/\\/static(?:\\/version\\d+)?\\/frontend\\/.+\\/.+\\/requirejs\\/require(?:\\.min)?\\.js/;return!!Array.from(document.querySelectorAll("script[src]")||[]).some((e=>t.test(e.src)))&&{version:2}}},WordPress:{id:"wordpress",icon:"wordpress",url:"https://wordpress.org/",npm:null,test:function(e){const t=!!document.querySelector('link[rel="https://api.w.org/"]'),o=!!document.querySelectorAll('link[href*="wp-includes"], script[src*="wp-includes"]').length;if(!t&&!o)return!1;const n=document.querySelector('meta[name=generator][content^="WordPress"]');return{version:n?n.getAttribute("content").replace(/^\\w+\\s/,""):UNKNOWN_VERSION}}},Wix:{id:"wix",icon:"wix",url:"https://www.wix.com/",npm:null,test:function(e){return(e.wixPerformanceMeasurements&&e.wixPerformanceMeasurements.info||!(!e.wixBiSession||!e.wixBiSession.info))&&{version:UNKNOWN_VERSION}}},Workbox:{id:"workbox",icon:"workbox",url:"https://developers.google.com/web/tools/workbox/",npm:"workbox-sw",test:async function(e){var t=e.navigator;if(!("serviceWorker"in t))return!1;const{timeoutPromise:o,clearTimeout:n}=_createTimeoutHelper(),r=t.serviceWorker.getRegistration().then((function(e){var o=t.serviceWorker.controller?t.serviceWorker.controller.scriptURL:e.active.scriptURL;return fetch(o,{credentials:"include",headers:{"service-worker":"script"}}).then((function(e){return e.text()})).then((function(e){if(/new Workbox|new workbox|workbox\\.precaching\\.|workbox\\.strategies/gm.test(e)){var t=/workbox.*?\\b((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?)\\b/gim.exec(e),o=UNKNOWN_VERSION;return Array.isArray(t)&&t.length>1&&t[1]&&(o=t[1]),{version:o}}return!1}))})).catch((function(e){return!1}));return Promise.race([r,o]).catch((function(e){return!1})).finally((e=>(n(),e)))}},Boq:{id:"boq",icon:"icon38",url:"https://github.com/johnmichel/Library-Detector-for-Chrome/pull/143",npm:null,test:function(e){return!!e.WIZ_global_data&&{version:UNKNOWN_VERSION}}},Wiz:{id:"wiz",icon:"icon38",url:"https://github.com/johnmichel/Library-Detector-for-Chrome/pull/147",npm:null,test:function(e){return!!document.__wizdispatcher&&{version:UNKNOWN_VERSION}}},"core-js":{id:"corejs",icon:"icon38",url:"https://github.com/zloirock/core-js",npm:"core-js",test:function(e){const t=e["__core-js_shared__"],o=e.core;if(t){const e=t.versions;return{version:Array.isArray(e)?e.map((e=>\`core-js-\${e.mode}@\${e.version}\`)).join("; "):UNKNOWN_VERSION}}return!!o&&{version:o.version||UNKNOWN_VERSION}}},Drupal:{id:"drupal",icon:"drupal",url:"https://www.drupal.org/",npm:null,test:function(e){const t=document.querySelector('meta[name="generator"][content^="Drupal"]'),o=t?t.getAttribute("content").replace(/\\D+/gi,""):UNKNOWN_VERSION,n=/\\/sites\\/(?:default|all)\\/(?:themes|modules|files)/,r=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(r.some((e=>n.test(e.src)))||r.some((e=>n.test(e.href)))||t||e.Drupal&&e.Drupal.behaviors)&&{version:o}}},TYPO3:{id:"typo3",icon:"typo3",url:"https://typo3.org/",npm:null,test:function(e){const t=document.querySelector('meta[name="generator"][content^="TYPO3"]'),o=/\\/(typo3conf|typo3temp|fileadmin)/,n=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(t||n.some((e=>o.test(e.src)))||n.some((e=>o.test(e.href))))&&{version:UNKNOWN_VERSION}}},"Create React App":{id:"create-react-app",icon:"cra",url:"https://create-react-app.dev/",npm:"react-scripts",test:function(e){let t,o,n=e.document.body.firstElementChild;do{"noscript"===n.localName?t=n:"root"===n.id&&(o=n)}while(n=n.nextElementSibling);return!!(o&&t&&/You need to enable JavaScript to run this app/.test(t.textContent))&&{version:UNKNOWN_VERSION}}},"Guess.js":{id:"guessjs",icon:"guessjs",url:"https://guess-js.github.io/",test:function(e){return!(!e.__GUESS__||!e.__GUESS__.guess)&&{version:UNKNOWN_VERSION}}},"October CMS":{id:"octobercms",icon:"october",url:"https://octobercms.com/",npm:null,test:function(e){const t=document.querySelector('meta[name="generator"][content^="OctoberCMS"]'),o=document.querySelector('meta[name="generator"][content^="October CMS"]'),n=/\\/modules\\/system\\/assets\\/(css|js)\\/framework(\\.extras|\\.combined)?(-min)?/,r=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(t||o||r.some((e=>n.test(e.src||e.href))))&&{version:UNKNOWN_VERSION}}},Joomla:{id:"joomla",icon:"joomla",url:"https://www.joomla.org/",npm:null,test:function(e){const t=document.querySelector('meta[name=generator][content^="Joomla"]'),o=!!document.querySelectorAll('script[src*="/media/jui/js/bootstrap.min.js"]').length;return t?{version:t.getAttribute("content").replace(/^\\w+\\s/,"")}:!(!e.Joomla&&!o)&&{version:UNKNOWN_VERSION}}},Sugar:{id:"sugar",icon:"sugar",url:"https://sugarjs.com",npm:"sugar",test:function(e){return e.Sugar?{version:e.Sugar.VERSION||UNKNOWN_VERSION}:!!e.Array.SugarMethods&&{version:UNKNOWN_VERSION}}},Bento:{id:"bentojs",icon:"bentojs",url:"https://bentojs.dev",npm:"https://www.npmjs.com/org/bentoproject",test:function(e){return!(!e.BENTO||!e.BENTO.push)&&{version:UNKNOWN_VERSION}}},"WP Rocket":{id:"wp-rocket",icon:"wp-rocket",url:"https://wp-rocket.me/",npm:null,test:async function(e){const t="undefined"!=typeof RocketLazyLoadScripts||"undefined"!=typeof RocketPreloadLinksConfig||"undefined"!=typeof rocket_lazy,o=!!document.querySelector("style#wpr-usedcss"),n=document.lastChild.nodeType===Node.COMMENT_NODE&&document.lastChild.textContent.includes("WP Rocket");return!!(o||t||n)&&{version:UNKNOWN_VERSION}}},NitroPack:{id:"nitropack",icon:"nitropack",url:"https://nitropack.io/",npm:null,test:async function(e){return!!document.querySelector('meta[name="generator"][content="NitroPack"]')&&{version:UNKNOWN_VERSION}}},Remix:{id:"remix",icon:"remix",url:"https://remix.run/",npm:"remix",test:function(e){return!!e.__remixContext&&{version:UNKNOWN_VERSION}}}};`;s(lZ,"detectLibraries");ev=class t extends X{static{s(this,"Stacks")}constructor(){super(),this.meta={supportedModes:["snapshot","navigation"]}}static async collectStacks(e){let n={msg:"Collect stacks",id:"lh:gather:collectStacks"};N.time(n);let a=(await e.evaluate(lZ,{args:[],deps:[uZ]})).map(o=>({detector:"js",id:o.id,name:o.name,version:typeof o.version=="number"?String(o.version):o.version||void 0,npm:o.npm||void 0}));return N.timeEnd(n),a}async getArtifact(e){try{return await t.collectStacks(e.driver.executionContext)}catch{return[]}}},dZ=ev});var nN={};S(nN,{default:()=>mZ});var tv,mZ,rN=v(()=>{"use strict";d();Vi();Ue();tv=class extends X{static{s(this,"TraceCompat")}meta={supportedModes:["timespan","navigation"],dependencies:{Trace:sa.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.Trace}}},mZ=tv});var nv,on,Ur=v(()=>{d();we();Jt();Jg();nv=class{static{s(this,"ProcessedNavigation")}static isProcessedTrace(e){return"timeOriginEvt"in e}static async compute_(e,n){if(this.isProcessedTrace(e))return bu.processNavigation(e);let r=await Ye.request(e,n);return bu.processNavigation(r)}},on=W(nv,null)});var pZ,aN,fZ,rv,Fs,Kp=v(()=>{"use strict";d();Jt();we();pZ=new Set(["keydown","keypress","keyup"]),aN=new Set(["mousedown","mouseup","pointerdown","pointerup","click"]),fZ={keyboard:pZ,tapOrClick:aN,drag:aN},rv=class t{static{s(this,"Responsiveness")}static getHighPercentileResponsiveness(e){let n=e.frameTreeEvents.filter(a=>a.name==="Responsiveness.Renderer.UserInteraction").sort((a,o)=>o.args.data.maxDuration-a.args.data.maxDuration);if(n.length===0)return null;let r=Math.min(9,Math.floor(n.length/50));return n[r]}static findInteractionEvent(e,{traceEvents:n}){let r=n.filter(u=>u.name==="EventTiming"&&u.ph!=="e");if(r.length&&r.every(u=>!u.args.data?.frame))return{name:"FallbackTiming",duration:e.args.data.maxDuration};let{maxDuration:a,interactionType:o}=e.args.data,i,c=Number.POSITIVE_INFINITY;for(let u of r){if(u.args.data.frame!==e.args.frame)continue;let{type:l,duration:m}=u.args.data,p=fZ[o];if(!p)throw new Error(`unexpected responsiveness interactionType '${o}'`);if(!p.has(l))continue;let g=Math.abs(m-a);g<c&&(i=u,c=g)}if(!i)throw new Error(`no interaction event found for responsiveness type '${o}'`);if(c>5)throw new Error(`no interaction event found within 5ms of responsiveness maxDuration (max: ${a}, closest ${i.args.data.duration})`);return i}static async compute_(e,n){let{settings:r,trace:a}=e;if(r.throttlingMethod==="simulate")throw new Error("Responsiveness currently unsupported by simulated throttling");let o=await Ye.request(a,n),i=t.getHighPercentileResponsiveness(o);if(!i)return null;let c=t.findInteractionEvent(i,a);return JSON.parse(JSON.stringify(c))}},Fs=W(rv,["trace","settings"])});var gZ,av,ro,Hu=v(()=>{"use strict";d();we();Jt();gZ=500,av=class t{static{s(this,"CumulativeLayoutShift")}static getLayoutShiftEvents(e){let n=[],r=!1,a=e.timestamps.timeOrigin,o=e.frameEvents.find(i=>i.name==="viewport");o&&(a=o.ts);for(let i of e.frameTreeEvents)if(!(i.name!=="LayoutShift"||!i.args.data||i.args.data.is_main_frame===void 0)){if(i.args.data.weighted_score_delta===void 0)throw new Error("CLS missing weighted_score_delta");if(i.args.data.had_recent_input){if((i.ts-a)/1e3>gZ||r)continue}else r=!0;n.push({ts:i.ts,isMainFrame:i.args.data.is_main_frame,weightedScore:i.args.data.weighted_score_delta,impactedNodes:i.args.data.impacted_nodes})}return n}static calculate(e){let a=0,o=0,i=Number.NEGATIVE_INFINITY,c=Number.NEGATIVE_INFINITY;for(let u of e)(u.ts-i>5e6||u.ts-c>1e6)&&(i=u.ts,o=0),c=u.ts,o+=u.weightedScore,a=Math.max(a,o);return a}static async compute_(e,n){let r=await Ye.request(e,n),a=t.getLayoutShiftEvents(r),o=a.filter(i=>i.isMainFrame);return{cumulativeLayoutShift:t.calculate(a),cumulativeLayoutShiftMainFrame:t.calculate(o)}}},ro=W(av,null)});var oN={};S(oN,{default:()=>yZ});function hZ(){let t=this.nodeType===document.ELEMENT_NODE?this:this.parentElement,e;return t&&(e={node:getNodeDetails(t)}),e}var ov,yZ,iN=v(()=>{"use strict";d();Ue();Th();un();zu();da();Vi();Jt();Ur();Bt();Kp();Hu();hp();s(hZ,"getNodeDetailsData");ov=class t extends X{static{s(this,"TraceElements")}meta={supportedModes:["timespan","navigation"],dependencies:{Trace:sa.symbol}};animationIdToName=new Map;constructor(){super(),this._onAnimationStarted=this._onAnimationStarted.bind(this)}_onAnimationStarted({animation:{id:e,name:n}}){n&&this.animationIdToName.set(e,n)}static traceRectToLHRect(e){let n={x:e[0],y:e[1],width:e[2],height:e[3]};return TM(n)}static getTopLayoutShiftElements(e){let n=new Map;return ro.getLayoutShiftEvents(e).forEach(o=>{if(!o||!o.impactedNodes)return;let i=0,c=new Map;o.impactedNodes.forEach(u=>{if(!u.node_id||!u.old_rect||!u.new_rect)return;let l=t.traceRectToLHRect(u.old_rect),m=t.traceRectToLHRect(u.new_rect),p=ju(l)+ju(m)-qu(l,m);c.set(u.node_id,p),i+=p});for(let[u,l]of c.entries()){let m=n.get(u)||0;m+=l/i*o.weightedScore,n.set(u,m)}}),[...n.entries()].sort((o,i)=>i[1]-o[1]).slice(0,5).map(([o,i])=>({nodeId:o,score:i}))}static async getResponsivenessElement(e,n){let{settings:r}=n;try{let a=await Fs.request({trace:e,settings:r},n);return!a||a.name==="FallbackTiming"?void 0:{nodeId:a.args.data.nodeId}}catch{return}}async getAnimatedElements(e){let n=new Map;for(let o of e){if(o.name!=="Animation"||!o.id2||!o.id2.local)continue;let i=o.id2.local,c=n.get(i)||{begin:void 0,status:void 0};o.ph==="b"?c.begin=o:o.ph==="n"&&o.args.data&&o.args.data.compositeFailed!==void 0&&(c.status=o),n.set(i,c)}let r=new Map;for(let{begin:o,status:i}of n.values()){let c=o?.args?.data?.nodeId,u=o?.args?.data?.id,l=i?.args?.data?.compositeFailed,m=i?.args?.data?.unsupportedProperties;if(!c||!u)continue;let p=r.get(c)||new Set;p.add({animationId:u,failureReasonsMask:l,unsupportedProperties:m}),r.set(c,p)}let a=[];for(let[o,i]of r){let c=[];for(let{animationId:u,failureReasonsMask:l,unsupportedProperties:m}of i){let p=this.animationIdToName.get(u);c.push({name:p,failureReasonsMask:l,unsupportedProperties:m})}a.push({nodeId:o,animations:c})}return a}static async getLcpElement(e,n){let r;try{r=await on.request(e,n)}catch(o){if(n.gatherMode==="timespan"&&o.code===G.errors.NO_FCP.code)return;throw o}let a=r.largestContentfulPaintEvt?.args?.data;if(!(a?.nodeId===void 0||!a.type))return{nodeId:a.nodeId,type:a.type}}async startInstrumentation(e){await e.driver.defaultSession.sendCommand("Animation.enable"),e.driver.defaultSession.on("Animation.animationStarted",this._onAnimationStarted)}async stopInstrumentation(e){e.driver.defaultSession.off("Animation.animationStarted",this._onAnimationStarted),await e.driver.defaultSession.sendCommand("Animation.disable")}async getArtifact(e){let n=e.driver.defaultSession,r=e.dependencies.Trace;if(!r)throw new Error("Trace is missing!");let a=await Ye.request(r,e),{mainThreadEvents:o}=a,i=await t.getLcpElement(r,e),c=t.getTopLayoutShiftElements(a),u=await this.getAnimatedElements(o),l=await t.getResponsivenessElement(r,e),m=new Map([["largest-contentful-paint",i?[i]:[]],["layout-shift",c],["animation",u],["responsiveness",l?[l]:[]]]),p=[];for(let[g,f]of m)for(let y=0;y<f.length;y++){let b=f[y].nodeId,D;try{let T=await sk(n,b);if(!T)continue;let A=Ka.serializeDeps([Ee.getNodeDetails,hZ]);D=await n.sendCommand("Runtime.callFunctionOn",{objectId:T,functionDeclaration:`function () {
+              ${A}
+              return getNodeDetailsData.call(this);
+            }`,returnByValue:!0,awaitPromise:!0})}catch(T){en.captureException(T,{tags:{gatherer:"TraceElements"},level:"error"});continue}D?.result?.value&&p.push({traceEventType:g,...D.result.value,score:f[y].score,animations:f[y].animations,nodeId:b,type:f[y].type})}return p}},yZ=ov});var sN={};S(sN,{default:()=>bZ});function vZ(){return{innerWidth:window.innerWidth,innerHeight:window.innerHeight,outerWidth:window.outerWidth,outerHeight:window.outerHeight,devicePixelRatio:window.devicePixelRatio}}var iv,bZ,cN=v(()=>{"use strict";d();Ue();s(vZ,"getViewportDimensions");iv=class extends X{static{s(this,"ViewportDimensions")}meta={supportedModes:["snapshot","timespan","navigation"]};async getArtifact(e){let r=await e.driver.executionContext.evaluate(vZ,{args:[],useIsolation:!0});if(!Object.values(r).every(Number.isFinite)){let o=JSON.stringify(r);throw new Error(`ViewportDimensions results were not numeric: ${o}`)}return r}},bZ=iv});function nr(t,e){let n,r;return typeof t=="string"?n=e?t.trim():t:(t!==void 0&&(r="ERROR: expected a string."),n=void 0),{raw:t,value:n,warning:r}}function uN(t){let e=nr(t);return e.value===void 0,e}function EZ(t){return nr(t.name,!0)}function TZ(t){return nr(t.short_name,!0)}function SZ(t,e){let n=new URL(t),r=new URL(e);return n.origin===r.origin}function xZ(t,e,n){let r=t.start_url;if(r==="")return{raw:r,value:n,warning:"ERROR: start_url string empty"};if(r===void 0)return{raw:r,value:n};if(typeof r!="string")return{raw:r,value:n,warning:"ERROR: expected a string."};let a;try{a=new URL(r,e).href}catch{return{raw:r,value:n,warning:`ERROR: invalid start_url relative to ${e}`}}return SZ(a,n)?{raw:r,value:a}:{raw:r,value:n,warning:"ERROR: start_url must be same-origin as document"}}function CZ(t){let e=nr(t.display,!0),n=e.value;if(!n)return{raw:t,value:sv,warning:e.warning};let r=n.toLowerCase();return wZ.includes(r)?{raw:t,value:r,warning:void 0}:{raw:t,value:sv,warning:"ERROR: 'display' has invalid value "+r+`. will fall back to ${sv}.`}}function AZ(t){let e=nr(t.orientation,!0);return e.value&&!DZ.includes(e.value.toLowerCase())&&(e.value=void 0,e.warning="ERROR: 'orientation' has an invalid value, will be ignored."),e}function FZ(t,e){let n=nr(t.src,!0);if(n.value===""&&(n.value=void 0),n.value)try{n.value=new URL(n.value,e).href}catch{n.warning=`ERROR: invalid icon url will be ignored: '${t.src}'`,n.value=void 0}let r=nr(t.type,!0),a=nr(t.purpose),o={raw:t.purpose,value:["any"],warning:void 0};a.value!==void 0&&(o.value=a.value.split(/\s+/).map(l=>l.toLowerCase()));let i={raw:t.density,value:1,warning:void 0};i.raw!==void 0&&(i.value=parseFloat(i.raw),(isNaN(i.value)||!isFinite(i.value)||i.value<=0)&&(i.value=1,i.warning="ERROR: icon density cannot be NaN, +∞, or less than or equal to +0."));let c,u=nr(t.sizes);if(u.value!==void 0){let l=new Set;u.value.trim().split(/\s+/).forEach(m=>l.add(m.toLowerCase())),c={raw:t.sizes,value:l.size>0?Array.from(l):void 0,warning:void 0}}else c={...u,value:void 0};return{raw:t,value:{src:n,type:r,density:i,sizes:c,purpose:o},warning:void 0}}function RZ(t,e){let n=t.icons;if(n===void 0)return{raw:n,value:[],warning:void 0};if(!Array.isArray(n))return{raw:n,value:[],warning:"ERROR: 'icons' expected to be an array but is not."};let r=n.filter(i=>i.src!==void 0).map(i=>FZ(i,e)),a=r.filter(i=>{let c=[i.warning,i.value.type.warning,i.value.src.warning,i.value.sizes.warning,i.value.density.warning].filter(Boolean),u=!!i.value.src.value;return!!c.length&&!u}),o=r.filter(i=>i.value.src.value!==void 0);return{raw:n,value:o,warning:a.length?"WARNING: Some icons were ignored due to warnings.":void 0}}function _Z(t){let e=nr(t.platform,!0),n=nr(t.id,!0),r=nr(t.url,!0);if(r.value)try{r.value=new URL(r.value).href}catch{r.value=void 0,r.warning=`ERROR: invalid application URL ${t.url}`}return{raw:t,value:{platform:e,id:n,url:r},warning:void 0}}function kZ(t){let e=t.related_applications;if(e===void 0)return{raw:e,value:void 0,warning:void 0};if(!Array.isArray(e))return{raw:e,value:void 0,warning:"ERROR: 'related_applications' expected to be an array but is not."};let n=e.filter(r=>!!r.platform).map(_Z).filter(r=>!!r.value.id.value||!!r.value.url.value);return{raw:e,value:n,warning:void 0}}function IZ(t){let e=t.prefer_related_applications,n,r;return typeof e=="boolean"?n=e:(e!==void 0&&(r="ERROR: 'prefer_related_applications' expected to be a boolean."),n=void 0),{raw:e,value:n,warning:r}}function MZ(t){return uN(t.theme_color)}function NZ(t){return uN(t.background_color)}function lN(t,e,n){if(e===void 0||n===void 0)throw new Error("Manifest and document URLs required for manifest parsing.");let r;try{r=JSON.parse(t)}catch(i){return{raw:t,value:void 0,warning:"ERROR: file isn't valid JSON: "+i,url:e}}let a={name:EZ(r),short_name:TZ(r),start_url:xZ(r,e,n),display:CZ(r),orientation:AZ(r),icons:RZ(r,e),related_applications:kZ(r),prefer_related_applications:IZ(r),theme_color:MZ(r),background_color:NZ(r)},o;try{new URL(e).protocol.startsWith("http")||(o="WARNING: manifest URL not available over a valid network protocol")}catch{o=`ERROR: invalid manifest URL: '${e}'`}return{raw:t,value:a,warning:o,url:e}}var wZ,sv,DZ,dN=v(()=>{"use strict";d();wZ=["fullscreen","standalone","minimal-ui","browser"],sv="browser",DZ=["any","natural","landscape","portrait","portrait-primary","portrait-secondary","landscape-primary","landscape-secondary"];s(nr,"parseString");s(uN,"parseColor");s(EZ,"parseName");s(TZ,"parseShortName");s(SZ,"checkSameOrigin");s(xZ,"parseStartUrl");s(CZ,"parseDisplay");s(AZ,"parseOrientation");s(FZ,"parseIcon");s(RZ,"parseIcons");s(_Z,"parseApplication");s(kZ,"parseRelatedApplications");s(IZ,"parsePreferRelatedApplications");s(MZ,"parseThemeColor");s(NZ,"parseBackgroundColor");s(lN,"parseManifest")});var mN={};S(mN,{default:()=>LZ});var cv,LZ,pN=v(()=>{"use strict";d();He();dN();Ue();cv=class t extends X{static{s(this,"WebAppManifest")}meta={supportedModes:["snapshot","navigation"]};static async fetchAppManifest(e){e.setNextProtocolTimeout(1e4);let n;try{n=await e.sendCommand("Page.getAppManifest")}catch(c){if(c.code==="PROTOCOL_TIMEOUT")return N.error("WebAppManifest","Failed fetching manifest",c),null;throw c}let r=n.data;if(!r)return null;let a=3,o=65279;return r.charCodeAt(0)===o&&(r=Buffer.from(r).slice(a).toString()),{...n,data:r}}static async getWebAppManifest(e,n){let r={msg:"Get webapp manifest",id:"lh:gather:getWebAppManifest"};N.time(r);let a=await t.fetchAppManifest(e);if(!a)return null;let o=lN(a.data,a.url,n);return N.timeEnd(r),o}async getArtifact(e){let n=e.driver,{finalDisplayedUrl:r}=e.baseArtifacts.URL;try{return await t.getWebAppManifest(n.defaultSession,r)}catch{return null}}},LZ=cv});var fN,PZ,uv,U,ue=v(()=>{"use strict";d();J();k();fN={failingElementsHeader:"Failing Elements"},PZ=w("core/audits/accessibility/axe-audit.js",fN),uv=class extends h{static{s(this,"AxeAudit")}static audit(e){if((e.Accessibility.notApplicable||[]).find(b=>b.id===this.meta.id))return{score:null,notApplicable:!0};let a=e.Accessibility.incomplete||[],o=a.find(b=>b.id===this.meta.id);if(o?.error)return{score:null,errorMessage:`axe-core Error: ${o.error.message||"Unknown error"}`};let i=this.meta.scoreDisplayMode===h.SCORING_MODES.INFORMATIVE,c=e.Accessibility.violations||[],l=(i?c.concat(a):c).find(b=>b.id===this.meta.id),m=l?.impact,p=l?.tags;if(i&&!l)return{score:null,notApplicable:!0};let g=[];l?.nodes&&(g=l.nodes.map(b=>({node:{...h.makeNodeItem(b.node),explanation:b.failureSummary},subItems:b.relatedNodes.length?{type:"subitems",items:b.relatedNodes.map(D=>({relatedNode:h.makeNodeItem(D)}))}:void 0})));let f=[{key:"node",valueType:"node",subItemsHeading:{key:"relatedNode",valueType:"node"},label:PZ(fN.failingElementsHeader)}],y;return(m||p)&&(y={type:"debugdata",impact:m,tags:p}),{score:+(l===void 0),details:{...h.makeTableDetails(f,g),debugData:y}}}},U=uv});var gN={};S(gN,{UIStrings:()=>Gu,default:()=>OZ});var Gu,lv,dv,OZ,hN=v(()=>{"use strict";d();ue();k();Gu={title:"`[accesskey]` values are unique",failureTitle:"`[accesskey]` values are not unique",description:"Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more about access keys](https://dequeuniversity.com/rules/axe/4.7/accesskeys)."},lv=w("core/audits/accessibility/accesskeys.js",Gu),dv=class extends U{static{s(this,"Accesskeys")}static get meta(){return{id:"accesskeys",title:lv(Gu.title),failureTitle:lv(Gu.failureTitle),description:lv(Gu.description),requiredArtifacts:["Accessibility"]}}},OZ=dv});var yN={};S(yN,{UIStrings:()=>Wu,default:()=>UZ});var Wu,mv,pv,UZ,vN=v(()=>{"use strict";d();ue();k();Wu={title:"`[aria-*]` attributes match their roles",failureTitle:"`[aria-*]` attributes do not match their roles",description:"Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn how to match ARIA attributes to their roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-attr)."},mv=w("core/audits/accessibility/aria-allowed-attr.js",Wu),pv=class extends U{static{s(this,"ARIAAllowedAttr")}static get meta(){return{id:"aria-allowed-attr",title:mv(Wu.title),failureTitle:mv(Wu.failureTitle),description:mv(Wu.description),requiredArtifacts:["Accessibility"]}}},UZ=pv});var bN={};S(bN,{UIStrings:()=>Vu,default:()=>BZ});var Vu,fv,gv,BZ,wN=v(()=>{"use strict";d();ue();k();Vu={title:'Values assigned to `role=""` are valid ARIA roles.',failureTitle:'Values assigned to `role=""` are not valid ARIA roles.',description:"ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."},fv=w("core/audits/accessibility/aria-allowed-role.js",Vu),gv=class extends U{static{s(this,"ARIAAllowedRole")}static get meta(){return{id:"aria-allowed-role",title:fv(Vu.title),failureTitle:fv(Vu.failureTitle),description:fv(Vu.description),requiredArtifacts:["Accessibility"]}}},BZ=gv});var DN={};S(DN,{UIStrings:()=>$u,default:()=>jZ});var $u,hv,yv,jZ,EN=v(()=>{"use strict";d();ue();k();$u={title:"`button`, `link`, and `menuitem` elements have accessible names",failureTitle:"`button`, `link`, and `menuitem` elements do not have accessible names.",description:"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."},hv=w("core/audits/accessibility/aria-command-name.js",$u),yv=class extends U{static{s(this,"AriaCommandName")}static get meta(){return{id:"aria-command-name",title:hv($u.title),failureTitle:hv($u.failureTitle),description:hv($u.description),requiredArtifacts:["Accessibility"]}}},jZ=yv});var TN={};S(TN,{UIStrings:()=>Yu,default:()=>qZ});var Yu,vv,bv,qZ,SN=v(()=>{"use strict";d();ue();k();Yu={title:'Elements with `role="dialog"` or `role="alertdialog"` have accessible names.',failureTitle:'Elements with `role="dialog"` or `role="alertdialog"` do not have accessible names.',description:"ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements. [Learn how to make ARIA dialog elements more accessible](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."},vv=w("core/audits/accessibility/aria-dialog-name.js",Yu),bv=class extends U{static{s(this,"AriaDialogName")}static get meta(){return{id:"aria-dialog-name",title:vv(Yu.title),failureTitle:vv(Yu.failureTitle),description:vv(Yu.description),requiredArtifacts:["Accessibility"]}}},qZ=bv});var xN={};S(xN,{UIStrings:()=>Ku,default:()=>zZ});var Ku,wv,Dv,zZ,CN=v(()=>{"use strict";d();ue();k();Ku={title:'`[aria-hidden="true"]` is not present on the document `<body>`',failureTitle:'`[aria-hidden="true"]` is present on the document `<body>`',description:'Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document `<body>`. [Learn how `aria-hidden` affects the document body](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body).'},wv=w("core/audits/accessibility/aria-hidden-body.js",Ku),Dv=class extends U{static{s(this,"AriaHiddenBody")}static get meta(){return{id:"aria-hidden-body",title:wv(Ku.title),failureTitle:wv(Ku.failureTitle),description:wv(Ku.description),requiredArtifacts:["Accessibility"]}}},zZ=Dv});var AN={};S(AN,{UIStrings:()=>Ju,default:()=>HZ});var Ju,Ev,Tv,HZ,FN=v(()=>{"use strict";d();ue();k();Ju={title:'`[aria-hidden="true"]` elements do not contain focusable descendents',failureTitle:'`[aria-hidden="true"]` elements contain focusable descendents',description:'Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn how `aria-hidden` affects focusable elements](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-focus).'},Ev=w("core/audits/accessibility/aria-hidden-focus.js",Ju),Tv=class extends U{static{s(this,"AriaHiddenFocus")}static get meta(){return{id:"aria-hidden-focus",title:Ev(Ju.title),failureTitle:Ev(Ju.failureTitle),description:Ev(Ju.description),requiredArtifacts:["Accessibility"]}}},HZ=Tv});var RN={};S(RN,{UIStrings:()=>Xu,default:()=>GZ});var Xu,Sv,xv,GZ,_N=v(()=>{"use strict";d();ue();k();Xu={title:"ARIA input fields have accessible names",failureTitle:"ARIA input fields do not have accessible names",description:"When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about input field labels](https://dequeuniversity.com/rules/axe/4.7/aria-input-field-name)."},Sv=w("core/audits/accessibility/aria-input-field-name.js",Xu),xv=class extends U{static{s(this,"AriaInputFieldName")}static get meta(){return{id:"aria-input-field-name",title:Sv(Xu.title),failureTitle:Sv(Xu.failureTitle),description:Sv(Xu.description),requiredArtifacts:["Accessibility"]}}},GZ=xv});var kN={};S(kN,{UIStrings:()=>Zu,default:()=>WZ});var Zu,Cv,Av,WZ,IN=v(()=>{"use strict";d();ue();k();Zu={title:"ARIA `meter` elements have accessible names",failureTitle:"ARIA `meter` elements do not have accessible names.",description:"When a meter element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `meter` elements](https://dequeuniversity.com/rules/axe/4.7/aria-meter-name)."},Cv=w("core/audits/accessibility/aria-meter-name.js",Zu),Av=class extends U{static{s(this,"AriaMeterName")}static get meta(){return{id:"aria-meter-name",title:Cv(Zu.title),failureTitle:Cv(Zu.failureTitle),description:Cv(Zu.description),requiredArtifacts:["Accessibility"]}}},WZ=Av});var MN={};S(MN,{UIStrings:()=>Qu,default:()=>VZ});var Qu,Fv,Rv,VZ,NN=v(()=>{"use strict";d();ue();k();Qu={title:"ARIA `progressbar` elements have accessible names",failureTitle:"ARIA `progressbar` elements do not have accessible names.",description:"When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to label `progressbar` elements](https://dequeuniversity.com/rules/axe/4.7/aria-progressbar-name)."},Fv=w("core/audits/accessibility/aria-progressbar-name.js",Qu),Rv=class extends U{static{s(this,"AriaProgressbarName")}static get meta(){return{id:"aria-progressbar-name",title:Fv(Qu.title),failureTitle:Fv(Qu.failureTitle),description:Fv(Qu.description),requiredArtifacts:["Accessibility"]}}},VZ=Rv});var LN={};S(LN,{UIStrings:()=>el,default:()=>$Z});var el,_v,kv,$Z,PN=v(()=>{"use strict";d();ue();k();el={title:"`[role]`s have all required `[aria-*]` attributes",failureTitle:"`[role]`s do not have all required `[aria-*]` attributes",description:"Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more about roles and required attributes](https://dequeuniversity.com/rules/axe/4.7/aria-required-attr)."},_v=w("core/audits/accessibility/aria-required-attr.js",el),kv=class extends U{static{s(this,"ARIARequiredAttr")}static get meta(){return{id:"aria-required-attr",title:_v(el.title),failureTitle:_v(el.failureTitle),description:_v(el.description),requiredArtifacts:["Accessibility"]}}},$Z=kv});var ON={};S(ON,{UIStrings:()=>tl,default:()=>YZ});var tl,Iv,Mv,YZ,UN=v(()=>{"use strict";d();ue();k();tl={title:"Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.",failureTitle:"Elements with an ARIA `[role]` that require children to contain a specific `[role]` are missing some or all of those required children.",description:"Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more about roles and required children elements](https://dequeuniversity.com/rules/axe/4.7/aria-required-children)."},Iv=w("core/audits/accessibility/aria-required-children.js",tl),Mv=class extends U{static{s(this,"AriaRequiredChildren")}static get meta(){return{id:"aria-required-children",title:Iv(tl.title),failureTitle:Iv(tl.failureTitle),description:Iv(tl.description),requiredArtifacts:["Accessibility"]}}},YZ=Mv});var BN={};S(BN,{UIStrings:()=>nl,default:()=>KZ});var nl,Nv,Lv,KZ,jN=v(()=>{"use strict";d();ue();k();nl={title:"`[role]`s are contained by their required parent element",failureTitle:"`[role]`s are not contained by their required parent element",description:"Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more about ARIA roles and required parent element](https://dequeuniversity.com/rules/axe/4.7/aria-required-parent)."},Nv=w("core/audits/accessibility/aria-required-parent.js",nl),Lv=class extends U{static{s(this,"AriaRequiredParent")}static get meta(){return{id:"aria-required-parent",title:Nv(nl.title),failureTitle:Nv(nl.failureTitle),description:Nv(nl.description),requiredArtifacts:["Accessibility"]}}},KZ=Lv});var qN={};S(qN,{UIStrings:()=>rl,default:()=>JZ});var rl,Pv,Ov,JZ,zN=v(()=>{"use strict";d();ue();k();rl={title:"`[role]` values are valid",failureTitle:"`[role]` values are not valid",description:"ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more about valid ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-roles)."},Pv=w("core/audits/accessibility/aria-roles.js",rl),Ov=class extends U{static{s(this,"AriaRoles")}static get meta(){return{id:"aria-roles",title:Pv(rl.title),failureTitle:Pv(rl.failureTitle),description:Pv(rl.description),requiredArtifacts:["Accessibility"]}}},JZ=Ov});var HN={};S(HN,{UIStrings:()=>al,default:()=>XZ});var al,Uv,Bv,XZ,GN=v(()=>{"use strict";d();ue();k();al={title:"Elements with the `role=text` attribute do not have focusable descendents.",failureTitle:"Elements with the `role=text` attribute do have focusable descendents.",description:"Adding `role=text` around a text node split by markup enables VoiceOver to treat it as one phrase, but the element's focusable descendents will not be announced. [Learn more about the `role=text` attribute](https://dequeuniversity.com/rules/axe/4.7/aria-text)."},Uv=w("core/audits/accessibility/aria-text.js",al),Bv=class extends U{static{s(this,"AriaText")}static get meta(){return{id:"aria-text",title:Uv(al.title),failureTitle:Uv(al.failureTitle),description:Uv(al.description),requiredArtifacts:["Accessibility"]}}},XZ=Bv});var WN={};S(WN,{UIStrings:()=>ol,default:()=>ZZ});var ol,jv,qv,ZZ,VN=v(()=>{"use strict";d();ue();k();ol={title:"ARIA toggle fields have accessible names",failureTitle:"ARIA toggle fields do not have accessible names",description:"When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about toggle fields](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."},jv=w("core/audits/accessibility/aria-toggle-field-name.js",ol),qv=class extends U{static{s(this,"AriaToggleFieldName")}static get meta(){return{id:"aria-toggle-field-name",title:jv(ol.title),failureTitle:jv(ol.failureTitle),description:jv(ol.description),requiredArtifacts:["Accessibility"]}}},ZZ=qv});var $N={};S($N,{UIStrings:()=>il,default:()=>QZ});var il,zv,Hv,QZ,YN=v(()=>{"use strict";d();ue();k();il={title:"ARIA `tooltip` elements have accessible names",failureTitle:"ARIA `tooltip` elements do not have accessible names.",description:"When a tooltip element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `tooltip` elements](https://dequeuniversity.com/rules/axe/4.7/aria-tooltip-name)."},zv=w("core/audits/accessibility/aria-tooltip-name.js",il),Hv=class extends U{static{s(this,"AriaTooltipName")}static get meta(){return{id:"aria-tooltip-name",title:zv(il.title),failureTitle:zv(il.failureTitle),description:zv(il.description),requiredArtifacts:["Accessibility"]}}},QZ=Hv});var KN={};S(KN,{UIStrings:()=>sl,default:()=>eQ});var sl,Gv,Wv,eQ,JN=v(()=>{"use strict";d();ue();k();sl={title:"ARIA `treeitem` elements have accessible names",failureTitle:"ARIA `treeitem` elements do not have accessible names.",description:"When a `treeitem` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about labeling `treeitem` elements](https://dequeuniversity.com/rules/axe/4.7/aria-treeitem-name)."},Gv=w("core/audits/accessibility/aria-treeitem-name.js",sl),Wv=class extends U{static{s(this,"AriaTreeitemName")}static get meta(){return{id:"aria-treeitem-name",title:Gv(sl.title),failureTitle:Gv(sl.failureTitle),description:Gv(sl.description),requiredArtifacts:["Accessibility"]}}},eQ=Wv});var XN={};S(XN,{UIStrings:()=>cl,default:()=>tQ});var cl,Vv,$v,tQ,ZN=v(()=>{"use strict";d();ue();k();cl={title:"`[aria-*]` attributes have valid values",failureTitle:"`[aria-*]` attributes do not have valid values",description:"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more about valid values for ARIA attributes](https://dequeuniversity.com/rules/axe/4.7/aria-valid-attr-value)."},Vv=w("core/audits/accessibility/aria-valid-attr-value.js",cl),$v=class extends U{static{s(this,"ARIAValidAttr")}static get meta(){return{id:"aria-valid-attr-value",title:Vv(cl.title),failureTitle:Vv(cl.failureTitle),description:Vv(cl.description),requiredArtifacts:["Accessibility"]}}},tQ=$v});var QN={};S(QN,{UIStrings:()=>ul,default:()=>nQ});var ul,Yv,Kv,nQ,e3=v(()=>{"use strict";d();ue();k();ul={title:"`[aria-*]` attributes are valid and not misspelled",failureTitle:"`[aria-*]` attributes are not valid or misspelled",description:"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more about valid ARIA attributes](https://dequeuniversity.com/rules/axe/4.7/aria-valid-attr)."},Yv=w("core/audits/accessibility/aria-valid-attr.js",ul),Kv=class extends U{static{s(this,"ARIAValidAttr")}static get meta(){return{id:"aria-valid-attr",title:Yv(ul.title),failureTitle:Yv(ul.failureTitle),description:Yv(ul.description),requiredArtifacts:["Accessibility"]}}},nQ=Kv});var t3={};S(t3,{UIStrings:()=>ll,default:()=>rQ});var ll,Jv,Xv,rQ,n3=v(()=>{"use strict";d();ue();k();ll={title:"Buttons have an accessible name",failureTitle:"Buttons do not have an accessible name",description:`When a button doesn't have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. [Learn how to make buttons more accessible](https://dequeuniversity.com/rules/axe/4.7/button-name).`},Jv=w("core/audits/accessibility/button-name.js",ll),Xv=class extends U{static{s(this,"ButtonName")}static get meta(){return{id:"button-name",title:Jv(ll.title),failureTitle:Jv(ll.failureTitle),description:Jv(ll.description),requiredArtifacts:["Accessibility"]}}},rQ=Xv});var r3={};S(r3,{UIStrings:()=>dl,default:()=>aQ});var dl,Zv,Qv,aQ,a3=v(()=>{"use strict";d();ue();k();dl={title:"The page contains a heading, skip link, or landmark region",failureTitle:"The page does not contain a heading, skip link, or landmark region",description:"Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more about bypass blocks](https://dequeuniversity.com/rules/axe/4.7/bypass)."},Zv=w("core/audits/accessibility/bypass.js",dl),Qv=class extends U{static{s(this,"Bypass")}static get meta(){return{id:"bypass",title:Zv(dl.title),failureTitle:Zv(dl.failureTitle),description:Zv(dl.description),scoreDisplayMode:U.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},aQ=Qv});var o3={};S(o3,{UIStrings:()=>ml,default:()=>oQ});var ml,eb,tb,oQ,i3=v(()=>{"use strict";d();ue();k();ml={title:"Background and foreground colors have a sufficient contrast ratio",failureTitle:"Background and foreground colors do not have a sufficient contrast ratio.",description:"Low-contrast text is difficult or impossible for many users to read. [Learn how to provide sufficient color contrast](https://dequeuniversity.com/rules/axe/4.7/color-contrast)."},eb=w("core/audits/accessibility/color-contrast.js",ml),tb=class extends U{static{s(this,"ColorContrast")}static get meta(){return{id:"color-contrast",title:eb(ml.title),failureTitle:eb(ml.failureTitle),description:eb(ml.description),requiredArtifacts:["Accessibility"]}}},oQ=tb});var s3={};S(s3,{UIStrings:()=>pl,default:()=>iQ});var pl,nb,rb,iQ,c3=v(()=>{"use strict";d();ue();k();pl={title:"`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",failureTitle:"`<dl>`'s do not contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",description:"When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.7/definition-list)."},nb=w("core/audits/accessibility/definition-list.js",pl),rb=class extends U{static{s(this,"DefinitionList")}static get meta(){return{id:"definition-list",title:nb(pl.title),failureTitle:nb(pl.failureTitle),description:nb(pl.description),requiredArtifacts:["Accessibility"]}}},iQ=rb});var u3={};S(u3,{UIStrings:()=>fl,default:()=>sQ});var fl,ab,ob,sQ,l3=v(()=>{"use strict";d();ue();k();fl={title:"Definition list items are wrapped in `<dl>` elements",failureTitle:"Definition list items are not wrapped in `<dl>` elements",description:"Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.7/dlitem)."},ab=w("core/audits/accessibility/dlitem.js",fl),ob=class extends U{static{s(this,"DLItem")}static get meta(){return{id:"dlitem",title:ab(fl.title),failureTitle:ab(fl.failureTitle),description:ab(fl.description),requiredArtifacts:["Accessibility"]}}},sQ=ob});var d3={};S(d3,{UIStrings:()=>gl,default:()=>cQ});var gl,ib,sb,cQ,m3=v(()=>{"use strict";d();ue();k();gl={title:"Document has a `<title>` element",failureTitle:"Document doesn't have a `<title>` element",description:"The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more about document titles](https://dequeuniversity.com/rules/axe/4.7/document-title)."},ib=w("core/audits/accessibility/document-title.js",gl),sb=class extends U{static{s(this,"DocumentTitle")}static get meta(){return{id:"document-title",title:ib(gl.title),failureTitle:ib(gl.failureTitle),description:ib(gl.description),requiredArtifacts:["Accessibility"]}}},cQ=sb});var p3={};S(p3,{UIStrings:()=>hl,default:()=>uQ});var hl,cb,ub,uQ,f3=v(()=>{"use strict";d();ue();k();hl={title:"`[id]` attributes on active, focusable elements are unique",failureTitle:"`[id]` attributes on active, focusable elements are not unique",description:"All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. [Learn how to fix duplicate `id`s](https://dequeuniversity.com/rules/axe/4.7/duplicate-id-active)."},cb=w("core/audits/accessibility/duplicate-id-active.js",hl),ub=class extends U{static{s(this,"DuplicateIdActive")}static get meta(){return{id:"duplicate-id-active",title:cb(hl.title),failureTitle:cb(hl.failureTitle),description:cb(hl.description),requiredArtifacts:["Accessibility"]}}},uQ=ub});var g3={};S(g3,{UIStrings:()=>yl,default:()=>lQ});var yl,lb,db,lQ,h3=v(()=>{"use strict";d();ue();k();yl={title:"ARIA IDs are unique",failureTitle:"ARIA IDs are not unique",description:"The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn how to fix duplicate ARIA IDs](https://dequeuniversity.com/rules/axe/4.7/duplicate-id-aria)."},lb=w("core/audits/accessibility/duplicate-id-aria.js",yl),db=class extends U{static{s(this,"DuplicateIdAria")}static get meta(){return{id:"duplicate-id-aria",title:lb(yl.title),failureTitle:lb(yl.failureTitle),description:lb(yl.description),requiredArtifacts:["Accessibility"]}}},lQ=db});var y3={};S(y3,{UIStrings:()=>vl,default:()=>dQ});var vl,mb,pb,dQ,v3=v(()=>{"use strict";d();ue();k();vl={title:"All heading elements contain content.",failureTitle:"Heading elements do not contain content.",description:"A heading with no content or inaccessible text prevent screen reader users from accessing information on the page's structure. [Learn more about headings](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."},mb=w("core/audits/accessibility/empty-heading.js",vl),pb=class extends U{static{s(this,"EmptyHeading")}static get meta(){return{id:"empty-heading",title:mb(vl.title),failureTitle:mb(vl.failureTitle),description:mb(vl.description),scoreDisplayMode:U.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},dQ=pb});var b3={};S(b3,{UIStrings:()=>bl,default:()=>mQ});var bl,fb,gb,mQ,w3=v(()=>{"use strict";d();ue();k();bl={title:"No form fields have multiple labels",failureTitle:"Form fields have multiple labels",description:"Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn how to use form labels](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."},fb=w("core/audits/accessibility/form-field-multiple-labels.js",bl),gb=class extends U{static{s(this,"FormFieldMultipleLabels")}static get meta(){return{id:"form-field-multiple-labels",title:fb(bl.title),failureTitle:fb(bl.failureTitle),description:fb(bl.description),scoreDisplayMode:U.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},mQ=gb});var D3={};S(D3,{UIStrings:()=>wl,default:()=>pQ});var wl,hb,yb,pQ,E3=v(()=>{"use strict";d();ue();k();wl={title:"`<frame>` or `<iframe>` elements have a title",failureTitle:"`<frame>` or `<iframe>` elements do not have a title",description:"Screen reader users rely on frame titles to describe the contents of frames. [Learn more about frame titles](https://dequeuniversity.com/rules/axe/4.7/frame-title)."},hb=w("core/audits/accessibility/frame-title.js",wl),yb=class extends U{static{s(this,"FrameTitle")}static get meta(){return{id:"frame-title",title:hb(wl.title),failureTitle:hb(wl.failureTitle),description:hb(wl.description),requiredArtifacts:["Accessibility"]}}},pQ=yb});var T3={};S(T3,{UIStrings:()=>Dl,default:()=>fQ});var Dl,vb,bb,fQ,S3=v(()=>{"use strict";d();ue();k();Dl={title:"Heading elements appear in a sequentially-descending order",failureTitle:"Heading elements are not in a sequentially-descending order",description:"Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. [Learn more about heading order](https://dequeuniversity.com/rules/axe/4.7/heading-order)."},vb=w("core/audits/accessibility/heading-order.js",Dl),bb=class extends U{static{s(this,"HeadingOrder")}static get meta(){return{id:"heading-order",title:vb(Dl.title),failureTitle:vb(Dl.failureTitle),description:vb(Dl.description),requiredArtifacts:["Accessibility"]}}},fQ=bb});var x3={};S(x3,{UIStrings:()=>El,default:()=>gQ});var El,wb,Db,gQ,C3=v(()=>{"use strict";d();ue();k();El={title:"`<html>` element has a `[lang]` attribute",failureTitle:"`<html>` element does not have a `[lang]` attribute",description:"If a page doesn't specify a `lang` attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.7/html-has-lang)."},wb=w("core/audits/accessibility/html-has-lang.js",El),Db=class extends U{static{s(this,"HTMLHasLang")}static get meta(){return{id:"html-has-lang",title:wb(El.title),failureTitle:wb(El.failureTitle),description:wb(El.description),requiredArtifacts:["Accessibility"]}}},gQ=Db});var A3={};S(A3,{UIStrings:()=>Tl,default:()=>hQ});var Tl,Eb,Tb,hQ,F3=v(()=>{"use strict";d();ue();k();Tl={title:"`<html>` element has a valid value for its `[lang]` attribute",failureTitle:"`<html>` element does not have a valid value for its `[lang]` attribute.",description:"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.7/html-lang-valid)."},Eb=w("core/audits/accessibility/html-lang-valid.js",Tl),Tb=class extends U{static{s(this,"HTMLLangValid")}static get meta(){return{id:"html-lang-valid",title:Eb(Tl.title),failureTitle:Eb(Tl.failureTitle),description:Eb(Tl.description),requiredArtifacts:["Accessibility"]}}},hQ=Tb});var R3={};S(R3,{UIStrings:()=>Sl,default:()=>yQ});var Sl,Sb,xb,yQ,_3=v(()=>{"use strict";d();ue();k();Sl={title:"`<html>` element has an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.",failureTitle:"`<html>` element does not have an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.",description:"If the webpage does not specify a consistent language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.7/html-xml-lang-mismatch)."},Sb=w("core/audits/accessibility/html-xml-lang-mismatch.js",Sl),xb=class extends U{static{s(this,"HTMLXMLLangMismatch")}static get meta(){return{id:"html-xml-lang-mismatch",title:Sb(Sl.title),failureTitle:Sb(Sl.failureTitle),description:Sb(Sl.description),requiredArtifacts:["Accessibility"]}}},yQ=xb});var k3={};S(k3,{UIStrings:()=>xl,default:()=>vQ});var xl,Cb,Ab,vQ,I3=v(()=>{"use strict";d();ue();k();xl={title:"Identical links have the same purpose.",failureTitle:"Identical links do not have the same purpose.",description:"Links with the same destination should have the same description, to help users understand the link's purpose and decide whether to follow it. [Learn more about identical links](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."},Cb=w("core/audits/accessibility/identical-links-same-purpose.js",xl),Ab=class extends U{static{s(this,"IdenticalLinksSamePurpose")}static get meta(){return{id:"identical-links-same-purpose",title:Cb(xl.title),failureTitle:Cb(xl.failureTitle),description:Cb(xl.description),scoreDisplayMode:U.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},vQ=Ab});var M3={};S(M3,{UIStrings:()=>Cl,default:()=>bQ});var Cl,Fb,Rb,bQ,N3=v(()=>{"use strict";d();ue();k();Cl={title:"Image elements have `[alt]` attributes",failureTitle:"Image elements do not have `[alt]` attributes",description:"Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-alt)."},Fb=w("core/audits/accessibility/image-alt.js",Cl),Rb=class extends U{static{s(this,"ImageAlt")}static get meta(){return{id:"image-alt",title:Fb(Cl.title),failureTitle:Fb(Cl.failureTitle),description:Fb(Cl.description),requiredArtifacts:["Accessibility"]}}},bQ=Rb});var L3={};S(L3,{UIStrings:()=>Al,default:()=>wQ});var Al,_b,kb,wQ,P3=v(()=>{"use strict";d();ue();k();Al={title:"Image elements do not have `[alt]` attributes that are redundant text.",failureTitle:"Image elements have `[alt]` attributes that are redundant text.",description:"Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."},_b=w("core/audits/accessibility/image-redundant-alt.js",Al),kb=class extends U{static{s(this,"ImageRedundantAlt")}static get meta(){return{id:"image-redundant-alt",title:_b(Al.title),failureTitle:_b(Al.failureTitle),description:_b(Al.description),requiredArtifacts:["Accessibility"]}}},wQ=kb});var O3={};S(O3,{UIStrings:()=>Fl,default:()=>DQ});var Fl,Ib,Mb,DQ,U3=v(()=>{"use strict";d();ue();k();Fl={title:"Input buttons have discernible text.",failureTitle:"Input buttons do not have discernible text.",description:"Adding discernable and accessible text to input buttons may help screen reader users understand the purpose of the input button. [Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."},Ib=w("core/audits/accessibility/input-button-name.js",Fl),Mb=class extends U{static{s(this,"InputButtonName")}static get meta(){return{id:"input-button-name",title:Ib(Fl.title),failureTitle:Ib(Fl.failureTitle),description:Ib(Fl.description),requiredArtifacts:["Accessibility"]}}},DQ=Mb});var B3={};S(B3,{UIStrings:()=>Rl,default:()=>EQ});var Rl,Nb,Lb,EQ,j3=v(()=>{"use strict";d();ue();k();Rl={title:'`<input type="image">` elements have `[alt]` text',failureTitle:'`<input type="image">` elements do not have `[alt]` text',description:"When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn about input image alt text](https://dequeuniversity.com/rules/axe/4.7/input-image-alt)."},Nb=w("core/audits/accessibility/input-image-alt.js",Rl),Lb=class extends U{static{s(this,"InputImageAlt")}static get meta(){return{id:"input-image-alt",title:Nb(Rl.title),failureTitle:Nb(Rl.failureTitle),description:Nb(Rl.description),requiredArtifacts:["Accessibility"]}}},EQ=Lb});var q3={};S(q3,{UIStrings:()=>_l,default:()=>TQ});var _l,Pb,Ob,TQ,z3=v(()=>{"use strict";d();ue();k();_l={title:"Elements with visible text labels have matching accessible names.",failureTitle:"Elements with visible text labels do not have matching accessible names.",description:"Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."},Pb=w("core/audits/accessibility/label-content-name-mismatch.js",_l),Ob=class extends U{static{s(this,"LabelContentNameMismatch")}static get meta(){return{id:"label-content-name-mismatch",title:Pb(_l.title),failureTitle:Pb(_l.failureTitle),description:Pb(_l.description),requiredArtifacts:["Accessibility"]}}},TQ=Ob});var H3={};S(H3,{UIStrings:()=>kl,default:()=>SQ});var kl,Ub,Bb,SQ,G3=v(()=>{"use strict";d();ue();k();kl={title:"Form elements have associated labels",failureTitle:"Form elements do not have associated labels",description:"Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more about form element labels](https://dequeuniversity.com/rules/axe/4.7/label)."},Ub=w("core/audits/accessibility/label.js",kl),Bb=class extends U{static{s(this,"Label")}static get meta(){return{id:"label",title:Ub(kl.title),failureTitle:Ub(kl.failureTitle),description:Ub(kl.description),requiredArtifacts:["Accessibility"]}}},SQ=Bb});var W3={};S(W3,{UIStrings:()=>Il,default:()=>xQ});var Il,jb,qb,xQ,V3=v(()=>{"use strict";d();ue();k();Il={title:"Document has a main landmark.",failureTitle:"Document does not have a main landmark.",description:"One main landmark helps screen reader users navigate a web page. [Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."},jb=w("core/audits/accessibility/landmark-one-main.js",Il),qb=class extends U{static{s(this,"LandmarkOneMain")}static get meta(){return{id:"landmark-one-main",title:jb(Il.title),failureTitle:jb(Il.failureTitle),description:jb(Il.description),scoreDisplayMode:U.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},xQ=qb});var $3={};S($3,{UIStrings:()=>Ml,default:()=>CQ});var Ml,zb,Hb,CQ,Y3=v(()=>{"use strict";d();ue();k();Ml={title:"Links are distinguishable without relying on color.",failureTitle:"Links rely on color to be distinguishable.",description:"Low-contrast text is difficult or impossible for many users to read. Link text that is discernible improves the experience for users with low vision. [Learn how to make links distinguishable](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."},zb=w("core/audits/accessibility/link-in-text-block.js",Ml),Hb=class extends U{static{s(this,"LinkInTextBlock")}static get meta(){return{id:"link-in-text-block",title:zb(Ml.title),failureTitle:zb(Ml.failureTitle),description:zb(Ml.description),requiredArtifacts:["Accessibility"]}}},CQ=Hb});var K3={};S(K3,{UIStrings:()=>Nl,default:()=>AQ});var Nl,Gb,Wb,AQ,J3=v(()=>{"use strict";d();ue();k();Nl={title:"Links have a discernible name",failureTitle:"Links do not have a discernible name",description:"Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn how to make links accessible](https://dequeuniversity.com/rules/axe/4.7/link-name)."},Gb=w("core/audits/accessibility/link-name.js",Nl),Wb=class extends U{static{s(this,"LinkName")}static get meta(){return{id:"link-name",title:Gb(Nl.title),failureTitle:Gb(Nl.failureTitle),description:Gb(Nl.description),requiredArtifacts:["Accessibility"]}}},AQ=Wb});var X3={};S(X3,{UIStrings:()=>Ll,default:()=>FQ});var Ll,Vb,$b,FQ,Z3=v(()=>{"use strict";d();ue();k();Ll={title:"Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",failureTitle:"Lists do not contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",description:"Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.7/list)."},Vb=w("core/audits/accessibility/list.js",Ll),$b=class extends U{static{s(this,"List")}static get meta(){return{id:"list",title:Vb(Ll.title),failureTitle:Vb(Ll.failureTitle),description:Vb(Ll.description),requiredArtifacts:["Accessibility"]}}},FQ=$b});var Q3={};S(Q3,{UIStrings:()=>Pl,default:()=>RQ});var Pl,Yb,Kb,RQ,eL=v(()=>{"use strict";d();ue();k();Pl={title:"List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements",failureTitle:"List items (`<li>`) are not contained within `<ul>`, `<ol>` or `<menu>` parent elements.",description:"Screen readers require list items (`<li>`) to be contained within a parent `<ul>`, `<ol>` or `<menu>` to be announced properly. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.7/listitem)."},Yb=w("core/audits/accessibility/listitem.js",Pl),Kb=class extends U{static{s(this,"ListItem")}static get meta(){return{id:"listitem",title:Yb(Pl.title),failureTitle:Yb(Pl.failureTitle),description:Yb(Pl.description),requiredArtifacts:["Accessibility"]}}},RQ=Kb});var Jb,ht,Rn=v(()=>{"use strict";d();J();Jb=class extends h{static{s(this,"ManualAudit")}static get partialMeta(){return{scoreDisplayMode:h.SCORING_MODES.MANUAL,requiredArtifacts:[]}}static audit(){return{score:0}}},ht=Jb});var tL={};S(tL,{default:()=>_Q});var Xb,_Q,nL=v(()=>{"use strict";d();Rn();Xb=class extends ht{static{s(this,"CustomControlsLabels")}static get meta(){return Object.assign({id:"custom-controls-labels",description:"Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more about custom controls and labels](https://developer.chrome.com/docs/lighthouse/accessibility/custom-controls-labels/).",title:"Custom controls have associated labels"},super.partialMeta)}},_Q=Xb});var rL={};S(rL,{default:()=>kQ});var Zb,kQ,aL=v(()=>{"use strict";d();Rn();Zb=class extends ht{static{s(this,"CustomControlsRoles")}static get meta(){return Object.assign({id:"custom-controls-roles",description:"Custom interactive controls have appropriate ARIA roles. [Learn how to add roles to custom controls](https://developer.chrome.com/docs/lighthouse/accessibility/custom-control-roles/).",title:"Custom controls have ARIA roles"},super.partialMeta)}},kQ=Zb});var oL={};S(oL,{default:()=>IQ});var Qb,IQ,iL=v(()=>{"use strict";d();Rn();Qb=class extends ht{static{s(this,"FocusTraps")}static get meta(){return Object.assign({id:"focus-traps",description:"A user can tab into and out of any control or region without accidentally trapping their focus. [Learn how to avoid focus traps](https://developer.chrome.com/docs/lighthouse/accessibility/focus-traps/).",title:"User focus is not accidentally trapped in a region"},super.partialMeta)}},IQ=Qb});var sL={};S(sL,{default:()=>MQ});var ew,MQ,cL=v(()=>{"use strict";d();Rn();ew=class extends ht{static{s(this,"FocusableControls")}static get meta(){return Object.assign({id:"focusable-controls",description:"Custom interactive controls are keyboard focusable and display a focus indicator. [Learn how to make custom controls focusable](https://developer.chrome.com/docs/lighthouse/accessibility/focusable-controls/).",title:"Interactive controls are keyboard focusable"},super.partialMeta)}},MQ=ew});var uL={};S(uL,{default:()=>NQ});var tw,NQ,lL=v(()=>{"use strict";d();Rn();tw=class extends ht{static{s(this,"InteractiveElementAffordance")}static get meta(){return Object.assign({id:"interactive-element-affordance",description:"Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn how to decorate interactive elements with affordance hints](https://developer.chrome.com/docs/lighthouse/accessibility/interactive-element-affordance/).",title:"Interactive elements indicate their purpose and state"},super.partialMeta)}},NQ=tw});var dL={};S(dL,{default:()=>LQ});var nw,LQ,mL=v(()=>{"use strict";d();Rn();nw=class extends ht{static{s(this,"LogicalTabOrder")}static get meta(){return Object.assign({id:"logical-tab-order",description:"Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more about logical tab ordering](https://developer.chrome.com/docs/lighthouse/accessibility/logical-tab-order/).",title:"The page has a logical tab order"},super.partialMeta)}},LQ=nw});var pL={};S(pL,{default:()=>PQ});var rw,PQ,fL=v(()=>{"use strict";d();Rn();rw=class extends ht{static{s(this,"ManagedFocus")}static get meta(){return Object.assign({id:"managed-focus",description:"If new content, such as a dialog, is added to the page, the user's focus is directed to it. [Learn how to direct focus to new content](https://developer.chrome.com/docs/lighthouse/accessibility/managed-focus/).",title:"The user's focus is directed to new content added to the page"},super.partialMeta)}},PQ=rw});var gL={};S(gL,{default:()=>OQ});var aw,OQ,hL=v(()=>{"use strict";d();Rn();aw=class extends ht{static{s(this,"OffscreenContentHidden")}static get meta(){return Object.assign({id:"offscreen-content-hidden",description:"Offscreen content is hidden with display: none or aria-hidden=true. [Learn how to properly hide offscreen content](https://developer.chrome.com/docs/lighthouse/accessibility/offscreen-content-hidden/).",title:"Offscreen content is hidden from assistive technology"},super.partialMeta)}},OQ=aw});var yL={};S(yL,{default:()=>UQ});var ow,UQ,vL=v(()=>{"use strict";d();Rn();ow=class extends ht{static{s(this,"UseLandmarks")}static get meta(){return Object.assign({id:"use-landmarks",description:"Landmark elements (`<main>`, `<nav>`, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more about landmark elements](https://developer.chrome.com/docs/lighthouse/accessibility/use-landmarks/).",title:"HTML5 landmark elements are used to improve navigation"},super.partialMeta)}},UQ=ow});var bL={};S(bL,{default:()=>BQ});var iw,BQ,wL=v(()=>{"use strict";d();Rn();iw=class extends ht{static{s(this,"VisualOrderFollowsDOM")}static get meta(){return Object.assign({id:"visual-order-follows-dom",description:"DOM order matches the visual order, improving navigation for assistive technology. [Learn more about DOM and visual ordering](https://developer.chrome.com/docs/lighthouse/accessibility/visual-order-follows-dom/).",title:"Visual order on the page follows DOM order"},super.partialMeta)}},BQ=iw});var DL={};S(DL,{UIStrings:()=>Ol,default:()=>jQ});var Ol,sw,cw,jQ,EL=v(()=>{"use strict";d();ue();k();Ol={title:'The document does not use `<meta http-equiv="refresh">`',failureTitle:'The document uses `<meta http-equiv="refresh">`',description:"Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more about the refresh meta tag](https://dequeuniversity.com/rules/axe/4.7/meta-refresh)."},sw=w("core/audits/accessibility/meta-refresh.js",Ol),cw=class extends U{static{s(this,"MetaRefresh")}static get meta(){return{id:"meta-refresh",title:sw(Ol.title),failureTitle:sw(Ol.failureTitle),description:sw(Ol.description),requiredArtifacts:["Accessibility"]}}},jQ=cw});var TL={};S(TL,{UIStrings:()=>Ul,default:()=>qQ});var Ul,uw,lw,qQ,SL=v(()=>{"use strict";d();ue();k();Ul={title:'`[user-scalable="no"]` is not used in the `<meta name="viewport">` element and the `[maximum-scale]` attribute is not less than 5.',failureTitle:'`[user-scalable="no"]` is used in the `<meta name="viewport">` element or the `[maximum-scale]` attribute is less than 5.',description:"Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more about the viewport meta tag](https://dequeuniversity.com/rules/axe/4.7/meta-viewport)."},uw=w("core/audits/accessibility/meta-viewport.js",Ul),lw=class extends U{static{s(this,"MetaViewport")}static get meta(){return{id:"meta-viewport",title:uw(Ul.title),failureTitle:uw(Ul.failureTitle),description:uw(Ul.description),requiredArtifacts:["Accessibility"]}}},qQ=lw});var xL={};S(xL,{UIStrings:()=>Bl,default:()=>zQ});var Bl,dw,mw,zQ,CL=v(()=>{"use strict";d();ue();k();Bl={title:"`<object>` elements have alternate text",failureTitle:"`<object>` elements do not have alternate text",description:"Screen readers cannot translate non-text content. Adding alternate text to `<object>` elements helps screen readers convey meaning to users. [Learn more about alt text for `object` elements](https://dequeuniversity.com/rules/axe/4.7/object-alt)."},dw=w("core/audits/accessibility/object-alt.js",Bl),mw=class extends U{static{s(this,"ObjectAlt")}static get meta(){return{id:"object-alt",title:dw(Bl.title),failureTitle:dw(Bl.failureTitle),description:dw(Bl.description),requiredArtifacts:["Accessibility"]}}},zQ=mw});var AL={};S(AL,{UIStrings:()=>jl,default:()=>HQ});var jl,pw,fw,HQ,FL=v(()=>{"use strict";d();ue();k();jl={title:"Select elements have associated label elements.",failureTitle:"Select elements do not have associated label elements.",description:"Form elements without effective labels can create frustrating experiences for screen reader users. [Learn more about the `select` element](https://dequeuniversity.com/rules/axe/4.7/select-name)."},pw=w("core/audits/accessibility/select-name.js",jl),fw=class extends U{static{s(this,"SelectName")}static get meta(){return{id:"select-name",title:pw(jl.title),failureTitle:pw(jl.failureTitle),description:pw(jl.description),requiredArtifacts:["Accessibility"]}}},HQ=fw});var RL={};S(RL,{UIStrings:()=>ql,default:()=>GQ});var ql,gw,hw,GQ,_L=v(()=>{"use strict";d();ue();k();ql={title:"Skip links are focusable.",failureTitle:"Skip links are not focusable.",description:"Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."},gw=w("core/audits/accessibility/skip-link.js",ql),hw=class extends U{static{s(this,"SkipLink")}static get meta(){return{id:"skip-link",title:gw(ql.title),failureTitle:gw(ql.failureTitle),description:gw(ql.description),requiredArtifacts:["Accessibility"]}}},GQ=hw});var kL={};S(kL,{UIStrings:()=>zl,default:()=>WQ});var zl,yw,vw,WQ,IL=v(()=>{"use strict";d();ue();k();zl={title:"No element has a `[tabindex]` value greater than 0",failureTitle:"Some elements have a `[tabindex]` value greater than 0",description:"A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.7/tabindex)."},yw=w("core/audits/accessibility/tabindex.js",zl),vw=class extends U{static{s(this,"TabIndex")}static get meta(){return{id:"tabindex",title:yw(zl.title),failureTitle:yw(zl.failureTitle),description:yw(zl.description),requiredArtifacts:["Accessibility"]}}},WQ=vw});var ML={};S(ML,{UIStrings:()=>Hl,default:()=>VQ});var Hl,bw,ww,VQ,NL=v(()=>{"use strict";d();ue();k();Hl={title:"Tables have different content in the summary attribute and `<caption>`.",failureTitle:"Tables have the same content in the summary attribute and `<caption>.`",description:"The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."},bw=w("core/audits/accessibility/table-duplicate-name.js",Hl),ww=class extends U{static{s(this,"TableDuplicateName")}static get meta(){return{id:"table-duplicate-name",title:bw(Hl.title),failureTitle:bw(Hl.failureTitle),description:bw(Hl.description),requiredArtifacts:["Accessibility"]}}},VQ=ww});var LL={};S(LL,{UIStrings:()=>Gl,default:()=>$Q});var Gl,Dw,Ew,$Q,PL=v(()=>{"use strict";d();ue();k();Gl={title:"Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.",failureTitle:"Tables do not use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.",description:"Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users. [Learn more about captions](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."},Dw=w("core/audits/accessibility/table-fake-caption.js",Gl),Ew=class extends U{static{s(this,"TableFakeCaption")}static get meta(){return{id:"table-fake-caption",title:Dw(Gl.title),failureTitle:Dw(Gl.failureTitle),description:Dw(Gl.description),requiredArtifacts:["Accessibility"]}}},$Q=Ew});var OL={};S(OL,{UIStrings:()=>Wl,default:()=>YQ});var Wl,Tw,Sw,YQ,UL=v(()=>{"use strict";d();ue();k();Wl={title:"Touch targets have sufficient size and spacing.",failureTitle:"Touch targets do not have sufficient size or spacing.",description:"Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."},Tw=w("core/audits/accessibility/target-size.js",Wl),Sw=class extends U{static{s(this,"TargetSize")}static get meta(){return{id:"target-size",title:Tw(Wl.title),failureTitle:Tw(Wl.failureTitle),description:Tw(Wl.description),scoreDisplayMode:U.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},YQ=Sw});var BL={};S(BL,{UIStrings:()=>Vl,default:()=>KQ});var Vl,xw,Cw,KQ,jL=v(()=>{"use strict";d();ue();k();Vl={title:"`<td>` elements in a large `<table>` have one or more table headers.",failureTitle:"`<td>` elements in a large `<table>` do not have table headers.",description:"Screen readers have features to make navigating tables easier. Ensuring that `<td>` elements in a large table (3 or more cells in width and height) have an associated table header may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."},xw=w("core/audits/accessibility/td-has-header.js",Vl),Cw=class extends U{static{s(this,"TDHasHeader")}static get meta(){return{id:"td-has-header",title:xw(Vl.title),failureTitle:xw(Vl.failureTitle),description:xw(Vl.description),requiredArtifacts:["Accessibility"]}}},KQ=Cw});var qL={};S(qL,{UIStrings:()=>$l,default:()=>JQ});var $l,Aw,Fw,JQ,zL=v(()=>{"use strict";d();ue();k();$l={title:"Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",failureTitle:"Cells in a `<table>` element that use the `[headers]` attribute refer to an element `id` not found within the same table.",description:"Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more about the `headers` attribute](https://dequeuniversity.com/rules/axe/4.7/td-headers-attr)."},Aw=w("core/audits/accessibility/td-headers-attr.js",$l),Fw=class extends U{static{s(this,"TDHeadersAttr")}static get meta(){return{id:"td-headers-attr",title:Aw($l.title),failureTitle:Aw($l.failureTitle),description:Aw($l.description),requiredArtifacts:["Accessibility"]}}},JQ=Fw});var HL={};S(HL,{UIStrings:()=>Yl,default:()=>XQ});var Yl,Rw,_w,XQ,GL=v(()=>{"use strict";d();ue();k();Yl={title:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have data cells they describe.',failureTitle:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` do not have data cells they describe.',description:"Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.7/th-has-data-cells)."},Rw=w("core/audits/accessibility/th-has-data-cells.js",Yl),_w=class extends U{static{s(this,"THHasDataCells")}static get meta(){return{id:"th-has-data-cells",title:Rw(Yl.title),failureTitle:Rw(Yl.failureTitle),description:Rw(Yl.description),scoreDisplayMode:U.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},XQ=_w});var WL={};S(WL,{UIStrings:()=>Kl,default:()=>ZQ});var Kl,kw,Iw,ZQ,VL=v(()=>{"use strict";d();ue();k();Kl={title:"`[lang]` attributes have a valid value",failureTitle:"`[lang]` attributes do not have a valid value",description:"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.7/valid-lang)."},kw=w("core/audits/accessibility/valid-lang.js",Kl),Iw=class extends U{static{s(this,"ValidLang")}static get meta(){return{id:"valid-lang",title:kw(Kl.title),failureTitle:kw(Kl.failureTitle),description:kw(Kl.description),requiredArtifacts:["Accessibility"]}}},ZQ=Iw});var $L={};S($L,{UIStrings:()=>Jl,default:()=>QQ});var Jl,Mw,Nw,QQ,YL=v(()=>{"use strict";d();ue();k();Jl={title:'`<video>` elements contain a `<track>` element with `[kind="captions"]`',failureTitle:'`<video>` elements do not contain a `<track>` element with `[kind="captions"]`.',description:"When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more about video captions](https://dequeuniversity.com/rules/axe/4.7/video-caption)."},Mw=w("core/audits/accessibility/video-caption.js",Jl),Nw=class extends U{static{s(this,"VideoCaption")}static get meta(){return{id:"video-caption",title:Mw(Jl.title),failureTitle:Mw(Jl.failureTitle),description:Mw(Jl.description),scoreDisplayMode:U.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},QQ=Nw});var JL={};S(JL,{UIStrings:()=>hn,default:()=>nee});var hn,_n,eee,tee,KL,Lw,nee,XL=v(()=>{"use strict";d();He();J();k();hn={title:"`<input>` elements correctly use `autocomplete`",failureTitle:"`<input>` elements do not have correct `autocomplete` attributes",description:"`autocomplete` helps users submit forms quicker. To reduce user effort, consider enabling by setting the `autocomplete` attribute to a valid value. [Learn more about `autocomplete` in forms](https://developers.google.com/web/fundamentals/design-and-ux/input/forms#use_metadata_to_enable_auto-complete)",columnSuggestions:"Suggested Token",columnCurrent:"Current Value",warningInvalid:'`autocomplete` token(s): "{token}" is invalid in {snippet}',warningOrder:'Review order of tokens: "{tokens}" in {snippet}',reviewOrder:"Review order of tokens",manualReview:"Requires manual review"},_n=w("core/audits/autocomplete.js",hn),eee=["name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","username","new-password","current-password","one-time-code","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","url","photo","tel","tel-country-code","tel-national","tel-area-code","on","tel-local","tel-local-prefix","tel-local-suffix","tel-extension","email","impp","off","additional-name-initial","home","work","mobile","fax","pager","shipping","billing"],tee=["NO_SERVER_DATA","UNKNOWN_TYPE","EMPTY_TYPE","HTML_TYPE_UNSPECIFIED","HTML_TYPE_UNRECOGNIZED"],KL={NO_SERVER_DATA:_n(hn.manualReview),UNKNOWN_TYPE:_n(hn.manualReview),EMPTY_TYPE:_n(hn.manualReview),NAME_FIRST:"given-name",NAME_MIDDLE:"additional-name",NAME_LAST:"family-name",NAME_FULL:"name",NAME_MIDDLE_INITIAL:"additional-name-initial",NAME_SUFFIX:"honorific-suffix",NAME_BILLING_FIRST:"billing given-name",NAME_BILLING_MIDDLE:"billing additional-name",NAME_BILLING_LAST:"billing family-name",NAME_BILLING_MIDDLE_INITIAL:"billing additional-name-initial",NAME_BILLING_FULL:"billing name",NAME_BILLING_SUFFIX:"billing honorific-suffix",EMAIL_ADDRESS:"email",MERCHANT_EMAIL_SIGNUP:"email",PHONE_HOME_NUMBER:"tel-local",PHONE_HOME_CITY_CODE:"tel-area-code",PHONE_HOME_COUNTRY_CODE:"tel-country-code",PHONE_HOME_CITY_AND_NUMBER:"tel-national",PHONE_HOME_WHOLE_NUMBER:"tel",PHONE_HOME_EXTENSION:"tel-extension",PHONE_BILLING_NUMBER:"billing tel-local",PHONE_BILLING_CITY_CODE:"billing tel-area-code",PHONE_BILLING_COUNTRY_CODE:"tel-country-code",PHONE_BILLING_CITY_AND_NUMBER:"tel-national",PHONE_BILLING_WHOLE_NUMBER:"tel",ADDRESS_HOME_STREET_ADDRESS:"street-address",ADDRESS_HOME_LINE1:"address-line1",ADDRESS_HOME_LINE2:"address-line2",ADDRESS_HOME_LINE3:"address-line3",ADDRESS_HOME_STATE:"address-level1",ADDRESS_HOME_CITY:"address-level2",ADDRESS_HOME_DEPENDENT_LOCALITY:"address-level3",ADDRESS_HOME_ZIP:"postal-code",ADDRESS_HOME_COUNTRY:"country-name",ADDRESS_BILLING_DEPENDENT_LOCALITY:"billing address-level3",ADDRESS_BILLING_STREET_ADDRESS:"billing street-address",ADDRESS_BILLING_LINE1:"billing address-line1",ADDRESS_BILLING_LINE2:"billing address-line2",ADDRESS_BILLING_LINE3:"billing address-line3",ADDRESS_BILLING_APT_NUM:"billing address-level3",ADDRESS_BILLING_CITY:"billing address-level2",ADDRESS_BILLING_STATE:"billing address-level1",ADDRESS_BILLING_ZIP:"billing postal-code",ADDRESS_BILLING_COUNTRY:"billing country-name",CREDIT_CARD_NAME_FULL:"cc-name",CREDIT_CARD_NAME_FIRST:"cc-given-name",CREDIT_CARD_NAME_LAST:"cc-family-name",CREDIT_CARD_NUMBER:"cc-number",CREDIT_CARD_EXP_MONTH:"cc-exp-month",CREDIT_CARD_EXP_2_DIGIT_YEAR:"cc-exp-year",CREDIT_CARD_EXP_4_DIGIT_YEAR:"cc-exp-year",CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:"cc-exp",CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:"cc-exp",CREDIT_CARD_TYPE:"cc-type",CREDIT_CARD_VERIFICATION_CODE:"cc-csc",COMPANY_NAME:"organization",PASSWORD:"current-password",ACCOUNT_CREATION_PASSWORD:"new-password",HTML_TYPE_UNSPECIFIED:_n(hn.manualReview),HTML_TYPE_NAME:"name",HTML_TYPE_HONORIFIC_PREFIX:"honorific-prefix",HTML_TYPE_GIVEN_NAME:"given-name",HTML_TYPE_ADDITIONAL_NAME:"additional-name",HTML_TYPE_FAMILY_NAME:"family-name",HTML_TYPE_ORGANIZATION:"organization",HTML_TYPE_STREET_ADDRESS:"street-address",HTML_TYPE_ADDRESS_LINE1:"address-line1",HTML_TYPE_ADDRESS_LINE2:"address-line2",HTML_TYPE_ADDRESS_LINE3:"address-line3",HTML_TYPE_ADDRESS_LEVEL1:"address-level1",HTML_TYPE_ADDRESS_LEVEL2:"address-level2",HTML_TYPE_ADDRESS_LEVEL3:"address-level3",HTML_TYPE_COUNTRY_CODE:"tel-country-code",HTML_TYPE_COUNTRY_NAME:"country-name",HTML_TYPE_POSTAL_CODE:"postal-code",HTML_TYPE_FULL_ADDRESS:"street-address",HTML_TYPE_CREDIT_CARD_NAME_FULL:"cc-name",HTML_TYPE_CREDIT_CARD_NAME_FIRST:"cc-given-name",HTML_TYPE_CREDIT_CARD_NAME_LAST:"cc-family-name",HTML_TYPE_CREDIT_CARD_NUMBER:"cc-number",HTML_TYPE_CREDIT_CARD_EXP:"cc-exp",HTML_TYPE_CREDIT_CARD_EXP_MONTH:"cc-exp-month",HTML_TYPE_CREDIT_CARD_EXP_YEAR:"cc-exp-year",HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE:"cc-csc",HTML_TYPE_CREDIT_CARD_TYPE:"cc-csc",HTML_TYPE_TEL:"tel",HTML_TYPE_TEL_COUNTRY_CODE:"tel-country-code",HTML_TYPE_TEL_NATIONAL:"tel-national",HTML_TYPE_TEL_AREA_CODE:"tel-area-code",HTML_TYPE_TEL_LOCAL:"tel-local",HTML_TYPE_TEL_LOCAL_PREFIX:"tel-local-prefix",HTML_TYPE_TEL_LOCAL_SUFFIX:"tel-local-suffix",HTML_TYPE_TEL_EXTENSION:"tel-extension",HTML_TYPE_EMAIL:"email",HTML_TYPE_ADDITIONAL_NAME_INITIAL:"additional-name-initial",HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:"cc-exp-year",HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:"cc-exp-year",HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR:"cc-exp-year",HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR:"cc-exp-year",HTML_TYPE_UPI_VPA:_n(hn.manualReview),HTML_TYPE_ONE_TIME_CODE:"one-time-code",HTML_TYPE_UNRECOGNIZED:_n(hn.manualReview),HTML_TYPE_TRANSACTION_AMOUNT:"transaction-amount",HTML_TYPE_TRANSACTION_CURRENCY:"transaction-currency"},Lw=class extends h{static{s(this,"AutocompleteAudit")}static get meta(){return{id:"autocomplete",title:_n(hn.title),failureTitle:_n(hn.failureTitle),description:_n(hn.description),requiredArtifacts:["Inputs"]}}static checkAttributeValidity(e){if(!e.autocomplete.attribute)return{hasValidTokens:!1};let n=e.autocomplete.attribute.split(" ");for(let r of n)if(r.slice(0,8)!=="section-"&&!eee.includes(r))return{hasValidTokens:!1};return e.autocomplete.property?{hasValidTokens:!0,isValidOrder:!0}:{hasValidTokens:!0,isValidOrder:!1}}static audit(e){let n=[],r=[],a=!1;for(let u of e.Inputs.inputs){let l=this.checkAttributeValidity(u);if(l.hasValidTokens&&l.isValidOrder||!u.autocomplete.prediction||tee.includes(u.autocomplete.prediction)&&!u.autocomplete.attribute)continue;a=!0;let m=KL[u.autocomplete.prediction];if(u.autocomplete.attribute||(u.autocomplete.attribute=""),u.autocomplete.attribute&&r.push(_n(hn.warningInvalid,{token:u.autocomplete.attribute,snippet:u.node.snippet})),l.isValidOrder===!1&&(r.push(_n(hn.warningOrder,{tokens:u.autocomplete.attribute,snippet:u.node.snippet})),m=hn.reviewOrder),!(u.autocomplete.prediction in KL)&&l.isValidOrder){N.warn(`Autocomplete prediction (${u.autocomplete.prediction})
+            not found in our mapping`);continue}n.push({node:h.makeNodeItem(u.node),suggestion:m,current:u.autocomplete.attribute})}let o=[{key:"node",valueType:"node",label:_n(x.columnFailingElem)},{key:"current",valueType:"text",label:_n(hn.columnCurrent)},{key:"suggestion",valueType:"text",label:_n(hn.columnSuggestions)}],i=h.makeTableDetails(o,n),c;return n.length>0&&(c=_n(x.displayValueElementsFound,{nodeCount:n.length})),{score:n.length>0?0:1,notApplicable:!a,displayValue:c,details:i,warnings:r}}},nee=Lw});var O,B,ZL,QL=v(()=>{"use strict";d();k();O={notMainFrame:"Navigation happened in a frame other than the main frame.",backForwardCacheDisabled:"Back/forward cache is disabled by flags. Visit chrome://flags/#back-forward-cache to enable it locally on this device.",relatedActiveContentsExist:"The page was opened using '`window.open()`' and another tab has a reference to it, or the page opened a window.",HTTPStatusNotOK:"Only pages with a status code of 2XX can be cached.",schemeNotHTTPOrHTTPS:"Only pages whose URL scheme is HTTP / HTTPS can be cached.",loading:"The page did not finish loading before navigating away.",wasGrantedMediaAccess:"Pages that have granted access to record video or audio are not currently eligible for back/forward cache.",HTTPMethodNotGET:"Only pages loaded via a GET request are eligible for back/forward cache.",subframeIsNavigating:"An iframe on the page started a navigation that did not complete.",timeout:"The page exceeded the maximum time in back/forward cache and was expired.",cacheLimit:"The page was evicted from the cache to allow another page to be cached.",JavaScriptExecution:"Chrome detected an attempt to execute JavaScript while in the cache.",rendererProcessKilled:"The renderer process for the page in back/forward cache was killed.",rendererProcessCrashed:"The renderer process for the page in back/forward cache crashed.",grantedMediaStreamAccess:"Pages that have granted media stream access are not currently eligible for back/forward cache.",cacheFlushed:"The cache was intentionally cleared.",serviceWorkerVersionActivation:"The page was evicted from back/forward cache due to a service worker activation.",sessionRestored:"Chrome restarted and cleared the back/forward cache entries.",serviceWorkerPostMessage:"A service worker attempted to send the page in back/forward cache a `MessageEvent`.",enteredBackForwardCacheBeforeServiceWorkerHostAdded:"A service worker was activated while the page was in back/forward cache.",serviceWorkerClaim:"The page was claimed by a service worker while it is in back/forward cache.",haveInnerContents:"Pages that use portals are not currently eligible for back/forward cache.",timeoutPuttingInCache:"The page timed out entering back/forward cache (likely due to long-running pagehide handlers).",backForwardCacheDisabledByLowMemory:"Back/forward cache is disabled due to insufficient memory.",backForwardCacheDisabledByCommandLine:"Back/forward cache is disabled by the command line.",networkRequestDatapipeDrainedAsBytesConsumer:"Pages that have inflight fetch() or XHR are not currently eligible for back/forward cache.",networkRequestRedirected:"The page was evicted from back/forward cache because an active network request involved a redirect.",networkRequestTimeout:"The page was evicted from the cache because a network connection was open too long. Chrome limits the amount of time that a page may receive data while cached.",networkExceedsBufferLimit:"The page was evicted from the cache because an active network connection received too much data. Chrome limits the amount of data that a page may receive while cached.",navigationCancelledWhileRestoring:"Navigation was cancelled before the page could be restored from back/forward cache.",backForwardCacheDisabledForPrerender:"Back/forward cache is disabled for prerenderer.",userAgentOverrideDiffers:"Browser has changed the user agent override header.",foregroundCacheLimit:"The page was evicted from the cache to allow another page to be cached.",backForwardCacheDisabledForDelegate:"Back/forward cache is not supported by delegate.",unloadHandlerExistsInMainFrame:"The page has an unload handler in the main frame.",unloadHandlerExistsInSubFrame:"The page has an unload handler in a sub frame.",serviceWorkerUnregistration:"ServiceWorker was unregistered while a page was in back/forward cache.",noResponseHead:"Pages that do not have a valid response head cannot enter back/forward cache.",cacheControlNoStore:"Pages with cache-control:no-store header cannot enter back/forward cache.",ineligibleAPI:"Ineligible APIs were used.",internalError:"Internal error.",webSocket:"Pages with WebSocket cannot enter back/forward cache.",webTransport:"Pages with WebTransport cannot enter back/forward cache.",webRTC:"Pages with WebRTC cannot enter back/forward cache.",mainResourceHasCacheControlNoStore:"Pages whose main resource has cache-control:no-store cannot enter back/forward cache.",mainResourceHasCacheControlNoCache:"Pages whose main resource has cache-control:no-cache cannot enter back/forward cache.",subresourceHasCacheControlNoStore:"Pages whose subresource has cache-control:no-store cannot enter back/forward cache.",subresourceHasCacheControlNoCache:"Pages whose subresource has cache-control:no-cache cannot enter back/forward cache.",containsPlugins:"Pages containing plugins are not currently eligible for back/forward cache.",documentLoaded:"The document did not finish loading before navigating away.",dedicatedWorkerOrWorklet:"Pages that use a dedicated worker or worklet are not currently eligible for back/forward cache.",outstandingNetworkRequestOthers:"Pages with an in-flight network request are not currently eligible for back/forward cache.",outstandingIndexedDBTransaction:"Page with ongoing indexed DB transactions are not currently eligible for back/forward cache.",requestedNotificationsPermission:"Pages that have requested notifications permissions are not currently eligible for back/forward cache.",requestedMIDIPermission:"Pages that have requested MIDI permissions are not currently eligible for back/forward cache.",requestedAudioCapturePermission:"Pages that have requested audio capture permissions are not currently eligible for back/forward cache.",requestedVideoCapturePermission:"Pages that have requested video capture permissions are not currently eligible for back/forward cache.",requestedBackForwardCacheBlockedSensors:"Pages that have requested sensor permissions are not currently eligible for back/forward cache.",requestedBackgroundWorkPermission:"Pages that have requested background sync or fetch permissions are not currently eligible for back/forward cache.",broadcastChannel:"The page cannot be cached because it has a BroadcastChannel instance with registered listeners.",indexedDBConnection:"Pages that have an open IndexedDB connection are not currently eligible for back/forward cache.",webXR:"Pages that use WebXR are not currently eligible for back/forward cache.",sharedWorker:"Pages that use SharedWorker are not currently eligible for back/forward cache.",webLocks:"Pages that use WebLocks are not currently eligible for back/forward cache.",webHID:"Pages that use WebHID are not currently eligible for back/forward cache.",webShare:"Pages that use WebShare are not currently eligible for back/forwad cache.",requestedStorageAccessGrant:"Pages that have requested storage access are not currently eligible for back/forward cache.",webNfc:"Pages that use WebNfc are not currently eligible for back/forwad cache.",outstandingNetworkRequestFetch:"Pages with an in-flight fetch network request are not currently eligible for back/forward cache.",outstandingNetworkRequestXHR:"Pages with an in-flight XHR network request are not currently eligible for back/forward cache.",appBanner:"Pages that requested an AppBanner are not currently eligible for back/forward cache.",printing:"Pages that show Printing UI are not currently eligible for back/forward cache.",webDatabase:"Pages that use WebDatabase are not currently eligible for back/forward cache.",pictureInPicture:"Pages that use Picture-in-Picture are not currently eligible for back/forward cache.",portal:"Pages that use portals are not currently eligible for back/forward cache.",speechRecognizer:"Pages that use SpeechRecognizer are not currently eligible for back/forward cache.",idleManager:"Pages that use IdleManager are not currently eligible for back/forward cache.",paymentManager:"Pages that use PaymentManager are not currently eligible for back/forward cache.",speechSynthesis:"Pages that use SpeechSynthesis are not currently eligible for back/forward cache.",keyboardLock:"Pages that use Keyboard lock are not currently eligible for back/forward cache.",webOTPService:"Pages that use WebOTPService are not currently eligible for bfcache.",outstandingNetworkRequestDirectSocket:"Pages with an in-flight network request are not currently eligible for back/forward cache.",injectedJavascript:"Pages that `JavaScript` is injected into by extensions are not currently eligible for back/forward cache.",injectedStyleSheet:"Pages that a `StyleSheet` is injected into by extensions are not currently eligible for back/forward cache.",contentSecurityHandler:"Pages that use SecurityHandler are not eligible for back/forward cache.",contentWebAuthenticationAPI:"Pages that use WebAuthetication API are not eligible for back/forward cache.",contentFileChooser:"Pages that use FileChooser API are not eligible for back/forward cache.",contentSerial:"Pages that use Serial API are not eligible for back/forward cache.",contentFileSystemAccess:"Pages that use File System Access API are not eligible for back/forward cache.",contentMediaDevicesDispatcherHost:"Pages that use Media Device Dispatcher are not eligible for back/forward cache.",contentWebBluetooth:"Pages that use WebBluetooth API are not eligible for back/forward cache.",contentWebUSB:"Pages that use WebUSB API are not eligible for back/forward cache.",contentMediaSession:"Pages that use MediaSession API and set a playback state are not eligible for back/forward cache.",contentMediaSessionService:"Pages that use MediaSession API and set action handlers are not eligible for back/forward cache.",contentMediaPlay:"A media player was playing upon navigating away.",contentScreenReader:"Back/forward cache is disabled due to screen reader.",embedderPopupBlockerTabHelper:"Popup blocker was present upon navigating away.",embedderSafeBrowsingTriggeredPopupBlocker:"Safe Browsing considered this page to be abusive and blocked popup.",embedderSafeBrowsingThreatDetails:"Safe Browsing details were shown upon navigating away.",embedderAppBannerManager:"App Banner was present upon navigating away.",embedderDomDistillerViewerSource:"DOM Distiller Viewer was present upon navigating away.",embedderDomDistillerSelfDeletingRequestDelegate:"DOM distillation was in progress upon navigating away.",embedderOomInterventionTabHelper:"Out-Of-Memory Intervention bar was present upon navigating away.",embedderOfflinePage:"The offline page was shown upon navigating away.",embedderChromePasswordManagerClientBindCredentialManager:"Chrome Password Manager was present upon navigating away.",embedderPermissionRequestManager:"There were permission requests upon navigating away.",embedderModalDialog:"Modal dialog such as form resubmission or http password dialog was shown for the page upon navigating away.",embedderExtensions:"Back/forward cache is disabled due to extensions.",embedderExtensionMessaging:"Back/forward cache is disabled due to extensions using messaging API.",embedderExtensionMessagingForOpenPort:"Extensions with long-lived connection should close the connection before entering back/forward cache.",embedderExtensionSentMessageToCachedFrame:"Extensions with long-lived connection attempted to send messages to frames in back/forward cache.",errorDocument:"Back/forward cache is disabled due to a document error.",fencedFramesEmbedder:"Pages using FencedFrames cannot be stored in bfcache.",keepaliveRequest:"Back/forward cache is disabled due to a keepalive request.",authorizationHeader:"Back/forward cache is disabled due to a keepalive request.",indexedDBEvent:"Back/forward cache is disabled due to an IndexedDB event.",cookieDisabled:"Back/forward cache is disabled because cookies are disabled on a page that uses `Cache-Control: no-store`."},B=w("core/lib/bf-cache-strings.js",O),ZL={NotPrimaryMainFrame:{name:B(O.notMainFrame)},BackForwardCacheDisabled:{name:B(O.backForwardCacheDisabled)},RelatedActiveContentsExist:{name:B(O.relatedActiveContentsExist)},HTTPStatusNotOK:{name:B(O.HTTPStatusNotOK)},SchemeNotHTTPOrHTTPS:{name:B(O.schemeNotHTTPOrHTTPS)},Loading:{name:B(O.loading)},WasGrantedMediaAccess:{name:B(O.wasGrantedMediaAccess)},HTTPMethodNotGET:{name:B(O.HTTPMethodNotGET)},SubframeIsNavigating:{name:B(O.subframeIsNavigating)},Timeout:{name:B(O.timeout)},CacheLimit:{name:B(O.cacheLimit)},JavaScriptExecution:{name:B(O.JavaScriptExecution)},RendererProcessKilled:{name:B(O.rendererProcessKilled)},RendererProcessCrashed:{name:B(O.rendererProcessCrashed)},GrantedMediaStreamAccess:{name:B(O.grantedMediaStreamAccess)},CacheFlushed:{name:B(O.cacheFlushed)},ServiceWorkerVersionActivation:{name:B(O.serviceWorkerVersionActivation)},SessionRestored:{name:B(O.sessionRestored)},ServiceWorkerPostMessage:{name:B(O.serviceWorkerPostMessage)},EnteredBackForwardCacheBeforeServiceWorkerHostAdded:{name:B(O.enteredBackForwardCacheBeforeServiceWorkerHostAdded)},ServiceWorkerClaim:{name:B(O.serviceWorkerClaim)},HaveInnerContents:{name:B(O.haveInnerContents)},TimeoutPuttingInCache:{name:B(O.timeoutPuttingInCache)},BackForwardCacheDisabledByLowMemory:{name:B(O.backForwardCacheDisabledByLowMemory)},BackForwardCacheDisabledByCommandLine:{name:B(O.backForwardCacheDisabledByCommandLine)},NetworkRequestDatapipeDrainedAsBytesConsumer:{name:B(O.networkRequestDatapipeDrainedAsBytesConsumer)},NetworkRequestRedirected:{name:B(O.networkRequestRedirected)},NetworkRequestTimeout:{name:B(O.networkRequestTimeout)},NetworkExceedsBufferLimit:{name:B(O.networkExceedsBufferLimit)},NavigationCancelledWhileRestoring:{name:B(O.navigationCancelledWhileRestoring)},BackForwardCacheDisabledForPrerender:{name:B(O.backForwardCacheDisabledForPrerender)},UserAgentOverrideDiffers:{name:B(O.userAgentOverrideDiffers)},ForegroundCacheLimit:{name:B(O.foregroundCacheLimit)},BackForwardCacheDisabledForDelegate:{name:B(O.backForwardCacheDisabledForDelegate)},UnloadHandlerExistsInMainFrame:{name:B(O.unloadHandlerExistsInMainFrame)},UnloadHandlerExistsInSubFrame:{name:B(O.unloadHandlerExistsInSubFrame)},ServiceWorkerUnregistration:{name:B(O.serviceWorkerUnregistration)},NoResponseHead:{name:B(O.noResponseHead)},CacheControlNoStore:{name:B(O.cacheControlNoStore)},CacheControlNoStoreCookieModified:{name:B(O.cacheControlNoStore)},CacheControlNoStoreHTTPOnlyCookieModified:{name:B(O.cacheControlNoStore)},DisableForRenderFrameHostCalled:{name:B(O.ineligibleAPI)},BlocklistedFeatures:{name:B(O.ineligibleAPI)},SchedulerTrackedFeatureUsed:{name:B(O.ineligibleAPI)},DomainNotAllowed:{name:B(O.internalError)},ConflictingBrowsingInstance:{name:B(O.internalError)},NotMostRecentNavigationEntry:{name:B(O.internalError)},IgnoreEventAndEvict:{name:B(O.internalError)},BrowsingInstanceNotSwapped:{name:B(O.internalError)},ActivationNavigationsDisallowedForBug1234857:{name:B(O.internalError)},Unknown:{name:B(O.internalError)},RenderFrameHostReused_SameSite:{name:B(O.internalError)},RenderFrameHostReused_CrossSite:{name:B(O.internalError)},WebSocket:{name:B(O.webSocket)},WebTransport:{name:B(O.webTransport)},WebRTC:{name:B(O.webRTC)},MainResourceHasCacheControlNoStore:{name:B(O.mainResourceHasCacheControlNoStore)},MainResourceHasCacheControlNoCache:{name:B(O.mainResourceHasCacheControlNoCache)},SubresourceHasCacheControlNoStore:{name:B(O.subresourceHasCacheControlNoStore)},SubresourceHasCacheControlNoCache:{name:B(O.subresourceHasCacheControlNoCache)},ContainsPlugins:{name:B(O.containsPlugins)},DocumentLoaded:{name:B(O.documentLoaded)},DedicatedWorkerOrWorklet:{name:B(O.dedicatedWorkerOrWorklet)},OutstandingNetworkRequestOthers:{name:B(O.outstandingNetworkRequestOthers)},OutstandingIndexedDBTransaction:{name:B(O.outstandingIndexedDBTransaction)},RequestedNotificationsPermission:{name:B(O.requestedNotificationsPermission)},RequestedMIDIPermission:{name:B(O.requestedMIDIPermission)},RequestedAudioCapturePermission:{name:B(O.requestedAudioCapturePermission)},RequestedVideoCapturePermission:{name:B(O.requestedVideoCapturePermission)},RequestedBackForwardCacheBlockedSensors:{name:B(O.requestedBackForwardCacheBlockedSensors)},RequestedBackgroundWorkPermission:{name:B(O.requestedBackgroundWorkPermission)},BroadcastChannel:{name:B(O.broadcastChannel)},IndexedDBConnection:{name:B(O.indexedDBConnection)},WebXR:{name:B(O.webXR)},SharedWorker:{name:B(O.sharedWorker)},WebLocks:{name:B(O.webLocks)},WebHID:{name:B(O.webHID)},WebShare:{name:B(O.webShare)},RequestedStorageAccessGrant:{name:B(O.requestedStorageAccessGrant)},WebNfc:{name:B(O.webNfc)},OutstandingNetworkRequestFetch:{name:B(O.outstandingNetworkRequestFetch)},OutstandingNetworkRequestXHR:{name:B(O.outstandingNetworkRequestXHR)},AppBanner:{name:B(O.appBanner)},Printing:{name:B(O.printing)},WebDatabase:{name:B(O.webDatabase)},PictureInPicture:{name:B(O.pictureInPicture)},Portal:{name:B(O.portal)},SpeechRecognizer:{name:B(O.speechRecognizer)},IdleManager:{name:B(O.idleManager)},PaymentManager:{name:B(O.paymentManager)},SpeechSynthesis:{name:B(O.speechSynthesis)},KeyboardLock:{name:B(O.keyboardLock)},WebOTPService:{name:B(O.webOTPService)},OutstandingNetworkRequestDirectSocket:{name:B(O.outstandingNetworkRequestDirectSocket)},InjectedJavascript:{name:B(O.injectedJavascript)},InjectedStyleSheet:{name:B(O.injectedStyleSheet)},Dummy:{name:B(O.internalError)},ContentSecurityHandler:{name:B(O.contentSecurityHandler)},ContentWebAuthenticationAPI:{name:B(O.contentWebAuthenticationAPI)},ContentFileChooser:{name:B(O.contentFileChooser)},ContentSerial:{name:B(O.contentSerial)},ContentFileSystemAccess:{name:B(O.contentFileSystemAccess)},ContentMediaDevicesDispatcherHost:{name:B(O.contentMediaDevicesDispatcherHost)},ContentWebBluetooth:{name:B(O.contentWebBluetooth)},ContentWebUSB:{name:B(O.contentWebUSB)},ContentMediaSession:{name:B(O.contentMediaSession)},ContentMediaSessionService:{name:B(O.contentMediaSessionService)},ContentMediaPlay:{name:B(O.contentMediaPlay)},ContentScreenReader:{name:B(O.contentScreenReader)},EmbedderPopupBlockerTabHelper:{name:B(O.embedderPopupBlockerTabHelper)},EmbedderSafeBrowsingTriggeredPopupBlocker:{name:B(O.embedderSafeBrowsingTriggeredPopupBlocker)},EmbedderSafeBrowsingThreatDetails:{name:B(O.embedderSafeBrowsingThreatDetails)},EmbedderAppBannerManager:{name:B(O.embedderAppBannerManager)},EmbedderDomDistillerViewerSource:{name:B(O.embedderDomDistillerViewerSource)},EmbedderDomDistillerSelfDeletingRequestDelegate:{name:B(O.embedderDomDistillerSelfDeletingRequestDelegate)},EmbedderOomInterventionTabHelper:{name:B(O.embedderOomInterventionTabHelper)},EmbedderOfflinePage:{name:B(O.embedderOfflinePage)},EmbedderChromePasswordManagerClientBindCredentialManager:{name:B(O.embedderChromePasswordManagerClientBindCredentialManager)},EmbedderPermissionRequestManager:{name:B(O.embedderPermissionRequestManager)},EmbedderModalDialog:{name:B(O.embedderModalDialog)},EmbedderExtensions:{name:B(O.embedderExtensions)},EmbedderExtensionMessaging:{name:B(O.embedderExtensionMessaging)},EmbedderExtensionMessagingForOpenPort:{name:B(O.embedderExtensionMessagingForOpenPort)},EmbedderExtensionSentMessageToCachedFrame:{name:B(O.embedderExtensionSentMessageToCachedFrame)},ErrorDocument:{name:B(O.errorDocument)},FencedFramesEmbedder:{name:B(O.fencedFramesEmbedder)},KeepaliveRequest:{name:B(O.keepaliveRequest)},AuthorizationHeader:{name:B(O.authorizationHeader)},IndexedDBEvent:{name:B(O.indexedDBEvent)},CookieDisabled:{name:B(O.cookieDisabled)}}});var e8={};S(e8,{UIStrings:()=>pr,default:()=>oee});var pr,va,ree,aee,Pw,oee,t8=v(()=>{"use strict";d();J();k();QL();pr={title:"Page didn't prevent back/forward cache restoration",failureTitle:"Page prevented back/forward cache restoration",description:"Many navigations are performed by going back to a previous page, or forwards again. The back/forward cache (bfcache) can speed up these return navigations. [Learn more about the bfcache](https://developer.chrome.com/docs/lighthouse/performance/bf-cache/)",actionableFailureType:"Actionable",notActionableFailureType:"Not actionable",supportPendingFailureType:"Pending browser support",failureReasonColumn:"Failure reason",failureTypeColumn:"Failure type",displayValue:`{itemCount, plural,
+    =1 {1 failure reason}
+    other {# failure reasons}
+    }`},va=w("core/audits/bf-cache.js",pr),ree=["PageSupportNeeded","SupportPending","Circumstantial"],aee={PageSupportNeeded:va(pr.actionableFailureType),Circumstantial:va(pr.notActionableFailureType),SupportPending:va(pr.supportPendingFailureType)},Pw=class extends h{static{s(this,"BFCache")}static get meta(){return{id:"bf-cache",title:va(pr.title),failureTitle:va(pr.failureTitle),description:va(pr.description),supportedModes:["navigation","timespan"],requiredArtifacts:["BFCacheFailures"]}}static async audit(e){let n=e.BFCacheFailures;if(!n.length)return{score:1};let{notRestoredReasonsTree:r}=n[0],a=0,o=[];for(let l of ree){let m=r[l];for(let[p,g]of Object.entries(m))a+=g.length,o.push({reason:ZL[p]?.name??p,failureType:aee[l],subItems:{type:"subitems",items:g.map(f=>({frameUrl:f}))},protocolReason:p})}let i=[{key:"reason",valueType:"text",subItemsHeading:{key:"frameUrl",valueType:"url"},label:va(pr.failureReasonColumn)},{key:"failureType",valueType:"text",label:va(pr.failureTypeColumn)}],c=h.makeTableDetails(i,o),u=a?va(pr.displayValue,{itemCount:a}):void 0;return{score:o.length?0:1,displayValue:u,details:c}}},oee=Pw});var kn,Ow,Xl=v(()=>{"use strict";d();kn={parseHTML:{id:"parseHTML",label:"Parse HTML & CSS",traceEventNames:["ParseHTML","ParseAuthorStyleSheet"]},styleLayout:{id:"styleLayout",label:"Style & Layout",traceEventNames:["ScheduleStyleRecalculation","UpdateLayoutTree","InvalidateLayout","Layout"]},paintCompositeRender:{id:"paintCompositeRender",label:"Rendering",traceEventNames:["Animation","HitTest","PaintSetup","Paint","PaintImage","RasterTask","ScrollLayer","UpdateLayer","UpdateLayerTree","CompositeLayers","PrePaint"]},scriptParseCompile:{id:"scriptParseCompile",label:"Script Parsing & Compilation",traceEventNames:["v8.compile","v8.compileModule","v8.parseOnBackground"]},scriptEvaluation:{id:"scriptEvaluation",label:"Script Evaluation",traceEventNames:["EventDispatch","EvaluateScript","v8.evaluateModule","FunctionCall","TimerFire","FireIdleCallback","FireAnimationFrame","RunMicrotasks","V8.Execute"]},garbageCollection:{id:"garbageCollection",label:"Garbage Collection",traceEventNames:["MinorGC","MajorGC","BlinkGC.AtomicPhase","ThreadState::performIdleLazySweep","ThreadState::completeSweep","BlinkGCMarking"]},other:{id:"other",label:"Other",traceEventNames:["MessageLoop::RunTask","TaskQueueManager::ProcessTaskFromWorkQueue","ThreadControllerImpl::DoWork"]}},Ow={};for(let t of Object.values(kn))for(let e of t.traceEventNames)Ow[e]=t});var Rs,Uw=v(()=>{"use strict";d();Yt();Xl();Rs=class t{static{s(this,"MainThreadTasks")}static _createNewTaskNode(e,n){let r=e.ph==="X"&&!n,a=e.ph==="B"&&n&&n.ph==="E";if(!r&&!a)throw new Error("Invalid parameters for _createNewTaskNode");let o=e.ts,i=n?n.ts:e.ts+Number(e.dur||0);return{event:e,endEvent:n,startTime:o,endTime:i,duration:i-o,unbounded:!1,parent:void 0,children:[],attributableURLs:[],group:kn.other,selfTime:NaN}}static _assignAllTimersUntilTs(e,n,r,a){for(;a.length;){let o=a.pop();if(!o)break;if(o.ts>n){a.push(o);break}if(o.ts<e.startTime)continue;let i=o.args.data.timerId;r.timers.set(i,e)}}static _createTasksFromStartAndEndEvents(e,n,r){let a=[],o=n.slice().reverse();for(let i=0;i<e.length;i++){let c=e[i];if(c.ph==="X"){a.push(t._createNewTaskNode(c));continue}let u=-1,l=0,m=i+1;for(let y=o.length-1;y>=0;y--){let b=o[y];for(;m<e.length&&!(e[m].ts>=b.ts);m++)e[m].name===c.name&&l++;if(b.name===c.name&&!(b.ts<c.ts)){if(l>0){l--;continue}u=y;break}}let p,g=!1;u===-1?(p={...c,ph:"E",ts:r},g=!0):u===o.length-1?p=o.pop():p=o.splice(u,1)[0];let f=t._createNewTaskNode(c,p);f.unbounded=g,a.push(f)}if(o.length)throw new Error(`Fatal trace logic error - ${o.length} unmatched end events`);return a}static _createTaskRelationships(e,n,r){let a,o=n.slice().reverse();for(let i=0;i<e.length;i++){let c=e[i];if(c.event.name==="XHRReadyStateChange"){let u=c.event.args.data,l=u?.url;u&&l&&u.readyState===1&&r.xhrs.set(l,c)}for(;a&&Number.isFinite(a.endTime)&&a.endTime<=c.startTime;)t._assignAllTimersUntilTs(a,a.endTime,r,o),a=a.parent;if(a){if(c.endTime>a.endTime){let u=c.endTime-a.endTime;if(u<1e3)a.endTime=c.endTime,a.duration+=u;else if(c.unbounded)c.endTime=a.endTime,c.duration=c.endTime-c.startTime;else if(c.startTime-a.startTime<1e3&&!a.children.length){let l=c,m=a,p=a.parent;if(p){let g=p.children.length-1;if(p.children[g]!==m)throw new Error("Fatal trace logic error - impossible children");p.children.pop(),p.children.push(l)}l.parent=p,l.startTime=m.startTime,l.duration=l.endTime-l.startTime,a=l,c=m}else{let l=new Error("Fatal trace logic error - child cannot end after parent");throw l.timeDelta=u,l.nextTaskEvent=c.event,l.nextTaskEndEvent=c.endEvent,l.nextTaskEndTime=c.endTime,l.currentTaskEvent=a.event,l.currentTaskEndEvent=a.endEvent,l.currentTaskEndTime=a.endTime,l}}c.parent=a,a.children.push(c),t._assignAllTimersUntilTs(a,c.startTime,r,o)}a=c}a&&t._assignAllTimersUntilTs(a,a.endTime,r,o)}static _createTasksFromEvents(e,n,r){let a=[],o=[],i=[];for(let l of e)(l.ph==="X"||l.ph==="B")&&a.push(l),l.ph==="E"&&o.push(l),l.name==="TimerInstall"&&i.push(l);let u=t._createTasksFromStartAndEndEvents(a,o,r).sort((l,m)=>l.startTime-m.startTime||m.duration-l.duration);return t._createTaskRelationships(u,i,n),u.sort((l,m)=>l.startTime-m.startTime||m.duration-l.duration)}static _computeRecursiveSelfTime(e,n){if(n&&e.endTime>n.endTime)throw new Error("Fatal trace logic error - child cannot end after parent");let r=e.children.map(a=>t._computeRecursiveSelfTime(a,e)).reduce((a,o)=>a+o,0);return e.selfTime=e.duration-r,e.duration}static _computeRecursiveAttributableURLs(e,n,r,a){let o=e.event.args,i={...o.beginData||{},...o.data||{}},c=i.frame||"",u=a.frameURLsById.get(c),l=(i.stackTrace||[]).map(f=>f.url),m=l[0];c&&u&&u.startsWith("about:")&&m&&(a.frameURLsById.set(c,m),u=m);let p=[];switch(e.event.name){case"v8.compile":case"EvaluateScript":case"FunctionCall":p=[i.url,u];break;case"v8.compileModule":p=[e.event.args.fileName];break;case"TimerFire":{let f=e.event.args.data.timerId,y=a.timers.get(f);if(!y)break;p=y.attributableURLs;break}case"ParseHTML":p=[i.url,u];break;case"ParseAuthorStyleSheet":p=[i.styleSheetUrl,u];break;case"UpdateLayoutTree":case"Layout":case"Paint":if(u){p=[u];break}if(r.length)break;p=a.lastTaskURLs;break;case"XHRReadyStateChange":case"XHRLoad":{let f=i.url,y=i.readyState;if(!f||typeof y=="number"&&y!==4)break;let b=a.xhrs.get(f);if(!b)break;p=b.attributableURLs;break}default:p=[];break}let g=Array.from(n);for(let f of[...p,...l])f&&(r.includes(f)||r.push(f),g[g.length-1]!==f&&g.push(f));e.attributableURLs=g,e.children.forEach(f=>t._computeRecursiveAttributableURLs(f,g,r,a)),!g.length&&!e.parent&&r.length&&t._setRecursiveEmptyAttributableURLs(e,r)}static _setRecursiveEmptyAttributableURLs(e,n){e.attributableURLs.length||(e.attributableURLs=n.slice(),e.children.forEach(r=>t._setRecursiveEmptyAttributableURLs(r,n)))}static _computeRecursiveTaskGroup(e,n){let r=Ow[e.event.name];e.group=r||n||kn.other,e.children.forEach(a=>t._computeRecursiveTaskGroup(a,e.group))}static getMainThreadTasks(e,n,r,a){let o=new Map,i=new Map,c=new Map;n.forEach(({id:g,url:f})=>c.set(g,f));let l={timers:o,xhrs:i,frameURLsById:c,lastTaskURLs:[]},m=t._createTasksFromEvents(e,l,r);for(let g of m)g.parent||(t._computeRecursiveSelfTime(g,void 0),t._computeRecursiveAttributableURLs(g,[],[],l),t._computeRecursiveTaskGroup(g),l.lastTaskURLs=g.attributableURLs);let p=a??m[0].startTime;for(let g of m)if(g.startTime=(g.startTime-p)/1e3,g.endTime=(g.endTime-p)/1e3,g.duration/=1e3,g.selfTime/=1e3,!Number.isFinite(g.selfTime))throw new Error("Invalid task timing data");return m}static printTaskTreeToDebugString(e,n={}){let r=Math.max(...e.map(b=>b.endTime),0),{printWidth:a=100,startTime:o=0,endTime:i=r,taskLabelFn:c=s(b=>b.event.name,"taskLabelFn")}=n;function u(b){let D=0;for(;b.parent;b=b.parent)D++;return D}s(u,"computeTaskDepth");let m=(i-o)/a,p=new Map,g=new Map;for(let b of e){if(b.startTime>i||b.endTime<o)continue;let D=u(b),T=g.get(D)||[];T.push(b),g.set(D,T);let A=String.fromCharCode(65+p.size%26);p.set(b,{id:A,task:b})}let f=[`Trace Duration: ${r.toFixed(0)}ms`,`Range: [${o}, ${i}]`,`█ = ${m.toFixed(2)}ms`,""],y=Array.from(g.entries()).sort((b,D)=>b[0]-D[0]);for(let[,b]of y){let D=Array.from({length:a}).map(()=>" ");for(let T of b){let A=Math.max(T.startTime,o),R=Math.min(T.endTime,i),{id:F}=p.get(T)||{id:"?"},M=Math.floor(A/m),V=Math.floor(R/m),z=Math.floor((M+V)/2);for(let ne=M;ne<=V;ne++)D[ne]="█";for(let ne=0;ne<F.length;ne++)D[z]=F}f.push(D.join(""))}f.push("");for(let{id:b,task:D}of p.values())f.push(`${b} = ${c(D)}`);return f.join(`
+`)}}});var Bw,yn,ba=v(()=>{"use strict";d();we();Uw();Jt();Bw=class{static{s(this,"MainThreadTasks")}static async compute_(e,n){let{mainThreadEvents:r,frames:a,timestamps:o}=await Ye.request(e,n);return Rs.getMainThreadTasks(r,a,o.traceEnd,o.timeOrigin)}},yn=W(Bw,null)});function Zl(t){let e=new Set;for(let n of t)n.resourceType===Y.TYPES.Script&&e.add(n.url);return e}function _s(t,e){let n=t.attributableURLs.find(o=>e.has(o)),r=t.attributableURLs[0],a=n||r;return(!a||a==="about:blank")&&(iee.has(t.event.name)?a="Browser":see.has(t.event.name)?a="Browser GC":a="Unattributable"),a}function Jp(t,e){let n=Zl(e),r=new Map;for(let a of t){let o=_s(a,n),i=r.get(o)||{},c=i[a.group.id]||0;i[a.group.id]=c+a.selfTime,r.set(o,i)}return r}var iee,see,Ql=v(()=>{"use strict";d();St();iee=new Set(["CpuProfiler::StartProfiling"]),see=new Set(["V8.GCCompactor","MajorGC","MinorGC"]);s(Zl,"getJavaScriptURLs");s(_s,"getAttributableURLForTask");s(Jp,"getExecutionTimingsByURL")});var n8={};S(n8,{UIStrings:()=>Da,default:()=>cee});var Da,wa,jw,cee,r8=v(()=>{"use strict";d();J();Xl();k();De();ba();Ql();Da={title:"JavaScript execution time",failureTitle:"Reduce JavaScript execution time",description:"Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to reduce Javascript execution time](https://developer.chrome.com/docs/lighthouse/performance/bootup-time/).",columnTotal:"Total CPU Time",columnScriptEval:"Script Evaluation",columnScriptParse:"Script Parse",chromeExtensionsWarning:"Chrome extensions negatively affected this page's load performance. Try auditing the page in incognito mode or from a Chrome profile without extensions."},wa=w("core/audits/bootup-time.js",Da),jw=class t extends h{static{s(this,"BootupTime")}static get meta(){return{id:"bootup-time",title:wa(Da.title),failureTitle:wa(Da.failureTitle),description:wa(Da.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{p10:1282,median:3500,thresholdInMs:50}}static async audit(e,n){let r=n.settings||{},a=e.traces[t.DEFAULT_PASS],o=e.devtoolsLogs[t.DEFAULT_PASS],i=await $.request(o,n),c=await yn.request(a,n),u=r.throttlingMethod==="simulate"?r.throttling.cpuSlowdownMultiplier:1,l=Jp(c,i),m=!1,p=0,g=Array.from(l).map(([T,A])=>{let R=0;for(let[V,z]of Object.entries(A))A[V]=z*u,R+=z*u;let F=A[kn.scriptEvaluation.id]||0,M=A[kn.scriptParseCompile.id]||0;return R>=n.options.thresholdInMs&&(p+=F+M),m=m||T.startsWith("chrome-extension:")&&F>100,{url:T,total:R,scripting:F,scriptParseCompile:M}}).filter(T=>T.total>=n.options.thresholdInMs).sort((T,A)=>A.total-T.total),f;m&&(f=[wa(Da.chromeExtensionsWarning)]);let y=[{key:"url",valueType:"url",label:wa(x.columnURL)},{key:"total",granularity:1,valueType:"ms",label:wa(Da.columnTotal)},{key:"scripting",granularity:1,valueType:"ms",label:wa(Da.columnScriptEval)},{key:"scriptParseCompile",granularity:1,valueType:"ms",label:wa(Da.columnScriptParse)}],b=t.makeTableDetails(y,g,{wastedMs:p,sortedBy:["total"]});return{score:h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},p),numericValue:p,numericUnit:"millisecond",displayValue:p>0?wa(x.seconds,{timeInMs:p}):"",details:b,runWarnings:f}}},cee=jw});var nn,Ea=v(()=>{"use strict";d();An();St();Ur();$n();tr();nn=class{static{s(this,"LanternMetric")}static getScriptUrls(e,n){let r=new Set;return e.traverse(a=>{a.type!==Fe.TYPES.CPU&&a.record.resourceType===Y.TYPES.Script&&(n&&!n(a)||r.add(a.record.url))}),r}static get COEFFICIENTS(){throw new Error("COEFFICIENTS unimplemented!")}static getScaledCoefficients(e){return this.COEFFICIENTS}static getOptimisticGraph(e,n){throw new Error("Optimistic graph unimplemented!")}static getPessimisticGraph(e,n){throw new Error("Pessmistic graph unimplemented!")}static getEstimateFromSimulation(e,n){return e}static async computeMetricWithGraphs(e,n,r){if((e.gatherContext||{gatherMode:"navigation"}).gatherMode!=="navigation")throw new Error("Lantern metrics can only be computed on navigations");let o=this.name.replace("Lantern",""),i=await kt.request(e,n),c=await on.request(e.trace,n),u=e.simulator||await Ht.request(e,n),l=this.getOptimisticGraph(i,c),m=this.getPessimisticGraph(i,c),p={label:`optimistic${o}`},g=u.simulate(l,p);p={label:`optimisticFlex${o}`,flexibleOrdering:!0};let f=u.simulate(l,p);p={label:`pessimistic${o}`};let y=u.simulate(m,p),b=this.getEstimateFromSimulation(g.timeInMs<f.timeInMs?g:f,{...r,optimistic:!0}),D=this.getEstimateFromSimulation(y,{...r,optimistic:!1}),T=this.getScaledCoefficients(u.rtt),A=T.intercept>0?Math.min(1,b.timeInMs/1e3):1;return{timing:T.intercept*A+T.optimistic*b.timeInMs+T.pessimistic*D.timeInMs,optimisticEstimate:b,pessimisticEstimate:D,optimisticGraph:l,pessimisticGraph:m}}static async compute_(e,n){return this.computeMetricWithGraphs(e,n)}}});var qw,It,fr=v(()=>{"use strict";d();we();Ea();An();qw=class extends nn{static{s(this,"LanternFirstContentfulPaint")}static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getBlockingNodeData(e,n,r,a){let o=new Map,i=[];e.traverse(f=>{if(f.type===Fe.TYPES.CPU){f.startTime<=n&&i.push(f);let y=f.getEvaluateScriptURLs();for(let b of y){let D=o.get(b)||f;o.set(b,f.startTime<D.startTime?f:D)}}}),i.sort((f,y)=>f.startTime-y.startTime);let c=nn.getScriptUrls(e,f=>f.endTime<=n&&r(f)),u=new Set,l=new Set;for(let f of c){let y=o.get(f);if(y){if(i.includes(y)){l.add(y.id);continue}u.add(f)}}let m=i.find(f=>f.didPerformLayout());m&&l.add(m.id);let p=i.find(f=>f.childEvents.some(y=>y.name==="Paint"));p&&l.add(p.id);let g=i.find(f=>f.childEvents.some(y=>y.name==="ParseHTML"));return g&&l.add(g.id),a&&i.filter(a).forEach(f=>l.add(f.id)),{definitelyNotRenderBlockingScriptUrls:u,blockingCpuNodeIds:l}}static getFirstPaintBasedGraph(e,n,r,a){let{definitelyNotRenderBlockingScriptUrls:o,blockingCpuNodeIds:i}=this.getBlockingNodeData(e,n,r,a);return e.cloneWithRelationships(c=>{if(c.type===Fe.TYPES.NETWORK){if((c.endTime>n||c.startTime>n)&&!c.isMainDocument())return!1;let l=c.record.url;return o.has(l)?!1:r(c)}else return i.has(c.id)})}static getOptimisticGraph(e,n){return this.getFirstPaintBasedGraph(e,n.timestamps.firstContentfulPaint,r=>r.hasRenderBlockingPriority()&&r.initiatorType!=="script")}static getPessimisticGraph(e,n){return this.getFirstPaintBasedGraph(e,n.timestamps.firstContentfulPaint,r=>r.hasRenderBlockingPriority())}},It=W(qw,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var zw,ks,Xp=v(()=>{"use strict";d();we();Ea();Bt();fr();zw=class extends nn{static{s(this,"LanternFirstMeaningfulPaint")}static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e,n){let r=n.timestamps.firstMeaningfulPaint;if(!r)throw new G(G.errors.NO_FMP);return It.getFirstPaintBasedGraph(e,r,a=>a.hasRenderBlockingPriority()&&a.initiatorType!=="script")}static getPessimisticGraph(e,n){let r=n.timestamps.firstMeaningfulPaint;if(!r)throw new G(G.errors.NO_FMP);return It.getFirstPaintBasedGraph(e,r,a=>a.hasRenderBlockingPriority(),a=>a.didPerformLayout())}static async compute_(e,n){let r=await It.request(e,n),a=await this.computeMetricWithGraphs(e,n);return a.timing=Math.max(a.timing,r.timing),a}},ks=W(zw,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var uee,Hw,jn,oi=v(()=>{"use strict";d();we();Ea();An();St();Xp();uee=20,Hw=class t extends nn{static{s(this,"LanternInteractive")}static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){let n=uee*1e3;return e.cloneWithRelationships(r=>{if(r.type===Fe.TYPES.CPU)return r.event.dur>n;let a=r.record.resourceType===Y.TYPES.Image,o=r.record.resourceType===Y.TYPES.Script;return!a&&(o||r.record.priority==="High"||r.record.priority==="VeryHigh")})}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,n){if(!n.fmpResult)throw new Error("missing fmpResult");let r=t.getLastLongTaskEndTime(e.nodeTimings),a=n.optimistic?n.fmpResult.optimisticEstimate.timeInMs:n.fmpResult.pessimisticEstimate.timeInMs;return{timeInMs:Math.max(a,r),nodeTimings:e.nodeTimings}}static async compute_(e,n){let r=await ks.request(e,n),a=await this.computeMetricWithGraphs(e,n,{fmpResult:r});return a.timing=Math.max(a.timing,r.timing),a}static getLastLongTaskEndTime(e,n=50){return Array.from(e.entries()).filter(([r,a])=>r.type!==Fe.TYPES.CPU?!1:a.duration>n).map(([r,a])=>a.endTime).reduce((r,a)=>Math.max(r||0,a||0),0)}},jn=W(Hw,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var Gw,rr,ii=v(()=>{"use strict";d();we();Ea();Bt();fr();Gw=class t extends nn{static{s(this,"LanternLargestContentfulPaint")}static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static isNotLowPriorityImageNode(e){if(e.type!=="network")return!0;let n=e.record.resourceType==="Image",r=e.record.priority==="Low"||e.record.priority==="VeryLow";return!n||!r}static getOptimisticGraph(e,n){let r=n.timestamps.largestContentfulPaint;if(!r)throw new G(G.errors.NO_LCP);return It.getFirstPaintBasedGraph(e,r,t.isNotLowPriorityImageNode)}static getPessimisticGraph(e,n){let r=n.timestamps.largestContentfulPaint;if(!r)throw new G(G.errors.NO_LCP);return It.getFirstPaintBasedGraph(e,r,a=>!0,a=>a.didPerformLayout())}static getEstimateFromSimulation(e){let n=Array.from(e.nodeTimings.entries()).filter(r=>t.isNotLowPriorityImageNode(r[0])).map(r=>r[1].endTime);return{timeInMs:Math.max(...n),nodeTimings:e.nodeTimings}}static async compute_(e,n){let r=await It.request(e,n),a=await this.computeMetricWithGraphs(e,n);return a.timing=Math.max(a.timing,r.timing),a}},rr=W(Gw,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var Ww,Is,Zp=v(()=>{"use strict";d();we();De();Ur();Bt();Ww=class{static{s(this,"LCPImageRecord")}static async compute_(e,n){let{trace:r,devtoolsLog:a}=e,o=await $.request(a,n),i=await on.request(r,n);if(i.timings.largestContentfulPaint===void 0)throw new G(G.errors.NO_LCP);let c=i.largestContentfulPaintEvt;if(!c)return;let u=r.traceEvents.filter(p=>p.name==="LargestImagePaint::Candidate"&&p.args.frame===c.args.frame&&p.args.data?.DOMNodeId===c.args.data?.nodeId&&p.args.data?.size===c.args.data?.size).sort((p,g)=>g.ts-p.ts)[0],l=u?.args.data?.imageUrl;return l?o.filter(p=>p.url===l&&p.finished&&p.frameId===u.args.frame&&p.networkRequestTime<(i.timestamps.largestContentfulPaint||0)).map(p=>{for(;p.redirectDestination;)p=p.redirectDestination;return p}).filter(p=>p.resourceType==="Image").sort((p,g)=>p.networkEndTime-g.networkEndTime)[0]:void 0}},Is=W(Ww,["devtoolsLog","trace"])});var lee,dee,mee,ie,Xt=v(()=>{"use strict";d();J();oi();k();De();tr();$n();ii();fr();Zp();lee=w("core/audits/byte-efficiency/byte-efficiency-audit.js",{}),dee=150,mee=935,ie=class t extends h{static{s(this,"ByteEfficiencyAudit")}static scoreForWastedMs(e){return h.computeLogNormalScore({p10:dee,median:mee},e)}static estimateTransferSize(e,n,r){if(e){if(e.resourceType===r)return e.transferSize||0;{let a=e.transferSize||0,o=e.resourceSize||0,i=Number.isFinite(o)&&o>0?a/o:1;return Math.round(n*i)}}else switch(r){case"Stylesheet":return Math.round(n*.2);case"Script":case"Document":return Math.round(n*.33);default:return Math.round(n*.5)}}static async audit(e,n){let r=e.GatherContext,a=e.devtoolsLogs[h.DEFAULT_PASS],o=n?.settings||{},i={devtoolsLog:a,settings:o},c=await $.request(a,n);if(!c.some(g=>g.transferSize)&&r.gatherMode==="timespan")return{score:1,notApplicable:!0};let l=h.makeMetricComputationDataInput(e,n),[m,p]=await Promise.all([this.audit_(e,c,n),Ht.request(i,n)]);return this.createAuditProduct(m,p,l,n)}static computeWasteWithGraph(e,n,r,a){a=Object.assign({label:""},a);let o=`${this.meta.id}-${a.label}-before`,i=`${this.meta.id}-${a.label}-after`,c=r.simulate(n,{label:o}),u=a.providedWastedBytesByUrl||new Map;if(!a.providedWastedBytesByUrl)for(let{url:g,wastedBytes:f}of e)u.set(g,(u.get(g)||0)+f);let l=new Map;n.traverse(g=>{if(g.type!=="network")return;let f=u.get(g.record.url);if(!f)return;let y=g.record.transferSize;l.set(g.record.requestId,y),g.record.transferSize=Math.max(y-f,0)});let m=r.simulate(n,{label:i});n.traverse(g=>{if(g.type!=="network")return;let f=l.get(g.record.requestId);f!==void 0&&(g.record.transferSize=f)});let p=c.timeInMs-m.timeInMs;return{savings:Math.round(Math.max(p,0)/10)*10,simulationBeforeChanges:c,simulationAfterChanges:m}}static computeWasteWithTTIGraph(e,n,r,a){a=Object.assign({includeLoad:!0},a);let{savings:o,simulationBeforeChanges:i,simulationAfterChanges:c}=this.computeWasteWithGraph(e,n,r,{...a,label:"overallLoad"}),l=jn.getLastLongTaskEndTime(i.nodeTimings)-jn.getLastLongTaskEndTime(c.nodeTimings);return a.includeLoad&&(l=Math.max(l,o)),Math.round(Math.max(l,0)/10)*10}static async createAuditProduct(e,n,r,a){let o=e.items.sort((g,f)=>f.wastedBytes-g.wastedBytes),i=o.reduce((g,f)=>g+f.wastedBytes,0),c={FCP:0,LCP:0},u;if(r.gatherContext.gatherMode==="navigation"){let g=await kt.request(r,a),{pessimisticGraph:f}=await It.request(r,a),{pessimisticGraph:y}=await rr.request(r,a);u=this.computeWasteWithTTIGraph(o,g,n,{providedWastedBytesByUrl:e.wastedBytesByUrl});let{savings:b}=this.computeWasteWithGraph(o,f,n,{providedWastedBytesByUrl:e.wastedBytesByUrl,label:"fcp"}),{savings:D}=this.computeWasteWithGraph(o,y,n,{providedWastedBytesByUrl:e.wastedBytesByUrl,label:"lcp"}),T=0,A=await Is.request(r,a);if(A){let R=o.find(F=>F.url===A.url);R&&(T=n.computeWastedMsFromWastedBytes(R.wastedBytes))}c.FCP=b,c.LCP=Math.max(D,T)}else u=n.computeWastedMsFromWastedBytes(i);let l=e.displayValue||"";typeof e.displayValue>"u"&&i&&(l=lee(x.displayValueByteSavings,{wastedBytes:i}));let m=e.sortedBy||["wastedBytes"],p=h.makeOpportunityDetails(e.headings,o,{overallSavingsMs:u,overallSavingsBytes:i,sortedBy:m});return p.debugData={type:"debugdata",metricSavings:c},{explanation:e.explanation,warnings:e.warnings,displayValue:l,numericValue:u,numericUnit:"millisecond",score:t.scoreForWastedMs(u),details:p,metricSavings:c}}static audit_(e,n,r){throw new Error("audit_ unimplemented")}}});function pee(t,e,n){let r=n.split(`
+`),a={},o=e,i=o;t.computeLastGeneratedColumns();for(let c of t.mappings()){let u=c.sourceURL,l=c.lineNumber,m=c.columnNumber,p=c.lastColumnNumber;if(!u)continue;let g=r[l];if(g==null){let y=`${t.url()} mapping for line out of bounds: ${l+1}`;return N.error("JSBundles",y),{errorMessage:y}}if(m>g.length){let y=`${t.url()} mapping for column out of bounds: ${l+1}:${m}`;return N.error("JSBundles",y),{errorMessage:y}}let f=0;if(p!==void 0){if(p>g.length){let y=`${t.url()} mapping for last column out of bounds: ${l+1}:${p}`;return N.error("JSBundles",y),{errorMessage:y}}f=p-m}else f=g.length-m+1;a[u]=(a[u]||0)+f,i-=f}return{files:a,unmappedBytes:i,totalBytes:o}}var a8,Vw,vn,Ta=v(()=>{"use strict";d();He();we();a8=zt(Xy(),1);s(pee,"computeGeneratedFileSizes");Vw=class{static{s(this,"JSBundles")}static async compute_(e){let{SourceMaps:n,Scripts:r}=e,a=[];for(let o of n){if(!o.map)continue;let{scriptId:i,map:c}=o;if(!c.mappings)continue;let u=r.find(y=>y.scriptId===i);if(!u)continue;let l=o.scriptUrl||"compiled.js",m=o.sourceMapUrl||"compiled.js.map",p=new a8.default.SourceMap(l,m,c),g=pee(p,u.length||0,u.content||""),f={rawMap:c,script:u,map:p,sizes:g};a.push(f)}return a}},vn=W(Vw,["Scripts","SourceMaps"])});var fee,gee,$w,ed,Yw=v(()=>{"use strict";d();we();Ta();fee=.1,gee=1024*.5,$w=class t{static{s(this,"ModuleDuplication")}static normalizeSource(e){e=e.replace(/\?$/,"");let n=e.lastIndexOf("node_modules");return n!==-1&&(e=e.substring(n)),e}static _shouldIgnoreSource(e){return!!(e.includes("webpack/bootstrap")||e.includes("(webpack)/buildin")||e.includes("external "))}static _normalizeAggregatedData(e){for(let[n,r]of e.entries()){let a=r;if(a.sort((o,i)=>i.resourceSize-o.resourceSize),a.length>1){let o=a[0].resourceSize;a=a.filter(i=>i.resourceSize/o>=fee)}a=a.filter(o=>o.resourceSize>=gee),a.length>1?e.set(n,a):e.delete(n)}}static async compute_(e,n){let r=await vn.request(e,n),a=new Map;for(let{rawMap:i,sizes:c}of r){if("errorMessage"in c)continue;let u=[];a.set(i,u);for(let l=0;l<i.sources.length;l++){if(this._shouldIgnoreSource(i.sources[l]))continue;let m=(i.sourceRoot||"")+i.sources[l],p=c.files[m];u.push({source:t.normalizeSource(i.sources[l]),resourceSize:p})}}let o=new Map;for(let{rawMap:i,script:c}of r){let u=a.get(i);if(u)for(let l of u){let m=o.get(l.source);m||(m=[],o.set(l.source,m)),m.push({scriptId:c.scriptId,scriptUrl:c.url,resourceSize:l.resourceSize})}}return this._normalizeAggregatedData(o),o}},ed=W($w,["Scripts","SourceMaps"])});function Qp(t){return!!(t.startLine||t.startColumn)}function ao(t,e){let n=t.find(r=>r.url===e.url);for(;n?.redirectDestination;)n=n.redirectDestination;return n}var Ms=v(()=>{"use strict";d();s(Qp,"isInline");s(ao,"getRequestForScript")});var i8={};S(i8,{UIStrings:()=>e1,default:()=>yee});function o8(t,e,n=0){let r=t.indexOf(e,n);return r===-1?t.length:r}var e1,td,hee,Kw,yee,s8=v(()=>{"use strict";d();Xt();Yw();k();Ms();e1={title:"Remove duplicate modules in JavaScript bundles",description:"Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. "},td=w("core/audits/byte-efficiency/duplicated-javascript.js",e1),hee=1024;s(o8,"indexOfOrEnd");Kw=class t extends ie{static{s(this,"DuplicatedJavascript")}static get meta(){return{id:"duplicated-javascript",title:td(e1.title),description:td(e1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","SourceMaps","Scripts","GatherContext","URL"]}}static _getNodeModuleName(e){let n=e.split("node_modules/");e=n[n.length-1];let r=o8(e,"/");return e[0]==="@"?e.slice(0,o8(e,"/",r+1)):e.slice(0,r)}static async _getDuplicationGroupedByNodeModules(e,n){let r=await ed.request(e,n),a=new Map;for(let[o,i]of r.entries()){if(!o.includes("node_modules")){a.set(o,i);continue}let c="node_modules/"+t._getNodeModuleName(o),u=a.get(c)||[];for(let{scriptId:l,scriptUrl:m,resourceSize:p}of i){let g=u.find(f=>f.scriptId===l);g||(g={scriptId:l,scriptUrl:m,resourceSize:0},u.push(g)),g.resourceSize+=p}a.set(c,u)}for(let o of r.values())o.sort((i,c)=>c.resourceSize-i.resourceSize);return a}static _estimateTransferRatio(e,n){return ie.estimateTransferSize(e,n,"Script")/n}static async audit_(e,n,r){let a=r.options?.ignoreThresholdInBytes||hee,o=await t._getDuplicationGroupedByNodeModules(e,r),i=new Map,c=[],u=0,l=new Set,m=new Map;for(let[g,f]of o.entries()){let y=[],b=0;for(let D=0;D<f.length;D++){let T=f[D],A=T.scriptId,R=e.Scripts.find(z=>z.scriptId===A),F=R?.url||"",M=i.get(F);if(M===void 0){if(!R||R.length===void 0)continue;let z=R.length,ne=ao(n,R);M=t._estimateTransferRatio(ne,z),i.set(F,M)}if(M===void 0)continue;let V=Math.round(T.resourceSize*M);y.push({url:F,sourceTransferBytes:V}),D!==0&&(b+=V,m.set(F,(m.get(F)||0)+V))}if(b<=a){u+=b;for(let D of y)l.add(D.url);continue}c.push({source:g,wastedBytes:b,url:"",totalBytes:0,subItems:{type:"subitems",items:y}})}u>a&&c.push({source:"Other",wastedBytes:u,url:"",totalBytes:0,subItems:{type:"subitems",items:Array.from(l).map(g=>({url:g}))}});let p=[{key:"source",valueType:"code",subItemsHeading:{key:"url",valueType:"url"},label:td(x.columnSource)},{key:null,valueType:"bytes",subItemsHeading:{key:"sourceTransferBytes"},granularity:10,label:td(x.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",granularity:10,label:td(x.columnWastedBytes)}];return{items:c,headings:p,wastedBytesByUrl:m}}},yee=Kw});var c8={};S(c8,{UIStrings:()=>t1,default:()=>bee});var t1,nd,vee,Jw,bee,u8=v(()=>{"use strict";d();St();Xt();k();t1={title:"Use video formats for animated content",description:"Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more about efficient video formats](https://developer.chrome.com/docs/lighthouse/performance/efficient-animated-content/)"},nd=w("core/audits/byte-efficiency/efficient-animated-content.js",t1),vee=100*1024,Jw=class t extends ie{static{s(this,"EfficientAnimatedContent")}static get meta(){return{id:"efficient-animated-content",title:nd(t1.title),description:nd(t1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","GatherContext","URL"]}}static getPercentSavings(e){return Math.round(29.1*Math.log10(e)-100.7)/100}static audit_(e,n){let a=n.filter(i=>i.mimeType==="image/gif"&&i.resourceType===Y.TYPES.Image&&(i.resourceSize||0)>vee).map(i=>{let c=i.resourceSize||0;return{url:i.url,totalBytes:c,wastedBytes:Math.round(c*t.getPercentSavings(c))}}),o=[{key:"url",valueType:"url",label:nd(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:nd(x.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:nd(x.columnWastedBytes)}];return{items:a,headings:o}}},bee=Jw});var l8={};S(l8,{UIStrings:()=>r1,default:()=>Dee});var wee,Xw,r1,n1,Zw,Qw,Dee,d8=v(()=>{"use strict";d();ca();J();Xt();ma();Ta();k();Ms();rs();wee=`{
+  "moduleSizes": [11897, 498, 265, 277, 263, 453, 219, 216, 546, 339, 1608, 671, 1525, 420, 214, 504, 98, 524, 196, 268, 642, 204, 742, 618, 169, 394, 127, 433, 1473, 779, 239, 144, 182, 254, 77, 508, 124, 1388, 75, 133, 301, 362, 170, 1078, 182, 490, 195, 321, 316, 447, 551, 216, 284, 253, 17, 107, 295, 356, 345, 1939, 1596, 291, 139, 259, 1291, 179, 528, 174, 61, 326, 20, 444, 522, 104, 1945, 120, 1943, 680, 1409, 850, 630, 288, 38, 695, 569, 106, 587, 208, 370, 606, 766, 535, 616, 200, 170, 224, 422, 970, 978, 498, 284, 241, 210, 151, 194, 178, 814, 205, 189, 215, 111, 236, 147, 237, 191, 691, 212, 432, 499, 445, 176, 333, 129, 414, 617, 380, 251, 199, 524, 515, 681, 160, 259, 295, 283, 178, 472, 786, 520, 202, 575, 575, 349, 549, 458, 166, 173, 508, 1522, 743, 414, 431, 393, 899, 137, 270, 131, 472, 457, 205, 778, 801, 133, 3000],
+  "dependencies": {
+    "Array.prototype.fill": [0, 5, 8, 11, 21, 23, 25, 26, 29, 36, 37, 54, 55, 57, 58, 60, 66, 73, 74, 75, 76, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 114, 116],
+    "Array.prototype.filter": [0, 11, 12, 13, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 57, 58, 60, 62, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 117],
+    "Array.prototype.find": [0, 5, 11, 12, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 55, 57, 58, 60, 62, 64, 66, 73, 74, 75, 76, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 108, 114, 119],
+    "Array.prototype.findIndex": [0, 5, 11, 12, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 55, 57, 58, 60, 62, 64, 66, 73, 74, 75, 76, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 108, 114, 118],
+    "Array.prototype.forEach": [0, 9, 11, 12, 14, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 57, 58, 60, 62, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 120],
+    "Array.from": [0, 10, 11, 19, 20, 21, 22, 23, 25, 26, 27, 29, 36, 37, 41, 46, 49, 50, 54, 57, 58, 60, 61, 64, 66, 72, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 121],
+    "Array.isArray": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 62, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 122],
+    "Array.prototype.map": [0, 11, 12, 13, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 57, 58, 60, 62, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 123],
+    "Array.of": [0, 11, 21, 22, 23, 25, 26, 27, 29, 36, 37, 54, 57, 58, 60, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 124],
+    "Array.prototype.some": [0, 11, 12, 14, 17, 18, 21, 22, 23, 25, 26, 29, 36, 37, 41, 46, 54, 57, 58, 60, 62, 64, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 114, 125],
+    "Date.now": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 126],
+    "Date.prototype.toISOString": [0, 11, 21, 22, 23, 25, 26, 28, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 98, 99, 101, 102, 103, 104, 108, 109, 114, 127],
+    "Date.prototype.toJSON": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 128],
+    "Date.prototype.toString": [0, 25, 26, 29, 54, 58, 60, 74, 94, 114, 129],
+    "Function.prototype.name": [0, 130],
+    "Number.isInteger": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 67, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 131],
+    "Number.isSafeInteger": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 67, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 132],
+    "Object.defineProperties": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 114, 133],
+    "Object.defineProperty": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 134],
+    "Object.freeze": [0, 7, 11, 15, 21, 23, 25, 26, 27, 29, 36, 37, 39, 54, 57, 58, 59, 60, 66, 73, 74, 75, 79, 80, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 136],
+    "Object.getPrototypeOf": [0, 11, 21, 23, 24, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 83, 86, 88, 92, 94, 101, 102, 103, 104, 114, 138],
+    "Object.isExtensible": [0, 7, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 139],
+    "Object.isFrozen": [0, 7, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 140],
+    "Object.isSealed": [0, 7, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 141],
+    "Object.keys": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 114, 142],
+    "Object.preventExtensions": [0, 7, 11, 15, 21, 23, 25, 26, 27, 29, 36, 37, 39, 54, 57, 58, 59, 60, 66, 73, 74, 75, 79, 80, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 143],
+    "Object.seal": [0, 7, 11, 15, 21, 23, 25, 26, 27, 29, 36, 37, 39, 54, 57, 58, 59, 60, 66, 73, 74, 75, 79, 80, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 144],
+    "Object.setPrototypeOf": [0, 4, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 89, 92, 94, 101, 102, 103, 104, 114, 145],
+    "Reflect.apply": [0, 11, 21, 23, 25, 26, 29, 36, 37, 40, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 147],
+    "Reflect.construct": [0, 3, 11, 16, 21, 22, 23, 25, 26, 29, 36, 37, 40, 43, 54, 55, 57, 58, 60, 64, 66, 73, 74, 75, 76, 77, 79, 81, 82, 86, 87, 88, 92, 94, 101, 102, 103, 104, 108, 114, 148],
+    "Reflect.defineProperty": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 149],
+    "Reflect.deleteProperty": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 150],
+    "Reflect.get": [0, 11, 21, 23, 24, 25, 26, 29, 36, 37, 54, 57, 58, 60, 65, 66, 73, 74, 75, 79, 81, 82, 83, 86, 88, 92, 94, 101, 102, 103, 104, 114, 153],
+    "Reflect.getOwnPropertyDescriptor": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 151],
+    "Reflect.getPrototypeOf": [0, 11, 21, 23, 24, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 83, 86, 88, 92, 94, 101, 102, 103, 104, 114, 152],
+    "Reflect.has": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 154],
+    "Reflect.isExtensible": [0, 7, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 84, 86, 88, 92, 94, 101, 102, 103, 104, 114, 155],
+    "Reflect.ownKeys": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 156],
+    "Reflect.preventExtensions": [0, 11, 21, 23, 25, 26, 29, 36, 37, 39, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 157],
+    "Reflect.setPrototypeOf": [0, 4, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 89, 92, 94, 101, 102, 103, 104, 114, 158],
+    "String.prototype.codePointAt": [0, 11, 21, 22, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 97, 101, 102, 103, 104, 108, 109, 114, 159],
+    "String.fromCodePoint": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 160],
+    "String.raw": [0, 11, 21, 22, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 108, 109, 114, 161],
+    "String.prototype.repeat": [0, 11, 21, 22, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 99, 101, 102, 103, 104, 108, 109, 114, 162],
+    "Object.entries": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 87, 88, 90, 92, 94, 101, 102, 103, 104, 114, 135],
+    "Object.getOwnPropertyDescriptors": [0, 11, 21, 23, 25, 26, 27, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 88, 92, 94, 101, 102, 103, 104, 114, 137],
+    "Object.values": [0, 11, 21, 23, 25, 26, 29, 36, 37, 54, 57, 58, 60, 66, 73, 74, 75, 79, 81, 82, 86, 87, 88, 90, 92, 94, 101, 102, 103, 104, 114, 146],
+    "focus-visible": [163]
+  },
+  "maxSize": 87683
+}`,Xw=JSON.parse(wee),r1={title:"Avoid serving legacy JavaScript to modern browsers",description:"Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren't necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. [Learn how to use modern JavaScript](https://web.dev/publish-modern-javascript/)"},n1=w("core/audits/byte-efficiency/legacy-javascript.js",r1),Zw=class{static{s(this,"CodePatternMatcher")}constructor(e){let n=e.map(r=>`(${r.expression})`).join("|");this.re=new RegExp(`(^\r
+|\r|
+)|${n}`,"g"),this.patterns=e}match(e){this.re.lastIndex=0;let n=new Set,r=[],a,o=0,i=0;for(;(a=this.re.exec(e))!==null;){let c=a.slice(1),[u,...l]=c;if(u){o++,i=a.index+1;continue}let m=this.patterns[l.findIndex(Boolean)];if(n.has(m)){let p=r.find(g=>g.name===m.name);p&&(p.count+=1);continue}n.add(m),r.push({name:m.name,line:o,column:a.index-i,count:1})}return r}},Qw=class extends ie{static{s(this,"LegacyJavascript")}static get meta(){return{id:"legacy-javascript",scoreDisplayMode:ie.SCORING_MODES.NUMERIC,description:n1(r1.description),title:n1(r1.title),requiredArtifacts:["devtoolsLogs","traces","Scripts","SourceMaps","GatherContext","URL"]}}static buildPolyfillExpression(e,n){let r=s(o=>`['"]${o}['"]`,"qt"),a="";if(e?a+=`${e}\\.${n}\\s?=[^=]`:a+=`(?:window\\.|[\\s;]+)${n}\\s?=[^=]`,e&&(a+=`|${e}\\[${r(n)}\\]\\s?=[^=]`),a+=`|defineProperty\\(${e||"window"},\\s?${r(n)}`,e){let o=e.replace(".prototype","");a+=`|\\$export\\([^,]+,${r(o)},{${n}:`,a+=`|{target:${r(o)}\\S*},{${n}:`}else a+=`|function ${n}\\(`;return a}static getPolyfillData(){let e=[{name:"focus-visible",modules:["focus-visible"]}],n=[["Array.prototype.fill","es6.array.fill"],["Array.prototype.filter","es6.array.filter"],["Array.prototype.find","es6.array.find"],["Array.prototype.findIndex","es6.array.find-index"],["Array.prototype.forEach","es6.array.for-each"],["Array.from","es6.array.from"],["Array.isArray","es6.array.is-array"],["Array.prototype.map","es6.array.map"],["Array.of","es6.array.of"],["Array.prototype.some","es6.array.some"],["Date.now","es6.date.now"],["Date.prototype.toISOString","es6.date.to-iso-string"],["Date.prototype.toJSON","es6.date.to-json"],["Date.prototype.toString","es6.date.to-string"],["Function.prototype.name","es6.function.name"],["Number.isInteger","es6.number.is-integer"],["Number.isSafeInteger","es6.number.is-safe-integer"],["Object.defineProperties","es6.object.define-properties"],["Object.defineProperty","es6.object.define-property"],["Object.freeze","es6.object.freeze"],["Object.getPrototypeOf","es6.object.get-prototype-of"],["Object.isExtensible","es6.object.is-extensible"],["Object.isFrozen","es6.object.is-frozen"],["Object.isSealed","es6.object.is-sealed"],["Object.keys","es6.object.keys"],["Object.preventExtensions","es6.object.prevent-extensions"],["Object.seal","es6.object.seal"],["Object.setPrototypeOf","es6.object.set-prototype-of"],["Reflect.apply","es6.reflect.apply"],["Reflect.construct","es6.reflect.construct"],["Reflect.defineProperty","es6.reflect.define-property"],["Reflect.deleteProperty","es6.reflect.delete-property"],["Reflect.get","es6.reflect.get"],["Reflect.getOwnPropertyDescriptor","es6.reflect.get-own-property-descriptor"],["Reflect.getPrototypeOf","es6.reflect.get-prototype-of"],["Reflect.has","es6.reflect.has"],["Reflect.isExtensible","es6.reflect.is-extensible"],["Reflect.ownKeys","es6.reflect.own-keys"],["Reflect.preventExtensions","es6.reflect.prevent-extensions"],["Reflect.setPrototypeOf","es6.reflect.set-prototype-of"],["String.prototype.codePointAt","es6.string.code-point-at"],["String.fromCodePoint","es6.string.from-code-point"],["String.raw","es6.string.raw"],["String.prototype.repeat","es6.string.repeat"],["Object.entries","es7.object.entries"],["Object.getOwnPropertyDescriptors","es7.object.get-own-property-descriptors"],["Object.values","es7.object.values"]];for(let[r,a]of n)e.push({name:r,modules:[a,a.replace("es6.","es.").replace("es7.","es.").replace("typed.","typed-array.")],corejs:!0});return e}static getCoreJsPolyfillData(){return this.getPolyfillData().filter(e=>e.corejs).map(e=>({name:e.name,coreJs2Module:e.modules[0],coreJs3Module:e.modules[1]}))}static getPolyfillPatterns(){let e=[];for(let{name:n}of this.getCoreJsPolyfillData()){let r=n.split("."),a=r.length>1?r.slice(0,r.length-1).join("."):null,o=r[r.length-1];e.push({name:n,expression:this.buildPolyfillExpression(a,o)})}return e}static getTransformPatterns(){return[{name:"@babel/plugin-transform-classes",expression:"Cannot call a class as a function",estimateBytes:e=>150+e.count*17},{name:"@babel/plugin-transform-regenerator",expression:/regeneratorRuntime\(?\)?\.a?wrap/.source,estimateBytes:e=>e.count*80},{name:"@babel/plugin-transform-spread",expression:/\.apply\(void 0,\s?_toConsumableArray/.source,estimateBytes:e=>1169+e.count*20}]}static detectAcrossScripts(e,n,r,a){let o=new Map,i=this.getPolyfillData();for(let c of Object.values(n)){if(!c.content)continue;let u=e.match(c.content),l=a.find(m=>m.script.scriptId===c.scriptId);if(l)for(let{name:m,modules:p}of i){if(u.some(y=>y.name===m))continue;let g=l.rawMap.sources.find(y=>p.some(b=>y.endsWith(`${b}.js`)));if(!g)continue;let f=l.map.mappings().find(y=>y.sourceURL===g);f?u.push({name:m,line:f.lineNumber,column:f.columnNumber,count:1}):u.push({name:m,line:0,column:0,count:1})}u.length&&o.set(c,u)}return o}static estimateWastedBytes(e){let n=e.filter(u=>!u.name.startsWith("@")),r=e.filter(u=>u.name.startsWith("@")),a=0,o=new Set;for(let u of n){let l=Xw.dependencies[u.name];if(l)for(let m of l)o.add(m)}a+=[...o].reduce((u,l)=>u+Xw.moduleSizes[l],0),a=Math.min(a,Xw.maxSize);let i=0;for(let u of r){let l=this.getTransformPatterns().find(m=>m.name===u.name);!l||!l.estimateBytes||(i+=l.estimateBytes(u))}return a+i}static async estimateTransferRatioForScript(e,n,r,a){let o=e.get(n);if(o!==void 0)return o;let i=r.Scripts.find(c=>c.url===n);if(!i||i.content===null)o=1;else{let c=ao(a,i),u=i.length||0;o=ie.estimateTransferSize(c,u,"Script")/u}return e.set(n,o),o}static async audit_(e,n,r){let a=e.devtoolsLogs[h.DEFAULT_PASS],o=await gn.request({URL:e.URL,devtoolsLog:a},r),i=await vn.request(e,r),c=[],u=new Zw([...this.getPolyfillPatterns(),...this.getTransformPatterns()]),l=new Map,m=this.detectAcrossScripts(u,e.Scripts,n,i);for(let[f,y]of m.entries()){let b=await this.estimateTransferRatioForScript(l,f.url,e,n),D=Math.round(this.estimateWastedBytes(y)*b),T={url:f.url,wastedBytes:D,subItems:{type:"subitems",items:[]},totalBytes:0},A=i.find(R=>R.script.scriptId===f.scriptId);for(let R of y){let{name:F,line:M,column:V}=R,z={signal:F,location:ie.makeSourceLocation(f.url,M,V,A)};T.subItems.items.push(z)}c.push(T)}let p=new Map;for(let f of c)o.isFirstParty(f.url)&&p.set(f.url,f.wastedBytes);let g=[{key:"url",valueType:"url",subItemsHeading:{key:"location",valueType:"source-location"},label:n1(x.columnURL)},{key:null,valueType:"code",subItemsHeading:{key:"signal"},label:""},{key:"wastedBytes",valueType:"bytes",label:n1(x.columnWastedBytes)}];return{items:c,headings:g,wastedBytesByUrl:p}}},Dee=Qw});var m8={};S(m8,{UIStrings:()=>a1,default:()=>Tee});var a1,rd,Eee,e0,Tee,p8=v(()=>{"use strict";d();Xt();lt();k();a1={title:"Serve images in next-gen formats",description:"Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/)."},rd=w("core/audits/byte-efficiency/modern-image-formats.js",a1),Eee=8192,e0=class t extends ie{static{s(this,"ModernImageFormats")}static get meta(){return{id:"modern-image-formats",title:rd(a1.title),description:rd(a1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["OptimizedImages","devtoolsLogs","traces","URL","GatherContext","ImageElements"]}}static estimateWebPSizeFromDimensions(e){let n=e.naturalWidth*e.naturalHeight,r=2*1/10;return Math.round(n*r)}static estimateAvifSizeFromDimensions(e){let n=e.naturalWidth*e.naturalHeight,r=2*1/12;return Math.round(n*r)}static estimateAvifSizeFromWebPAndJpegEstimates(e){if(!e.jpegSize||!e.webpSize)return;let n=e.jpegSize*5/10,r=e.webpSize*8/10;return n/2+r/2}static audit_(e){let n=e.URL.finalDisplayedUrl,r=e.OptimizedImages,a=e.ImageElements,o=new Map;a.forEach(l=>o.set(l.src,l));let i=[],c=[];for(let l of r){let m=o.get(l.url);if(l.failed){c.push(`Unable to decode ${te.getURLDisplayName(l.url)}`);continue}if(l.mimeType==="image/webp"||l.mimeType==="image/avif")continue;let p=l.jpegSize,g=l.webpSize,f=t.estimateAvifSizeFromWebPAndJpegEstimates({jpegSize:p,webpSize:g}),y=!0;if(typeof g>"u"){if(!m){c.push(`Unable to locate resource ${te.getURLDisplayName(l.url)}`);continue}if(!m.naturalDimensions)continue;let R=m.naturalDimensions.height,F=m.naturalDimensions.width;if(!F||!R)continue;g=t.estimateWebPSizeFromDimensions({naturalHeight:R,naturalWidth:F}),f=t.estimateAvifSizeFromDimensions({naturalHeight:R,naturalWidth:F}),y=!1}if(g===void 0||f===void 0)continue;let b=l.originalSize-g,D=l.originalSize-f;if(D<Eee)continue;let T=te.elideDataURI(l.url),A=!te.originsMatch(n,l.url);i.push({node:m?ie.makeNodeItem(m.node):void 0,url:T,fromProtocol:y,isCrossOrigin:A,totalBytes:l.originalSize,wastedBytes:D,wastedWebpBytes:b})}let u=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:rd(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:rd(x.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:rd(x.columnWastedBytes)}];return{warnings:c,items:i,headings:u}}},Tee=e0});var t0,bn,oo=v(()=>{"use strict";d();Ar();Jt();Ur();De();t0=class{static{s(this,"Metric")}constructor(){}static getMetricComputationInput(e){return{trace:e.trace,devtoolsLog:e.devtoolsLog,gatherContext:e.gatherContext,settings:e.settings,URL:e.URL}}static computeSimulatedMetric(e,n){throw new Error("Unimplemented")}static computeObservedMetric(e,n){throw new Error("Unimplemented")}static async compute_(e,n){let r=e.gatherContext||{gatherMode:"navigation"},{trace:a,devtoolsLog:o,settings:i}=e;if(!a||!o||!i)throw new Error("Did not provide necessary metric computation data");let c=await Ye.request(a,n),u=r.gatherMode==="timespan"?void 0:await on.request(a,n),l=Object.assign({networkRecords:await $.request(o,n),gatherContext:r,processedTrace:c,processedNavigation:u},e);switch(Kt.assertHasToplevelEvents(l.processedTrace.mainThreadEvents),i.throttlingMethod){case"simulate":if(r.gatherMode!=="navigation")throw new Error(`${r.gatherMode} does not support throttlingMethod simulate`);return this.computeSimulatedMetric(l,n);case"provided":case"devtools":return this.computeObservedMetric(l,n);default:throw new TypeError(`Unrecognized throttling method: ${i.throttlingMethod}`)}}},bn=t0});var xt,Br=v(()=>{"use strict";d();oo();xt=class extends bn{static{s(this,"NavigationMetric")}static computeSimulatedMetric(e,n){throw new Error("Unimplemented")}static computeObservedMetric(e,n){throw new Error("Unimplemented")}static async compute_(e,n){if(e.gatherContext.gatherMode!=="navigation")throw new Error(`${this.name} can only be computed on navigations`);return super.compute_(e,n)}}});var o1,See,n0,io,ad=v(()=>{"use strict";d();we();Br();oi();ph();Ar();Bt();o1=5e3,See=2,n0=class t extends xt{static{s(this,"Interactive")}static _findNetworkQuietPeriods(e,n){let r=n.timestamps.traceEnd/1e3,a=e.filter(o=>o.finished&&o.requestMethod==="GET"&&!o.failed&&o.statusCode<400);return fs.findNetworkQuietPeriods(a,See,r)}static _findCPUQuietPeriods(e,n){let r=n.timestamps.timeOrigin/1e3,a=n.timestamps.traceEnd/1e3;if(e.length===0)return[{start:0,end:a}];let o=[];return e.forEach((i,c)=>{c===0&&o.push({start:0,end:i.start+r}),c===e.length-1?o.push({start:i.end+r,end:a}):o.push({start:i.end+r,end:e[c+1].start+r})}),o}static findOverlappingQuietPeriods(e,n,r){let a=r.timestamps.firstContentfulPaint/1e3,o=s(g=>g.end>a+o1&&g.end-g.start>=o1,"isLongEnoughQuietPeriod"),i=this._findNetworkQuietPeriods(n,r).filter(o),c=this._findCPUQuietPeriods(e,r).filter(o),u=c.slice(),l=i.slice(),m=u.shift(),p=l.shift();for(;m&&p;)if(m.start>=p.start){if(p.end>=m.start+o1)return{cpuQuietPeriod:m,networkQuietPeriod:p,cpuQuietPeriods:c,networkQuietPeriods:i};p=l.shift()}else{if(m.end>=p.start+o1)return{cpuQuietPeriod:m,networkQuietPeriod:p,cpuQuietPeriods:c,networkQuietPeriods:i};m=u.shift()}throw new G(m?G.errors.NO_TTI_NETWORK_IDLE_PERIOD:G.errors.NO_TTI_CPU_IDLE_PERIOD)}static computeSimulatedMetric(e,n){let r=xt.getMetricComputationInput(e);return jn.request(r,n)}static computeObservedMetric(e){let{processedTrace:n,processedNavigation:r,networkRecords:a}=e;if(!r.timestamps.domContentLoaded)throw new G(G.errors.NO_DCL);let o=Kt.getMainThreadTopLevelEvents(n).filter(m=>m.duration>=50),c=t.findOverlappingQuietPeriods(o,a,r).cpuQuietPeriod,u=Math.max(c.start,r.timestamps.firstContentfulPaint/1e3,r.timestamps.domContentLoaded/1e3)*1e3,l=(u-r.timestamps.timeOrigin)/1e3;return Promise.resolve({timing:l,timestamp:u})}},io=W(n0,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var y8={};S(y8,{UIStrings:()=>i1,default:()=>Cee});var i1,od,r0,xee,f8,g8,h8,a0,Cee,v8=v(()=>{"use strict";d();Xt();St();da();lt();k();ad();Jt();i1={title:"Defer offscreen images",description:"Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/)."},od=w("core/audits/byte-efficiency/offscreen-images.js",i1),r0=100,xee=3,f8=2048,g8=75,h8=50,a0=class t extends ie{static{s(this,"OffscreenImages")}static get meta(){return{id:"offscreen-images",title:od(i1.title),description:od(i1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["ImageElements","ViewportDimensions","GatherContext","devtoolsLogs","traces","URL"]}}static computeVisiblePixels(e,n){let r=n.innerWidth,a=n.innerHeight,o=xee*n.innerHeight,i=Math.max(e.top,-1*r0),c=Math.min(e.right,r+r0),u=Math.min(e.bottom,a+o),l=Math.max(e.left,-1*r0);return Math.max(c-l,0)*Math.max(u-i,0)}static computeWaste(e,n,r){let a=r.find(p=>p.url===e.src);if(!a||e.loading==="lazy"||e.loading==="eager")return null;let o=te.elideDataURI(e.src),i=e.displayedWidth*e.displayedHeight,c=this.computeVisiblePixels(e.clientRect,n),u=i===0?1:1-c/i,l=Y.getResourceSizeOnNetwork(a),m=Math.round(l*u);return Number.isFinite(u)?{node:ie.makeNodeItem(e.node),url:o,requestStartTime:a.networkRequestTime,totalBytes:l,wastedBytes:m,wastedPercent:100*u}:new Error(`Invalid image sizing information ${o}`)}static filterLanternResults(e,n){let r=n.pessimisticEstimate.nodeTimings,a=0,o=new Map;for(let[i,c]of r)i.type==="cpu"&&c.duration>=50?a=Math.max(a,c.startTime):i.type==="network"&&o.set(i.record.url,c.startTime);return e.filter(i=>i.wastedBytes<f8||i.wastedPercent<g8?!1:(o.get(i.url)||0)<a-h8)}static filterObservedResults(e,n){return e.filter(r=>r.wastedBytes<f8||r.wastedPercent<g8?!1:r.requestStartTime<n/1e3-h8)}static computeWasteWithTTIGraph(e,n,r){return super.computeWasteWithTTIGraph(e,n,r,{includeLoad:!1})}static async audit_(e,n,r){let a=e.ImageElements,o=e.ViewportDimensions,i=e.GatherContext,c=e.traces[ie.DEFAULT_PASS],u=e.devtoolsLogs[ie.DEFAULT_PASS],l=e.URL,m=[],p=new Map;for(let D of a){let T=t.computeWaste(D,o,n);if(T===null)continue;if(T instanceof Error){m.push(T.message),en.captureException(T,{tags:{audit:this.meta.id},level:"warning"});continue}let A=p.get(T.url);(!A||A.wastedBytes>T.wastedBytes)&&p.set(T.url,T)}let g=r.settings,f,y=Array.from(p.values());try{let D={trace:c,devtoolsLog:u,gatherContext:i,settings:g,URL:l},T=await io.request(D,r),A=T;f=r.settings.throttlingMethod==="simulate"?t.filterLanternResults(y,A):t.filterObservedResults(y,T.timestamp)}catch(D){if(r.settings.throttlingMethod==="simulate")throw D;f=t.filterObservedResults(y,await Ye.request(c,r).then(T=>T.timestamps.traceEnd))}let b=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:od(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:od(x.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:od(x.columnWastedBytes)}];return{warnings:m,items:f,headings:b}}},Cee=a0});var Ns,o0,Ls,s1=v(()=>{"use strict";d();we();Xt();De();Rr();Ns=100,o0=class t{static{s(this,"UnusedCSS")}static indexStylesheetsById(e,n){let r=n.filter(a=>a.resourceSize>0).reduce((a,o)=>(a[o.url]=o,a),{});return e.reduce((a,o)=>(a[o.header.styleSheetId]=Object.assign({usedRules:[],networkRecord:r[o.header.sourceURL]},o),a),{})}static indexUsedRules(e,n){e.forEach(r=>{let a=n[r.styleSheetId];a&&r.used&&a.usedRules.push(r)})}static computeUsage(e){let n=0,r=e.content.length;for(let c of e.usedRules)n+=c.endOffset-c.startOffset;let a=ie.estimateTransferSize(e.networkRecord,r,"Stylesheet"),o=(r-n)/r;return{wastedBytes:Math.round(o*a),wastedPercent:o*100,totalBytes:a}}static determineContentPreview(e){let n=rt.truncate(e||"",Ns*5,"").replace(/( {2,}|\t)+/g,"  ").replace(/\n\s+}/g,`
+}`).trim();if(n.length>Ns){let r=n.indexOf("{"),a=n.indexOf("}");if(r===-1||a===-1||r>a||r>Ns)n=rt.truncate(n,Ns);else if(a<Ns)n=n.slice(0,a+1)+" …";else{let o=rt.truncate(n,Ns,""),i=o.lastIndexOf(";");n=i<r?o+"… } …":n.slice(0,i+1)+" … } …"}}return n}static mapSheetToResult(e){let n=e.header.sourceURL;(!n||e.header.isInline)&&(n=t.determineContentPreview(e.content));let r=t.computeUsage(e);return{url:n,...r}}static async compute_(e,n){let{CSSUsage:r,devtoolsLog:a}=e,o=await $.request(a,n),i=t.indexStylesheetsById(r.stylesheets,o);return t.indexUsedRules(r.rules,i),Object.keys(i).map(u=>t.mapSheetToResult(i[u]))}},Ls=W(o0,["CSSUsage","devtoolsLog"])});var i0,Ps,c1=v(()=>{"use strict";d();we();Br();fr();i0=class extends xt{static{s(this,"FirstContentfulPaint")}static computeSimulatedMetric(e,n){let r=xt.getMetricComputationInput(e);return It.request(r,n)}static async computeObservedMetric(e){let{processedNavigation:n}=e;return{timing:n.timings.firstContentfulPaint,timestamp:n.timestamps.firstContentfulPaint}}},Ps=W(i0,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var w8={};S(w8,{UIStrings:()=>u1,default:()=>_ee});function Fee(t){let e={};return Array.from(t.keys()).forEach(r=>{if(r.type!=="network")return;let a=t.get(r);a&&(e[r.record.url]={node:r,nodeTiming:a})}),e}function Ree(t,e,n){let r=t.get(e);if(!r)return;let a=b8(e,r,n);r.duration-a.duration&&(e.traverse(i=>{t.delete(i)}),t.set(e,a))}function b8(t,e,n){let r={...e};return n.some(a=>a.id==="amp")&&t.type===Fe.TYPES.NETWORK&&t.record.resourceType===Y.TYPES.Stylesheet&&e.endTime>2100&&(r.endTime=Math.max(e.startTime,2100),r.duration=r.endTime-r.startTime),r}var Aee,u1,Os,s0,_ee,D8=v(()=>{"use strict";d();J();k();An();Xt();s1();St();Ur();tr();c1();Aee=50,u1={title:"Eliminate render-blocking resources",description:"Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/)."},Os=w("core/audits/byte-efficiency/render-blocking-resources.js",u1);s(Fee,"getNodesAndTimingByUrl");s(Ree,"adjustNodeTimings");s(b8,"computeStackSpecificTiming");s0=class t extends h{static{s(this,"RenderBlockingResources")}static get meta(){return{id:"render-blocking-resources",title:Os(u1.title),supportedModes:["navigation"],scoreDisplayMode:h.SCORING_MODES.NUMERIC,description:Os(u1.description),requiredArtifacts:["URL","TagsBlockingFirstPaint","traces","devtoolsLogs","CSSUsage","GatherContext","Stacks"]}}static async computeResults(e,n){let r=e.GatherContext,a=e.traces[h.DEFAULT_PASS],o=e.devtoolsLogs[h.DEFAULT_PASS],i={devtoolsLog:o,settings:n.settings},c=await on.request(a,n),u=await Ht.request(i,n),l=await t.computeWastedCSSBytes(e,n),m={...n.settings,throttlingMethod:"simulate"},p={trace:a,devtoolsLog:o,gatherContext:r,simulator:u,settings:m,URL:e.URL},g=await Ps.request(p,n),f=c.timestamps.firstContentfulPaint/1e3,y=Fee(g.optimisticEstimate.nodeTimings),b=[],D=new Set;for(let A of e.TagsBlockingFirstPaint){if(A.endTime>f||!y[A.tag.url])continue;let{node:R,nodeTiming:F}=y[A.tag.url],M=b8(R,F,e.Stacks);R.traverse(z=>D.add(z.id));let V=Math.round(M.duration);V<Aee||b.push({url:A.tag.url,totalBytes:A.transferSize,wastedMs:V})}if(!b.length)return{results:b,wastedMs:0};let T=t.estimateSavingsWithGraphs(u,g.optimisticGraph,D,l,e.Stacks);return{results:b,wastedMs:T}}static estimateSavingsWithGraphs(e,n,r,a,o){let{nodeTimings:i}=e.simulate(n),c=new Map(i),u=0,l=n.cloneWithRelationships(y=>{Ree(c,y,o);let b=r.has(y.id);if(y.type!==Fe.TYPES.NETWORK)return!b;let D=y.record.resourceType===Y.TYPES.Stylesheet;if(b&&D){let T=a.get(y.record.url)||0;u+=(y.record.transferSize||0)-T}return!b});if(l.type!=="network")throw new Error("minimalFCPGraph not a NetworkNode");let m=Math.max(...Array.from(Array.from(c).map(y=>y[1].endTime))),p=l.record.transferSize,g=p||0;l.record.transferSize=g+u;let f=e.simulate(l).timeInMs;return l.record.transferSize=p,Math.round(Math.max(m-f,0))}static async computeWastedCSSBytes(e,n){let r=new Map;try{let a=await Ls.request({CSSUsage:e.CSSUsage,devtoolsLog:e.devtoolsLogs[h.DEFAULT_PASS]},n);for(let o of a)r.set(o.url,o.wastedBytes)}catch{}return r}static async audit(e,n){let{results:r,wastedMs:a}=await t.computeResults(e,n),o;r.length>0&&(o=Os(x.displayValueMsSavings,{wastedMs:a}));let i=[{key:"url",valueType:"url",label:Os(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:Os(x.columnTransferSize)},{key:"wastedMs",valueType:"timespanMs",label:Os(x.columnWastedMs)}],c=h.makeOpportunityDetails(i,r,{overallSavingsMs:a});return{displayValue:o,score:ie.scoreForWastedMs(a),numericValue:a,numericUnit:"millisecond",details:c,metricSavings:{FCP:a,LCP:a}}}},_ee=s0});var E8={};S(E8,{UIStrings:()=>Bs,default:()=>kee});var Bs,Us,c0,kee,T8=v(()=>{"use strict";d();J();k();St();De();Bs={title:"Avoids enormous network payloads",failureTitle:"Avoid enormous network payloads",description:"Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",displayValue:"Total size was {totalBytes, number, bytes} KiB"},Us=w("core/audits/byte-efficiency/total-byte-weight.js",Bs),c0=class extends h{static{s(this,"TotalByteWeight")}static get meta(){return{id:"total-byte-weight",title:Us(Bs.title),failureTitle:Us(Bs.failureTitle),description:Us(Bs.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs"]}}static get defaultOptions(){return{p10:2667*1024,median:4e3*1024}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await $.request(r,n),o=0,i=[];a.forEach(m=>{if(Y.isNonNetworkRequest(m)||!m.transferSize)return;let p={url:m.url,totalBytes:m.transferSize};o+=p.totalBytes,i.push(p)}),i=i.sort((m,p)=>p.totalBytes-m.totalBytes||m.url.localeCompare(p.url)).slice(0,10);let c=h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},o),u=[{key:"url",valueType:"url",label:Us(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:Us(x.columnTransferSize)}],l=h.makeTableDetails(u,i,{sortedBy:["totalBytes"]});return{score:c,numericValue:o,numericUnit:"byte",displayValue:Us(Bs.displayValue,{totalBytes:o}),details:l}}},kee=c0});function Nee(t,e){for(let n=e;n>0;n--){let r=Math.max(0,n-6),a=t.slice(r,n);if(!Mee.test(a))return Iee.test(a)}return!0}function S8(t,e){let n=0,r=!1,a=!1,o=!1,i=!1,c=!1,u=!1,l=null,m=[];for(let p=0;p<t.length;p++){let g=t.substr(p,2),f=g.charAt(0),y=f===" "||f===`
+`||f==="	",b=f==="'"||f==='"'||f==="`";r?f===`
+`&&(r=!1):a?(o&&n++,g==="*/"&&(o&&n++,a=!1,p++)):i?(n++,l==="`"&&g==="${"?(m.push("templateBrace"),i=!1,n++,p++):f==="\\"?(n++,p++):f===l&&(i=!1)):c?(n++,f==="\\"?(n++,p++):f==="["?u=!0:f==="]"&&u?u=!1:f==="/"&&!u&&(c=!1)):g==="/*"?(a=!0,o=t.charAt(p+2)==="!",o&&(n+=2),p++):g==="//"&&e.singlelineComments?(r=!0,a=!1,o=!1,p++):f==="/"&&e.regex&&Nee(t,p)?(c=!0,n++):f==="{"&&m.length?(m.push("normalBrace"),n++):f==="}"&&m.length?(m[m.length-1]==="templateBrace"&&(i=!0,l="`"),m.pop(),n++):b?(i=!0,l=f,n++):y||n++}return a||i?t.length:n}function x8(t){return S8(t,{singlelineComments:!0,regex:!0})}function C8(t){return S8(t,{singlelineComments:!1,regex:!1})}var Iee,Mee,u0=v(()=>{"use strict";d();Iee=/(return|case|{|\(|\[|\.\.\.|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\*\*|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|\*\*=|<<=|>>=|>>>=|&=|\|=|\^=|=>|\/|\/=|\})$/,Mee=/( |\n|\t)+$/;s(Nee,"hasPunctuatorBefore");s(S8,"computeTokenLength");s(x8,"computeJSTokenLength");s(C8,"computeCSSTokenLength")});var A8={};S(A8,{UIStrings:()=>l1,default:()=>Oee});var l1,id,Lee,Pee,l0,Oee,F8=v(()=>{"use strict";d();Xt();s1();k();u0();l1={title:"Minify CSS",description:"Minifying CSS files can reduce network payload sizes. [Learn how to minify CSS](https://developer.chrome.com/docs/lighthouse/performance/unminified-css/)."},id=w("core/audits/byte-efficiency/unminified-css.js",l1),Lee=5,Pee=2048,l0=class t extends ie{static{s(this,"UnminifiedCSS")}static get meta(){return{id:"unminified-css",title:id(l1.title),description:id(l1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["CSSUsage","devtoolsLogs","traces","URL","GatherContext"]}}static computeTokenLength(e){return C8(e)}static computeWaste(e,n){let r=e.content,a=t.computeTokenLength(r),o=e.header.sourceURL;(!o||e.header.isInline)&&(o=Ls.determineContentPreview(e.content));let i=ie.estimateTransferSize(n,r.length,"Stylesheet"),c=1-a/r.length,u=Math.round(i*c);return{url:o,totalBytes:i,wastedBytes:u,wastedPercent:100*c}}static audit_(e,n){let r=[];for(let o of e.CSSUsage.stylesheets){let i=n.find(u=>u.url===o.header.sourceURL);if(!o.content)continue;let c=t.computeWaste(o,i);c.wastedPercent<Lee||c.wastedBytes<Pee||!Number.isFinite(c.wastedBytes)||r.push(c)}let a=[{key:"url",valueType:"url",label:id(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:id(x.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:id(x.columnWastedBytes)}];return{items:r,headings:a}}},Oee=l0});var R8={};S(R8,{UIStrings:()=>d1,default:()=>jee});var d1,sd,Uee,Bee,d0,jee,_8=v(()=>{"use strict";d();Xt();k();u0();Ms();Rr();d1={title:"Minify JavaScript",description:"Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/)."},sd=w("core/audits/byte-efficiency/unminified-javascript.js",d1),Uee=10,Bee=2048,d0=class t extends ie{static{s(this,"UnminifiedJavaScript")}static get meta(){return{id:"unminified-javascript",title:sd(d1.title),description:sd(d1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["Scripts","devtoolsLogs","traces","GatherContext","URL"]}}static computeWaste(e,n,r){let a=e.length,o=x8(e),i=ie.estimateTransferSize(r,a,"Script"),c=1-o/a,u=Math.round(i*c);return{url:n,totalBytes:i,wastedBytes:u,wastedPercent:100*c}}static audit_(e,n){let r=[],a=[];for(let i of e.Scripts){if(!i.content)continue;let c=ao(n,i),u=Qp(i)?`inline: ${rt.truncate(i.content,40)}`:i.url;try{let l=t.computeWaste(i.content,u,c);if(l.wastedPercent<Uee||l.wastedBytes<Bee||!Number.isFinite(l.wastedBytes))continue;r.push(l)}catch(l){a.push(`Unable to process script ${i.url}: ${l.message}`)}}let o=[{key:"url",valueType:"url",label:sd(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:sd(x.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:sd(x.columnWastedBytes)}];return{items:r,warnings:a,headings:o}}},jee=d0});var k8={};S(k8,{UIStrings:()=>m1,default:()=>zee});var m1,cd,qee,m0,zee,I8=v(()=>{"use strict";d();Xt();s1();k();m1={title:"Reduce unused CSS",description:"Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/)."},cd=w("core/audits/byte-efficiency/unused-css-rules.js",m1),qee=10*1024,m0=class extends ie{static{s(this,"UnusedCSSRules")}static get meta(){return{id:"unused-css-rules",title:cd(m1.title),description:cd(m1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["CSSUsage","URL","devtoolsLogs","traces","GatherContext"]}}static async audit_(e,n,r){let o=(await Ls.request({CSSUsage:e.CSSUsage,devtoolsLog:e.devtoolsLogs[ie.DEFAULT_PASS]},r)).filter(c=>c&&c.wastedBytes>qee),i=[{key:"url",valueType:"url",label:cd(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:cd(x.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:cd(x.columnWastedBytes)}];return{items:o,headings:i}}},zee=m0});var p0,p1,f0=v(()=>{"use strict";d();we();p0=class t{static{s(this,"UnusedJavascriptSummary")}static computeWaste(e){let n=0;for(let o of e.functions)n=Math.max(n,...o.ranges.map(i=>i.endOffset));let r=new Uint8Array(n);for(let o of e.functions)for(let i of o.ranges)if(i.count===0)for(let c=i.startOffset;c<i.endOffset;c++)r[c]=1;let a=0;for(let o of r)a+=o;return{unusedByIndex:r,unusedLength:a,contentLength:n}}static createItem(e,n){let r=n.unusedLength/n.contentLength||0,a=Math.round(n.contentLength*r);return{scriptId:e,totalBytes:n.contentLength,wastedBytes:a,wastedPercent:100*r}}static createSourceWastedBytes(e,n){if(!n.script.content)return;let r={},a=n.script.content.split(`
+`).map(l=>l.length),o=0,i=a.map(l=>{let m=o;return o+=l+1,m});n.map.computeLastGeneratedColumns();for(let l of n.map.mappings()){let m=i[l.lineNumber];m+=l.columnNumber;let p=l.lastColumnNumber!==void 0?l.lastColumnNumber-1:a[l.lineNumber];for(let g=l.columnNumber;g<=p;g++){if(e.unusedByIndex[m]===1){let f=l.sourceURL||"(unmapped)";r[f]=(r[f]||0)+1}m+=1}}let c=Object.entries(r).sort(([l,m],[p,g])=>g-m),u={};for(let[l,m]of c)u[l]=m;return u}static async compute_(e){let{scriptId:n,scriptCoverage:r,bundle:a}=e,o=t.computeWaste(r),i=t.createItem(n,o);return a?{...i,sourcesWastedBytes:t.createSourceWastedBytes(o,a)}:i}},p1=W(p0,["bundle","scriptCoverage","scriptId"])});var M8={};S(M8,{UIStrings:()=>f1,default:()=>$ee});function Wee(t){if(!t.length)return"";let e=t.reduce((r,a)=>r>a?r:a),n=t.reduce((r,a)=>r>a?a:r);for(;!e.startsWith(n);)n=n.slice(0,-1);return n}function Vee(t,e){return e&&t.startsWith(e)?"…"+t.slice(e.length):t}var f1,ud,Hee,Gee,g0,$ee,N8=v(()=>{"use strict";d();Xt();f0();Ta();k();Ms();f1={title:"Reduce unused JavaScript",description:"Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/)."},ud=w("core/audits/byte-efficiency/unused-javascript.js",f1),Hee=20*1024,Gee=512;s(Wee,"commonPrefix");s(Vee,"trimCommonPrefix");g0=class extends ie{static{s(this,"UnusedJavaScript")}static get meta(){return{id:"unused-javascript",title:ud(f1.title),description:ud(f1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["JsUsage","Scripts","SourceMaps","GatherContext","devtoolsLogs","traces","URL"]}}static async audit_(e,n,r){let a=await vn.request(e,r),{unusedThreshold:o=Hee,bundleSourceUnusedThreshold:i=Gee}=r.options||{},c=[];for(let[u,l]of Object.entries(e.JsUsage)){let m=e.Scripts.find(A=>A.scriptId===u);if(!m)continue;let p=ao(n,m);if(!p)continue;let g=a.find(A=>A.script.scriptId===u),f=await p1.request({scriptId:u,scriptCoverage:l,bundle:g},r);if(f.wastedBytes===0||f.totalBytes===0)continue;let b=ie.estimateTransferSize(p,f.totalBytes,"Script")/f.totalBytes,D={url:m.url,totalBytes:Math.round(b*f.totalBytes),wastedBytes:Math.round(b*f.wastedBytes),wastedPercent:f.wastedPercent};if(D.wastedBytes<=o||(c.push(D),!g||"errorMessage"in g.sizes))continue;let T=g.sizes;if(f.sourcesWastedBytes){let A=Object.entries(f.sourcesWastedBytes).sort((F,M)=>M[1]-F[1]).slice(0,5).map(([F,M])=>{let V=F==="(unmapped)"?T.unmappedBytes:T.files[F];return{source:F,unused:Math.round(M*b),total:Math.round(V*b)}}).filter(F=>F.unused>=i),R=Wee(g.map.sourceURLs());D.subItems={type:"subitems",items:A.map(({source:F,unused:M,total:V})=>({source:Vee(F,R),sourceBytes:V,sourceWastedBytes:M}))}}}return{items:c,headings:[{key:"url",valueType:"url",subItemsHeading:{key:"source",valueType:"code"},label:ud(x.columnURL)},{key:"totalBytes",valueType:"bytes",subItemsHeading:{key:"sourceBytes"},label:ud(x.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",subItemsHeading:{key:"sourceWastedBytes"},label:ud(x.columnWastedBytes)}]}}},$ee=g0});var P8=L((qke,L8)=>{d();L8.exports=s(function(e){if(typeof e!="string")return null;var n=/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,r={},a=e.replace(n,function(i,c,u,l){var m=u||l;return r[c]=m?m.toLowerCase():!0,""});if(r["max-age"])try{var o=parseInt(r["max-age"],10);if(isNaN(o))return null;r["max-age"]=o}catch{}return a?null:r},"parseCacheControl")});var U8={};S(U8,{UIStrings:()=>js,default:()=>y0});var O8,js,si,Yee,h0,y0,v0=v(()=>{"use strict";d();O8=zt(P8(),1);J();St();lt();yg();k();De();js={title:"Uses efficient cache policy on static assets",failureTitle:"Serve static assets with an efficient cache policy",description:"A long cache lifetime can speed up repeat visits to your page. [Learn more about efficient cache policies](https://developer.chrome.com/docs/lighthouse/performance/uses-long-cache-ttl/).",displayValue:`{itemCount, plural,
+    =1 {1 resource found}
+    other {# resources found}
+    }`},si=w("core/audits/byte-efficiency/uses-long-cache-ttl.js",js),Yee=.925,h0=class t extends h{static{s(this,"CacheHeaders")}static get meta(){return{id:"uses-long-cache-ttl",title:si(js.title),failureTitle:si(js.failureTitle),description:si(js.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs"]}}static get defaultOptions(){return{p10:28*1024,median:128*1024}}static getCacheHitProbability(e){let n=[0,.2,1,3,8,12,24,48,72,168,8760,1/0];if(n.length!==12)throw new Error("deciles 0-10 and 1 for overflow");let r=e/3600,a=n.findIndex(l=>l>=r);if(a===n.length-1)return 1;if(a===0)return 0;let o=n[a],i=n[a-1],c=a/10,u=(a-1)/10;return dF(i,u,o,c,r)}static computeCacheLifetimeInSeconds(e,n){if(n&&n["max-age"]!==void 0)return n["max-age"];let r=e.get("expires");if(r){let a=new Date(r).getTime();return a?Math.ceil((a-Date.now())/1e3):0}return null}static isCacheableAsset(e){let n=new Set([200,203,206]),r=new Set([Y.TYPES.Font,Y.TYPES.Image,Y.TYPES.Media,Y.TYPES.Script,Y.TYPES.Stylesheet]);return Y.isNonNetworkRequest(e)?!1:n.has(e.statusCode)&&r.has(e.resourceType||"Other")}static shouldSkipRecord(e,n){return!!(!n&&(e.get("pragma")||"").includes("no-cache")||n&&(n["must-revalidate"]||n["no-cache"]||n["no-store"]||n["stale-while-revalidate"]||n.private))}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await $.request(r,n),o=[],i=0;for(let m of a){if(!t.isCacheableAsset(m))continue;let p=new Map;for(let R of m.responseHeaders||[])if(p.has(R.name.toLowerCase())){let F=p.get(R.name.toLowerCase());p.set(R.name.toLowerCase(),`${F}, ${R.value}`)}else p.set(R.name.toLowerCase(),R.value);let g=(0,O8.default)(p.get("cache-control"));if(this.shouldSkipRecord(p,g))continue;let f=t.computeCacheLifetimeInSeconds(p,g);if(f!==null&&(!Number.isFinite(f)||f<=0))continue;f=f||0;let y=t.getCacheHitProbability(f);if(y>Yee)continue;let b=te.elideDataURI(m.url),D=m.transferSize||0,T=(1-y)*D;i+=T;let A;g&&(A={type:"debugdata",...g}),o.push({url:b,debugData:A,cacheLifetimeMs:f*1e3,cacheHitProbability:y,totalBytes:D,wastedBytes:T})}o.sort((m,p)=>m.cacheLifetimeMs-p.cacheLifetimeMs||p.totalBytes-m.totalBytes||m.url.localeCompare(p.url));let c=h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},i),u=[{key:"url",valueType:"url",label:si(x.columnURL)},{key:"cacheLifetimeMs",valueType:"ms",label:si(x.columnCacheTTL),displayUnit:"duration"},{key:"totalBytes",valueType:"bytes",label:si(x.columnTransferSize),displayUnit:"kb",granularity:1}],l=h.makeTableDetails(u,o,{wastedBytes:i,sortedBy:["totalBytes"],skipSumming:["cacheLifetimeMs"]});return{score:c,numericValue:i,numericUnit:"byte",displayValue:si(js.displayValue,{itemCount:o.length}),details:l}}},y0=h0});var B8={};S(B8,{UIStrings:()=>g1,default:()=>Jee});var g1,ld,Kee,b0,Jee,j8=v(()=>{"use strict";d();Xt();lt();k();g1={title:"Efficiently encode images",description:"Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/)."},ld=w("core/audits/byte-efficiency/uses-optimized-images.js",g1),Kee=4096,b0=class t extends ie{static{s(this,"UsesOptimizedImages")}static get meta(){return{id:"uses-optimized-images",title:ld(g1.title),description:ld(g1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["OptimizedImages","ImageElements","GatherContext","devtoolsLogs","traces","URL"]}}static computeSavings(e){let n=e.originalSize-e.jpegSize,r=100*n/e.originalSize;return{bytes:n,percent:r}}static estimateJPEGSizeFromDimensions(e){let n=e.naturalWidth*e.naturalHeight,r=2*1/8;return Math.round(n*r)}static audit_(e){let n=e.URL.finalDisplayedUrl,r=e.OptimizedImages,a=e.ImageElements,o=new Map;a.forEach(l=>o.set(l.src,l));let i=[],c=[];for(let l of r){let m=o.get(l.url);if(l.failed){c.push(`Unable to decode ${te.getURLDisplayName(l.url)}`);continue}else if(/(jpeg|bmp)/.test(l.mimeType)===!1)continue;let p=l.jpegSize,g=!0;if(typeof p>"u"){if(!m){c.push(`Unable to locate resource ${te.getURLDisplayName(l.url)}`);continue}if(!m.naturalDimensions)continue;let D=m.naturalDimensions.height,T=m.naturalDimensions.width;if(!D||!T)continue;p=t.estimateJPEGSizeFromDimensions({naturalHeight:D,naturalWidth:T}),g=!1}if(l.originalSize<p+Kee)continue;let f=te.elideDataURI(l.url),y=!te.originsMatch(n,l.url),b=t.computeSavings({...l,jpegSize:p});i.push({node:m?ie.makeNodeItem(m.node):void 0,url:f,fromProtocol:g,isCrossOrigin:y,totalBytes:l.originalSize,wastedBytes:b.bytes})}let u=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:ld(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:ld(x.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:ld(x.columnWastedBytes)}];return{warnings:c,items:i,headings:u}}},Jee=b0});var w0,q8,z8=v(()=>{"use strict";d();lt();we();w0=class t{static{s(this,"ImageRecords")}static indexNetworkRecords(e){return e.reduce((n,r)=>((/^image/.test(r.mimeType)||/\.(avif|webp)$/i.test(r.url))&&r.finished&&r.statusCode===200&&(n[r.url]=r),n),{})}static async compute_(e){let n=t.indexNetworkRecords(e.networkRecords),r=[];for(let a of e.ImageElements){let i=n[a.src]?.mimeType;r.push({...a,mimeType:i||te.guessMimeType(a.src)})}return r.sort((a,o)=>{let i=n[a.src]||{};return(n[o.src]||{}).resourceSize-i.resourceSize}),r}},q8=W(w0,["ImageElements","networkRecords"])});var T0={};S(T0,{UIStrings:()=>qs,default:()=>E0,str_:()=>so});var qs,so,Xee,Zee,D0,E0,S0=v(()=>{"use strict";d();Xt();St();z8();lt();k();qs={title:"Properly size images",description:"Serve images that are appropriately-sized to save cellular data and improve load time. [Learn how to size images](https://developer.chrome.com/docs/lighthouse/performance/uses-responsive-images/)."},so=w("core/audits/byte-efficiency/uses-responsive-images.js",qs),Xee=4096,Zee=12288,D0=class t extends ie{static{s(this,"UsesResponsiveImages")}static get meta(){return{id:"uses-responsive-images",title:so(qs.title),description:so(qs.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["ImageElements","ViewportDimensions","GatherContext","devtoolsLogs","traces","URL"]}}static getDisplayedDimensions(e,n){if(e.displayedWidth&&e.displayedHeight)return{width:e.displayedWidth*n.devicePixelRatio,height:e.displayedHeight*n.devicePixelRatio};let r=n.innerWidth,a=n.innerHeight*2,o=e.naturalWidth/e.naturalHeight,i=r/a,c=r,u=a;return o>i?u=r/o:c=a*o,{width:c*n.devicePixelRatio,height:u*n.devicePixelRatio}}static computeWaste(e,n,r){let a=r.find(g=>g.url===e.src);if(!a)return null;let o=this.getDisplayedDimensions(e,n),i=o.width*o.height,c=te.elideDataURI(e.src),u=e.naturalWidth*e.naturalHeight,l=1-i/u,m=Y.getResourceSizeOnNetwork(a),p=Math.round(m*l);return{node:ie.makeNodeItem(e.node),url:c,totalBytes:m,wastedBytes:p,wastedPercent:100*l}}static determineAllowableWaste(e){return e.srcset||e.isPicture?Zee:Xee}static async audit_(e,n,r){let a=await q8.request({ImageElements:e.ImageElements,networkRecords:n},r),o=e.ViewportDimensions,i=new Map,c=[];for(let m of a){if(m.mimeType==="image/svg+xml"||m.isCss||!m.naturalDimensions)continue;let p=m.naturalDimensions.height,g=m.naturalDimensions.width;if(!g||!p)continue;let f=t.computeWaste({...m,naturalHeight:p,naturalWidth:g},o,n);if(!f)continue;let y=f.wastedBytes>this.determineAllowableWaste(m),b=i.get(f.url);y&&!c.includes(f.url)?(!b||b.wastedBytes>f.wastedBytes)&&i.set(f.url,f):(i.delete(f.url),c.push(f.url))}let u=Array.from(i.values()),l=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:so(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:so(x.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:so(x.columnWastedBytes)}];return{items:u,headings:l}}},E0=D0});var H8={};S(H8,{UIStrings:()=>zs,default:()=>ete});var zs,dd,Qee,x0,ete,G8=v(()=>{"use strict";d();J();S0();lt();k();zs={title:"Images were appropriate for their displayed size",failureTitle:"Images were larger than their displayed size",columnDisplayedDimensions:"Displayed dimensions",columnActualDimensions:"Actual dimensions"},dd=w("core/audits/byte-efficiency/uses-responsive-images-snapshot.js",zs),Qee=1365,x0=class extends h{static{s(this,"UsesResponsiveImagesSnapshot")}static get meta(){return{id:"uses-responsive-images-snapshot",title:dd(zs.title),failureTitle:dd(zs.failureTitle),description:so(qs.description),supportedModes:["snapshot"],requiredArtifacts:["ImageElements","ViewportDimensions"]}}static async audit(e){let n=1,r=[];for(let i of e.ImageElements){if(i.isCss||!i.naturalDimensions)continue;let c=i.naturalDimensions,u=E0.getDisplayedDimensions({...i,naturalWidth:c.width,naturalHeight:c.height},e.ViewportDimensions),l=c.width*c.height,m=u.width*u.height;l<=m||(l-m>Qee&&(n=0),r.push({node:h.makeNodeItem(i.node),url:te.elideDataURI(i.src),displayedDimensions:`${u.width}x${u.height}`,actualDimensions:`${c.width}x${c.height}`}))}let a=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:dd(x.columnURL)},{key:"displayedDimensions",valueType:"text",label:dd(zs.columnDisplayedDimensions)},{key:"actualDimensions",valueType:"text",label:dd(zs.columnActualDimensions)}],o=h.makeTableDetails(a,r);return{score:n,details:o}}},ete=x0});var W8={};S(W8,{UIStrings:()=>h1,default:()=>rte});var h1,md,tte,nte,C0,rte,V8=v(()=>{"use strict";d();Xt();lt();k();h1={title:"Enable text compression",description:"Text-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more about text compression](https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/)."},md=w("core/audits/byte-efficiency/uses-text-compression.js",h1),tte=1400,nte=.1,C0=class extends ie{static{s(this,"ResponsesAreCompressed")}static get meta(){return{id:"uses-text-compression",title:md(h1.title),description:md(h1.description),scoreDisplayMode:ie.SCORING_MODES.NUMERIC,requiredArtifacts:["ResponseCompression","GatherContext","devtoolsLogs","traces","URL"]}}static audit_(e){let n=e.ResponseCompression,r=[];n.forEach(o=>{if(!o.gzipSize||o.gzipSize<0)return;let i=o.resourceSize,c=o.gzipSize,u=i-c;if(1-c/i<nte||u<tte||o.transferSize<c)return;let l=te.elideDataURI(o.url);r.find(p=>p.url===l&&p.totalBytes===o.resourceSize)||r.push({url:l,totalBytes:i,wastedBytes:u})});let a=[{key:"url",valueType:"url",label:md(x.columnURL)},{key:"totalBytes",valueType:"bytes",label:md(x.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:md(x.columnWastedBytes)}];return{items:r,headings:a}}},rte=C0});var $8={};S($8,{UIStrings:()=>Hs,default:()=>ate});var Hs,y1,A0,ate,Y8=v(()=>{"use strict";d();J();k();Hs={title:"Content is sized correctly for the viewport",failureTitle:"Content is not sized correctly for the viewport",description:"If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn how to size content for the viewport](https://developer.chrome.com/docs/lighthouse/pwa/content-width/).",explanation:"The viewport size of {innerWidth}px does not match the window size of {outerWidth}px."},y1=w("core/audits/content-width.js",Hs),A0=class extends h{static{s(this,"ContentWidth")}static get meta(){return{id:"content-width",title:y1(Hs.title),failureTitle:y1(Hs.failureTitle),description:y1(Hs.description),requiredArtifacts:["ViewportDimensions"]}}static audit(e,n){let r=e.ViewportDimensions.innerWidth,a=e.ViewportDimensions.outerWidth,o=r===a;if(n.settings.formFactor==="desktop")return{score:1,notApplicable:!0};let i;return o||(i=y1(Hs.explanation,{innerWidth:e.ViewportDimensions.innerWidth,outerWidth:e.ViewportDimensions.outerWidth})),{score:Number(o),explanation:i}}},ate=A0});var F0,v1,R0=v(()=>{"use strict";d();we();St();Wt();$n();F0=class t{static{s(this,"CriticalRequestChains")}static isCritical(e,n){if(!n)throw new Error("mainResource not provided");if(e.requestId===n.requestId)return!0;if(e.isLinkPreload)return!1;for(;e.redirectDestination;)e=e.redirectDestination;let r=e.resourceType===Y.TYPES.Document&&e.frameId!==n.frameId;return[Y.TYPES.Image,Y.TYPES.XHR,Y.TYPES.Fetch,Y.TYPES.EventSource].includes(e.resourceType||"Other")||r||e.mimeType&&e.mimeType.startsWith("image/")||!e.initiatorRequest?!1:["VeryHigh","High","Medium"].includes(e.priority)}static extractChainsFromGraph(e,n){let r={};function a(c){let u=r;for(let l of c)u[l.requestId]||(u[l.requestId]={request:l,children:{}}),u=u[l.requestId].children}s(a,"addChain");let o=new Set;function i(c){return c.getDependents().filter(u=>u.getDependencies().every(l=>o.has(l)))}return s(i,"getNextNodes"),n.traverse((c,u)=>{if(o.add(c),c.type!=="network"||!t.isCritical(c.record,e))return;let l=u.filter(m=>m.type==="network").reverse().map(m=>m.record);l.some(m=>!t.isCritical(m,e))||Y.isNonNetworkRequest(c.record)||a(l)},i),r}static async compute_(e,n){let r=await je.request(e,n),a=await kt.request(e,n);return t.extractChainsFromGraph(r,a)}},v1=W(F0,["URL","devtoolsLog","trace"])});var K8={};S(K8,{UIStrings:()=>pd,default:()=>ote});var pd,_0,k0,ote,J8=v(()=>{"use strict";d();J();k();R0();pd={title:"Avoid chaining critical requests",description:"The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. [Learn how to avoid chaining critical requests](https://developer.chrome.com/docs/lighthouse/performance/critical-request-chains/).",displayValue:`{itemCount, plural,
+    =1 {1 chain found}
+    other {# chains found}
+    }`},_0=w("core/audits/critical-request-chains.js",pd),k0=class t extends h{static{s(this,"CriticalRequestChains")}static get meta(){return{id:"critical-request-chains",title:_0(pd.title),description:_0(pd.description),scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static _traverse(e,n){function r(a,o,i,c=0){let u=Object.keys(a);u.length!==0&&u.forEach(l=>{let m=a[l];i||(i=m.request.networkRequestTime),n({depth:o,id:l,node:m,chainDuration:m.request.networkEndTime-i,chainTransferSize:c+m.request.transferSize}),m.children&&r(m.children,o+1,i)},"")}s(r,"walk"),r(e,0)}static _getLongestChain(e){let n={duration:0,length:0,transferSize:0};return t._traverse(e,r=>{let a=r.chainDuration;a>n.duration&&(n.duration=a,n.transferSize=r.chainTransferSize,n.length=r.depth)}),n.length++,n}static flattenRequests(e){let n={},r=new Map;function a(o){let i=o.node.request,c={url:i.url,startTime:i.networkRequestTime/1e3,endTime:i.networkEndTime/1e3,responseReceivedTime:i.responseHeadersEndTime/1e3,transferSize:i.transferSize},u=r.get(o.id);if(u?u.request=c:(u={request:c},n[o.id]=u),o.node.children)for(let l of Object.keys(o.node.children)){let m={request:{}};r.set(l,m),u.children||(u.children={}),u.children[l]=m}r.set(o.id,u)}return s(a,"flatten"),t._traverse(e,a),n}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.URL,i=await v1.request({devtoolsLog:a,trace:r,URL:o},n),c=0;function u(f,y){Object.keys(f).forEach(D=>{let T=f[D];T.children?u(T.children,y+1):c++},"")}s(u,"walk");let l=t.flattenRequests(i),m=Object.keys(l)[0],p=m&&l[m].children;p&&Object.keys(p).length>0&&u(p,0);let g=t._getLongestChain(i);return{score:+(c===0),notApplicable:c===0,displayValue:c?_0(pd.displayValue,{itemCount:c}):"",details:{type:"criticalrequestchain",chains:l,longestChain:g}}}},ote=k0});var Gs=L(jr=>{"use strict";d();Object.defineProperty(jr,"__esModule",{value:!0});jr.Type=jr.Severity=jr.Finding=void 0;var I0=class t{static{s(this,"Finding")}constructor(e,n,r,a,o){this.type=e,this.description=n,this.severity=r,this.directive=a,this.value=o}static getHighestSeverity(e){if(e.length===0)return M0.NONE;let n=e.map(a=>a.severity),r=s((a,o)=>a<o?a:o,"min");return n.reduce(r,M0.NONE)}equals(e){return e instanceof t?e.type===this.type&&e.description===this.description&&e.severity===this.severity&&e.directive===this.directive&&e.value===this.value:!1}};jr.Finding=I0;var M0;(function(t){t[t.HIGH=10]="HIGH",t[t.SYNTAX=20]="SYNTAX",t[t.MEDIUM=30]="MEDIUM",t[t.HIGH_MAYBE=40]="HIGH_MAYBE",t[t.STRICT_CSP=45]="STRICT_CSP",t[t.MEDIUM_MAYBE=50]="MEDIUM_MAYBE",t[t.INFO=60]="INFO",t[t.NONE=100]="NONE"})(M0=jr.Severity||(jr.Severity={}));var ite;(function(t){t[t.MISSING_SEMICOLON=100]="MISSING_SEMICOLON",t[t.UNKNOWN_DIRECTIVE=101]="UNKNOWN_DIRECTIVE",t[t.INVALID_KEYWORD=102]="INVALID_KEYWORD",t[t.NONCE_CHARSET=106]="NONCE_CHARSET",t[t.MISSING_DIRECTIVES=300]="MISSING_DIRECTIVES",t[t.SCRIPT_UNSAFE_INLINE=301]="SCRIPT_UNSAFE_INLINE",t[t.SCRIPT_UNSAFE_EVAL=302]="SCRIPT_UNSAFE_EVAL",t[t.PLAIN_URL_SCHEMES=303]="PLAIN_URL_SCHEMES",t[t.PLAIN_WILDCARD=304]="PLAIN_WILDCARD",t[t.SCRIPT_ALLOWLIST_BYPASS=305]="SCRIPT_ALLOWLIST_BYPASS",t[t.OBJECT_ALLOWLIST_BYPASS=306]="OBJECT_ALLOWLIST_BYPASS",t[t.NONCE_LENGTH=307]="NONCE_LENGTH",t[t.IP_SOURCE=308]="IP_SOURCE",t[t.DEPRECATED_DIRECTIVE=309]="DEPRECATED_DIRECTIVE",t[t.SRC_HTTP=310]="SRC_HTTP",t[t.STRICT_DYNAMIC=400]="STRICT_DYNAMIC",t[t.STRICT_DYNAMIC_NOT_STANDALONE=401]="STRICT_DYNAMIC_NOT_STANDALONE",t[t.NONCE_HASH=402]="NONCE_HASH",t[t.UNSAFE_INLINE_FALLBACK=403]="UNSAFE_INLINE_FALLBACK",t[t.ALLOWLIST_FALLBACK=404]="ALLOWLIST_FALLBACK",t[t.IGNORED=405]="IGNORED",t[t.REQUIRE_TRUSTED_TYPES_FOR_SCRIPTS=500]="REQUIRE_TRUSTED_TYPES_FOR_SCRIPTS",t[t.REPORTING_DESTINATION_MISSING=600]="REPORTING_DESTINATION_MISSING",t[t.REPORT_TO_ONLY=601]="REPORT_TO_ONLY"})(ite=jr.Type||(jr.Type={}))});var qr=L(Ne=>{"use strict";d();Object.defineProperty(Ne,"__esModule",{value:!0});Ne.CspError=Ne.isHash=Ne.HASH_PATTERN=Ne.STRICT_HASH_PATTERN=Ne.isNonce=Ne.NONCE_PATTERN=Ne.STRICT_NONCE_PATTERN=Ne.isUrlScheme=Ne.isKeyword=Ne.isDirective=Ne.Version=Ne.FETCH_DIRECTIVES=Ne.Directive=Ne.TrustedTypesSink=Ne.Keyword=Ne.Csp=void 0;var Ws=Gs(),N0=class t{static{s(this,"Csp")}constructor(){this.directives={}}clone(){let e=new t;for(let[n,r]of Object.entries(this.directives))r&&(e.directives[n]=[...r]);return e}convertToString(){let e="";for(let[n,r]of Object.entries(this.directives)){if(e+=n,r!==void 0)for(let a,o=0;a=r[o];o++)e+=" ",e+=a;e+="; "}return e}getEffectiveCsp(e,n){let r=n||[],a=this.clone(),o=a.getEffectiveDirective(yt.SCRIPT_SRC),i=this.directives[o]||[],c=a.directives[o];if(c&&(a.policyHasScriptNonces()||a.policyHasScriptHashes()))if(e>=w1.CSP2)i.includes(Sa.UNSAFE_INLINE)&&(b1(c,Sa.UNSAFE_INLINE),r.push(new Ws.Finding(Ws.Type.IGNORED,"unsafe-inline is ignored if a nonce or a hash is present. (CSP2 and above)",Ws.Severity.NONE,o,Sa.UNSAFE_INLINE)));else for(let u of i)(u.startsWith("'nonce-")||u.startsWith("'sha"))&&b1(c,u);if(c&&this.policyHasStrictDynamic())if(e>=w1.CSP3)for(let u of i)(!u.startsWith("'")||u===Sa.SELF||u===Sa.UNSAFE_INLINE)&&(b1(c,u),r.push(new Ws.Finding(Ws.Type.IGNORED,"Because of strict-dynamic this entry is ignored in CSP3 and above",Ws.Severity.NONE,o,u)));else b1(c,Sa.STRICT_DYNAMIC);return e<w1.CSP3&&(delete a.directives[yt.REPORT_TO],delete a.directives[yt.WORKER_SRC],delete a.directives[yt.MANIFEST_SRC],delete a.directives[yt.TRUSTED_TYPES],delete a.directives[yt.REQUIRE_TRUSTED_TYPES_FOR]),a}getEffectiveDirective(e){return!(e in this.directives)&&Ne.FETCH_DIRECTIVES.includes(e)?yt.DEFAULT_SRC:e}getEffectiveDirectives(e){return[...new Set(e.map(r=>this.getEffectiveDirective(r)))]}policyHasScriptNonces(){let e=this.getEffectiveDirective(yt.SCRIPT_SRC);return(this.directives[e]||[]).some(r=>X8(r))}policyHasScriptHashes(){let e=this.getEffectiveDirective(yt.SCRIPT_SRC);return(this.directives[e]||[]).some(r=>Z8(r))}policyHasStrictDynamic(){let e=this.getEffectiveDirective(yt.SCRIPT_SRC);return(this.directives[e]||[]).includes(Sa.STRICT_DYNAMIC)}};Ne.Csp=N0;var Sa;(function(t){t.SELF="'self'",t.NONE="'none'",t.UNSAFE_INLINE="'unsafe-inline'",t.UNSAFE_EVAL="'unsafe-eval'",t.WASM_EVAL="'wasm-eval'",t.WASM_UNSAFE_EVAL="'wasm-unsafe-eval'",t.STRICT_DYNAMIC="'strict-dynamic'",t.UNSAFE_HASHED_ATTRIBUTES="'unsafe-hashed-attributes'",t.UNSAFE_HASHES="'unsafe-hashes'",t.REPORT_SAMPLE="'report-sample'",t.BLOCK="'block'",t.ALLOW="'allow'"})(Sa=Ne.Keyword||(Ne.Keyword={}));var ste;(function(t){t.SCRIPT="'script'"})(ste=Ne.TrustedTypesSink||(Ne.TrustedTypesSink={}));var yt;(function(t){t.CHILD_SRC="child-src",t.CONNECT_SRC="connect-src",t.DEFAULT_SRC="default-src",t.FONT_SRC="font-src",t.FRAME_SRC="frame-src",t.IMG_SRC="img-src",t.MEDIA_SRC="media-src",t.OBJECT_SRC="object-src",t.SCRIPT_SRC="script-src",t.SCRIPT_SRC_ATTR="script-src-attr",t.SCRIPT_SRC_ELEM="script-src-elem",t.STYLE_SRC="style-src",t.STYLE_SRC_ATTR="style-src-attr",t.STYLE_SRC_ELEM="style-src-elem",t.PREFETCH_SRC="prefetch-src",t.MANIFEST_SRC="manifest-src",t.WORKER_SRC="worker-src",t.BASE_URI="base-uri",t.PLUGIN_TYPES="plugin-types",t.SANDBOX="sandbox",t.DISOWN_OPENER="disown-opener",t.FORM_ACTION="form-action",t.FRAME_ANCESTORS="frame-ancestors",t.NAVIGATE_TO="navigate-to",t.REPORT_TO="report-to",t.REPORT_URI="report-uri",t.BLOCK_ALL_MIXED_CONTENT="block-all-mixed-content",t.UPGRADE_INSECURE_REQUESTS="upgrade-insecure-requests",t.REFLECTED_XSS="reflected-xss",t.REFERRER="referrer",t.REQUIRE_SRI_FOR="require-sri-for",t.TRUSTED_TYPES="trusted-types",t.REQUIRE_TRUSTED_TYPES_FOR="require-trusted-types-for",t.WEBRTC="webrtc"})(yt=Ne.Directive||(Ne.Directive={}));Ne.FETCH_DIRECTIVES=[yt.CHILD_SRC,yt.CONNECT_SRC,yt.DEFAULT_SRC,yt.FONT_SRC,yt.FRAME_SRC,yt.IMG_SRC,yt.MANIFEST_SRC,yt.MEDIA_SRC,yt.OBJECT_SRC,yt.SCRIPT_SRC,yt.SCRIPT_SRC_ATTR,yt.SCRIPT_SRC_ELEM,yt.STYLE_SRC,yt.STYLE_SRC_ATTR,yt.STYLE_SRC_ELEM,yt.WORKER_SRC];var w1;(function(t){t[t.CSP1=1]="CSP1",t[t.CSP2=2]="CSP2",t[t.CSP3=3]="CSP3"})(w1=Ne.Version||(Ne.Version={}));function cte(t){return Object.values(yt).includes(t)}s(cte,"isDirective");Ne.isDirective=cte;function ute(t){return Object.values(Sa).includes(t)}s(ute,"isKeyword");Ne.isKeyword=ute;function lte(t){return new RegExp("^[a-zA-Z][+a-zA-Z0-9.-]*:$").test(t)}s(lte,"isUrlScheme");Ne.isUrlScheme=lte;Ne.STRICT_NONCE_PATTERN=new RegExp("^'nonce-[a-zA-Z0-9+/_-]+[=]{0,2}'$");Ne.NONCE_PATTERN=new RegExp("^'nonce-(.+)'$");function X8(t,e){return(e?Ne.STRICT_NONCE_PATTERN:Ne.NONCE_PATTERN).test(t)}s(X8,"isNonce");Ne.isNonce=X8;Ne.STRICT_HASH_PATTERN=new RegExp("^'(sha256|sha384|sha512)-[a-zA-Z0-9+/]+[=]{0,2}'$");Ne.HASH_PATTERN=new RegExp("^'(sha256|sha384|sha512)-(.+)'$");function Z8(t,e){return(e?Ne.STRICT_HASH_PATTERN:Ne.HASH_PATTERN).test(t)}s(Z8,"isHash");Ne.isHash=Z8;var L0=class extends Error{static{s(this,"CspError")}constructor(e){super(e)}};Ne.CspError=L0;function b1(t,e){if(t.includes(e)){let n=t.findIndex(r=>e===r);t.splice(n,1)}}s(b1,"arrayRemove")});var Q8=L(qn=>{"use strict";d();var dte=qn&&qn.__createBinding||(Object.create?function(t,e,n,r){r===void 0&&(r=n),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]}),mte=qn&&qn.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),pte=qn&&qn.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)n!=="default"&&Object.prototype.hasOwnProperty.call(t,n)&&dte(e,t,n);return mte(e,t),e};Object.defineProperty(qn,"__esModule",{value:!0});qn.checkInvalidKeyword=qn.checkMissingSemicolon=qn.checkUnknownDirective=void 0;var co=pte(qr()),fte=qr(),In=Gs();function gte(t){let e=[];for(let n of Object.keys(t.directives))co.isDirective(n)||(n.endsWith(":")?e.push(new In.Finding(In.Type.UNKNOWN_DIRECTIVE,"CSP directives don't end with a colon.",In.Severity.SYNTAX,n)):e.push(new In.Finding(In.Type.UNKNOWN_DIRECTIVE,'Directive "'+n+'" is not a known CSP directive.',In.Severity.SYNTAX,n)));return e}s(gte,"checkUnknownDirective");qn.checkUnknownDirective=gte;function hte(t){let e=[];for(let[n,r]of Object.entries(t.directives))if(r!==void 0)for(let a of r)co.isDirective(a)&&e.push(new In.Finding(In.Type.MISSING_SEMICOLON,'Did you forget the semicolon? "'+a+'" seems to be a directive, not a value.',In.Severity.SYNTAX,n,a));return e}s(hte,"checkMissingSemicolon");qn.checkMissingSemicolon=hte;function yte(t){let e=[],n=Object.values(fte.Keyword).map(r=>r.replace(/'/g,""));for(let[r,a]of Object.entries(t.directives))if(a!==void 0)for(let o of a){if(n.some(i=>i===o)||o.startsWith("nonce-")||o.match(/^(sha256|sha384|sha512)-/)){e.push(new In.Finding(In.Type.INVALID_KEYWORD,'Did you forget to surround "'+o+'" with single-ticks?',In.Severity.SYNTAX,r,o));continue}if(o.startsWith("'")){if(r===co.Directive.REQUIRE_TRUSTED_TYPES_FOR){if(o===co.TrustedTypesSink.SCRIPT)continue}else if(r===co.Directive.TRUSTED_TYPES){if(o==="'allow-duplicates'"||o==="'none'")continue}else if(co.isKeyword(o)||co.isHash(o)||co.isNonce(o))continue;e.push(new In.Finding(In.Type.INVALID_KEYWORD,o+" seems to be an invalid CSP keyword.",In.Severity.SYNTAX,r,o))}}return e}s(yte,"checkInvalidKeyword");qn.checkInvalidKeyword=yte});var eP=L(D1=>{"use strict";d();Object.defineProperty(D1,"__esModule",{value:!0});D1.URLS=void 0;D1.URLS=["//gstatic.com/fsn/angular_js-bundle1.js","//www.gstatic.com/fsn/angular_js-bundle1.js","//www.googleadservices.com/pageadimg/imgad","//yandex.st/angularjs/1.2.16/angular-cookies.min.js","//yastatic.net/angularjs/1.2.23/angular.min.js","//yuedust.yuedu.126.net/js/components/angular/angular.js","//art.jobs.netease.com/script/angular.js","//csu-c45.kxcdn.com/angular/angular.js","//elysiumwebsite.s3.amazonaws.com/uploads/blog-media/rockstar/angular.min.js","//inno.blob.core.windows.net/new/libs/AngularJS/1.2.1/angular.min.js","//gift-talk.kakao.com/public/javascripts/angular.min.js","//ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular-route.min.js","//master-sumok.ru/vendors/angular/angular-cookies.js","//ayicommon-a.akamaihd.net/static/vendor/angular-1.4.2.min.js","//pangxiehaitao.com/framework/angular-1.3.9/angular-animate.min.js","//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js","//96fe3ee995e96e922b6b-d10c35bd0a0de2c718b252bc575fdb73.ssl.cf1.rackcdn.com/angular.js","//oss.maxcdn.com/angularjs/1.2.20/angular.min.js","//reports.zemanta.com/smedia/common/angularjs/1.2.11/angular.js","//cdn.shopify.com/s/files/1/0225/6463/t/1/assets/angular-animate.min.js","//parademanagement.com.s3-website-ap-southeast-1.amazonaws.com/js/angular.min.js","//cdn.jsdelivr.net/angularjs/1.1.2/angular.min.js","//eb2883ede55c53e09fd5-9c145fb03d93709ea57875d307e2d82e.ssl.cf3.rackcdn.com/components/angular-resource.min.js","//andors-trail.googlecode.com/git/AndorsTrailEdit/lib/angular.min.js","//cdn.walkme.com/General/EnvironmentTests/angular/angular.min.js","//laundrymail.com/angular/angular.js","//s3-eu-west-1.amazonaws.com/staticancpa/js/angular-cookies.min.js","//collade.demo.stswp.com/js/vendor/angular.min.js","//mrfishie.github.io/sailor/bower_components/angular/angular.min.js","//askgithub.com/static/js/angular.min.js","//services.amazon.com/solution-providers/assets/vendor/angular-cookies.min.js","//raw.githubusercontent.com/angular/code.angularjs.org/master/1.0.7/angular-resource.js","//prb-resume.appspot.com/bower_components/angular-animate/angular-animate.js","//dl.dropboxusercontent.com/u/30877786/angular.min.js","//static.tumblr.com/x5qdx0r/nPOnngtff/angular-resource.min_1_.js","//storage.googleapis.com/assets-prod.urbansitter.net/us-sym/assets/vendor/angular-sanitize/angular-sanitize.min.js","//twitter.github.io/labella.js/bower_components/angular/angular.min.js","//cdn2-casinoroom.global.ssl.fastly.net/js/lib/angular-animate.min.js","//www.adobe.com/devnet-apps/flashshowcase/lib/angular/angular.1.1.5.min.js","//eternal-sunset.herokuapp.com/bower_components/angular/angular.js","//cdn.bootcss.com/angular.js/1.2.0/angular.min.js"]});var tP=L(E1=>{"use strict";d();Object.defineProperty(E1,"__esModule",{value:!0});E1.URLS=void 0;E1.URLS=["//vk.com/swf/video.swf","//ajax.googleapis.com/ajax/libs/yui/2.8.0r4/build/charts/assets/charts.swf"]});var nP=L(Vs=>{"use strict";d();Object.defineProperty(Vs,"__esModule",{value:!0});Vs.URLS=Vs.NEEDS_EVAL=void 0;Vs.NEEDS_EVAL=["googletagmanager.com","www.googletagmanager.com","www.googleadservices.com","google-analytics.com","ssl.google-analytics.com","www.google-analytics.com"];Vs.URLS=["//bebezoo.1688.com/fragment/index.htm","//www.google-analytics.com/gtm/js","//googleads.g.doubleclick.net/pagead/conversion/1036918760/wcm","//www.googleadservices.com/pagead/conversion/1070110417/wcm","//www.google.com/tools/feedback/escalation-options","//pin.aliyun.com/check_audio","//offer.alibaba.com/market/CID100002954/5/fetchKeyword.do","//ccrprod.alipay.com/ccr/arriveTime.json","//group.aliexpress.com/ajaxAcquireGroupbuyProduct.do","//detector.alicdn.com/2.7.3/index.php","//suggest.taobao.com/sug","//translate.google.com/translate_a/l","//count.tbcdn.cn//counter3","//wb.amap.com/channel.php","//translate.googleapis.com/translate_a/l","//afpeng.alimama.com/ex","//accounts.google.com/o/oauth2/revoke","//pagead2.googlesyndication.com/relatedsearch","//yandex.ru/soft/browsers/check","//api.facebook.com/restserver.php","//mts0.googleapis.com/maps/vt","//syndication.twitter.com/widgets/timelines/765840589183213568","//www.youtube.com/profile_style","//googletagmanager.com/gtm/js","//mc.yandex.ru/watch/24306916/1","//share.yandex.net/counter/gpp/","//ok.go.mail.ru/lady_on_lady_recipes_r.json","//d1f69o4buvlrj5.cloudfront.net/__efa_15_1_ornpba.xekq.arg/optout_check","//www.googletagmanager.com/gtm/js","//api.vk.com/method/wall.get","//www.sharethis.com/get-publisher-info.php","//google.ru/maps/vt","//pro.netrox.sc/oapi/h_checksite.ashx","//vimeo.com/api/oembed.json/","//de.blog.newrelic.com/wp-admin/admin-ajax.php","//ajax.googleapis.com/ajax/services/search/news","//ssl.google-analytics.com/gtm/js","//pubsub.pubnub.com/subscribe/demo/hello_world/","//pass.yandex.ua/services","//id.rambler.ru/script/topline_info.js","//m.addthis.com/live/red_lojson/100eng.json","//passport.ngs.ru/ajax/check","//catalog.api.2gis.ru/ads/search","//gum.criteo.com/sync","//maps.google.com/maps/vt","//ynuf.alipay.com/service/um.json","//securepubads.g.doubleclick.net/gampad/ads","//c.tiles.mapbox.com/v3/texastribune.tx-congress-cvap/6/15/26.grid.json","//rexchange.begun.ru/banners","//an.yandex.ru/page/147484","//links.services.disqus.com/api/ping","//api.map.baidu.com/","//tj.gongchang.com/api/keywordrecomm/","//data.gongchang.com/livegrail/","//ulogin.ru/token.php","//beta.gismeteo.ru/api/informer/layout.js/120x240-3/ru/","//maps.googleapis.com/maps/api/js/GeoPhotoService.GetMetadata","//a.config.skype.com/config/v1/Skype/908_1.33.0.111/SkypePersonalization","//maps.beeline.ru/w","//target.ukr.net/","//www.meteoprog.ua/data/weather/informer/Poltava.js","//cdn.syndication.twimg.com/widgets/timelines/599200054310604802","//wslocker.ru/client/user.chk.php","//community.adobe.com/CommunityPod/getJSON","//maps.google.lv/maps/vt","//dev.virtualearth.net/REST/V1/Imagery/Metadata/AerialWithLabels/26.318581","//awaps.yandex.ru/10/8938/02400400.","//a248.e.akamai.net/h5.hulu.com/h5.mp4","//nominatim.openstreetmap.org/","//plugins.mozilla.org/en-us/plugins_list.json","//h.cackle.me/widget/32153/bootstrap","//graph.facebook.com/1/","//fellowes.ugc.bazaarvoice.com/data/reviews.json","//widgets.pinterest.com/v3/pidgets/boards/ciciwin/hedgehog-squirrel-crafts/pins/","//www.linkedin.com/countserv/count/share","//se.wikipedia.org/w/api.php","//cse.google.com/api/007627024705277327428/cse/r3vs7b0fcli/queries/js","//relap.io/api/v2/similar_pages_jsonp.js","//c1n3.hypercomments.com/stream/subscribe","//maps.google.de/maps/vt","//books.google.com/books","//connect.mail.ru/share_count","//tr.indeed.com/m/newjobs","//www-onepick-opensocial.googleusercontent.com/gadgets/proxy","//www.panoramio.com/map/get_panoramas.php","//client.siteheart.com/streamcli/client","//www.facebook.com/restserver.php","//autocomplete.travelpayouts.com/avia","//www.googleapis.com/freebase/v1/topic/m/0344_","//mts1.googleapis.com/mapslt/ft","//api.twitter.com/1/statuses/oembed.json","//fast.wistia.com/embed/medias/o75jtw7654.json","//partner.googleadservices.com/gampad/ads","//pass.yandex.ru/services","//gupiao.baidu.com/stocks/stockbets","//widget.admitad.com/widget/init","//api.instagram.com/v1/tags/partykungen23328/media/recent","//video.media.yql.yahoo.com/v1/video/sapi/streams/063fb76c-6c70-38c5-9bbc-04b7c384de2b","//ib.adnxs.com/jpt","//pass.yandex.com/services","//www.google.de/maps/vt","//clients1.google.com/complete/search","//api.userlike.com/api/chat/slot/proactive/","//www.youku.com/index_cookielist/s/jsonp","//mt1.googleapis.com/mapslt/ft","//api.mixpanel.com/track/","//wpd.b.qq.com/cgi/get_sign.php","//pipes.yahooapis.com/pipes/pipe.run","//gdata.youtube.com/feeds/api/videos/WsJIHN1kNWc","//9.chart.apis.google.com/chart","//cdn.syndication.twitter.com/moments/709229296800440320","//api.flickr.com/services/feeds/photos_friends.gne","//cbks0.googleapis.com/cbk","//www.blogger.com/feeds/5578653387562324002/posts/summary/4427562025302749269","//query.yahooapis.com/v1/public/yql","//kecngantang.blogspot.com/feeds/posts/default/-/Komik","//www.travelpayouts.com/widgets/50f53ce9ada1b54bcc000031.json","//i.cackle.me/widget/32586/bootstrap","//translate.yandex.net/api/v1.5/tr.json/detect","//a.tiles.mapbox.com/v3/zentralmedia.map-n2raeauc.jsonp","//maps.google.ru/maps/vt","//c1n2.hypercomments.com/stream/subscribe","//rec.ydf.yandex.ru/cookie","//cdn.jsdelivr.net"]});var aP=L(zr=>{"use strict";d();Object.defineProperty(zr,"__esModule",{value:!0});zr.applyCheckFunktionToDirectives=zr.matchWildcardUrls=zr.getHostname=zr.getSchemeFreeUrl=void 0;function P0(t){return t=t.replace(/^\w[+\w.-]*:\/\//i,""),t=t.replace(/^\/\//,""),t}s(P0,"getSchemeFreeUrl");zr.getSchemeFreeUrl=P0;function vte(t){let e=new URL("https://"+P0(t).replace(":*","").replace("*","wildcard_placeholder")).hostname.replace("wildcard_placeholder","*"),n=/^\[[\d:]+\]/;return P0(t).match(n)&&!e.match(n)?"["+e+"]":e}s(vte,"getHostname");zr.getHostname=vte;function rP(t){return t.startsWith("//")?t.replace("//","https://"):t}s(rP,"setScheme");function bte(t,e){let n=new URL(rP(t.replace(":*","").replace("*","wildcard_placeholder"))),r=e.map(l=>new URL(rP(l))),a=n.hostname.toLowerCase(),o=a.startsWith("wildcard_placeholder."),i=a.replace(/^\wildcard_placeholder/i,""),c=n.pathname,u=c!=="/";for(let l of r){let m=l.hostname;if(m.endsWith(i)&&!(!o&&a!==m)){if(u){if(c.endsWith("/")){if(!l.pathname.startsWith(c))continue}else if(l.pathname!==c)continue}return l}}return null}s(bte,"matchWildcardUrls");zr.matchWildcardUrls=bte;function wte(t,e){let n=Object.keys(t.directives);for(let r of n){let a=t.directives[r];a&&e(r,a)}}s(wte,"applyCheckFunktionToDirectives");zr.applyCheckFunktionToDirectives=wte});var mP=L(Te=>{"use strict";d();var Dte=Te&&Te.__createBinding||(Object.create?function(t,e,n,r){r===void 0&&(r=n),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]}),Ete=Te&&Te.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),fd=Te&&Te.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)n!=="default"&&Object.prototype.hasOwnProperty.call(t,n)&&Dte(e,t,n);return Ete(e,t),e};Object.defineProperty(Te,"__esModule",{value:!0});Te.checkHasConfiguredReporting=Te.checkSrcHttp=Te.checkNonceLength=Te.checkDeprecatedDirective=Te.checkIpSource=Te.looksLikeIpAddress=Te.checkFlashObjectAllowlistBypass=Te.checkScriptAllowlistBypass=Te.checkMissingDirectives=Te.checkMultipleMissingBaseUriDirective=Te.checkMissingBaseUriDirective=Te.checkMissingScriptSrcDirective=Te.checkMissingObjectSrcDirective=Te.checkWildcards=Te.checkPlainUrlSchemes=Te.checkScriptUnsafeEval=Te.checkScriptUnsafeInline=Te.URL_SCHEMES_CAUSING_XSS=Te.DIRECTIVES_CAUSING_XSS=void 0;var Tte=fd(eP()),Ste=fd(tP()),oP=fd(nP()),iP=fd(qr()),Ke=qr(),oe=Gs(),Hr=fd(aP());Te.DIRECTIVES_CAUSING_XSS=[Ke.Directive.SCRIPT_SRC,Ke.Directive.OBJECT_SRC,Ke.Directive.BASE_URI];Te.URL_SCHEMES_CAUSING_XSS=["data:","http:","https:"];function xte(t){let e=t.getEffectiveDirective(Ke.Directive.SCRIPT_SRC);return(t.directives[e]||[]).includes(Ke.Keyword.UNSAFE_INLINE)?[new oe.Finding(oe.Type.SCRIPT_UNSAFE_INLINE,"'unsafe-inline' allows the execution of unsafe in-page scripts and event handlers.",oe.Severity.HIGH,e,Ke.Keyword.UNSAFE_INLINE)]:[]}s(xte,"checkScriptUnsafeInline");Te.checkScriptUnsafeInline=xte;function Cte(t){let e=t.getEffectiveDirective(Ke.Directive.SCRIPT_SRC);return(t.directives[e]||[]).includes(Ke.Keyword.UNSAFE_EVAL)?[new oe.Finding(oe.Type.SCRIPT_UNSAFE_EVAL,"'unsafe-eval' allows the execution of code injected into DOM APIs such as eval().",oe.Severity.MEDIUM_MAYBE,e,Ke.Keyword.UNSAFE_EVAL)]:[]}s(Cte,"checkScriptUnsafeEval");Te.checkScriptUnsafeEval=Cte;function Ate(t){let e=[],n=t.getEffectiveDirectives(Te.DIRECTIVES_CAUSING_XSS);for(let r of n){let a=t.directives[r]||[];for(let o of a)Te.URL_SCHEMES_CAUSING_XSS.includes(o)&&e.push(new oe.Finding(oe.Type.PLAIN_URL_SCHEMES,o+" URI in "+r+" allows the execution of unsafe scripts.",oe.Severity.HIGH,r,o))}return e}s(Ate,"checkPlainUrlSchemes");Te.checkPlainUrlSchemes=Ate;function Fte(t){let e=[],n=t.getEffectiveDirectives(Te.DIRECTIVES_CAUSING_XSS);for(let r of n){let a=t.directives[r]||[];for(let o of a)if(Hr.getSchemeFreeUrl(o)==="*"){e.push(new oe.Finding(oe.Type.PLAIN_WILDCARD,r+" should not allow '*' as source",oe.Severity.HIGH,r,o));continue}}return e}s(Fte,"checkWildcards");Te.checkWildcards=Fte;function sP(t){let e=[];return Ke.Directive.OBJECT_SRC in t.directives?e=t.directives[Ke.Directive.OBJECT_SRC]:Ke.Directive.DEFAULT_SRC in t.directives&&(e=t.directives[Ke.Directive.DEFAULT_SRC]),e!==void 0&&e.length>=1?[]:[new oe.Finding(oe.Type.MISSING_DIRECTIVES,"Missing object-src allows the injection of plugins which can execute JavaScript. Can you set it to 'none'?",oe.Severity.HIGH,Ke.Directive.OBJECT_SRC)]}s(sP,"checkMissingObjectSrcDirective");Te.checkMissingObjectSrcDirective=sP;function cP(t){return Ke.Directive.SCRIPT_SRC in t.directives||Ke.Directive.DEFAULT_SRC in t.directives?[]:[new oe.Finding(oe.Type.MISSING_DIRECTIVES,"script-src directive is missing.",oe.Severity.HIGH,Ke.Directive.SCRIPT_SRC)]}s(cP,"checkMissingScriptSrcDirective");Te.checkMissingScriptSrcDirective=cP;function uP(t){return lP([t])}s(uP,"checkMissingBaseUriDirective");Te.checkMissingBaseUriDirective=uP;function lP(t){let e=s(r=>r.policyHasScriptNonces()||r.policyHasScriptHashes()&&r.policyHasStrictDynamic(),"needsBaseUri"),n=s(r=>Ke.Directive.BASE_URI in r.directives,"hasBaseUri");if(t.some(e)&&!t.some(n)){let r="Missing base-uri allows the injection of base tags. They can be used to set the base URL for all relative (script) URLs to an attacker controlled domain. Can you set it to 'none' or 'self'?";return[new oe.Finding(oe.Type.MISSING_DIRECTIVES,r,oe.Severity.HIGH,Ke.Directive.BASE_URI)]}return[]}s(lP,"checkMultipleMissingBaseUriDirective");Te.checkMultipleMissingBaseUriDirective=lP;function Rte(t){return[...sP(t),...cP(t),...uP(t)]}s(Rte,"checkMissingDirectives");Te.checkMissingDirectives=Rte;function _te(t){let e=[],n=t.getEffectiveDirective(Ke.Directive.SCRIPT_SRC),r=t.directives[n]||[];if(r.includes(Ke.Keyword.NONE))return e;for(let a of r){if(a===Ke.Keyword.SELF){e.push(new oe.Finding(oe.Type.SCRIPT_ALLOWLIST_BYPASS,"'self' can be problematic if you host JSONP, AngularJS or user uploaded files.",oe.Severity.MEDIUM_MAYBE,n,a));continue}if(a.startsWith("'")||iP.isUrlScheme(a)||a.indexOf(".")===-1)continue;let o="//"+Hr.getSchemeFreeUrl(a),i=Hr.matchWildcardUrls(o,Tte.URLS),c=Hr.matchWildcardUrls(o,oP.URLS);if(c){let u=oP.NEEDS_EVAL.includes(c.hostname),l=r.includes(Ke.Keyword.UNSAFE_EVAL);u&&!l&&(c=null)}if(c||i){let u="",l="";c&&(u=c.hostname,l=" JSONP endpoints"),i&&(u=i.hostname,l+=l.trim()===""?"":" and",l+=" Angular libraries"),e.push(new oe.Finding(oe.Type.SCRIPT_ALLOWLIST_BYPASS,u+" is known to host"+l+" which allow to bypass this CSP.",oe.Severity.HIGH,n,a))}else e.push(new oe.Finding(oe.Type.SCRIPT_ALLOWLIST_BYPASS,"No bypass found; make sure that this URL doesn't serve JSONP replies or Angular libraries.",oe.Severity.MEDIUM_MAYBE,n,a))}return e}s(_te,"checkScriptAllowlistBypass");Te.checkScriptAllowlistBypass=_te;function kte(t){let e=[],n=t.getEffectiveDirective(Ke.Directive.OBJECT_SRC),r=t.directives[n]||[],a=t.directives[Ke.Directive.PLUGIN_TYPES];if(a&&!a.includes("application/x-shockwave-flash"))return[];for(let o of r){if(o===Ke.Keyword.NONE)return[];let i="//"+Hr.getSchemeFreeUrl(o),c=Hr.matchWildcardUrls(i,Ste.URLS);c?e.push(new oe.Finding(oe.Type.OBJECT_ALLOWLIST_BYPASS,c.hostname+" is known to host Flash files which allow to bypass this CSP.",oe.Severity.HIGH,n,o)):n===Ke.Directive.OBJECT_SRC&&e.push(new oe.Finding(oe.Type.OBJECT_ALLOWLIST_BYPASS,"Can you restrict object-src to 'none' only?",oe.Severity.MEDIUM_MAYBE,n,o))}return e}s(kte,"checkFlashObjectAllowlistBypass");Te.checkFlashObjectAllowlistBypass=kte;function dP(t){return!!(t.startsWith("[")&&t.endsWith("]")||/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/.test(t))}s(dP,"looksLikeIpAddress");Te.looksLikeIpAddress=dP;function Ite(t){let e=[],n=s((r,a)=>{for(let o of a){let i=Hr.getHostname(o);dP(i)&&(i==="127.0.0.1"?e.push(new oe.Finding(oe.Type.IP_SOURCE,r+" directive allows localhost as source. Please make sure to remove this in production environments.",oe.Severity.INFO,r,o)):e.push(new oe.Finding(oe.Type.IP_SOURCE,r+" directive has an IP-Address as source: "+i+" (will be ignored by browsers!). ",oe.Severity.INFO,r,o)))}},"checkIp");return Hr.applyCheckFunktionToDirectives(t,n),e}s(Ite,"checkIpSource");Te.checkIpSource=Ite;function Mte(t){let e=[];return Ke.Directive.REFLECTED_XSS in t.directives&&e.push(new oe.Finding(oe.Type.DEPRECATED_DIRECTIVE,"reflected-xss is deprecated since CSP2. Please, use the X-XSS-Protection header instead.",oe.Severity.INFO,Ke.Directive.REFLECTED_XSS)),Ke.Directive.REFERRER in t.directives&&e.push(new oe.Finding(oe.Type.DEPRECATED_DIRECTIVE,"referrer is deprecated since CSP2. Please, use the Referrer-Policy header instead.",oe.Severity.INFO,Ke.Directive.REFERRER)),Ke.Directive.DISOWN_OPENER in t.directives&&e.push(new oe.Finding(oe.Type.DEPRECATED_DIRECTIVE,"disown-opener is deprecated since CSP3. Please, use the Cross Origin Opener Policy header instead.",oe.Severity.INFO,Ke.Directive.DISOWN_OPENER)),e}s(Mte,"checkDeprecatedDirective");Te.checkDeprecatedDirective=Mte;function Nte(t){let e=new RegExp("^'nonce-(.+)'$"),n=[];return Hr.applyCheckFunktionToDirectives(t,(r,a)=>{for(let o of a){let i=o.match(e);if(!i)continue;i[1].length<8&&n.push(new oe.Finding(oe.Type.NONCE_LENGTH,"Nonces should be at least 8 characters long.",oe.Severity.MEDIUM,r,o)),iP.isNonce(o,!0)||n.push(new oe.Finding(oe.Type.NONCE_CHARSET,"Nonces should only use the base64 charset.",oe.Severity.INFO,r,o))}}),n}s(Nte,"checkNonceLength");Te.checkNonceLength=Nte;function Lte(t){let e=[];return Hr.applyCheckFunktionToDirectives(t,(n,r)=>{for(let a of r){let o=n===Ke.Directive.REPORT_URI?"Use HTTPS to send violation reports securely.":"Allow only resources downloaded over HTTPS.";a.startsWith("http://")&&e.push(new oe.Finding(oe.Type.SRC_HTTP,o,oe.Severity.MEDIUM,n,a))}}),e}s(Lte,"checkSrcHttp");Te.checkSrcHttp=Lte;function Pte(t){return(t.directives[Ke.Directive.REPORT_URI]||[]).length>0?[]:(t.directives[Ke.Directive.REPORT_TO]||[]).length>0?[new oe.Finding(oe.Type.REPORT_TO_ONLY,"This CSP policy only provides a reporting destination via the 'report-to' directive. This directive is only supported in Chromium-based browsers so it is recommended to also use a 'report-uri' directive.",oe.Severity.INFO,Ke.Directive.REPORT_TO)]:[new oe.Finding(oe.Type.REPORTING_DESTINATION_MISSING,"This CSP policy does not configure a reporting destination. This makes it difficult to maintain the CSP policy over time and monitor for any breakages.",oe.Severity.INFO,Ke.Directive.REPORT_URI)]}s(Pte,"checkHasConfiguredReporting");Te.checkHasConfiguredReporting=Pte});var pP=L(sn=>{"use strict";d();var Ote=sn&&sn.__createBinding||(Object.create?function(t,e,n,r){r===void 0&&(r=n),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]}),Ute=sn&&sn.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Bte=sn&&sn.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)n!=="default"&&Object.prototype.hasOwnProperty.call(t,n)&&Ote(e,t,n);return Ute(e,t),e};Object.defineProperty(sn,"__esModule",{value:!0});sn.checkRequiresTrustedTypesForScripts=sn.checkAllowlistFallback=sn.checkUnsafeInlineFallback=sn.checkStrictDynamicNotStandalone=sn.checkStrictDynamic=void 0;var ci=Bte(qr()),T1=qr(),Mn=Gs();function jte(t){let e=t.getEffectiveDirective(ci.Directive.SCRIPT_SRC),n=t.directives[e]||[];return n.some(a=>!a.startsWith("'"))&&!n.includes(T1.Keyword.STRICT_DYNAMIC)?[new Mn.Finding(Mn.Type.STRICT_DYNAMIC,"Host allowlists can frequently be bypassed. Consider using 'strict-dynamic' in combination with CSP nonces or hashes.",Mn.Severity.STRICT_CSP,e)]:[]}s(jte,"checkStrictDynamic");sn.checkStrictDynamic=jte;function qte(t){let e=t.getEffectiveDirective(ci.Directive.SCRIPT_SRC);return(t.directives[e]||[]).includes(T1.Keyword.STRICT_DYNAMIC)&&!t.policyHasScriptNonces()&&!t.policyHasScriptHashes()?[new Mn.Finding(Mn.Type.STRICT_DYNAMIC_NOT_STANDALONE,"'strict-dynamic' without a CSP nonce/hash will block all scripts.",Mn.Severity.INFO,e)]:[]}s(qte,"checkStrictDynamicNotStandalone");sn.checkStrictDynamicNotStandalone=qte;function zte(t){if(!t.policyHasScriptNonces()&&!t.policyHasScriptHashes())return[];let e=t.getEffectiveDirective(ci.Directive.SCRIPT_SRC);return(t.directives[e]||[]).includes(T1.Keyword.UNSAFE_INLINE)?[]:[new Mn.Finding(Mn.Type.UNSAFE_INLINE_FALLBACK,"Consider adding 'unsafe-inline' (ignored by browsers supporting nonces/hashes) to be backward compatible with older browsers.",Mn.Severity.STRICT_CSP,e)]}s(zte,"checkUnsafeInlineFallback");sn.checkUnsafeInlineFallback=zte;function Hte(t){let e=t.getEffectiveDirective(ci.Directive.SCRIPT_SRC),n=t.directives[e]||[];return n.includes(T1.Keyword.STRICT_DYNAMIC)?n.some(r=>["http:","https:","*"].includes(r)||r.includes("."))?[]:[new Mn.Finding(Mn.Type.ALLOWLIST_FALLBACK,"Consider adding https: and http: url schemes (ignored by browsers supporting 'strict-dynamic') to be backward compatible with older browsers.",Mn.Severity.STRICT_CSP,e)]:[]}s(Hte,"checkAllowlistFallback");sn.checkAllowlistFallback=Hte;function Gte(t){let e=t.getEffectiveDirective(ci.Directive.REQUIRE_TRUSTED_TYPES_FOR);return(t.directives[e]||[]).includes(ci.TrustedTypesSink.SCRIPT)?[]:[new Mn.Finding(Mn.Type.REQUIRE_TRUSTED_TYPES_FOR_SCRIPTS,`Consider requiring Trusted Types for scripts to lock down DOM XSS injection sinks. You can do this by adding "require-trusted-types-for 'script'" to your policy.`,Mn.Severity.INFO,ci.Directive.REQUIRE_TRUSTED_TYPES_FOR)]}s(Gte,"checkRequiresTrustedTypesForScripts");sn.checkRequiresTrustedTypesForScripts=Gte});var yP=L(lo=>{"use strict";d();Object.defineProperty(lo,"__esModule",{value:!0});lo.evaluateForSyntaxErrors=lo.evaluateForWarnings=lo.evaluateForFailure=void 0;var O0=Q8(),uo=mP(),U0=pP(),fP=qr();function hP(t,e){return t.some(n=>n.equals(e))}s(hP,"arrayContains");function Wte(t){let e=[];if(t.length===0)return e;let n=t[0];for(let r of n)t.every(a=>hP(a,r))&&e.push(r);return e}s(Wte,"setIntersection");function Vte(t){let e=[];for(let n of t)for(let r of n)hP(e,r)||e.push(r);return e}s(Vte,"setUnion");function $s(t,e){let n=[];for(let r of t)n.push(e(r));return Wte(n)}s($s,"atLeastOnePasses");function gP(t,e){let n=[];for(let r of t)n.push(e(r));return Vte(n)}s(gP,"atLeastOneFails");function $te(t){let e=[...$s(t,uo.checkMissingScriptSrcDirective),...$s(t,uo.checkMissingObjectSrcDirective),...uo.checkMultipleMissingBaseUriDirective(t)],n=t.map(o=>o.getEffectiveCsp(fP.Version.CSP3)),r=n.filter(o=>{let i=o.getEffectiveDirective(fP.Directive.SCRIPT_SRC);return o.directives[i]}),a=[...$s(r,U0.checkStrictDynamic),...$s(r,uo.checkScriptUnsafeInline),...$s(n,uo.checkWildcards),...$s(n,uo.checkPlainUrlSchemes)];return[...e,...a]}s($te,"evaluateForFailure");lo.evaluateForFailure=$te;function Yte(t){return[...gP(t,U0.checkUnsafeInlineFallback),...gP(t,U0.checkAllowlistFallback)]}s(Yte,"evaluateForWarnings");lo.evaluateForWarnings=Yte;function Kte(t){let e=[];for(let n of t){let r=[...uo.checkNonceLength(n),...O0.checkUnknownDirective(n),...uo.checkDeprecatedDirective(n),...O0.checkMissingSemicolon(n),...O0.checkInvalidKeyword(n)];e.push(r)}return e}s(Kte,"evaluateForSyntaxErrors");lo.evaluateForSyntaxErrors=Kte});var bP=L(ar=>{"use strict";d();var Jte=ar&&ar.__createBinding||(Object.create?function(t,e,n,r){r===void 0&&(r=n),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]}),Xte=ar&&ar.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Zte=ar&&ar.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)n!=="default"&&Object.prototype.hasOwnProperty.call(t,n)&&Jte(e,t,n);return Xte(e,t),e};Object.defineProperty(ar,"__esModule",{value:!0});ar.TEST_ONLY=ar.CspParser=void 0;var gd=Zte(qr()),B0=class{static{s(this,"CspParser")}constructor(e){this.csp=new gd.Csp,this.parse(e)}parse(e){this.csp=new gd.Csp;let n=e.split(";");for(let r=0;r<n.length;r++){let o=n[r].trim().match(/\S+/g);if(Array.isArray(o)){let i=o[0].toLowerCase();if(i in this.csp.directives)continue;gd.isDirective(i);let c=[];for(let u,l=1;u=o[l];l++)u=vP(u),c.includes(u)||c.push(u);this.csp.directives[i]=c}}return this.csp}};ar.CspParser=B0;function vP(t){t=t.trim();let e=t.toLowerCase();return gd.isKeyword(e)||gd.isUrlScheme(t)?e:t}s(vP,"normalizeDirectiveValue");ar.TEST_ONLY={normalizeDirectiveValue:vP}});function DP(t){let e=Qte[t.type];return e?ns(e)?e:typeof e=="string"?Dn(e,{keyword:t.value||""}):(e=e[t.directive],e||(N.warn("CSP Evaluator",`No translation found for description: ${t.description}`),t.description)):(N.warn("CSP Evaluator",`No translation found for description: ${t.description}`),t.description)}function ene(t){return new wP.CspParser(t).csp}function j0(t){let e=t.map(ene),n=(0,Ys.evaluateForFailure)(e),r=(0,Ys.evaluateForWarnings)(e),a=(0,Ys.evaluateForSyntaxErrors)(e);return{bypasses:n,warnings:r,syntax:a}}var Ys,wn,wP,ui,Zt,Dn,Qte,EP=v(()=>{"use strict";d();Ys=zt(yP(),1),wn=zt(Gs(),1),wP=zt(bP(),1),ui=zt(qr(),1);He();k();la();Zt={missingBaseUri:"Missing base-uri allows injected <base> tags to set the base URL for all relative URLs (e.g. scripts) to an attacker controlled domain. Consider setting base-uri to 'none' or 'self'.",missingScriptSrc:"script-src directive is missing. This can allow the execution of unsafe scripts.",missingObjectSrc:"Missing object-src allows the injection of plugins that execute unsafe scripts. Consider setting object-src to 'none' if you can.",strictDynamic:"Host allowlists can frequently be bypassed. Consider using CSP nonces or hashes instead, along with 'strict-dynamic' if necessary.",unsafeInline:"'unsafe-inline' allows the execution of unsafe in-page scripts and event handlers. Consider using CSP nonces or hashes to allow scripts individually.",unsafeInlineFallback:"Consider adding 'unsafe-inline' (ignored by browsers supporting nonces/hashes) to be backward compatible with older browsers.",allowlistFallback:"Consider adding https: and http: URL schemes (ignored by browsers supporting 'strict-dynamic') to be backward compatible with older browsers.",reportToOnly:"The reporting destination is only configured via the report-to directive. This directive is only supported in Chromium-based browsers so it is recommended to also use a report-uri directive.",reportingDestinationMissing:"No CSP configures a reporting destination. This makes it difficult to maintain the CSP over time and monitor for any breakages.",nonceLength:"Nonces should be at least 8 characters long.",nonceCharset:"Nonces should use the base64 charset.",missingSemicolon:"Did you forget the semicolon? {keyword} seems to be a directive, not a keyword.",unknownDirective:"Unknown CSP directive.",unknownKeyword:"{keyword} seems to be an invalid keyword.",deprecatedReflectedXSS:"reflected-xss is deprecated since CSP2. Please, use the X-XSS-Protection header instead.",deprecatedReferrer:"referrer is deprecated since CSP2. Please, use the Referrer-Policy header instead.",deprecatedDisownOpener:"disown-opener is deprecated since CSP3. Please, use the Cross-Origin-Opener-Policy header instead.",plainWildcards:"Avoid using plain wildcards ({keyword}) in this directive. Plain wildcards allow scripts to be sourced from an unsafe domain.",plainUrlScheme:"Avoid using plain URL schemes ({keyword}) in this directive. Plain URL schemes allow scripts to be sourced from an unsafe domain."},Dn=w("core/lib/csp-evaluator.js",Zt),Qte={[wn.Type.MISSING_SEMICOLON]:Zt.missingSemicolon,[wn.Type.UNKNOWN_DIRECTIVE]:Dn(Zt.unknownDirective),[wn.Type.INVALID_KEYWORD]:Zt.unknownKeyword,[wn.Type.MISSING_DIRECTIVES]:{[ui.Directive.BASE_URI]:Dn(Zt.missingBaseUri),[ui.Directive.SCRIPT_SRC]:Dn(Zt.missingScriptSrc),[ui.Directive.OBJECT_SRC]:Dn(Zt.missingObjectSrc)},[wn.Type.SCRIPT_UNSAFE_INLINE]:Dn(Zt.unsafeInline),[wn.Type.PLAIN_WILDCARD]:Zt.plainWildcards,[wn.Type.PLAIN_URL_SCHEMES]:Zt.plainUrlScheme,[wn.Type.NONCE_LENGTH]:Dn(Zt.nonceLength),[wn.Type.NONCE_CHARSET]:Dn(Zt.nonceCharset),[wn.Type.DEPRECATED_DIRECTIVE]:{[ui.Directive.REFLECTED_XSS]:Dn(Zt.deprecatedReflectedXSS),[ui.Directive.REFERRER]:Dn(Zt.deprecatedReferrer),[ui.Directive.DISOWN_OPENER]:Dn(Zt.deprecatedDisownOpener)},[wn.Type.STRICT_DYNAMIC]:Dn(Zt.strictDynamic),[wn.Type.UNSAFE_INLINE_FALLBACK]:Dn(Zt.unsafeInlineFallback),[wn.Type.ALLOWLIST_FALLBACK]:Dn(Zt.allowlistFallback),[wn.Type.REPORTING_DESTINATION_MISSING]:Dn(Zt.reportingDestinationMissing),[wn.Type.REPORT_TO_ONLY]:Dn(Zt.reportToOnly)};s(DP,"getTranslatedDescription");s(ene,"parseCsp");s(j0,"evaluateRawCspsForXss")});var TP={};S(TP,{UIStrings:()=>xa,default:()=>tne});var xa,or,q0,tne,SP=v(()=>{"use strict";d();J();Wt();k();EP();xa={title:"Ensure CSP is effective against XSS attacks",description:"A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn how to use a CSP to prevent XSS](https://developer.chrome.com/docs/lighthouse/best-practices/csp-xss/)",noCsp:"No CSP found in enforcement mode",metaTagMessage:"The page contains a CSP defined in a <meta> tag. Consider moving the CSP to an HTTP header or defining another strict CSP in an HTTP header.",columnDirective:"Directive",columnSeverity:"Severity",itemSeveritySyntax:"Syntax"},or=w("core/audits/csp-xss.js",xa),q0=class extends h{static{s(this,"CspXss")}static get meta(){return{id:"csp-xss",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:or(xa.title),description:or(xa.description),requiredArtifacts:["devtoolsLogs","MetaElements","URL"]}}static async getRawCsps(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await je.request({devtoolsLog:r,URL:e.URL},n),o=e.MetaElements.filter(c=>c.httpEquiv&&c.httpEquiv.toLowerCase()==="content-security-policy").flatMap(c=>(c.content||"").split(",")).filter(c=>c.replace(/\s/g,""));return{cspHeaders:a.responseHeaders.filter(c=>c.name.toLowerCase()==="content-security-policy").flatMap(c=>c.value.split(",")).filter(c=>c.replace(/\s/g,"")),cspMetaTags:o}}static findingToTableItem(e,n){return{directive:e.directive,description:DP(e),severity:n}}static constructSyntaxResults(e,n){let r=[];for(let a=0;a<e.length;++a){let o=e[a].map(i=>this.findingToTableItem(i));o.length&&r.push({severity:or(xa.itemSeveritySyntax),description:{type:"code",value:n[a]},subItems:{type:"subitems",items:o}})}return r}static constructResults(e,n){let r=[...e,...n];if(!r.length)return{score:0,results:[{severity:or(x.itemSeverityHigh),description:or(xa.noCsp),directive:void 0}]};let{bypasses:a,warnings:o,syntax:i}=j0(r),c=[...this.constructSyntaxResults(i,r),...a.map(m=>this.findingToTableItem(m,or(x.itemSeverityHigh))),...o.map(m=>this.findingToTableItem(m,or(x.itemSeverityMedium)))],l=j0(e).bypasses.length>0||e.length===0;return n.length>0&&l&&c.push({severity:or(x.itemSeverityMedium),description:or(xa.metaTagMessage),directive:void 0}),{score:a.length?0:1,results:c}}static async audit(e,n){let{cspHeaders:r,cspMetaTags:a}=await this.getRawCsps(e,n),{score:o,results:i}=this.constructResults(r,a),c=[{key:"description",valueType:"text",subItemsHeading:{key:"description"},label:or(x.columnDescription)},{key:"directive",valueType:"code",subItemsHeading:{key:"directive"},label:or(xa.columnDirective)},{key:"severity",valueType:"text",subItemsHeading:{key:"severity"},label:or(xa.columnSeverity)}],u=h.makeTableDetails(c,i);return{score:o,notApplicable:!i.length,details:u}}},tne=q0});var z0,xP,CP=v(()=>{"use strict";d();z0={AuthorizationCoveredByWildcard:"Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling.",CanRequestURLHTTPContainingNewline:"Resource requests whose URLs contained both removed whitespace `(n|r|t)` characters and less-than characters (`<`) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources.",ChromeLoadTimesConnectionInfo:"`chrome.loadTimes()` is deprecated, instead use standardized API: Navigation Timing 2.",ChromeLoadTimesFirstPaintAfterLoadTime:"`chrome.loadTimes()` is deprecated, instead use standardized API: Paint Timing.",ChromeLoadTimesWasAlternateProtocolAvailable:"`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.",CookieWithTruncatingChar:"Cookies containing a `(0|r|n)` character will be rejected instead of truncated.",CrossOriginAccessBasedOnDocumentDomain:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting `document.domain`.",CrossOriginWindowAlert:"Triggering window.alert from cross origin iframes has been deprecated and will be removed in the future.",CrossOriginWindowConfirm:"Triggering window.confirm from cross origin iframes has been deprecated and will be removed in the future.",CSSSelectorInternalMediaControlsOverlayCastButton:"The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.",DataUrlInSvgUse:"Support for data: URLs in SVG <use> element is deprecated and it will be removed in the future.",DocumentDomainSettingWithoutOriginAgentClusterHeader:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details.",DOMMutationEvents:"DOM Mutation Events, including `DOMSubtreeModified`, `DOMNodeInserted`, `DOMNodeRemoved`, `DOMNodeRemovedFromDocument`, `DOMNodeInsertedIntoDocument`, and `DOMCharacterDataModified` are deprecated (https://w3c.github.io/uievents/#legacy-event-types) and will be removed. Please use `MutationObserver` instead.",ExpectCTHeader:"The `Expect-CT` header is deprecated and will be removed. Chrome requires Certificate Transparency for all publicly trusted certificates issued after April 30, 2018.",GeolocationInsecureOrigin:"`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",GeolocationInsecureOriginDeprecatedNotRemoved:"`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",GetUserMediaInsecureOrigin:"`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",HostCandidateAttributeGetter:"`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.",IdentityInCanMakePaymentEvent:"The merchant origin and arbitrary data from the `canmakepayment` service worker event are deprecated and will be removed: `topOrigin`, `paymentRequestOrigin`, `methodData`, `modifiers`.",InsecurePrivateNetworkSubresourceRequest:"The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the internet, increasing the risk of a cross-site request forgery (CSRF) attack, and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts, and will start blocking them.",InterestGroupDailyUpdateUrl:"The `dailyUpdateUrl` field of `InterestGroups` passed to `joinAdInterestGroup()` has been renamed to `updateUrl`, to more accurately reflect its behavior.",LocalCSSFileExtensionRejected:"CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension.",MediaSourceAbortRemove:"Using `SourceBuffer.abort()` to abort `remove()`'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should listen to the `updateend` event instead. `abort()` is intended to only abort an asynchronous media append or reset parser state.",MediaSourceDurationTruncatingBuffered:"Setting `MediaSource.duration` below the highest presentation timestamp of any buffered coded frames is deprecated due to specification change. Support for implicit removal of truncated buffered media will be removed in the future. You should instead perform explicit `remove(newDuration, oldDuration)` on all `sourceBuffers`, where `newDuration < oldDuration`.",NonStandardDeclarativeShadowDOM:"The older, non-standardized `shadowroot` attribute is deprecated, and will *no longer function* in M119. Please use the new, standardized `shadowrootmode` attribute instead.",NoSysexWebMIDIWithoutPermission:"Web MIDI will ask a permission to use even if the sysex is not specified in the `MIDIOptions`.",NotificationInsecureOrigin:"The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",NotificationPermissionRequestedIframe:"Permission for the Notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead.",ObsoleteCreateImageBitmapImageOrientationNone:"Option `imageOrientation: 'none'` in createImageBitmap is deprecated. Please use createImageBitmap with option \\{imageOrientation: 'from-image'\\} instead.",ObsoleteWebRtcCipherSuite:"Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed.",OverflowVisibleOnReplacedElement:"Specifying `overflow: visible` on img, video and canvas tags may cause them to produce visual content outside of the element bounds. See https://github.com/WICG/shared-element-transitions/blob/main/debugging_overflow_on_images.md.",PaymentInstruments:"`paymentManager.instruments` is deprecated. Please use just-in-time install for payment handlers instead.",PaymentRequestCSPViolation:"Your `PaymentRequest` call bypassed Content-Security-Policy (CSP) `connect-src` directive. This bypass is deprecated. Please add the payment method identifier from the `PaymentRequest` API (in `supportedMethods` field) to your CSP `connect-src` directive.",PersistentQuotaType:"`StorageType.persistent` is deprecated. Please use standardized `navigator.storage` instead.",PictureSourceSrc:"`<source src>` with a `<picture>` parent is invalid and therefore ignored. Please use `<source srcset>` instead.",PrefixedCancelAnimationFrame:"webkitCancelAnimationFrame is vendor-specific. Please use the standard cancelAnimationFrame instead.",PrefixedRequestAnimationFrame:"webkitRequestAnimationFrame is vendor-specific. Please use the standard requestAnimationFrame instead.",PrefixedVideoDisplayingFullscreen:"HTMLVideoElement.webkitDisplayingFullscreen is deprecated. Please use Document.fullscreenElement instead.",PrefixedVideoEnterFullScreen:"HTMLVideoElement.webkitEnterFullScreen() is deprecated. Please use Element.requestFullscreen() instead.",PrefixedVideoEnterFullscreen:"HTMLVideoElement.webkitEnterFullscreen() is deprecated. Please use Element.requestFullscreen() instead.",PrefixedVideoExitFullScreen:"HTMLVideoElement.webkitExitFullScreen() is deprecated. Please use Document.exitFullscreen() instead.",PrefixedVideoExitFullscreen:"HTMLVideoElement.webkitExitFullscreen() is deprecated. Please use Document.exitFullscreen() instead.",PrefixedVideoSupportsFullscreen:"HTMLVideoElement.webkitSupportsFullscreen is deprecated. Please use Document.fullscreenEnabled instead.",PrivacySandboxExtensionsAPI:"We're deprecating the API `chrome.privacy.websites.privacySandboxEnabled`, though it will remain active for backward compatibility until release M113. Instead, please use `chrome.privacy.websites.topicsEnabled`, `chrome.privacy.websites.fledgeEnabled` and `chrome.privacy.websites.adMeasurementEnabled`. See https://developer.chrome.com/docs/extensions/reference/privacy/#property-websites-privacySandboxEnabled.",RangeExpand:"Range.expand() is deprecated. Please use Selection.modify() instead.",RequestedSubresourceWithEmbeddedCredentials:"Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.",RTCConstraintEnableDtlsSrtpFalse:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `false` value for this constraint, which is interpreted as an attempt to use the removed `SDES key negotiation` method. This functionality is removed; use a service that supports `DTLS key negotiation` instead.",RTCConstraintEnableDtlsSrtpTrue:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `true` value for this constraint, which had no effect, but you can remove this constraint for tidiness.",RTCPeerConnectionGetStatsLegacyNonCompliant:"The callback-based getStats() is deprecated and will be removed. Use the spec-compliant getStats() instead.",RtcpMuxPolicyNegotiate:"The `rtcpMuxPolicy` option is deprecated and will be removed.",SharedArrayBufferConstructedWithoutIsolation:"`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.",TextToSpeech_DisallowedByAutoplay:"`speechSynthesis.speak()` without user activation is deprecated and will be removed.",V8SharedArrayBufferConstructedInExtensionWithoutIsolation:"Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.",WebSQL:"Web SQL is deprecated. Please use SQLite WebAssembly or Indexed Database",WindowPlacementPermissionDescriptorUsed:"The permission descriptor `window-placement` is deprecated. Use `window-management` instead. For more help, check https://bit.ly/window-placement-rename.",WindowPlacementPermissionPolicyParsed:"The permission policy `window-placement` is deprecated. Use `window-management` instead. For more help, check https://bit.ly/window-placement-rename.",XHRJSONEncodingDetection:"UTF-16 is not supported by response json in `XMLHttpRequest`",XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload:"Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.",XRSupportsSession:"`supportsSession()` is deprecated. Please use `isSessionSupported()` and check the resolved boolean value instead."},xP={AuthorizationCoveredByWildcard:{milestone:97},CSSSelectorInternalMediaControlsOverlayCastButton:{chromeStatusFeature:5714245488476160},CanRequestURLHTTPContainingNewline:{chromeStatusFeature:5735596811091968},ChromeLoadTimesConnectionInfo:{chromeStatusFeature:5637885046816768},ChromeLoadTimesFirstPaintAfterLoadTime:{chromeStatusFeature:5637885046816768},ChromeLoadTimesWasAlternateProtocolAvailable:{chromeStatusFeature:5637885046816768},CookieWithTruncatingChar:{milestone:103},CrossOriginAccessBasedOnDocumentDomain:{milestone:115},DOMMutationEvents:{chromeStatusFeature:5083947249172480,milestone:127},DataUrlInSvgUse:{chromeStatusFeature:5128825141198848,milestone:119},DocumentDomainSettingWithoutOriginAgentClusterHeader:{milestone:115},ExpectCTHeader:{chromeStatusFeature:6244547273687040,milestone:107},IdentityInCanMakePaymentEvent:{chromeStatusFeature:5190978431352832},InsecurePrivateNetworkSubresourceRequest:{chromeStatusFeature:5436853517811712,milestone:92},LocalCSSFileExtensionRejected:{milestone:64},MediaSourceAbortRemove:{chromeStatusFeature:6107495151960064},MediaSourceDurationTruncatingBuffered:{chromeStatusFeature:6107495151960064},NoSysexWebMIDIWithoutPermission:{chromeStatusFeature:5138066234671104,milestone:82},NonStandardDeclarativeShadowDOM:{chromeStatusFeature:6239658726391808,milestone:119},NotificationPermissionRequestedIframe:{chromeStatusFeature:6451284559265792},ObsoleteCreateImageBitmapImageOrientationNone:{milestone:111},ObsoleteWebRtcCipherSuite:{milestone:81},OverflowVisibleOnReplacedElement:{chromeStatusFeature:5137515594383360,milestone:108},PaymentInstruments:{chromeStatusFeature:5099285054488576},PaymentRequestCSPViolation:{chromeStatusFeature:6286595631087616},PersistentQuotaType:{chromeStatusFeature:5176235376246784,milestone:106},RTCConstraintEnableDtlsSrtpFalse:{milestone:97},RTCConstraintEnableDtlsSrtpTrue:{milestone:97},RTCPeerConnectionGetStatsLegacyNonCompliant:{chromeStatusFeature:4631626228695040,milestone:117},RequestedSubresourceWithEmbeddedCredentials:{chromeStatusFeature:5669008342777856},RtcpMuxPolicyNegotiate:{chromeStatusFeature:5654810086866944,milestone:62},SharedArrayBufferConstructedWithoutIsolation:{milestone:106},TextToSpeech_DisallowedByAutoplay:{chromeStatusFeature:5687444770914304,milestone:71},V8SharedArrayBufferConstructedInExtensionWithoutIsolation:{milestone:96},WebSQL:{chromeStatusFeature:5134293578285056,milestone:115},WindowPlacementPermissionDescriptorUsed:{chromeStatusFeature:5137018030391296,milestone:112},WindowPlacementPermissionPolicyParsed:{chromeStatusFeature:5137018030391296,milestone:112},XHRJSONEncodingDetection:{milestone:93},XRSupportsSession:{milestone:80}}});function AP(t){let e,n=t.type,r=z0[n];r&&(e=nne(r));let a=[],o=xP[n],i=o?.chromeStatusFeature??0;i!==0&&a.push({link:`https://chromestatus.com/feature/${i}`,linkTitle:H0(S1.feature)});let c=o?.milestone??0;return c!==0&&a.push({link:"https://chromiumdash.appspot.com/schedule",linkTitle:H0(S1.milestone,{milestone:c})}),{substitutions:new Map([["PLACEHOLDER_title",H0(S1.title)],["PLACEHOLDER_message",e]]),links:a,message:e}}var S1,H0,nne,FP=v(()=>{"use strict";d();k();CP();S1={feature:"Check the feature status page for more details.",milestone:"This change will go into effect with milestone {milestone}.",title:"Deprecated Feature Used"},H0=w("core/lib/deprecation-description.js",S1),nne=w("core/lib/deprecation-description.js",z0);s(AP,"getIssueDetailDescription")});var RP={};S(RP,{UIStrings:()=>li,default:()=>rne});var li,Ks,G0,rne,_P=v(()=>{"use strict";d();J();Ta();k();FP();li={title:"Avoids deprecated APIs",failureTitle:"Uses deprecated APIs",description:"Deprecated APIs will eventually be removed from the browser. [Learn more about deprecated APIs](https://developer.chrome.com/docs/lighthouse/best-practices/deprecations/).",displayValue:`{itemCount, plural,
+    =1 {1 warning found}
+    other {# warnings found}
+    }`,columnDeprecate:"Deprecation / Warning",columnLine:"Line"},Ks=w("core/audits/deprecations.js",li),G0=class extends h{static{s(this,"Deprecations")}static get meta(){return{id:"deprecations",title:Ks(li.title),failureTitle:Ks(li.failureTitle),description:Ks(li.description),requiredArtifacts:["InspectorIssues","SourceMaps","Scripts"]}}static async audit(e,n){let r=await vn.request(e,n),a=e.InspectorIssues.deprecationIssue.map(u=>{let{scriptId:l,url:m,lineNumber:p,columnNumber:g}=u.sourceCodeLocation,f=r.find(A=>A.script.scriptId===l),y=AP(u),b;y.links.length&&(b={type:"subitems",items:y.links.map(A=>({type:"link",url:A.link,text:A.linkTitle}))});let D=u.message;return{value:y.message||D||u.type,source:h.makeSourceLocation(m,p,g-1,f),subItems:b}}),o=[{key:"value",valueType:"text",label:Ks(li.columnDeprecate)},{key:"source",valueType:"source-location",label:Ks(x.columnSource)}],i=h.makeTableDetails(o,a),c;return a.length>0&&(c=Ks(li.displayValue,{itemCount:a.length})),{score:+(a.length===0),displayValue:c,details:i}}},rne=G0});var kP={};S(kP,{default:()=>ane});var W0,ane,IP=v(()=>{"use strict";d();J();ba();De();Xo();Wt();W0=class extends h{static{s(this,"Diagnostics")}static get meta(){return{id:"diagnostics",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:"Diagnostics",description:"Collection of useful page vitals.",supportedModes:["navigation"],requiredArtifacts:["URL","traces","devtoolsLogs"]}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=await yn.request(r,n),i=await $.request(a,n),c=await dr.request(a,n),u=await je.request({devtoolsLog:a,URL:e.URL},n),l=o.filter(D=>!D.parent),m=u.transferSize,p=i.reduce((D,T)=>D+(T.transferSize||0),0),g=l.reduce((D,T)=>D+(T.duration||0),0),f=Math.max(...c.additionalRttByOrigin.values())+c.rtt,y=Math.max(...c.serverResponseTimeByOrigin.values());return{score:1,details:{type:"debugdata",items:[{numRequests:i.length,numScripts:i.filter(D=>D.resourceType==="Script").length,numStylesheets:i.filter(D=>D.resourceType==="Stylesheet").length,numFonts:i.filter(D=>D.resourceType==="Font").length,numTasks:l.length,numTasksOver10ms:l.filter(D=>D.duration>10).length,numTasksOver25ms:l.filter(D=>D.duration>25).length,numTasksOver50ms:l.filter(D=>D.duration>50).length,numTasksOver100ms:l.filter(D=>D.duration>100).length,numTasksOver500ms:l.filter(D=>D.duration>500).length,rtt:c.rtt,throughput:c.throughput,maxRtt:f,maxServerLatency:y,totalByteWeight:p,totalTaskTime:g,mainDocumentTransferSize:m}]}}}},ane=W0});var LP={};S(LP,{CHARSET_HTML_REGEX:()=>NP,CHARSET_HTTP_REGEX:()=>$0,IANA_REGEX:()=>MP,UIStrings:()=>hd,default:()=>ine});var hd,V0,one,MP,NP,$0,Y0,ine,PP=v(()=>{"use strict";d();J();k();Wt();hd={title:"Properly defines charset",failureTitle:"Charset declaration is missing or occurs too late in the HTML",description:"A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more about declaring the character encoding](https://developer.chrome.com/docs/lighthouse/best-practices/charset/)."},V0=w("core/audits/dobetterweb/charset.js",hd),one="content-type",MP=/^[a-zA-Z0-9-_:.()]{2,}$/,NP=/<meta[^>]+charset[^<]+>/i,$0=/charset\s*=\s*[a-zA-Z0-9-_:.()]{2,}/i,Y0=class extends h{static{s(this,"CharsetDefined")}static get meta(){return{id:"charset",title:V0(hd.title),failureTitle:V0(hd.failureTitle),description:V0(hd.description),requiredArtifacts:["MainDocumentContent","URL","devtoolsLogs","MetaElements"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await je.request({devtoolsLog:r,URL:e.URL},n),o=!1;if(a.responseHeaders){let c=a.responseHeaders.find(u=>u.name.toLowerCase()===one);c&&(o=$0.test(c.value))}let i=65279;return o=o||e.MainDocumentContent.charCodeAt(0)===i,NP.test(e.MainDocumentContent.slice(0,1024))&&(o=o||e.MetaElements.some(c=>c.charset&&MP.test(c.charset)||c.httpEquiv==="content-type"&&c.content&&$0.test(c.content))),{score:Number(o)}}},ine=Y0});var OP={};S(OP,{UIStrings:()=>gr,default:()=>sne});var gr,Ca,K0,sne,UP=v(()=>{"use strict";d();J();k();Jt();gr={title:"Page has the HTML doctype",failureTitle:"Page lacks the HTML doctype, thus triggering quirks-mode",description:"Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more about the doctype declaration](https://developer.chrome.com/docs/lighthouse/best-practices/doctype/).",explanationNoDoctype:"Document must contain a doctype",explanationWrongDoctype:"Document contains a `doctype` that triggers `quirks-mode`",explanationLimitedQuirks:"Document contains a `doctype` that triggers `limited-quirks-mode`",explanationPublicId:"Expected publicId to be an empty string",explanationSystemId:"Expected systemId to be an empty string",explanationBadDoctype:"Doctype name must be the string `html`"},Ca=w("core/audits/dobetterweb/doctype.js",gr),K0=class extends h{static{s(this,"Doctype")}static get meta(){return{id:"doctype",title:Ca(gr.title),failureTitle:Ca(gr.failureTitle),description:Ca(gr.description),requiredArtifacts:["Doctype"],__internalOptionalArtifacts:["InspectorIssues","traces"]}}static async audit(e,n){if(!e.Doctype)return{score:0,explanation:Ca(gr.explanationNoDoctype)};let r=e.Doctype.name,a=e.Doctype.publicId,o=e.Doctype.systemId,i=e.Doctype.documentCompatMode,c=e.traces?.[h.DEFAULT_PASS],u=[];if(c&&e.InspectorIssues){let p=(await Ye.request(c,n)).mainFrameInfo.frameId;u=e.InspectorIssues.quirksModeIssue.filter(g=>g.frameId===p)}let l=u.some(m=>m.isLimitedQuirksMode);return i==="CSS1Compat"&&!l?{score:1}:l?{score:0,explanation:Ca(gr.explanationLimitedQuirks)}:a!==""?{score:0,explanation:Ca(gr.explanationPublicId)}:o!==""?{score:0,explanation:Ca(gr.explanationSystemId)}:r!=="html"?{score:0,explanation:Ca(gr.explanationBadDoctype)}:{score:0,explanation:Ca(gr.explanationWrongDoctype)}}},sne=K0});var BP={};S(BP,{UIStrings:()=>hr,default:()=>cne});var hr,Gr,J0,cne,jP=v(()=>{"use strict";d();J();k();hr={title:"Avoids an excessive DOM size",failureTitle:"Avoid an excessive DOM size",description:"A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",columnStatistic:"Statistic",columnValue:"Value",displayValue:`{itemCount, plural,
+    =1 {1 element}
+    other {# elements}
+    }`,statisticDOMElements:"Total DOM Elements",statisticDOMDepth:"Maximum DOM Depth",statisticDOMWidth:"Maximum Child Elements"},Gr=w("core/audits/dobetterweb/dom-size.js",hr),J0=class extends h{static{s(this,"DOMSize")}static get meta(){return{id:"dom-size",title:Gr(hr.title),failureTitle:Gr(hr.failureTitle),description:Gr(hr.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["DOMStats"]}}static get defaultOptions(){return{p10:818,median:1400}}static audit(e,n){let r=e.DOMStats,a=h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},r.totalBodyElements),o=[{key:"statistic",valueType:"text",label:Gr(hr.columnStatistic)},{key:"node",valueType:"node",label:Gr(x.columnElement)},{key:"value",valueType:"numeric",label:Gr(hr.columnValue)}],i=[{statistic:Gr(hr.statisticDOMElements),value:{type:"numeric",granularity:1,value:r.totalBodyElements}},{node:h.makeNodeItem(r.depth),statistic:Gr(hr.statisticDOMDepth),value:{type:"numeric",granularity:1,value:r.depth.max}},{node:h.makeNodeItem(r.width),statistic:Gr(hr.statisticDOMWidth),value:{type:"numeric",granularity:1,value:r.width.max}}];return{score:a,numericValue:r.totalBodyElements,numericUnit:"element",displayValue:Gr(hr.displayValue,{itemCount:r.totalBodyElements}),details:h.makeTableDetails(o,i)}}},cne=J0});var X0,En,yd=v(()=>{"use strict";d();J();Ta();X0=class extends h{static{s(this,"ViolationAudit")}static async getViolationResults(e,n,r){let a=await vn.request(e,n);function o(c){return c!==void 0}s(o,"filterUndefined");let i=new Set;return e.ConsoleMessages.filter(c=>c.url&&c.source==="violation"&&r.test(c.text)).map(c=>{let u=a.find(l=>l.script.scriptId===c.scriptId);return h.makeSourceLocationFromConsoleMessage(c,u)}).filter(o).filter(c=>{let u=`${c.url}!${c.line}!${c.column}`;return i.has(u)?!1:(i.add(u),!0)}).map(c=>({source:c}))}},En=X0});var qP={};S(qP,{UIStrings:()=>vd,default:()=>une});var vd,x1,Z0,une,zP=v(()=>{"use strict";d();yd();k();vd={title:"Avoids requesting the geolocation permission on page load",failureTitle:"Requests the geolocation permission on page load",description:"Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more about the geolocation permission](https://developer.chrome.com/docs/lighthouse/best-practices/geolocation-on-start/)."},x1=w("core/audits/dobetterweb/geolocation-on-start.js",vd),Z0=class extends En{static{s(this,"GeolocationOnStart")}static get meta(){return{id:"geolocation-on-start",title:x1(vd.title),failureTitle:x1(vd.failureTitle),description:x1(vd.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static async audit(e,n){let r=await En.getViolationResults(e,n,/geolocation/),a=[{key:"source",valueType:"source-location",label:x1(x.columnSource)}],o=En.makeTableDetails(a,r);return{score:+(r.length===0),details:o}}},une=Z0});var HP={};S(HP,{UIStrings:()=>mo,default:()=>lne});var mo,Js,Q0,lne,GP=v(()=>{"use strict";d();J();k();mo={title:"No issues in the `Issues` panel in Chrome Devtools",failureTitle:"Issues were logged in the `Issues` panel in Chrome Devtools",description:"Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.",columnIssueType:"Issue type",issueTypeBlockedByResponse:"Blocked by cross-origin policy",issueTypeHeavyAds:"Heavy resource usage by ads"},Js=w("core/audits/dobetterweb/inspector-issues.js",mo),Q0=class extends h{static{s(this,"IssuesPanelEntries")}static get meta(){return{id:"inspector-issues",title:Js(mo.title),failureTitle:Js(mo.failureTitle),description:Js(mo.description),requiredArtifacts:["InspectorIssues"]}}static getMixedContentRow(e){let n=new Set;for(let r of e){let a=r.request?.url||r.mainResourceURL;n.add(a)}return{issueType:"Mixed content",subItems:{type:"subitems",items:Array.from(n).map(r=>({url:r}))}}}static getCookieRow(e){let n=new Set;for(let r of e){let a=r.request?.url||r.cookieUrl;a&&n.add(a)}return{issueType:"Cookie",subItems:{type:"subitems",items:Array.from(n).map(r=>({url:r}))}}}static getBlockedByResponseRow(e){let n=new Set;for(let r of e){let a=r.request?.url;a&&n.add(a)}return{issueType:Js(mo.issueTypeBlockedByResponse),subItems:{type:"subitems",items:Array.from(n).map(r=>({url:r}))}}}static getContentSecurityPolicyRow(e){let n=new Set;for(let r of e){let a=r.blockedURL;a&&n.add(a)}return{issueType:"Content security policy",subItems:{type:"subitems",items:Array.from(n).map(r=>({url:r}))}}}static audit(e){let n=[{key:"issueType",valueType:"text",subItemsHeading:{key:"url",valueType:"url"},label:Js(mo.columnIssueType)}],r=e.InspectorIssues,a=[];r.mixedContentIssue.length&&a.push(this.getMixedContentRow(r.mixedContentIssue)),r.cookieIssue.length&&a.push(this.getCookieRow(r.cookieIssue)),r.blockedByResponseIssue.length&&a.push(this.getBlockedByResponseRow(r.blockedByResponseIssue)),r.heavyAdIssue.length&&a.push({issueType:Js(mo.issueTypeHeavyAds)});let o=r.contentSecurityPolicyIssue.filter(i=>i.contentSecurityPolicyViolationType!=="kTrustedTypesSinkViolation"&&i.contentSecurityPolicyViolationType!=="kTrustedTypesPolicyViolation");return o.length&&a.push(this.getContentSecurityPolicyRow(o)),{score:a.length>0?0:1,details:h.makeTableDetails(n,a)}}},lne=Q0});var WP={};S(WP,{UIStrings:()=>bd,default:()=>dne});var bd,C1,eD,dne,VP=v(()=>{"use strict";d();J();k();bd={title:"Detected JavaScript libraries",description:"All front-end JavaScript libraries detected on the page. [Learn more about this JavaScript library detection diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/js-libraries/).",columnVersion:"Version"},C1=w("core/audits/dobetterweb/js-libraries.js",bd),eD=class extends h{static{s(this,"JsLibrariesAudit")}static get meta(){return{id:"js-libraries",title:C1(bd.title),scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,description:C1(bd.description),requiredArtifacts:["Stacks"]}}static audit(e){let n=e.Stacks.filter(i=>i.detector==="js").filter(i=>!i.id.endsWith("-fast")).map(i=>({name:i.name,version:i.version,npm:i.npm})),r=[{key:"name",valueType:"text",label:C1(x.columnName)},{key:"version",valueType:"text",label:C1(bd.columnVersion)}],a=h.makeTableDetails(r,n),o={type:"debugdata",stacks:e.Stacks.map(i=>({id:i.id,version:i.version}))};return n.length?{score:1,details:{...a,debugData:o}}:{score:null,notApplicable:!0}}},dne=eD});var $P={};S($P,{UIStrings:()=>wd,default:()=>mne});var wd,A1,tD,mne,YP=v(()=>{"use strict";d();yd();k();wd={title:"Avoids `document.write()`",failureTitle:"Avoid `document.write()`",description:"For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. [Learn how to avoid document.write()](https://developer.chrome.com/docs/lighthouse/best-practices/no-document-write/)."},A1=w("core/audits/dobetterweb/no-document-write.js",wd),tD=class extends En{static{s(this,"NoDocWriteAudit")}static get meta(){return{id:"no-document-write",title:A1(wd.title),failureTitle:A1(wd.failureTitle),description:A1(wd.description),requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static async audit(e,n){let r=await En.getViolationResults(e,n,/document\.write/),a=[{key:"source",valueType:"source-location",label:A1(x.columnSource)}],o=En.makeTableDetails(a,r);return{score:+(r.length===0),details:o}}},mne=tD});var KP={};S(KP,{UIStrings:()=>Dd,default:()=>pne});var Dd,F1,nD,pne,JP=v(()=>{"use strict";d();yd();k();Dd={title:"Avoids requesting the notification permission on page load",failureTitle:"Requests the notification permission on page load",description:"Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more about responsibly getting permission for notifications](https://developer.chrome.com/docs/lighthouse/best-practices/notification-on-start/)."},F1=w("core/audits/dobetterweb/notification-on-start.js",Dd),nD=class extends En{static{s(this,"NotificationOnStart")}static get meta(){return{id:"notification-on-start",title:F1(Dd.title),failureTitle:F1(Dd.failureTitle),description:F1(Dd.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static async audit(e,n){let r=await En.getViolationResults(e,n,/notification permission/),a=[{key:"source",valueType:"source-location",label:F1(x.columnSource)}],o=En.makeTableDetails(a,r);return{score:+(r.length===0),details:o}}},pne=nD});var XP={};S(XP,{UIStrings:()=>Ed,default:()=>fne});var Ed,R1,rD,fne,ZP=v(()=>{"use strict";d();J();k();Ed={title:"Allows users to paste into input fields",failureTitle:"Prevents users from pasting into input fields",description:"Preventing input pasting is a bad practice for the UX, and weakens security by blocking password managers.[Learn more about user-friendly input fields](https://developer.chrome.com/docs/lighthouse/best-practices/paste-preventing-inputs/)."},R1=w("core/audits/dobetterweb/paste-preventing-inputs.js",Ed),rD=class extends h{static{s(this,"PastePreventingInputsAudit")}static get meta(){return{id:"paste-preventing-inputs",title:R1(Ed.title),failureTitle:R1(Ed.failureTitle),description:R1(Ed.description),requiredArtifacts:["Inputs"]}}static audit(e){let n=e.Inputs.inputs.filter(o=>o.preventsPaste),r=[];n.forEach(o=>{r.push({node:h.makeNodeItem(o.node),type:o.type})});let a=[{key:"node",valueType:"node",label:R1(x.columnFailingElem)}];return{score:+(n.length===0),details:h.makeTableDetails(a,r)}}},fne=rD});var QP={};S(QP,{UIStrings:()=>mi,default:()=>hne});var mi,di,gne,aD,hne,e5=v(()=>{"use strict";d();J();ma();lt();Xt();oi();St();De();tr();$n();ii();fr();k();mi={title:"Use HTTP/2",description:"HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. [Learn more about HTTP/2](https://developer.chrome.com/docs/lighthouse/best-practices/uses-http2/).",displayValue:`{itemCount, plural,
+    =1 {1 request not served via HTTP/2}
+    other {# requests not served via HTTP/2}
+    }`,columnProtocol:"Protocol"},di=w("core/audits/dobetterweb/uses-http2.js",mi),gne=new Set([Y.TYPES.Document,Y.TYPES.Font,Y.TYPES.Image,Y.TYPES.Stylesheet,Y.TYPES.Script,Y.TYPES.Media]),aD=class t extends h{static{s(this,"UsesHTTP2Audit")}static get meta(){return{id:"uses-http2",title:di(mi.title),description:di(mi.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["timespan","navigation"],requiredArtifacts:["URL","devtoolsLogs","traces","GatherContext"]}}static computeWasteWithGraph(e,n,r,a){a=Object.assign({label:""},a);let o=`${this.meta.id}-${a.label}-before`,i=`${this.meta.id}-${a.label}-after`,c=!0,u=new Set(e.map(f=>f.url)),l=r.simulate(n,{label:o,flexibleOrdering:c}),m=new Map;n.traverse(f=>{f.type==="network"&&u.has(f.record.url)&&(m.set(f.record.requestId,f.record.protocol),f.record.protocol="h2")});let p=r.simulate(n,{label:i,flexibleOrdering:c});n.traverse(f=>{if(f.type!=="network")return;let y=m.get(f.record.requestId);y!==void 0&&(f.record.protocol=y)});let g=l.timeInMs-p.timeInMs;return{savings:Math.round(Math.max(g,0)/10)*10,simulationBefore:l,simulationAfter:p}}static computeWasteWithTTIGraph(e,n,r){let{savings:a,simulationBefore:o,simulationAfter:i}=this.computeWasteWithGraph(e,n,r,{label:"tti"}),c=jn.getLastLongTaskEndTime(o.nodeTimings)-jn.getLastLongTaskEndTime(i.nodeTimings),u=Math.max(c,a);return Math.round(Math.max(u,0)/10)*10}static isStaticAsset(e,n){if(!gne.has(e.resourceType))return!1;if(e.resourceSize<100){let r=n.entityByUrl.get(e.url);if(r&&!r.isUnrecognized)return!1}return!0}static determineNonHttp2Resources(e,n){let r=[],a=new Set,o=new Map;for(let i of e){if(!t.isStaticAsset(i,n)||te.isLikeLocalhost(i.parsedURL.host))continue;let c=o.get(i.parsedURL.securityOrigin)||[];c.push(i),o.set(i.parsedURL.securityOrigin,c)}for(let i of e)a.has(i.url)||i.fetchedViaServiceWorker||!/HTTP\/[01][.\d]?/i.test(i.protocol)||(o.get(i.parsedURL.securityOrigin)||[]).length<6||(a.add(i.url),r.push({protocol:i.protocol,url:i.url}));return r}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.URL,i=await $.request(a,n),c=await gn.request({URL:o,devtoolsLog:a},n),u=t.determineNonHttp2Resources(i,c),l;if(u.length>0&&(l=di(mi.displayValue,{itemCount:u.length})),e.GatherContext.gatherMode==="timespan"){let V=[{key:"url",valueType:"url",label:di(x.columnURL)},{key:"protocol",valueType:"text",label:di(mi.columnProtocol)}],z=h.makeTableDetails(V,u);return{displayValue:l,score:u.length?0:1,details:z}}let m=n?.settings||{},p={devtoolsLog:a,settings:m},g=await kt.request({trace:r,devtoolsLog:a,URL:o},n),f=await Ht.request(p,n),y=h.makeMetricComputationDataInput(e,n),{pessimisticGraph:b}=await It.request(y,n),{pessimisticGraph:D}=await rr.request(y,n),T=t.computeWasteWithTTIGraph(u,g,f),A=t.computeWasteWithGraph(u,b,f,{label:"fcp"}),R=t.computeWasteWithGraph(u,D,f,{label:"lcp"}),F=[{key:"url",valueType:"url",label:di(x.columnURL)},{key:"protocol",valueType:"text",label:di(mi.columnProtocol)}],M=h.makeOpportunityDetails(F,u,{overallSavingsMs:T});return{displayValue:l,numericValue:T,numericUnit:"millisecond",score:ie.scoreForWastedMs(T),details:M,metricSavings:{LCP:R.savings,FCP:A.savings}}}},hne=aD});var t5={};S(t5,{UIStrings:()=>Td,default:()=>yne});var Td,_1,oD,yne,n5=v(()=>{"use strict";d();yd();k();Td={title:"Uses passive listeners to improve scrolling performance",failureTitle:"Does not use passive listeners to improve scrolling performance",description:"Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. [Learn more about adopting passive event listeners](https://developer.chrome.com/docs/lighthouse/best-practices/uses-passive-event-listeners/)."},_1=w("core/audits/dobetterweb/uses-passive-event-listeners.js",Td),oD=class extends En{static{s(this,"PassiveEventsAudit")}static get meta(){return{id:"uses-passive-event-listeners",title:_1(Td.title),failureTitle:_1(Td.failureTitle),description:_1(Td.description),requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static async audit(e,n){let r=await En.getViolationResults(e,n,/passive event listener/),a=[{key:"source",valueType:"source-location",label:_1(x.columnSource)}],o=En.makeTableDetails(a,r);return{score:+(r.length===0),details:o}}},yne=oD});var r5={};S(r5,{UIStrings:()=>xd,default:()=>vne});var xd,Sd,iD,vne,a5=v(()=>{"use strict";d();He();J();Ta();k();xd={title:"No browser errors logged to the console",failureTitle:"Browser errors were logged to the console",description:"Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more about this errors in console diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/errors-in-console/)"},Sd=w("core/audits/errors-in-console.js",xd),iD=class t extends h{static{s(this,"ErrorLogs")}static get meta(){return{id:"errors-in-console",title:Sd(xd.title),failureTitle:Sd(xd.failureTitle),description:Sd(xd.description),requiredArtifacts:["ConsoleMessages","SourceMaps","Scripts"]}}static get defaultOptions(){return{ignoredPatterns:["ERR_BLOCKED_BY_CLIENT.Inspector"]}}static filterAccordingToOptions(e,n){let{ignoredPatterns:r,...a}=n,o=Object.keys(a);return o.length&&N.warn(this.meta.id,"Unrecognized options",o),r?e.filter(({description:i})=>{if(!i)return!0;for(let c of r)if(c instanceof RegExp&&c.test(i)||typeof c=="string"&&i.includes(c))return!1;return!0}):e}static async audit(e,n){let r=n.options,a=await vn.request(e,n),o=e.ConsoleMessages.filter(m=>m.level==="error").map(m=>{let p=a.find(g=>g.script.scriptId===m.scriptId);return{source:m.source,description:m.text,sourceLocation:h.makeSourceLocationFromConsoleMessage(m,p)}}),i=t.filterAccordingToOptions(o,r).sort((m,p)=>(m.description||"").localeCompare(p.description||"")),c=[{key:"sourceLocation",valueType:"source-location",label:Sd(x.columnSource)},{key:"description",valueType:"code",label:Sd(x.columnDescription)}],u=h.makeTableDetails(c,i);return{score:+(i.length===0),details:u}}},vne=iD});var bne,sD,o5,i5=v(()=>{"use strict";d();we();bne="Screenshot",sD=class{static{s(this,"Screenshots")}static async compute_(e){return e.traceEvents.filter(n=>n.name===bne).map(n=>({timestamp:n.ts,datauri:`data:image/jpeg;base64,${n.args.snapshot}`}))}},o5=W(sD,null)});var s5={};S(s5,{default:()=>wne});var cD,wne,c5=v(()=>{"use strict";d();J();Bt();Jt();i5();cD=class extends h{static{s(this,"FinalScreenshot")}static get meta(){return{id:"final-screenshot",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:"Final Screenshot",description:"The last screenshot captured of the pageload.",requiredArtifacts:["traces","GatherContext"]}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=await Ye.request(r,n),o=await o5.request(r,n),{timeOrigin:i}=a.timestamps,c=o[o.length-1];if(!c){if(e.GatherContext.gatherMode==="timespan")return{notApplicable:!0,score:1};throw new G(G.errors.NO_SCREENSHOTS)}return{score:1,details:{type:"screenshot",timing:Math.round((c.timestamp-i)/1e3),timestamp:c.timestamp,data:c.datauri}}}},wne=cD});var l5={};S(l5,{UIStrings:()=>Zs,default:()=>lD});var Dne,u5,Ene,Zs,Xs,uD,lD,dD=v(()=>{"use strict";d();J();lt();k();da();De();Dne=/^(block|fallback|optional|swap)$/,u5=/url\((.*?)\)/,Ene=new RegExp(u5,"g"),Zs={title:"All text remains visible during webfont loads",failureTitle:"Ensure text remains visible during webfont load",description:"Leverage the `font-display` CSS feature to ensure text is user-visible while webfonts are loading. [Learn more about `font-display`](https://developer.chrome.com/docs/lighthouse/performance/font-display/).",undeclaredFontOriginWarning:"{fontCountForOrigin, plural, =1 {Lighthouse was unable to automatically check the `font-display` value for the origin {fontOrigin}.} other {Lighthouse was unable to automatically check the `font-display` values for the origin {fontOrigin}.}}"},Xs=w("core/audits/font-display.js",Zs),uD=class t extends h{static{s(this,"FontDisplay")}static get meta(){return{id:"font-display",title:Xs(Zs.title),failureTitle:Xs(Zs.failureTitle),description:Xs(Zs.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","CSSUsage","URL"]}}static findFontDisplayDeclarations(e,n){let r=new Set,a=new Set;for(let o of e.CSSUsage.stylesheets){let c=o.content.replace(/(\r|\n)+/g," ").match(/@font-face\s*{(.*?)}/g)||[];for(let u of c){let l=u.match(Ene);if(!l)continue;let p=u.match(/font-display\s*:\s*(\w+)\s*(;|\})/)?.[1]||"",f=n.test(p)?r:a,y=l.map(b=>b.match(u5)[1].trim()).map(b=>/^('|").*\1$/.test(b)?b.substr(1,b.length-2):b);for(let b of y)try{let D=te.isValid(o.header.sourceURL)?o.header.sourceURL:e.URL.finalDisplayedUrl,T=new URL(b,D);f.add(T.href)}catch(D){en.captureException(D,{tags:{audit:this.meta.id}})}}}return{passingURLs:r,failingURLs:a}}static getWarningsForFontUrls(e){let n=new Map;for(let a of e){let o=te.getOrigin(a);if(!o)continue;let i=n.get(o)||0;n.set(o,i+1)}return[...n].map(([a,o])=>Xs(Zs.undeclaredFontOriginWarning,{fontCountForOrigin:o,fontOrigin:a}))}static async audit(e,n){let r=e.devtoolsLogs[this.DEFAULT_PASS],a=await $.request(r,n),{passingURLs:o,failingURLs:i}=t.findFontDisplayDeclarations(e,Dne),c=[],u=a.filter(p=>p.resourceType==="Font").filter(p=>!/^data:/.test(p.url)).filter(p=>!/^blob:/.test(p.url)).filter(p=>i.has(p.url)?!0:(o.has(p.url)||c.push(p.url),!1)).map(p=>{let g=Math.min(p.networkEndTime-p.networkRequestTime,3e3);return{url:p.url,wastedMs:g}}),l=[{key:"url",valueType:"url",label:Xs(x.columnURL)},{key:"wastedMs",valueType:"ms",label:Xs(x.columnWastedMs)}],m=h.makeTableDetails(l,u);return{score:+(u.length===0),details:m,warnings:t.getWarningsForFontUrls(c)}}},lD=uD});var d5={};S(d5,{UIStrings:()=>pi,default:()=>Sne});var pi,Qs,Tne,mD,Sne,m5=v(()=>{"use strict";d();J();lt();k();pi={title:"Displays images with correct aspect ratio",failureTitle:"Displays images with incorrect aspect ratio",description:"Image display dimensions should match natural aspect ratio. [Learn more about image aspect ratio](https://developer.chrome.com/docs/lighthouse/best-practices/image-aspect-ratio/).",columnDisplayed:"Aspect Ratio (Displayed)",columnActual:"Aspect Ratio (Actual)"},Qs=w("core/audits/image-aspect-ratio.js",pi),Tne=2,mD=class t extends h{static{s(this,"ImageAspectRatio")}static get meta(){return{id:"image-aspect-ratio",title:Qs(pi.title),failureTitle:Qs(pi.failureTitle),description:Qs(pi.description),requiredArtifacts:["ImageElements"]}}static computeAspectRatios(e){let n=te.elideDataURI(e.src),r=e.naturalDimensions.width/e.naturalDimensions.height,a=e.displayedWidth/e.displayedHeight,o=e.displayedWidth/r,i=Math.abs(o-e.displayedHeight)<Tne;return{url:n,node:h.makeNodeItem(e.node),displayedAspectRatio:`${e.displayedWidth} x ${e.displayedHeight}
+        (${a.toFixed(2)})`,actualAspectRatio:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}
+        (${r.toFixed(2)})`,doRatiosMatch:i}}static audit(e){let n=e.ImageElements,r=[];n.filter(o=>!o.isCss&&te.guessMimeType(o.src)!=="image/svg+xml"&&o.naturalDimensions&&o.naturalDimensions.height>5&&o.naturalDimensions.width>5&&o.displayedWidth&&o.displayedHeight&&o.computedStyles.objectFit==="fill").forEach(o=>{let i=o,c=t.computeAspectRatios(i);c.doRatiosMatch||r.push(c)});let a=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:Qs(x.columnURL)},{key:"displayedAspectRatio",valueType:"text",label:Qs(pi.columnDisplayed)},{key:"actualAspectRatio",valueType:"text",label:Qs(pi.columnActual)}];return{score:+(r.length===0),details:h.makeTableDetails(a,r)}}},Sne=mD});var f5={};S(f5,{UIStrings:()=>po,default:()=>One});function Ane(t,e){return(t.bottom-t.top)*(t.right-t.left)>0&&t.top<=e.innerHeight&&t.bottom>=0&&t.left<=e.innerWidth&&t.right>=0}function Fne(t,e){return t.bottom-t.top<=e.innerHeight&&t.right-t.left<=e.innerWidth}function Rne(t){let e=["pixelated","crisp-edges"],n=/ \d+(\.\d+)?x/;return!(t.displayedWidth<=1||t.displayedHeight<=1||!t.naturalDimensions||!t.naturalDimensions.width||!t.naturalDimensions.height||te.guessMimeType(t.src)==="image/svg+xml"||t.isCss||t.computedStyles.objectFit!=="fill"||e.includes(t.computedStyles.imageRendering)||n.test(t.srcset))}function _ne(t){return!!t.naturalDimensions}function kne(t,e){let[n,r]=Mne(t.displayedWidth,t.displayedHeight,e);return t.naturalDimensions.width>=n&&t.naturalDimensions.height>=r}function Ine(t,e){let[n,r]=Nne(t.displayedWidth,t.displayedHeight,e);return{url:te.elideDataURI(t.src),node:h.makeNodeItem(t.node),displayedSize:`${t.displayedWidth} x ${t.displayedHeight}`,actualSize:`${t.naturalDimensions.width} x ${t.naturalDimensions.height}`,actualPixels:t.naturalDimensions.width*t.naturalDimensions.height,expectedSize:`${n} x ${r}`,expectedPixels:n*r}}function Mne(t,e,n){let r=xne;(t>p5||e>p5)&&(r=Cne);let a=fD(n),o=Math.ceil(r*a*t),i=Math.ceil(r*a*e);return[o,i]}function Nne(t,e,n){let r=Math.ceil(fD(n)*t),a=Math.ceil(fD(n)*e);return[r,a]}function Lne(t){t.sort((n,r)=>n.url===r.url?0:n.url<r.url?-1:1);let e=[];for(let n of t){let r=e[e.length-1];r&&r.url===n.url?r.expectedPixels<n.expectedPixels&&(e[e.length-1]=n):e.push(n)}return e}function Pne(t){return t.sort((e,n)=>n.expectedPixels-n.actualPixels-(e.expectedPixels-e.actualPixels))}function fD(t){return t>=2?2:t>=1.5?1.5:1}var po,fi,xne,Cne,p5,pD,One,g5=v(()=>{"use strict";d();J();lt();k();po={title:"Serves images with appropriate resolution",failureTitle:"Serves images with low resolution",description:"Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn how to provide responsive images](https://web.dev/serve-responsive-images/).",columnDisplayed:"Displayed size",columnActual:"Actual size",columnExpected:"Expected size"},fi=w("core/audits/image-size-responsive.js",po),xne=1,Cne=.75,p5=64;s(Ane,"isVisible");s(Fne,"isSmallerThanViewport");s(Rne,"isCandidate");s(_ne,"imageHasNaturalDimensions");s(kne,"imageHasRightSize");s(Ine,"getResult");s(Mne,"allowedImageSize");s(Nne,"expectedImageSize");s(Lne,"deduplicateResultsByUrl");s(Pne,"sortResultsBySizeDelta");pD=class extends h{static{s(this,"ImageSizeResponsive")}static get meta(){return{id:"image-size-responsive",title:fi(po.title),failureTitle:fi(po.failureTitle),description:fi(po.description),requiredArtifacts:["ImageElements","ViewportDimensions"]}}static audit(e){let n=e.ViewportDimensions.devicePixelRatio,r=Array.from(e.ImageElements).filter(Rne).filter(_ne).filter(i=>!kne(i,n)).filter(i=>Ane(i.clientRect,e.ViewportDimensions)).filter(i=>Fne(i.clientRect,e.ViewportDimensions)).map(i=>Ine(i,n)),a=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:fi(x.columnURL)},{key:"displayedSize",valueType:"text",label:fi(po.columnDisplayed)},{key:"actualSize",valueType:"text",label:fi(po.columnActual)},{key:"expectedSize",valueType:"text",label:fi(po.columnExpected)}],o=Pne(Lne(r));return{score:+(r.length===0),details:h.makeTableDetails(a,o)}}};s(fD,"quantizeDpr");One=pD});function Cd(t){return!(!t||!t.icons||t.icons.value.length===0)}function gD(t,e){let n=e.icons.value,r=[];return n.filter(a=>{let o=a.value.type.value;if(o)return o==="image/png";let i=a.value.src.value;return i&&new URL(i).pathname.endsWith(".png")}).forEach(a=>{a.value.sizes.value&&r.push(...a.value.sizes.value)}),r.filter(a=>/\d+x\d+/.test(a)).filter(a=>{let o=a.split(/x/i),i=[parseFloat(o[0]),parseFloat(o[1])],c=i[0]>=t&&i[1]>=t,u=i[0]===i[1];return c&&u})}function h5(t){return t.icons.value.some(n=>n.value.purpose?.value&&n.value.purpose.value.includes("maskable"))}var y5=v(()=>{"use strict";d();s(Cd,"doExist");s(gD,"pngSizedAtLeast");s(h5,"containsMaskableIcon")});var v5,b5,hD,fo,Ad=v(()=>{"use strict";d();we();y5();v5=["minimal-ui","fullscreen","standalone"],b5=12,hD=class t{static{s(this,"ManifestValues")}static get manifestChecks(){return[{id:"hasStartUrl",failureText:"Manifest does not contain a `start_url`",validate:e=>!!e.start_url.value},{id:"hasIconsAtLeast144px",failureText:"Manifest does not have a PNG icon of at least 144px",validate:e=>Cd(e)&&gD(144,e).length>0},{id:"hasIconsAtLeast512px",failureText:"Manifest does not have a PNG icon of at least 512px",validate:e=>Cd(e)&&gD(512,e).length>0},{id:"fetchesIcon",failureText:"Manifest icon failed to be fetched",validate:(e,n)=>{let r=["cannot-download-icon","no-icon-available"];return Cd(e)&&!n.some(a=>r.includes(a.errorId))}},{id:"hasPWADisplayValue",failureText:"Manifest's `display` value is not one of: "+v5.join(" | "),validate:e=>v5.includes(e.display.value)},{id:"hasBackgroundColor",failureText:"Manifest does not have `background_color`",validate:e=>!!e.background_color.value},{id:"hasThemeColor",failureText:"Manifest does not have `theme_color`",validate:e=>!!e.theme_color.value},{id:"hasShortName",failureText:"Manifest does not have `short_name`",validate:e=>!!e.short_name.value},{id:"shortNameLength",failureText:`Manifest's \`short_name\` is too long (>${b5} characters) to be displayed on a homescreen without truncation`,validate:e=>!!e.short_name.value&&e.short_name.value.length<=b5},{id:"hasName",failureText:"Manifest does not have `name`",validate:e=>!!e.name.value},{id:"hasMaskableIcon",failureText:"Manifest does not have at least one icon that is maskable",validate:e=>Cd(e)&&h5(e)}]}static async compute_({WebAppManifest:e,InstallabilityErrors:n}){if(e===null)return{isParseFailure:!0,parseFailureReason:"No manifest was fetched",allChecks:[]};let r=e.value;return r===void 0?{isParseFailure:!0,parseFailureReason:"Manifest failed to parse as valid JSON",allChecks:[]}:{isParseFailure:!1,allChecks:t.manifestChecks.map(o=>({id:o.id,failureText:o.failureText,passing:o.validate(r,n.errors)}))}}},fo=W(hD,["InstallabilityErrors","WebAppManifest"])});var w5={};S(w5,{UIStrings:()=>Vr,default:()=>Bne});var Vr,Wr,yD,Bne,D5=v(()=>{"use strict";d();J();k();Ad();Vr={title:"Web app manifest and service worker meet the installability requirements",failureTitle:"Web app manifest or service worker do not meet the installability requirements",description:"Service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. [Learn more about manifest installability requirements](https://developer.chrome.com/docs/lighthouse/pwa/installable-manifest/).",columnValue:"Failure reason",displayValue:`{itemCount, plural,
+    =1 {1 reason}
+    other {# reasons}
+    }`,noErrorId:"Installability error id '{errorId}' is not recognized","not-in-main-frame":"Page is not loaded in the main frame","not-from-secure-origin":"Page is not served from a secure origin","no-manifest":"Page has no manifest <link> URL","start-url-not-valid":"Manifest start URL is not valid","manifest-missing-name-or-short-name":"Manifest does not contain a 'name' or 'short_name' field","manifest-display-not-supported":"Manifest 'display' property must be one of 'standalone', 'fullscreen', or 'minimal-ui'","manifest-empty":"Manifest could not be fetched, is empty, or could not be parsed","manifest-missing-suitable-icon":'Manifest does not contain a suitable icon - PNG, SVG or WebP format of at least {value0} px is required, the sizes attribute must be set, and the purpose attribute, if set, must include "any".',"no-acceptable-icon":'No supplied icon is at least {value0} px square in PNG, SVG or WebP format, with the purpose attribute unset or set to "any"',"cannot-download-icon":"Could not download a required icon from the manifest","no-icon-available":"Downloaded icon was empty or corrupted","platform-not-supported-on-android":"The specified application platform is not supported on Android","no-id-specified":"No Play store ID provided","ids-do-not-match":"The Play Store app URL and Play Store ID do not match","already-installed":"The app is already installed","url-not-supported-for-webapk":"A URL in the manifest contains a username, password, or port","in-incognito":"Page is loaded in an incognito window","not-offline-capable":"Page does not work offline","no-url-for-service-worker":"Could not check service worker without a 'start_url' field in the manifest","prefer-related-applications":"Manifest specifies prefer_related_applications: true","prefer-related-applications-only-beta-stable":"prefer_related_applications is only supported on Chrome Beta and Stable channels on Android.","manifest-display-override-not-supported":"Manifest contains 'display_override' field, and the first supported display mode must be one of 'standalone', 'fullscreen', or 'minimal-ui'","manifest-location-changed":"Manifest URL changed while the manifest was being fetched.","warn-not-offline-capable":"Page does not work offline. The page will not be regarded as installable after Chrome 93, stable release August 2021.","protocol-timeout":"Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome.","pipeline-restarted":"PWA has been uninstalled and installability checks resetting.","scheme-not-supported-for-webapk":"The manifest URL scheme ({scheme}) is not supported on Android."},Wr=w("core/audits/installable-manifest.js",Vr),yD=class t extends h{static{s(this,"InstallableManifest")}static get meta(){return{id:"installable-manifest",title:Wr(Vr.title),failureTitle:Wr(Vr.failureTitle),description:Wr(Vr.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static getInstallabilityErrors(e){let n=e.InstallabilityErrors.errors,r=[],a=[],o=/{([^}]+)}/g;for(let i of n){if(i.errorId==="in-incognito")continue;if(i.errorId==="warn-not-offline-capable"){a.push(Wr(Vr[i.errorId]));continue}if(i.errorId==="pipeline-restarted")continue;let c=Vr[i.errorId];if(i.errorId==="scheme-not-supported-for-webapk"){let m=e.WebAppManifest?.url;if(!m)continue;let p=new URL(m).protocol;r.push(Wr(c,{scheme:p}));continue}if(c===void 0){r.push(Wr(Vr.noErrorId,{errorId:i.errorId}));continue}let u=c.match(o)||[],l=i.errorArguments?.length&&i.errorArguments[0].value;if(c&&i.errorArguments.length!==u.length){let m=JSON.stringify(i.errorArguments),p=i.errorArguments.length>u.length?`${i.errorId} has unexpected arguments ${m}`:`${i.errorId} does not have the expected number of arguments.`;r.push(p)}else c&&l?r.push(Wr(c,{value0:l})):c&&r.push(Wr(c))}return{i18nErrors:r,warnings:a}}static async audit(e,n){let{i18nErrors:r,warnings:a}=t.getInstallabilityErrors(e),o=e.WebAppManifest?e.WebAppManifest.url:null,i=[{key:"reason",valueType:"text",label:Wr(Vr.columnValue)}],c=r.map(l=>({reason:l}));if(!c.length){let l=await fo.request(e,n);l.isParseFailure&&c.push({reason:l.parseFailureReason})}let u={type:"debugdata",manifestUrl:o};return c.length>0?{score:0,warnings:a,numericValue:c.length,numericUnit:"element",displayValue:Wr(Vr.displayValue,{itemCount:c.length}),details:{...h.makeTableDetails(i,c),debugData:u}}:{score:1,warnings:a,details:{...h.makeTableDetails(i,c),debugData:u}}}},Bne=yD});var T5={};S(T5,{UIStrings:()=>ir,default:()=>jne});var ir,E5,go,vD,jne,S5=v(()=>{"use strict";d();J();lt();St();De();k();ir={title:"Uses HTTPS",failureTitle:"Does not use HTTPS",description:"All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more about HTTPS](https://developer.chrome.com/docs/lighthouse/pwa/is-on-https/).",displayValue:`{itemCount, plural,
+    =1 {1 insecure request found}
+    other {# insecure requests found}
+    }`,columnInsecureURL:"Insecure URL",columnResolution:"Request Resolution",allowed:"Allowed",blocked:"Blocked",warning:"Allowed with warning",upgraded:"Automatically upgraded to HTTPS"},E5={MixedContentAutomaticallyUpgraded:ir.upgraded,MixedContentBlocked:ir.blocked,MixedContentWarning:ir.warning},go=w("core/audits/is-on-https.js",ir),vD=class extends h{static{s(this,"HTTPS")}static get meta(){return{id:"is-on-https",title:go(ir.title),failureTitle:go(ir.failureTitle),description:go(ir.description),requiredArtifacts:["devtoolsLogs","InspectorIssues"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],o=(await $.request(r,n)).filter(l=>!Y.isSecureRequest(l)).map(l=>te.elideDataURI(l.url)),i=Array.from(new Set(o)).map(l=>({url:l,resolution:void 0})),c=[{key:"url",valueType:"url",label:go(ir.columnInsecureURL)},{key:"resolution",valueType:"text",label:go(ir.columnResolution)}];for(let l of e.InspectorIssues.mixedContentIssue){let m=i.find(p=>p.url===l.insecureURL);m||(m={url:l.insecureURL},i.push(m)),m.resolution=E5[l.resolutionStatus]?go(E5[l.resolutionStatus]):l.resolutionStatus}for(let l of i)l.resolution||(l.resolution=go(ir.allowed));let u;return i.length>0&&(u=go(ir.displayValue,{itemCount:i.length})),{score:+(i.length===0),displayValue:u,details:h.makeTableDetails(c,i)}}},jne=vD});var bD,ho,Fd=v(()=>{"use strict";d();we();Br();Bt();ii();bD=class extends xt{static{s(this,"LargestContentfulPaint")}static computeSimulatedMetric(e,n){let r=xt.getMetricComputationInput(e);return rr.request(r,n)}static async computeObservedMetric(e){let{processedNavigation:n}=e;if(n.timings.largestContentfulPaint===void 0)throw new G(G.errors.NO_LCP);return{timing:n.timings.largestContentfulPaint,timestamp:n.timestamps.largestContentfulPaint}}},ho=W(bD,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var wD,k1,DD=v(()=>{"use strict";d();we();Br();Wt();Xo();wD=class extends xt{static{s(this,"TimeToFirstByte")}static async computeSimulatedMetric(e,n){let r=await je.request(e,n),a=await dr.request(e.devtoolsLog,n),o=(await this.computeObservedMetric(e,n)).timing,i=a.serverResponseTimeByOrigin.get(r.parsedURL.securityOrigin);if(i===void 0)throw new Error("No response time for origin");let c=2;r.protocol.startsWith("h3")||(c+=1),r.parsedURL.scheme==="https"&&(c+=1);let u=e.settings.throttling.rttMs*c+i;return{timing:Math.max(o,u)}}static async computeObservedMetric(e,n){let r=await je.request(e,n);if(!r.timing)throw new Error("missing timing for main resource");let{processedNavigation:a}=e,o=a.timestamps.timeOrigin,c=(r.timing.requestTime*1e3+r.timing.receiveHeadersStart)*1e3;return{timing:(c-o)/1e3,timestamp:c}}},k1=W(wD,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var ED,I1,TD=v(()=>{"use strict";d();we();Bt();Fd();Ur();DD();Zp();ED=class{static{s(this,"LCPBreakdown")}static async compute_(e,n){let r=await on.request(e.trace,n),a=r.timings.largestContentfulPaint;if(a===void 0)throw new G(G.errors.NO_LCP);let o=r.timestamps.timeOrigin/1e3,{timing:i}=await k1.request(e,n),c=await Is.request(e,n);if(!c)return{ttfb:i};let{timing:u}=await ho.request(e,n),l=u/a,m=(c.networkRequestTime-o)*l,p=Math.max(i,Math.min(m,u)),g=(c.networkEndTime-o)*l,f=Math.max(p,Math.min(g,u));return{ttfb:i,loadStart:p,loadEnd:f}}},I1=W(ED,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var x5={};S(x5,{UIStrings:()=>vr,default:()=>qne});var vr,yr,SD,qne,C5=v(()=>{"use strict";d();He();J();k();Fd();TD();da();vr={title:"Largest Contentful Paint element",description:"This is the largest contentful element painted within the viewport. [Learn more about the Largest Contentful Paint element](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",columnPhase:"Phase",columnPercentOfLCP:"% of LCP",columnTiming:"Timing",itemTTFB:"TTFB",itemLoadDelay:"Load Delay",itemLoadTime:"Load Time",itemRenderDelay:"Render Delay"},yr=w("core/audits/largest-contentful-paint-element.js",vr),SD=class extends h{static{s(this,"LargestContentfulPaintElement")}static get meta(){return{id:"largest-contentful-paint-element",title:yr(vr.title),description:yr(vr.description),scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","TraceElements","devtoolsLogs","GatherContext","settings","URL"]}}static makeElementTable(e){let n=e.TraceElements.find(o=>o.traceEventType==="largest-contentful-paint");if(!n)return;let r=[{key:"node",valueType:"node",label:yr(x.columnElement)}],a=[{node:h.makeNodeItem(n.node)}];return h.makeTableDetails(r,a)}static async makePhaseTable(e,n,r){let{ttfb:a,loadStart:o,loadEnd:i}=await I1.request(n,r),c=0,u=0,l=e-a;o&&i&&(c=o-a,u=i-o,l=e-i);let m=[{phase:yr(vr.itemTTFB),timing:a},{phase:yr(vr.itemLoadDelay),timing:c},{phase:yr(vr.itemLoadTime),timing:u},{phase:yr(vr.itemRenderDelay),timing:l}].map(g=>{let y=`${(100*g.timing/e).toFixed(0)}%`;return{...g,percent:y}}),p=[{key:"phase",valueType:"text",label:yr(vr.columnPhase)},{key:"percent",valueType:"text",label:yr(vr.columnPercentOfLCP)},{key:"timing",valueType:"ms",label:yr(vr.columnTiming)}];return h.makeTableDetails(p,m)}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL},c=this.makeElementTable(e);if(!c)return{score:null,notApplicable:!0};let u=[c],l;try{let{timing:p}=await ho.request(i,n);l=yr(x.ms,{timeInMs:p});let g=await this.makePhaseTable(p,i,n);u.push(g)}catch(p){en.captureException(p,{tags:{audit:this.meta.id},level:"error"}),N.error(this.meta.id,p.message)}let m=h.makeListDetails(u);return{score:1,displayValue:l,details:m}}},qne=SD});var A5={};S(A5,{UIStrings:()=>_d,default:()=>zne});var _d,Rd,xD,zne,F5=v(()=>{"use strict";d();J();k();Hu();_d={title:"Avoid large layout shifts",description:"These DOM elements contribute most to the CLS of the page. [Learn how to improve CLS](https://web.dev/optimize-cls/)",columnContribution:"CLS Contribution"},Rd=w("core/audits/layout-shift-elements.js",_d),xD=class extends h{static{s(this,"LayoutShiftElements")}static get meta(){return{id:"layout-shift-elements",title:Rd(_d.title),description:Rd(_d.description),scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces","TraceElements"]}}static async audit(e,n){let a=e.TraceElements.filter(l=>l.traceEventType==="layout-shift").map(l=>({node:h.makeNodeItem(l.node),score:l.score})),o=[{key:"node",valueType:"node",label:Rd(x.columnElement)},{key:"score",valueType:"numeric",granularity:.001,label:Rd(_d.columnContribution)}],i=h.makeTableDetails(o,a),c;a.length>0&&(c=Rd(x.displayValueElementsFound,{nodeCount:a.length}));let{cumulativeLayoutShift:u}=await ro.request(e.traces[h.DEFAULT_PASS],n);return{score:1,metricSavings:{CLS:u},notApplicable:i.items.length===0,displayValue:c,details:i}}},zne=xD});var R5={};S(R5,{UIStrings:()=>kd,default:()=>Hne});var kd,M1,CD,Hne,_5=v(()=>{"use strict";d();J();k();kd={title:"Largest Contentful Paint image was not lazily loaded",failureTitle:"Largest Contentful Paint image was lazily loaded",description:"Above-the-fold images that are lazily loaded render later in the page lifecycle, which can delay the largest contentful paint. [Learn more about optimal lazy loading](https://web.dev/lcp-lazy-loading/)."},M1=w("core/audits/lcp-lazy-loaded.js",kd),CD=class extends h{static{s(this,"LargestContentfulPaintLazyLoaded")}static get meta(){return{id:"lcp-lazy-loaded",title:M1(kd.title),failureTitle:M1(kd.failureTitle),description:M1(kd.description),supportedModes:["navigation"],requiredArtifacts:["TraceElements","ViewportDimensions","ImageElements"]}}static isImageInViewport(e,n){let r=e.clientRect.top,a=n.innerHeight;return r<a}static audit(e){let n=e.TraceElements.find(i=>i.traceEventType==="largest-contentful-paint"&&i.type==="image"),r=n?e.ImageElements.find(i=>i.node.devtoolsNodePath===n.node.devtoolsNodePath):void 0;if(!r||!this.isImageInViewport(r,e.ViewportDimensions))return{score:null,notApplicable:!0};let a=[{key:"node",valueType:"node",label:M1(x.columnElement)}],o=h.makeTableDetails(a,[{node:h.makeNodeItem(r.node)}]);return{score:r.loading==="lazy"?0:1,details:o}}},Hne=CD});var k5={};S(k5,{UIStrings:()=>Id,default:()=>$ne});function Vne(t,e){let n=t.indexOf(e);return n>-1?n:t.push(e)-1}function AD(t){return Math.round(t*10)/10}var Gne,Wne,Id,ec,FD,$ne,I5=v(()=>{"use strict";d();J();De();k();ba();$n();tr();Ql();Gne={startTime:0,endTime:0,duration:0},Wne=20,Id={title:"Avoid long main-thread tasks",description:"Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn how to avoid long main-thread tasks](https://web.dev/long-tasks-devtools/)",displayValue:`{itemCount, plural,
+  =1 {# long task found}
+  other {# long tasks found}
+  }`},ec=w("core/audits/long-tasks.js",Id);s(Vne,"insertUrl");s(AD,"roundTenths");FD=class t extends h{static{s(this,"LongTasks")}static get meta(){return{id:"long-tasks",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:ec(Id.title),description:ec(Id.description),requiredArtifacts:["traces","devtoolsLogs","URL"]}}static getTimingBreakdown(e,n,r=new Map){let a=t.getTiming(e,n),o=0;if(a.duration>0)for(let u of e.children){let{duration:l}=t.getTimingBreakdown(u,n,r);o+=l}let i=a.duration-o,c=r.get(e.group.id)||0;return r.set(e.group.id,c+i),{startTime:a.startTime,duration:a.duration,timeByTaskGroup:r}}static makeDebugData(e,n,r){let a=[],o=[];for(let i of e){let c=_s(i,n),{startTime:u,duration:l,timeByTaskGroup:m}=t.getTimingBreakdown(i,r),p=[...m].map(([g,f])=>[g,AD(f)]).sort((g,f)=>g[0].localeCompare(f[0]));o.push({urlIndex:Vne(a,c),startTime:AD(u),duration:AD(l),...Object.fromEntries(p)})}return{type:"debugdata",urls:a,tasks:o}}static getTiming(e,n){let r=e;n&&(r=n.get(e.event)||Gne);let{duration:a,startTime:o}=r;return{duration:a,startTime:o}}static async audit(e,n){let r=n.settings||{},a=e.URL,o=e.traces[h.DEFAULT_PASS],i=await yn.request(o,n),c=e.devtoolsLogs[t.DEFAULT_PASS],u=await $.request(c,n),l;if(r.throttlingMethod==="simulate"){l=new Map;let D={devtoolsLog:c,settings:n.settings},T=await kt.request({trace:o,devtoolsLog:c,URL:a},n),R=await(await Ht.request(D,n)).simulate(T,{label:"long-tasks-diagnostic"});for(let[F,M]of R.nodeTimings.entries())F.type==="cpu"&&l.set(F.event,M)}let m=Zl(u),p=i.map(D=>{let{duration:T}=t.getTiming(D,l);return{task:D,duration:T}}).filter(({task:D,duration:T})=>T>=50&&!D.unbounded&&!D.parent).sort((D,T)=>T.duration-D.duration).map(({task:D})=>D),g=p.map(D=>{let T=t.getTiming(D,l);return{url:_s(D,m),duration:T.duration,startTime:T.startTime}}).slice(0,Wne),f=[{key:"url",valueType:"url",label:ec(x.columnURL)},{key:"startTime",valueType:"ms",granularity:1,label:ec(x.columnStartTime)},{key:"duration",valueType:"ms",granularity:1,label:ec(x.columnDuration)}],y=h.makeTableDetails(f,g,{sortedBy:["duration"],skipSumming:["startTime"]});y.debugData=t.makeDebugData(p,m,l);let b;return g.length>0&&(b=ec(Id.displayValue,{itemCount:g.length})),{score:g.length===0?1:0,notApplicable:g.length===0,details:y,displayValue:b}}},$ne=FD});var M5={};S(M5,{default:()=>Yne});var RD,Yne,N5=v(()=>{"use strict";d();J();ba();RD=class extends h{static{s(this,"MainThreadTasks")}static get meta(){return{id:"main-thread-tasks",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:"Tasks",description:"Lists the toplevel main thread tasks that executed during page load.",requiredArtifacts:["traces"]}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],o=(await yn.request(r,n)).filter(u=>u.duration>5&&!u.parent).map(u=>({duration:u.duration,startTime:u.startTime})),i=[{key:"startTime",valueType:"ms",granularity:1,label:"Start Time"},{key:"duration",valueType:"ms",granularity:1,label:"End Time"}];return{score:1,details:h.makeTableDetails(i,o)}}},Yne=RD});var L5={};S(L5,{UIStrings:()=>nc,default:()=>Kne});var nc,tc,_D,Kne,P5=v(()=>{"use strict";d();J();Xl();k();ba();nc={title:"Minimizes main-thread work",failureTitle:"Minimize main-thread work",description:"Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to minimize main-thread work](https://developer.chrome.com/docs/lighthouse/performance/mainthread-work-breakdown/)",columnCategory:"Category"},tc=w("core/audits/mainthread-work-breakdown.js",nc),_D=class t extends h{static{s(this,"MainThreadWorkBreakdown")}static get meta(){return{id:"mainthread-work-breakdown",title:tc(nc.title),failureTitle:tc(nc.failureTitle),description:tc(nc.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:2017,median:4e3}}static getExecutionTimingsByGroup(e){let n=new Map;for(let r of e){let a=n.get(r.group.id)||0;n.set(r.group.id,a+r.selfTime)}return n}static async audit(e,n){let r=n.settings||{},a=e.traces[t.DEFAULT_PASS],o=await yn.request(a,n),i=r.throttlingMethod==="simulate"?r.throttling.cpuSlowdownMultiplier:1,c=t.getExecutionTimingsByGroup(o),u=0,l={},m=Array.from(c).map(([y,b])=>{let D=b*i;u+=D;let T=l[y]||0;return l[y]=T+D,{group:y,groupLabel:kn[y].label,duration:D}}),p=[{key:"groupLabel",valueType:"text",label:tc(nc.columnCategory)},{key:"duration",valueType:"ms",granularity:1,label:tc(x.columnTimeSpent)}];m.sort((y,b)=>l[b.group]-l[y.group]);let g=t.makeTableDetails(p,m,{sortedBy:["duration"]});return{score:h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},u),numericValue:u,numericUnit:"millisecond",displayValue:tc(x.seconds,{timeInMs:u}),details:g}}},Kne=_D});var U5={};S(U5,{UIStrings:()=>N1,default:()=>Jne});var N1,O5,kD,Jne,B5=v(()=>{"use strict";d();Rn();k();N1={title:"Site works cross-browser",description:"To reach the most number of users, sites should work across every major browser. [Learn about cross-browser compatibility](https://developer.chrome.com/docs/lighthouse/pwa/pwa-cross-browser/)."},O5=w("core/audits/manual/pwa-cross-browser.js",N1),kD=class extends ht{static{s(this,"PWACrossBrowser")}static get meta(){return Object.assign({id:"pwa-cross-browser",title:O5(N1.title),description:O5(N1.description)},super.partialMeta)}},Jne=kD});var q5={};S(q5,{UIStrings:()=>L1,default:()=>Xne});var L1,j5,ID,Xne,z5=v(()=>{"use strict";d();Rn();k();L1={title:"Each page has a URL",description:"Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. [Learn more about providing deep links](https://developer.chrome.com/docs/lighthouse/pwa/pwa-each-page-has-url/)."},j5=w("core/audits/manual/pwa-each-page-has-url.js",L1),ID=class extends ht{static{s(this,"PWAEachPageHasURL")}static get meta(){return Object.assign({id:"pwa-each-page-has-url",title:j5(L1.title),description:j5(L1.description)},super.partialMeta)}},Xne=ID});var G5={};S(G5,{UIStrings:()=>P1,default:()=>Zne});var P1,H5,MD,Zne,W5=v(()=>{"use strict";d();Rn();k();P1={title:"Page transitions don't feel like they block on the network",description:"Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. [Learn more about page transitions](https://developer.chrome.com/docs/lighthouse/pwa/pwa-page-transitions/)."},H5=w("core/audits/manual/pwa-page-transitions.js",P1),MD=class extends ht{static{s(this,"PWAPageTransitions")}static get meta(){return Object.assign({id:"pwa-page-transitions",title:H5(P1.title),description:H5(P1.description)},super.partialMeta)}},Zne=MD});var V5={};S(V5,{UIStrings:()=>Md,default:()=>Qne});var Md,ND,LD,Qne,$5=v(()=>{"use strict";d();J();Ad();k();Md={title:"Manifest has a maskable icon",failureTitle:"Manifest doesn't have a maskable icon",description:"A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. [Learn about maskable manifest icons](https://developer.chrome.com/docs/lighthouse/pwa/maskable-icon-audit/)."},ND=w("core/audits/maskable-icon.js",Md),LD=class extends h{static{s(this,"MaskableIcon")}static get meta(){return{id:"maskable-icon",title:ND(Md.title),failureTitle:ND(Md.failureTitle),description:ND(Md.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static async audit(e,n){let r=await fo.request(e,n);return r.isParseFailure?{score:0,explanation:r.parseFailureReason}:{score:r.allChecks.find(o=>o.id==="hasMaskableIcon")?.passing?1:0}}},Qne=LD});var Y5=L((ULe,O1)=>{d();var gi=(ca(),u7(Ix));if(gi&&gi.default){O1.exports=gi.default;for(let t in gi)O1.exports[t]=gi[t]}else gi&&(O1.exports=gi)});var X5=L((jLe,U1)=>{d();var J5=J5||function(t){return Buffer.from(t).toString("base64")};function ere(t){var e=this,n=Math.round,r=Math.floor,a=new Array(64),o=new Array(64),i=new Array(64),c=new Array(64),u,l,m,p,g=new Array(65535),f=new Array(65535),y=new Array(64),b=new Array(64),D=[],T=0,A=7,R=new Array(64),F=new Array(64),M=new Array(64),V=new Array(256),z=new Array(2048),ne,se=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Z=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],de=[0,1,2,3,4,5,6,7,8,9,10,11],Le=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],pe=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],wt=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],ye=[0,1,2,3,4,5,6,7,8,9,10,11],_e=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],mt=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function at(P){for(var le=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],he=0;he<64;he++){var ge=r((le[he]*P+50)/100);ge<1?ge=1:ge>255&&(ge=255),a[se[he]]=ge}for(var Ie=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],Pe=0;Pe<64;Pe++){var Qe=r((Ie[Pe]*P+50)/100);Qe<1?Qe=1:Qe>255&&(Qe=255),o[se[Pe]]=Qe}for(var Ze=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],Ft=0,gt=0;gt<8;gt++)for(var K=0;K<8;K++)i[Ft]=1/(a[se[Ft]]*Ze[gt]*Ze[K]*8),c[Ft]=1/(o[se[Ft]]*Ze[gt]*Ze[K]*8),Ft++}s(at,"initQuantTables");function Ge(P,le){for(var he=0,ge=0,Ie=new Array,Pe=1;Pe<=16;Pe++){for(var Qe=1;Qe<=P[Pe];Qe++)Ie[le[ge]]=[],Ie[le[ge]][0]=he,Ie[le[ge]][1]=Pe,ge++,he++;he*=2}return Ie}s(Ge,"computeHuffmanTbl");function Pt(){u=Ge(Z,de),l=Ge(wt,ye),m=Ge(Le,pe),p=Ge(_e,mt)}s(Pt,"initHuffmanTbl");function et(){for(var P=1,le=2,he=1;he<=15;he++){for(var ge=P;ge<le;ge++)f[32767+ge]=he,g[32767+ge]=[],g[32767+ge][1]=he,g[32767+ge][0]=ge;for(var Ie=-(le-1);Ie<=-P;Ie++)f[32767+Ie]=he,g[32767+Ie]=[],g[32767+Ie][1]=he,g[32767+Ie][0]=le-1+Ie;P<<=1,le<<=1}}s(et,"initCategoryNumber");function We(){for(var P=0;P<256;P++)z[P]=19595*P,z[P+256>>0]=38470*P,z[P+512>>0]=7471*P+32768,z[P+768>>0]=-11059*P,z[P+1024>>0]=-21709*P,z[P+1280>>0]=32768*P+8421375,z[P+1536>>0]=-27439*P,z[P+1792>>0]=-5329*P}s(We,"initRGBYUVTable");function Be(P){for(var le=P[0],he=P[1]-1;he>=0;)le&1<<he&&(T|=1<<A),he--,A--,A<0&&(T==255?(j(255),j(0)):j(T),A=7,T=0)}s(Be,"writeBits");function j(P){D.push(P)}s(j,"writeByte");function fe(P){j(P>>8&255),j(P&255)}s(fe,"writeWord");function ut(P,le){var he,ge,Ie,Pe,Qe,Ze,Ft,gt,K=0,ce,ke=8,Dt=64;for(ce=0;ce<ke;++ce){he=P[K],ge=P[K+1],Ie=P[K+2],Pe=P[K+3],Qe=P[K+4],Ze=P[K+5],Ft=P[K+6],gt=P[K+7];var Oe=he+gt,$e=he-gt,ct=ge+Ft,xe=ge-Ft,tt=Ie+Ze,Vt=Ie-Ze,Et=Pe+Qe,Pn=Pe-Qe,Hn=Oe+Et,ea=Oe-Et,Na=ct+tt,_=ct-tt;P[K]=Hn+Na,P[K+4]=Hn-Na;var nt=(_+ea)*.707106781;P[K+2]=ea+nt,P[K+6]=ea-nt,Hn=Pn+Vt,Na=Vt+xe,_=xe+$e;var Er=(Hn-_)*.382683433,Sn=.5411961*Hn+Er,ta=1.306562965*_+Er,ve=Na*.707106781,Tr=$e+ve,Ni=$e-ve;P[K+5]=Ni+Sn,P[K+3]=Ni-Sn,P[K+1]=Tr+ta,P[K+7]=Tr-ta,K+=8}for(K=0,ce=0;ce<ke;++ce){he=P[K],ge=P[K+8],Ie=P[K+16],Pe=P[K+24],Qe=P[K+32],Ze=P[K+40],Ft=P[K+48],gt=P[K+56];var Jn=he+gt,wm=he-gt,Of=ge+Ft,qt=ge-Ft,na=Ie+Ze,Dm=Ie-Ze,Em=Pe+Qe,Gc=Pe-Qe,La=Jn+Em,ra=Jn-Em,Me=Of+na,Li=Of-na;P[K]=La+Me,P[K+32]=La-Me;var Wc=(Li+ra)*.707106781;P[K+16]=ra+Wc,P[K+48]=ra-Wc,La=Gc+Dm,Me=Dm+qt,Li=qt+wm;var Vc=(La-Li)*.382683433,$c=.5411961*La+Vc,Yc=1.306562965*Li+Vc,Tm=Me*.707106781,Sm=wm+Tm,xm=wm-Tm;P[K+40]=xm+$c,P[K+24]=xm-$c,P[K+8]=Sm+Yc,P[K+56]=Sm-Yc,K++}var Pi;for(ce=0;ce<Dt;++ce)Pi=P[ce]*le[ce],y[ce]=Pi>0?Pi+.5|0:Pi-.5|0;return y}s(ut,"fDCTQuant");function st(){fe(65504),fe(16),j(74),j(70),j(73),j(70),j(0),j(1),j(1),j(0),fe(1),fe(1),j(0),j(0)}s(st,"writeAPP0");function Ve(P){if(P){fe(65505),P[0]===69&&P[1]===120&&P[2]===105&&P[3]===102?fe(P.length+2):(fe(P.length+5+2),j(69),j(120),j(105),j(102),j(0));for(var le=0;le<P.length;le++)j(P[le])}}s(Ve,"writeAPP1");function Je(P,le){fe(65472),fe(17),j(8),fe(le),fe(P),j(3),j(1),j(17),j(0),j(2),j(17),j(1),j(3),j(17),j(1)}s(Je,"writeSOF0");function qe(){fe(65499),fe(132),j(0);for(var P=0;P<64;P++)j(a[P]);j(1);for(var le=0;le<64;le++)j(o[le])}s(qe,"writeDQT");function ae(){fe(65476),fe(418),j(0);for(var P=0;P<16;P++)j(Z[P+1]);for(var le=0;le<=11;le++)j(de[le]);j(16);for(var he=0;he<16;he++)j(Le[he+1]);for(var ge=0;ge<=161;ge++)j(pe[ge]);j(1);for(var Ie=0;Ie<16;Ie++)j(wt[Ie+1]);for(var Pe=0;Pe<=11;Pe++)j(ye[Pe]);j(17);for(var Qe=0;Qe<16;Qe++)j(_e[Qe+1]);for(var Ze=0;Ze<=161;Ze++)j(mt[Ze])}s(ae,"writeDHT");function ee(P){typeof P>"u"||P.constructor!==Array||P.forEach(le=>{if(typeof le=="string"){fe(65534);var he=le.length;fe(he+2);var ge;for(ge=0;ge<he;ge++)j(le.charCodeAt(ge))}})}s(ee,"writeCOM");function ft(){fe(65498),fe(12),j(3),j(1),j(0),j(2),j(17),j(3),j(17),j(0),j(63),j(0)}s(ft,"writeSOS");function Ce(P,le,he,ge,Ie){for(var Pe=Ie[0],Qe=Ie[240],Ze,Ft=16,gt=63,K=64,ce=ut(P,le),ke=0;ke<K;++ke)b[se[ke]]=ce[ke];var Dt=b[0]-he;he=b[0],Dt==0?Be(ge[0]):(Ze=32767+Dt,Be(ge[f[Ze]]),Be(g[Ze]));for(var Oe=63;Oe>0&&b[Oe]==0;Oe--);if(Oe==0)return Be(Pe),he;for(var $e=1,ct;$e<=Oe;){for(var xe=$e;b[$e]==0&&$e<=Oe;++$e);var tt=$e-xe;if(tt>=Ft){ct=tt>>4;for(var Vt=1;Vt<=ct;++Vt)Be(Qe);tt=tt&15}Ze=32767+b[$e],Be(Ie[(tt<<4)+f[Ze]]),Be(g[Ze]),$e++}return Oe!=gt&&Be(Pe),he}s(Ce,"processDU");function ze(){for(var P=String.fromCharCode,le=0;le<256;le++)V[le]=P(le)}s(ze,"initCharLookupTable"),this.encode=function(P,le){var he=new Date().getTime();le&&Ln(le),D=new Array,T=0,A=7,fe(65496),st(),ee(P.comments),Ve(P.exifBuffer),qe(),Je(P.width,P.height),ae(),ft();var ge=0,Ie=0,Pe=0;T=0,A=7,this.encode.displayName="_encode_";for(var Qe=P.data,Ze=P.width,Ft=P.height,gt=Ze*4,K=Ze*3,ce,ke=0,Dt,Oe,$e,ct,xe,tt,Vt,Et;ke<Ft;){for(ce=0;ce<gt;){for(ct=gt*ke+ce,xe=ct,tt=-1,Vt=0,Et=0;Et<64;Et++)Vt=Et>>3,tt=(Et&7)*4,xe=ct+Vt*gt+tt,ke+Vt>=Ft&&(xe-=gt*(ke+1+Vt-Ft)),ce+tt>=gt&&(xe-=ce+tt-gt+4),Dt=Qe[xe++],Oe=Qe[xe++],$e=Qe[xe++],R[Et]=(z[Dt]+z[Oe+256>>0]+z[$e+512>>0]>>16)-128,F[Et]=(z[Dt+768>>0]+z[Oe+1024>>0]+z[$e+1280>>0]>>16)-128,M[Et]=(z[Dt+1280>>0]+z[Oe+1536>>0]+z[$e+1792>>0]>>16)-128;ge=Ce(R,i,ge,u,m),Ie=Ce(F,c,Ie,l,p),Pe=Ce(M,c,Pe,l,p),ce+=32}ke+=8}if(A>=0){var Pn=[];Pn[1]=A+1,Pn[0]=(1<<A+1)-1,Be(Pn)}if(fe(65497),typeof U1>"u")return new Uint8Array(D);return Buffer.from(D);var Hn,ea};function Ln(P){if(P<=0&&(P=1),P>100&&(P=100),ne!=P){var le=0;P<50?le=Math.floor(5e3/P):le=Math.floor(200-P*2),at(le),ne=P}}s(Ln,"setQuality");function zn(){var P=new Date().getTime();t||(t=50),ze(),Pt(),et(),We(),Ln(t);var le=new Date().getTime()-P}s(zn,"init"),zn()}s(ere,"JPEGEncoder");typeof U1<"u"?U1.exports=K5:typeof window<"u"&&(window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].encode=K5);function K5(t,e){typeof e>"u"&&(e=50);var n=new ere(e),r=n.encode(t,e);return{data:r,width:t.width,height:t.height}}s(K5,"encode")});var Q5=L((HLe,OD)=>{d();var PD=s(function(){"use strict";var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),n=4017,r=799,a=3406,o=2276,i=1567,c=3784,u=5793,l=2896;function m(){}s(m,"constructor");function p(A,R){for(var F=0,M=[],V,z,ne=16;ne>0&&!A[ne-1];)ne--;M.push({children:[],index:0});var se=M[0],Z;for(V=0;V<ne;V++){for(z=0;z<A[V];z++){for(se=M.pop(),se.children[se.index]=R[F];se.index>0;){if(M.length===0)throw new Error("Could not recreate Huffman Table");se=M.pop()}for(se.index++,M.push(se);M.length<=V;)M.push(Z={children:[],index:0}),se.children[se.index]=Z.children,se=Z;F++}V+1<ne&&(M.push(Z={children:[],index:0}),se.children[se.index]=Z.children,se=Z)}return M[0].children}s(p,"buildHuffmanTable");function g(A,R,F,M,V,z,ne,se,Z,de){var Le=F.precision,pe=F.samplesPerLine,wt=F.scanLines,ye=F.mcusPerLine,_e=F.progressive,mt=F.maxH,at=F.maxV,Ge=R,Pt=0,et=0;function We(){if(et>0)return et--,Pt>>et&1;if(Pt=A[R++],Pt==255){var K=A[R++];if(K)throw new Error("unexpected marker: "+(Pt<<8|K).toString(16))}return et=7,Pt>>>7}s(We,"readBit");function Be(K){for(var ce=K,ke;(ke=We())!==null;){if(ce=ce[ke],typeof ce=="number")return ce;if(typeof ce!="object")throw new Error("invalid huffman sequence")}return null}s(Be,"decodeHuffman");function j(K){for(var ce=0;K>0;){var ke=We();if(ke===null)return;ce=ce<<1|ke,K--}return ce}s(j,"receive");function fe(K){var ce=j(K);return ce>=1<<K-1?ce:ce+(-1<<K)+1}s(fe,"receiveAndExtend");function ut(K,ce){var ke=Be(K.huffmanTableDC),Dt=ke===0?0:fe(ke);ce[0]=K.pred+=Dt;for(var Oe=1;Oe<64;){var $e=Be(K.huffmanTableAC),ct=$e&15,xe=$e>>4;if(ct===0){if(xe<15)break;Oe+=16;continue}Oe+=xe;var tt=e[Oe];ce[tt]=fe(ct),Oe++}}s(ut,"decodeBaseline");function st(K,ce){var ke=Be(K.huffmanTableDC),Dt=ke===0?0:fe(ke)<<Z;ce[0]=K.pred+=Dt}s(st,"decodeDCFirst");function Ve(K,ce){ce[0]|=We()<<Z}s(Ve,"decodeDCSuccessive");var Je=0;function qe(K,ce){if(Je>0){Je--;return}for(var ke=z,Dt=ne;ke<=Dt;){var Oe=Be(K.huffmanTableAC),$e=Oe&15,ct=Oe>>4;if($e===0){if(ct<15){Je=j(ct)+(1<<ct)-1;break}ke+=16;continue}ke+=ct;var xe=e[ke];ce[xe]=fe($e)*(1<<Z),ke++}}s(qe,"decodeACFirst");var ae=0,ee;function ft(K,ce){for(var ke=z,Dt=ne,Oe=0;ke<=Dt;){var $e=e[ke],ct=ce[$e]<0?-1:1;switch(ae){case 0:var xe=Be(K.huffmanTableAC),tt=xe&15,Oe=xe>>4;if(tt===0)Oe<15?(Je=j(Oe)+(1<<Oe),ae=4):(Oe=16,ae=1);else{if(tt!==1)throw new Error("invalid ACn encoding");ee=fe(tt),ae=Oe?2:3}continue;case 1:case 2:ce[$e]?ce[$e]+=(We()<<Z)*ct:(Oe--,Oe===0&&(ae=ae==2?3:0));break;case 3:ce[$e]?ce[$e]+=(We()<<Z)*ct:(ce[$e]=ee<<Z,ae=0);break;case 4:ce[$e]&&(ce[$e]+=(We()<<Z)*ct);break}ke++}ae===4&&(Je--,Je===0&&(ae=0))}s(ft,"decodeACSuccessive");function Ce(K,ce,ke,Dt,Oe){var $e=ke/ye|0,ct=ke%ye,xe=$e*K.v+Dt,tt=ct*K.h+Oe;K.blocks[xe]===void 0&&de.tolerantDecoding||ce(K,K.blocks[xe][tt])}s(Ce,"decodeMcu");function ze(K,ce,ke){var Dt=ke/K.blocksPerLine|0,Oe=ke%K.blocksPerLine;K.blocks[Dt]===void 0&&de.tolerantDecoding||ce(K,K.blocks[Dt][Oe])}s(ze,"decodeBlock");var Ln=M.length,zn,P,le,he,ge,Ie;_e?z===0?Ie=se===0?st:Ve:Ie=se===0?qe:ft:Ie=ut;var Pe=0,Qe,Ze;Ln==1?Ze=M[0].blocksPerLine*M[0].blocksPerColumn:Ze=ye*F.mcusPerColumn,V||(V=Ze);for(var Ft,gt;Pe<Ze;){for(P=0;P<Ln;P++)M[P].pred=0;if(Je=0,Ln==1)for(zn=M[0],ge=0;ge<V;ge++)ze(zn,Ie,Pe),Pe++;else for(ge=0;ge<V;ge++){for(P=0;P<Ln;P++)for(zn=M[P],Ft=zn.h,gt=zn.v,le=0;le<gt;le++)for(he=0;he<Ft;he++)Ce(zn,Ie,Pe,le,he);if(Pe++,Pe===Ze)break}if(Pe===Ze)do{if(A[R]===255&&A[R+1]!==0)break;R+=1}while(R<A.length-2);if(et=0,Qe=A[R]<<8|A[R+1],Qe<65280)throw new Error("marker was not found");if(Qe>=65488&&Qe<=65495)R+=2;else break}return R-Ge}s(g,"decodeScan");function f(A,R){var F=[],M=R.blocksPerLine,V=R.blocksPerColumn,z=M<<3,ne=new Int32Array(64),se=new Uint8Array(64);function Z(Ge,Pt,et){var We=R.quantizationTable,Be,j,fe,ut,st,Ve,Je,qe,ae,ee=et,ft;for(ft=0;ft<64;ft++)ee[ft]=Ge[ft]*We[ft];for(ft=0;ft<8;++ft){var Ce=8*ft;if(ee[1+Ce]==0&&ee[2+Ce]==0&&ee[3+Ce]==0&&ee[4+Ce]==0&&ee[5+Ce]==0&&ee[6+Ce]==0&&ee[7+Ce]==0){ae=u*ee[0+Ce]+512>>10,ee[0+Ce]=ae,ee[1+Ce]=ae,ee[2+Ce]=ae,ee[3+Ce]=ae,ee[4+Ce]=ae,ee[5+Ce]=ae,ee[6+Ce]=ae,ee[7+Ce]=ae;continue}Be=u*ee[0+Ce]+128>>8,j=u*ee[4+Ce]+128>>8,fe=ee[2+Ce],ut=ee[6+Ce],st=l*(ee[1+Ce]-ee[7+Ce])+128>>8,qe=l*(ee[1+Ce]+ee[7+Ce])+128>>8,Ve=ee[3+Ce]<<4,Je=ee[5+Ce]<<4,ae=Be-j+1>>1,Be=Be+j+1>>1,j=ae,ae=fe*c+ut*i+128>>8,fe=fe*i-ut*c+128>>8,ut=ae,ae=st-Je+1>>1,st=st+Je+1>>1,Je=ae,ae=qe+Ve+1>>1,Ve=qe-Ve+1>>1,qe=ae,ae=Be-ut+1>>1,Be=Be+ut+1>>1,ut=ae,ae=j-fe+1>>1,j=j+fe+1>>1,fe=ae,ae=st*o+qe*a+2048>>12,st=st*a-qe*o+2048>>12,qe=ae,ae=Ve*r+Je*n+2048>>12,Ve=Ve*n-Je*r+2048>>12,Je=ae,ee[0+Ce]=Be+qe,ee[7+Ce]=Be-qe,ee[1+Ce]=j+Je,ee[6+Ce]=j-Je,ee[2+Ce]=fe+Ve,ee[5+Ce]=fe-Ve,ee[3+Ce]=ut+st,ee[4+Ce]=ut-st}for(ft=0;ft<8;++ft){var ze=ft;if(ee[8+ze]==0&&ee[16+ze]==0&&ee[24+ze]==0&&ee[32+ze]==0&&ee[40+ze]==0&&ee[48+ze]==0&&ee[56+ze]==0){ae=u*et[ft+0]+8192>>14,ee[0+ze]=ae,ee[8+ze]=ae,ee[16+ze]=ae,ee[24+ze]=ae,ee[32+ze]=ae,ee[40+ze]=ae,ee[48+ze]=ae,ee[56+ze]=ae;continue}Be=u*ee[0+ze]+2048>>12,j=u*ee[32+ze]+2048>>12,fe=ee[16+ze],ut=ee[48+ze],st=l*(ee[8+ze]-ee[56+ze])+2048>>12,qe=l*(ee[8+ze]+ee[56+ze])+2048>>12,Ve=ee[24+ze],Je=ee[40+ze],ae=Be-j+1>>1,Be=Be+j+1>>1,j=ae,ae=fe*c+ut*i+2048>>12,fe=fe*i-ut*c+2048>>12,ut=ae,ae=st-Je+1>>1,st=st+Je+1>>1,Je=ae,ae=qe+Ve+1>>1,Ve=qe-Ve+1>>1,qe=ae,ae=Be-ut+1>>1,Be=Be+ut+1>>1,ut=ae,ae=j-fe+1>>1,j=j+fe+1>>1,fe=ae,ae=st*o+qe*a+2048>>12,st=st*a-qe*o+2048>>12,qe=ae,ae=Ve*r+Je*n+2048>>12,Ve=Ve*n-Je*r+2048>>12,Je=ae,ee[0+ze]=Be+qe,ee[56+ze]=Be-qe,ee[8+ze]=j+Je,ee[48+ze]=j-Je,ee[16+ze]=fe+Ve,ee[40+ze]=fe-Ve,ee[24+ze]=ut+st,ee[32+ze]=ut-st}for(ft=0;ft<64;++ft){var Ln=128+(ee[ft]+8>>4);Pt[ft]=Ln<0?0:Ln>255?255:Ln}}s(Z,"quantizeAndInverse"),T(z*V*8);for(var de,Le,pe=0;pe<V;pe++){var wt=pe<<3;for(de=0;de<8;de++)F.push(new Uint8Array(z));for(var ye=0;ye<M;ye++){Z(R.blocks[pe][ye],se,ne);var _e=0,mt=ye<<3;for(Le=0;Le<8;Le++){var at=F[wt+Le];for(de=0;de<8;de++)at[mt+de]=se[_e++]}}}return F}s(f,"buildComponentData");function y(A){return A<0?0:A>255?255:A}s(y,"clampTo8bit"),m.prototype={load:s(function(R){var F=new XMLHttpRequest;F.open("GET",R,!0),F.responseType="arraybuffer",F.onload=function(){var M=new Uint8Array(F.response||F.mozResponseArrayBuffer);this.parse(M),this.onload&&this.onload()}.bind(this),F.send(null)},"load"),parse:s(function(R){var F=this.opts.maxResolutionInMP*1e3*1e3,M=0,V=R.length;function z(){var xe=R[M]<<8|R[M+1];return M+=2,xe}s(z,"readUint16");function ne(){var xe=z(),tt=R.subarray(M,M+xe-2);return M+=tt.length,tt}s(ne,"readDataBlock");function se(xe){var tt=1,Vt=1,Et,Pn;for(Pn in xe.components)xe.components.hasOwnProperty(Pn)&&(Et=xe.components[Pn],tt<Et.h&&(tt=Et.h),Vt<Et.v&&(Vt=Et.v));var Hn=Math.ceil(xe.samplesPerLine/8/tt),ea=Math.ceil(xe.scanLines/8/Vt);for(Pn in xe.components)if(xe.components.hasOwnProperty(Pn)){Et=xe.components[Pn];var Na=Math.ceil(Math.ceil(xe.samplesPerLine/8)*Et.h/tt),_=Math.ceil(Math.ceil(xe.scanLines/8)*Et.v/Vt),nt=Hn*Et.h,Er=ea*Et.v,Sn=Er*nt,ta=[];T(Sn*256);for(var ve=0;ve<Er;ve++){for(var Tr=[],Ni=0;Ni<nt;Ni++)Tr.push(new Int32Array(64));ta.push(Tr)}Et.blocksPerLine=Na,Et.blocksPerColumn=_,Et.blocks=ta}xe.maxH=tt,xe.maxV=Vt,xe.mcusPerLine=Hn,xe.mcusPerColumn=ea}s(se,"prepareComponents");var Z=null,de=null,Le=null,pe,wt,ye=[],_e=[],mt=[],at=[],Ge=z(),Pt=-1;if(this.comments=[],Ge!=65496)throw new Error("SOI not found");for(Ge=z();Ge!=65497;){var et,We,Be;switch(Ge){case 65280:break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var j=ne();if(Ge===65534){var fe=String.fromCharCode.apply(null,j);this.comments.push(fe)}Ge===65504&&j[0]===74&&j[1]===70&&j[2]===73&&j[3]===70&&j[4]===0&&(Z={version:{major:j[5],minor:j[6]},densityUnits:j[7],xDensity:j[8]<<8|j[9],yDensity:j[10]<<8|j[11],thumbWidth:j[12],thumbHeight:j[13],thumbData:j.subarray(14,14+3*j[12]*j[13])}),Ge===65505&&j[0]===69&&j[1]===120&&j[2]===105&&j[3]===102&&j[4]===0&&(this.exifBuffer=j.subarray(5,j.length)),Ge===65518&&j[0]===65&&j[1]===100&&j[2]===111&&j[3]===98&&j[4]===101&&j[5]===0&&(de={version:j[6],flags0:j[7]<<8|j[8],flags1:j[9]<<8|j[10],transformCode:j[11]});break;case 65499:for(var ut=z(),st=ut+M-2;M<st;){var Ve=R[M++];T(256);var Je=new Int32Array(64);if(Ve>>4)if(Ve>>4===1)for(We=0;We<64;We++){var qe=e[We];Je[qe]=z()}else throw new Error("DQT: invalid table spec");else for(We=0;We<64;We++){var qe=e[We];Je[qe]=R[M++]}ye[Ve&15]=Je}break;case 65472:case 65473:case 65474:z(),pe={},pe.extended=Ge===65473,pe.progressive=Ge===65474,pe.precision=R[M++],pe.scanLines=z(),pe.samplesPerLine=z(),pe.components={},pe.componentsOrder=[];var ae=pe.scanLines*pe.samplesPerLine;if(ae>F){var ee=Math.ceil((ae-F)/1e6);throw new Error(`maxResolutionInMP limit exceeded by ${ee}MP`)}var ft=R[M++],Ce,ze=0,Ln=0;for(et=0;et<ft;et++){Ce=R[M];var zn=R[M+1]>>4,P=R[M+1]&15,le=R[M+2];if(zn<=0||P<=0)throw new Error("Invalid sampling factor, expected values above 0");pe.componentsOrder.push(Ce),pe.components[Ce]={h:zn,v:P,quantizationIdx:le},M+=3}se(pe),_e.push(pe);break;case 65476:var he=z();for(et=2;et<he;){var ge=R[M++],Ie=new Uint8Array(16),Pe=0;for(We=0;We<16;We++,M++)Pe+=Ie[We]=R[M];T(16+Pe);var Qe=new Uint8Array(Pe);for(We=0;We<Pe;We++,M++)Qe[We]=R[M];et+=17+Pe,(ge>>4?mt:at)[ge&15]=p(Ie,Qe)}break;case 65501:z(),wt=z();break;case 65500:z(),z();break;case 65498:var Ze=z(),Ft=R[M++],gt=[],K;for(et=0;et<Ft;et++){K=pe.components[R[M++]];var ce=R[M++];K.huffmanTableDC=at[ce>>4],K.huffmanTableAC=mt[ce&15],gt.push(K)}var ke=R[M++],Dt=R[M++],Oe=R[M++],$e=g(R,M,pe,gt,wt,ke,Dt,Oe>>4,Oe&15,this.opts);M+=$e;break;case 65535:R[M]!==255&&M--;break;default:if(R[M-3]==255&&R[M-2]>=192&&R[M-2]<=254){M-=3;break}else if(Ge===224||Ge==225){if(Pt!==-1)throw new Error(`first unknown JPEG marker at offset ${Pt.toString(16)}, second unknown JPEG marker ${Ge.toString(16)} at offset ${(M-1).toString(16)}`);Pt=M-1;let xe=z();if(R[M+xe-2]===255){M+=xe-2;break}}throw new Error("unknown JPEG marker "+Ge.toString(16))}Ge=z()}if(_e.length!=1)throw new Error("only single frame JPEGs supported");for(var et=0;et<_e.length;et++){var ct=_e[et].components;for(var We in ct)ct[We].quantizationTable=ye[ct[We].quantizationIdx],delete ct[We].quantizationIdx}this.width=pe.samplesPerLine,this.height=pe.scanLines,this.jfif=Z,this.adobe=de,this.components=[];for(var et=0;et<pe.componentsOrder.length;et++){var K=pe.components[pe.componentsOrder[et]];this.components.push({lines:f(pe,K),scaleX:K.h/pe.maxH,scaleY:K.v/pe.maxV})}},"parse"),getData:s(function(R,F){var M=this.width/R,V=this.height/F,z,ne,se,Z,de,Le,pe,wt,ye,_e,mt=0,at,Ge,Pt,et,We,Be,j,fe,ut,st,Ve,Je=R*F*this.components.length;T(Je);var qe=new Uint8Array(Je);switch(this.components.length){case 1:for(z=this.components[0],_e=0;_e<F;_e++)for(de=z.lines[0|_e*z.scaleY*V],ye=0;ye<R;ye++)at=de[0|ye*z.scaleX*M],qe[mt++]=at;break;case 2:for(z=this.components[0],ne=this.components[1],_e=0;_e<F;_e++)for(de=z.lines[0|_e*z.scaleY*V],Le=ne.lines[0|_e*ne.scaleY*V],ye=0;ye<R;ye++)at=de[0|ye*z.scaleX*M],qe[mt++]=at,at=Le[0|ye*ne.scaleX*M],qe[mt++]=at;break;case 3:for(Ve=!0,this.adobe&&this.adobe.transformCode?Ve=!0:typeof this.opts.colorTransform<"u"&&(Ve=!!this.opts.colorTransform),z=this.components[0],ne=this.components[1],se=this.components[2],_e=0;_e<F;_e++)for(de=z.lines[0|_e*z.scaleY*V],Le=ne.lines[0|_e*ne.scaleY*V],pe=se.lines[0|_e*se.scaleY*V],ye=0;ye<R;ye++)Ve?(at=de[0|ye*z.scaleX*M],Ge=Le[0|ye*ne.scaleX*M],Pt=pe[0|ye*se.scaleX*M],fe=y(at+1.402*(Pt-128)),ut=y(at-.3441363*(Ge-128)-.71413636*(Pt-128)),st=y(at+1.772*(Ge-128))):(fe=de[0|ye*z.scaleX*M],ut=Le[0|ye*ne.scaleX*M],st=pe[0|ye*se.scaleX*M]),qe[mt++]=fe,qe[mt++]=ut,qe[mt++]=st;break;case 4:if(!this.adobe)throw new Error("Unsupported color mode (4 components)");for(Ve=!1,this.adobe&&this.adobe.transformCode?Ve=!0:typeof this.opts.colorTransform<"u"&&(Ve=!!this.opts.colorTransform),z=this.components[0],ne=this.components[1],se=this.components[2],Z=this.components[3],_e=0;_e<F;_e++)for(de=z.lines[0|_e*z.scaleY*V],Le=ne.lines[0|_e*ne.scaleY*V],pe=se.lines[0|_e*se.scaleY*V],wt=Z.lines[0|_e*Z.scaleY*V],ye=0;ye<R;ye++)Ve?(at=de[0|ye*z.scaleX*M],Ge=Le[0|ye*ne.scaleX*M],Pt=pe[0|ye*se.scaleX*M],et=wt[0|ye*Z.scaleX*M],We=255-y(at+1.402*(Pt-128)),Be=255-y(at-.3441363*(Ge-128)-.71413636*(Pt-128)),j=255-y(at+1.772*(Ge-128))):(We=de[0|ye*z.scaleX*M],Be=Le[0|ye*ne.scaleX*M],j=pe[0|ye*se.scaleX*M],et=wt[0|ye*Z.scaleX*M]),qe[mt++]=255-We,qe[mt++]=255-Be,qe[mt++]=255-j,qe[mt++]=255-et;break;default:throw new Error("Unsupported color mode")}return qe},"getData"),copyToImageData:s(function(R,F){var M=R.width,V=R.height,z=R.data,ne=this.getData(M,V),se=0,Z=0,de,Le,pe,wt,ye,_e,mt,at,Ge;switch(this.components.length){case 1:for(Le=0;Le<V;Le++)for(de=0;de<M;de++)pe=ne[se++],z[Z++]=pe,z[Z++]=pe,z[Z++]=pe,F&&(z[Z++]=255);break;case 3:for(Le=0;Le<V;Le++)for(de=0;de<M;de++)mt=ne[se++],at=ne[se++],Ge=ne[se++],z[Z++]=mt,z[Z++]=at,z[Z++]=Ge,F&&(z[Z++]=255);break;case 4:for(Le=0;Le<V;Le++)for(de=0;de<M;de++)ye=ne[se++],_e=ne[se++],pe=ne[se++],wt=ne[se++],mt=255-y(ye*(1-wt/255)+wt),at=255-y(_e*(1-wt/255)+wt),Ge=255-y(pe*(1-wt/255)+wt),z[Z++]=mt,z[Z++]=at,z[Z++]=Ge,F&&(z[Z++]=255);break;default:throw new Error("Unsupported color mode")}},"copyToImageData")};var b=0,D=0;function T(A=0){var R=b+A;if(R>D){var F=Math.ceil((R-D)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${F}MB`)}b=R}return s(T,"requestMemoryAllocation"),m.resetMaxMemoryUsage=function(A){b=0,D=A},m.getBytesAllocated=function(){return b},m.requestMemoryAllocation=T,m},"jpegImage")();typeof OD<"u"?OD.exports=Z5:typeof window<"u"&&(window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].decode=Z5);function Z5(t,e={}){var n={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512},r={...n,...e},a=new Uint8Array(t),o=new PD;o.opts=r,PD.resetMaxMemoryUsage(r.maxMemoryUsageInMB*1024*1024),o.parse(a);var i=r.formatAsRGBA?4:3,c=o.width*o.height*i;try{PD.requestMemoryAllocation(c);var u={width:o.width,height:o.height,exifBuffer:o.exifBuffer,data:r.useTArray?new Uint8Array(c):Buffer.alloc(c)};o.comments.length>0&&(u.comments=o.comments)}catch(l){throw l instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+c):l instanceof ReferenceError&&l.message==="Buffer is not defined"?new Error("Buffer is not globally defined in this environment. Consider setting useTArray to true"):l}return o.copyToImageData(u,r.formatAsRGBA),u}s(Z5,"decode")});var UD=L((VLe,eO)=>{d();var tre=X5(),nre=Q5();eO.exports={encode:tre,decode:nre}});var nO=L((YLe,tO)=>{"use strict";d();var rre=Y5(),BD=UD();function B1(t,e,n,r,a){return a[(t+e*r)*4+n]}s(B1,"getPixel");function are(t,e,n){return B1(t,e,0,n.width,n.data)>=249&&B1(t,e,1,n.width,n.data)>=249&&B1(t,e,2,n.width,n.data)>=249}s(are,"isWhitePixel");function ore(t){let e=s(function(){let o=[];for(let i=0;i<256;i++)o[i]=0;return o},"createHistogramArray"),n=t.width,r=t.height,a=[e(),e(),e()];for(let o=0;o<r;o++)for(let i=0;i<n;i++)if(!are(i,o,t))for(let c=0;c<a.length;c++){let u=B1(i,o,c,n,t.data);a[c][u]++}return a}s(ore,"convertPixelsToHistogram");function ire(t){let e=BD.decode(t[0].getImage()),n=e.width,r=e.height,a=Buffer.alloc(n*r*4),o=0;for(;o<a.length;)a[o++]=255,a[o++]=255,a[o++]=255,a[o++]=255;var i=BD.encode({data:a,width:n,height:r});return i.data}s(ire,"synthesizeWhiteFrame");var sre="disabled-by-default-devtools.screenshot";function cre(t,e){e=e||{};let n;t=typeof t=="string"?rre.readFileSync(t,"utf-8"):t;try{n=typeof t=="string"?JSON.parse(t):t}catch(p){throw new Error("Speedline: Invalid JSON"+p.message)}let r=n.traceEvents||n,a=Number.MAX_VALUE,o=-Number.MAX_VALUE;r.forEach(p=>{p.ts!==0&&(a=Math.min(a,p.ts),o=Math.max(o,p.ts))}),a=(e.timeOrigin||a)/1e3,o/=1e3;let i=null,c=r.filter(p=>p.cat.includes(sre)&&p.ts>=a*1e3);c.sort((p,g)=>p.ts-g.ts);let u=c.map(function(p){let g=p.args&&p.args.snapshot,f=p.ts/1e3;if(g===i)return null;i=g;let y=Buffer.from(g,"base64");return jD(y,f)}).filter(Boolean);if(u.length===0)return Promise.reject(new Error("No screenshots found in trace"));let l=jD(ire(u),a);u.unshift(l);let m={startTs:a,endTs:o,frames:u};return Promise.resolve(m)}s(cre,"extractFramesFromTimeline");function jD(t,e){let n=null,r=null,a=null,o=null,i=null,c=null;return{getHistogram:function(){if(n)return n;let u=this.getParsedImage();return n=ore(u),n},getTimeStamp:function(){return e},setProgress:function(u,l){r=u,a=!!l},setPerceptualProgress:function(u,l){o=u,i=!!l},getImage:function(){return t},getParsedImage:function(){return c||(c=BD.decode(t)),c},getProgress:function(){return r},isProgressInterpolated:function(){return a},getPerceptualProgress:function(){return o},isPerceptualProgressInterpolated:function(){return i}}}s(jD,"frame");tO.exports={extractFramesFromTimeline:cre,create:jD}});var aO=L((XLe,rO)=>{d();var qD;(function(t){"use strict";(function(a){a[a.Grey=1]="Grey",a[a.GreyAlpha=2]="GreyAlpha",a[a.RGB=3]="RGB",a[a.RGBAlpha=4]="RGBAlpha"})(t.Channels||(t.Channels={}));var e=t.Channels;function n(a,o,i,c,u,l,m){if(i===void 0&&(i=8),c===void 0&&(c=.01),u===void 0&&(u=.03),l===void 0&&(l=!0),m===void 0&&(m=8),a.width!==o.width||a.height!==o.height)throw new Error("Images have different sizes!");var p=(1<<m)-1,g=Math.pow(c*p,2),f=Math.pow(u*p,2),y=0,b=0,D=0;function T(A,R,F,M){var V,z,ne;V=z=ne=0;for(var se=0;se<A.length;se++)z+=Math.pow(A[se]-F,2),ne+=Math.pow(R[se]-M,2),V+=(A[se]-F)*(R[se]-M);var Z=A.length-1;z/=Z,ne/=Z,V/=Z;var de=(2*F*M+g)*(2*V+f),Le=(Math.pow(F,2)+Math.pow(M,2)+g)*(z+ne+f);b+=de/Le,D+=(2*V+f)/(z+ne+f),y++}return s(T,"iteration"),r._iterate(a,o,i,l,T),{ssim:b/y,mcs:D/y}}s(n,"compare"),t.compare=n;var r;(function(a){function o(u,l,m,p,g){for(var f=u.width,y=u.height,b=0;b<y;b+=m)for(var D=0;D<f;D+=m){var T=Math.min(m,f-D),A=Math.min(m,y-b),R=i(u,D,b,T,A,p),F=i(l,D,b,T,A,p),M=c(R),V=c(F);g(R,F,M,V)}}s(o,"_iterate"),a._iterate=o;function i(u,l,m,p,g,f){for(var y=u.data,b=new Float32Array(new ArrayBuffer(p*g*4)),D=0,T=m+g,A=m;A<T;A++){var R=A*u.width,F=(R+l)*u.channels,M=(R+l+p)*u.channels;switch(u.channels){case 1:for(;F<M;)b[D++]=y[F++];break;case 2:for(;F<M;)b[D++]=y[F++]*(y[F++]/255);break;case 3:if(f)for(;F<M;)b[D++]=y[F++]*.212655+y[F++]*.715158+y[F++]*.072187;else for(;F<M;)b[D++]=y[F++]+y[F++]+y[F++];break;case 4:if(f)for(;F<M;)b[D++]=(y[F++]*.212655+y[F++]*.715158+y[F++]*.072187)*(y[F++]/255);else for(;F<M;)b[D++]=(y[F++]+y[F++]+y[F++])*(y[F++]/255);break}}return b}s(i,"_lumaValuesForWindow");function c(u){for(var l=0,m=0;m<u.length;m++)l+=u[m];return l/u.length}s(c,"_averageLuma")})(r||(r={}))})(qD||(qD={}));rO.exports=qD});var cO=L((e8e,sO)=>{"use strict";d();var ure=aO(),lre=5,dre=3,mre=-1,HD=mre,oO=lre-HD,pre=Math.log((dre-HD)/oO);function iO(t){let e=t/1e3;return oO*Math.exp(pre*e)+HD}s(iO,"calculateFastModeAllowableChange");function fre(t,e,n){let r=0,a=0,o=t.getHistogram(),i=e.getHistogram(),c=n.getHistogram();for(let l=0;l<3;l++)for(let m=0;m<256;m++){let p=o[l][m],g=i[l][m],f=c[l][m],y=Math.abs(p-g),b=Math.abs(f-g);a+=Math.min(y,b),r+=b}let u;return a===0&&r===0?u=100:u=Math.floor(a/r*100),u}s(fre,"calculateFrameProgress");function j1(t,e,n,r,a,o){if(!r){t.forEach(p=>o(p,a(p),!1));return}let i=t[e],c=t[n],u=c.getTimeStamp()-i.getTimeStamp(),l=a(i),m=a(c);if(o(i,l,!1),o(c,m,!1),Math.abs(l-m)<iO(u))for(let p=e+1;p<n;p++)o(t[p],l,!0);else if(n-e>1){let p=Math.floor((e+n)/2);j1(t,e,p,r,a,o),j1(t,p,n,r,a,o)}}s(j1,"calculateProgressBetweenFrames");function gre(t,e){let n=t[0],r=t[t.length-1];function a(i){return typeof i.getProgress()=="number"?i.getProgress():fre(i,n,r)}s(a,"getProgress");function o(i,c,u){return i.setProgress(c,u)}return s(o,"setProgress"),j1(t,0,t.length-1,e&&e.fastMode,a,o),t}s(gre,"calculateVisualProgress");function zD(t,e){let n={channels:4},r=Object.assign(t.getParsedImage(),n),a=Object.assign(e.getParsedImage(),n);return ure.compare(r,a).ssim}s(zD,"calculateFrameSimilarity");function hre(t,e){let n=t[0],r=t[t.length-1],a=zD(n,r);function o(c){if(typeof c.getPerceptualProgress()=="number")return c.getPerceptualProgress();let u=zD(c,r);return Math.max(100*(u-a)/(1-a),0)}s(o,"getProgress");function i(c,u,l){return c.setPerceptualProgress(u,l)}return s(i,"setProgress"),j1(t,0,t.length-1,e&&e.fastMode,o,i),t}s(hre,"calculatePerceptualProgress");function yre(t,e){let n=typeof t[0].getProgress()=="number",r=typeof t[0].getPerceptualProgress()=="number",a=n?"getProgress":"getPerceptualProgress",o=e.startTs,i,c;for(let f=0;f<t.length&&!c;f++)t[f][a]()>0&&(c=t[f].getTimeStamp());for(let f=0;f<t.length&&!i;f++)t[f][a]()>=100&&(i=t[f].getTimeStamp());let u=t[0].getTimeStamp(),l=t[0].getProgress(),m=t[0].getPerceptualProgress(),p=c-o,g=c-o;return t.forEach(function(f){if(f.getTimeStamp()>c){let y=f.getTimeStamp()-u;p+=y*(1-l),g+=y*(1-m)}u=f.getTimeStamp(),l=f.getProgress()/100,m=f.getPerceptualProgress()/100}),p=n?p:void 0,g=r?g:void 0,{firstPaintTs:c,visuallyCompleteTs:i,speedIndex:p,perceptualSpeedIndex:g}}s(yre,"calculateSpeedIndexes");sO.exports={calculateFastModeAllowableChange:iO,calculateFrameSimilarity:zD,calculateVisualProgress:gre,calculatePerceptualProgress:hre,calculateSpeedIndexes:yre}});var lO=L((r8e,uO)=>{"use strict";d();var vre=nO(),GD=cO();function bre(t,e){let n=GD.calculateSpeedIndexes(t,e),r=Math.floor(e.endTs-e.startTs),a=Math.floor(n.firstPaintTs-e.startTs),o=Math.floor(n.visuallyCompleteTs-e.startTs);return{beginning:e.startTs,end:e.endTs,frames:t,first:a,complete:o,duration:r,speedIndex:n.speedIndex,perceptualSpeedIndex:n.perceptualSpeedIndex}}s(bre,"calculateValues");var hi={All:"all",pSI:"perceptualSpeedIndex",SI:"speedIndex"};uO.exports=function(t,e){let n=e&&e.include||hi.All;if(!Object.keys(hi).some(r=>hi[r]===n))throw new Error(`Unrecognized include option: ${n}`);return vre.extractFramesFromTimeline(t,e).then(function(r){let a=r.frames;return(n===hi.All||n===hi.SI)&&GD.calculateVisualProgress(a,e),(n===hi.All||n===hi.pSI)&&GD.calculatePerceptualProgress(a,e),bre(a,r)})}});var dO,WD,yo,Nd=v(()=>{"use strict";d();dO=zt(lO(),1);we();Bt();Jt();WD=class{static{s(this,"Speedline")}static async compute_(e,n){return Ye.request(e,n).then(r=>{let a=e.traceEvents.slice(),o=r.timestamps.timeOrigin;return(0,dO.default)(a,{timeOrigin:o,fastMode:!0,include:"speedIndex"})}).catch(r=>{throw/No screenshots found in trace/.test(r.message)?new G(G.errors.NO_SCREENSHOTS):r}).then(r=>{if(r.frames.length===0)throw new G(G.errors.NO_SPEEDLINE_FRAMES);if(r.speedIndex===0)throw new G(G.errors.SPEEDINDEX_OF_ZERO);return r})}},yo=W(WD,null)});var VD,mO,pO=v(()=>{"use strict";d();we();Br();VD=class extends xt{static{s(this,"FirstContentfulPaintAllFrames")}static computeSimulatedMetric(){throw new Error("FCP All Frames not implemented in lantern")}static async computeObservedMetric(e){let{processedNavigation:n}=e;return{timing:n.timings.firstContentfulPaintAllFrames,timestamp:n.timestamps.firstContentfulPaintAllFrames}}},mO=W(VD,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var $D,q1,YD=v(()=>{"use strict";d();we();Br();Bt();Xp();$D=class extends xt{static{s(this,"FirstMeaningfulPaint")}static computeSimulatedMetric(e,n){let r=xt.getMetricComputationInput(e);return ks.request(r,n)}static async computeObservedMetric(e){let{processedNavigation:n}=e;if(n.timings.firstMeaningfulPaint===void 0)throw new G(G.errors.NO_FMP);return{timing:n.timings.firstMeaningfulPaint,timestamp:n.timestamps.firstMeaningfulPaint}}},q1=W($D,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var KD,fO,gO=v(()=>{"use strict";d();we();Br();Bt();KD=class extends xt{static{s(this,"LargestContentfulPaintAllFrames")}static async computeSimulatedMetric(){throw new Error("LCP All Frames not implemented in lantern")}static async computeObservedMetric(e){let{processedNavigation:n}=e;if(n.timings.largestContentfulPaintAllFrames===void 0)throw new G(G.errors.NO_LCP_ALL_FRAMES);return{timing:n.timings.largestContentfulPaintAllFrames,timestamp:n.timestamps.largestContentfulPaintAllFrames}}},fO=W(KD,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var JD,z1,XD=v(()=>{"use strict";d();we();Ea();An();Nd();fr();Vn();JD=class t extends nn{static{s(this,"LanternSpeedIndex")}static get COEFFICIENTS(){return{intercept:-250,optimistic:1.4,pessimistic:.65}}static getScaledCoefficients(e){let n=this.COEFFICIENTS,r=Wn.mobileSlow4G.rttMs-30,a=Math.max((e-30)/r,0);return{intercept:n.intercept*a,optimistic:.5+(n.optimistic-.5)*a,pessimistic:.5+(n.pessimistic-.5)*a}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,n){if(!n.fcpResult)throw new Error("missing fcpResult");if(!n.speedline)throw new Error("missing speedline");let r=n.fcpResult.pessimisticEstimate.timeInMs;return{timeInMs:n.optimistic?n.speedline.speedIndex:t.computeLayoutBasedSpeedIndex(e.nodeTimings,r),nodeTimings:e.nodeTimings}}static async compute_(e,n){let r=await yo.request(e.trace,n),a=await It.request(e,n),o=await this.computeMetricWithGraphs(e,n,{speedline:r,fcpResult:a});return o.timing=Math.max(o.timing,a.timing),o}static computeLayoutBasedSpeedIndex(e,n){let r=[];for(let[i,c]of e.entries())if(i.type===Fe.TYPES.CPU&&i.childEvents.some(u=>u.name==="Layout")){let u=Math.max(Math.log2(c.endTime-c.startTime),0);r.push({time:c.endTime,weight:u})}let a=r.map(i=>i.weight*Math.max(i.time,n)).reduce((i,c)=>i+c,0),o=r.map(i=>i.weight).reduce((i,c)=>i+c,0);return o?a/o:n}},z1=W(JD,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var ZD,H1,QD=v(()=>{"use strict";d();we();Br();XD();Nd();ZD=class extends xt{static{s(this,"SpeedIndex")}static computeSimulatedMetric(e,n){let r=xt.getMetricComputationInput(e);return z1.request(r,n)}static async computeObservedMetric(e,n){let r=await yo.request(e.trace,n),a=Math.round(r.speedIndex),o=(a+r.beginning)*1e3;return Promise.resolve({timing:a,timestamp:o})}},H1=W(ZD,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var eE,hO,yO=v(()=>{"use strict";d();we();Ea();An();fr();eE=class t extends nn{static{s(this,"LanternMaxPotentialFID")}static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,n){if(!n.fcpResult)throw new Error("missing fcpResult");let r=n.optimistic?n.fcpResult.pessimisticEstimate.timeInMs:n.fcpResult.optimisticEstimate.timeInMs,a=t.getTimingsAfterFCP(e.nodeTimings,r);return{timeInMs:Math.max(...a.map(o=>o.duration),16),nodeTimings:e.nodeTimings}}static async compute_(e,n){let r=await It.request(e,n);return super.computeMetricWithGraphs(e,n,{fcpResult:r})}static getTimingsAfterFCP(e,n){return Array.from(e.entries()).filter(([r,a])=>r.type===Fe.TYPES.CPU&&a.endTime>n).map(([r,a])=>a)}},hO=W(eE,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var tE,G1,nE=v(()=>{"use strict";d();we();Br();yO();Ar();tE=class extends xt{static{s(this,"MaxPotentialFID")}static computeSimulatedMetric(e,n){let r=xt.getMetricComputationInput(e);return hO.request(r,n)}static computeObservedMetric(e){let{firstContentfulPaint:n}=e.processedNavigation.timings,r=Kt.getMainThreadTopLevelEvents(e.processedTrace,n).filter(a=>a.duration>=1);return Promise.resolve({timing:Math.max(...r.map(a=>a.duration),16)})}},G1=W(tE,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});function wre(t,e,n,r){let a=50;if(r&&(a*=t.duration/r.duration),t.duration<a||t.end<e||t.start>n)return 0;let o=Math.max(t.start,e),c=Math.min(t.end,n)-o;return c<a?0:c-a}function Ld(t,e,n){if(n<=e)return 0;let r=0;for(let a of t)r+=wre(a,e,n);return r}var rE=v(()=>{"use strict";d();s(wre,"calculateTbtImpactForEvent");s(Ld,"calculateSumOfBlockingTime")});var aE,vO,bO=v(()=>{"use strict";d();we();Ea();An();fr();oi();rE();aE=class t extends nn{static{s(this,"LanternTotalBlockingTime")}static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,n){if(!n.fcpResult)throw new Error("missing fcpResult");if(!n.interactiveResult)throw new Error("missing interactiveResult");let r=n.optimistic?n.fcpResult.pessimisticEstimate.timeInMs:n.fcpResult.optimisticEstimate.timeInMs,a=n.optimistic?n.interactiveResult.optimisticEstimate.timeInMs:n.interactiveResult.pessimisticEstimate.timeInMs,o=50,i=t.getTopLevelEvents(e.nodeTimings,o);return{timeInMs:Ld(i,r,a),nodeTimings:e.nodeTimings}}static async compute_(e,n){let r=await It.request(e,n),a=await jn.request(e,n);return this.computeMetricWithGraphs(e,n,{fcpResult:r,interactiveResult:a})}static getTopLevelEvents(e,n){let r=[];for(let[a,o]of e.entries())a.type===Fe.TYPES.CPU&&(o.duration<n||r.push({start:o.startTime,end:o.endTime,duration:o.duration}));return r}},vO=W(aE,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var oE,W1,iE=v(()=>{"use strict";d();we();oo();Ar();bO();ad();rE();oE=class extends bn{static{s(this,"TotalBlockingTime")}static computeSimulatedMetric(e,n){let r=bn.getMetricComputationInput(e);return vO.request(r,n)}static async computeObservedMetric(e,n){let r=Kt.getMainThreadTopLevelEvents(e.processedTrace);if(e.processedNavigation){let{firstContentfulPaint:a}=e.processedNavigation.timings,o=bn.getMetricComputationInput(e),i=(await io.request(o,n)).timing;return{timing:Ld(r,a,i)}}else return{timing:Ld(r,0,e.processedTrace.timings.traceEnd)}}},W1=W(oE,["devtoolsLog","gatherContext","settings","simulator","trace","URL"])});var sE,rc,V1=v(()=>{"use strict";d();Jt();Ur();Nd();c1();pO();YD();Fd();gO();ad();Hu();QD();nE();iE();we();DD();TD();sE=class t{static{s(this,"TimingSummary")}static async summarize(e,n,r,a,o,i){let c={trace:e,devtoolsLog:n,gatherContext:r,settings:a,URL:o},u=s((Le,pe)=>Le.request(pe,i).catch(wt=>{}),"requestOrUndefined"),l=await Ye.request(e,i),m=await u(on,e),p=await yo.request(e,i),g=await u(Ps,c),f=await u(mO,c),y=await u(q1,c),b=await u(ho,c),D=await u(fO,c),T=await u(io,c),A=await u(ro,e),R=await u(G1,c),F=await u(H1,c),M=await u(W1,c),V=await u(I1,c),z=await u(k1,c),{cumulativeLayoutShift:ne,cumulativeLayoutShiftMainFrame:se}=A||{},Z={firstContentfulPaint:g?.timing,firstContentfulPaintTs:g?.timestamp,firstContentfulPaintAllFrames:f?.timing,firstContentfulPaintAllFramesTs:f?.timestamp,firstMeaningfulPaint:y?.timing,firstMeaningfulPaintTs:y?.timestamp,largestContentfulPaint:b?.timing,largestContentfulPaintTs:b?.timestamp,largestContentfulPaintAllFrames:D?.timing,largestContentfulPaintAllFramesTs:D?.timestamp,interactive:T?.timing,interactiveTs:T?.timestamp,speedIndex:F?.timing,speedIndexTs:F?.timestamp,totalBlockingTime:M?.timing,maxPotentialFID:R?.timing,cumulativeLayoutShift:ne,cumulativeLayoutShiftMainFrame:se,lcpLoadStart:V?.loadStart,lcpLoadEnd:V?.loadEnd,timeToFirstByte:z?.timing,timeToFirstByteTs:z?.timestamp,observedTimeOrigin:l.timings.timeOrigin,observedTimeOriginTs:l.timestamps.timeOrigin,observedNavigationStart:m?.timings.timeOrigin,observedNavigationStartTs:m?.timestamps.timeOrigin,observedFirstPaint:m?.timings.firstPaint,observedFirstPaintTs:m?.timestamps.firstPaint,observedFirstContentfulPaint:m?.timings.firstContentfulPaint,observedFirstContentfulPaintTs:m?.timestamps.firstContentfulPaint,observedFirstContentfulPaintAllFrames:m?.timings.firstContentfulPaintAllFrames,observedFirstContentfulPaintAllFramesTs:m?.timestamps.firstContentfulPaintAllFrames,observedFirstMeaningfulPaint:m?.timings.firstMeaningfulPaint,observedFirstMeaningfulPaintTs:m?.timestamps.firstMeaningfulPaint,observedLargestContentfulPaint:m?.timings.largestContentfulPaint,observedLargestContentfulPaintTs:m?.timestamps.largestContentfulPaint,observedLargestContentfulPaintAllFrames:m?.timings.largestContentfulPaintAllFrames,observedLargestContentfulPaintAllFramesTs:m?.timestamps.largestContentfulPaintAllFrames,observedTraceEnd:l.timings.traceEnd,observedTraceEndTs:l.timestamps.traceEnd,observedLoad:m?.timings.load,observedLoadTs:m?.timestamps.load,observedDomContentLoaded:m?.timings.domContentLoaded,observedDomContentLoadedTs:m?.timestamps.domContentLoaded,observedCumulativeLayoutShift:ne,observedCumulativeLayoutShiftMainFrame:se,observedFirstVisualChange:p.first,observedFirstVisualChangeTs:(p.first+p.beginning)*1e3,observedLastVisualChange:p.complete,observedLastVisualChangeTs:(p.complete+p.beginning)*1e3,observedSpeedIndex:p.speedIndex,observedSpeedIndexTs:(p.speedIndex+p.beginning)*1e3},de={lcpInvalidated:!!m?.lcpInvalidated};return{metrics:Z,debugInfo:de}}static async compute_(e,n){return t.summarize(e.trace,e.devtoolsLog,e.gatherContext,e.settings,e.URL,n)}},rc=W(sE,["devtoolsLog","gatherContext","settings","trace","URL"])});var wO={};S(wO,{default:()=>Tre});var Ere,cE,Tre,DO=v(()=>{"use strict";d();J();V1();Ere=new Set(["cumulativeLayoutShift","cumulativeLayoutShiftMainFrame","observedCumulativeLayoutShift","observedCumulativeLayoutShiftMainFrame"]),cE=class extends h{static{s(this,"Metrics")}static get meta(){return{id:"metrics",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:"Metrics",description:"Collects all available metrics.",supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static async audit(e,n){let r=e.GatherContext,a=e.traces[h.DEFAULT_PASS],o=e.devtoolsLogs[h.DEFAULT_PASS],i=e.URL,c=await rc.request({trace:a,devtoolsLog:o,gatherContext:r,settings:n.settings,URL:i},n),u=c.metrics,l=c.debugInfo;for(let[p,g]of Object.entries(u)){let f=p;typeof g=="number"&&!Ere.has(f)&&(u[f]=Math.round(g))}let m={type:"debugdata",items:[u,l]};return{score:1,numericValue:u.interactive||0,numericUnit:"millisecond",details:m}}},Tre=cE});var TO={};S(TO,{UIStrings:()=>lE,default:()=>Sre});var lE,EO,uE,Sre,SO=v(()=>{"use strict";d();J();Hu();k();lE={description:"Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more about the Cumulative Layout Shift metric](https://web.dev/cls/)."},EO=w("core/audits/metrics/cumulative-layout-shift.js",lE),uE=class extends h{static{s(this,"CumulativeLayoutShift")}static get meta(){return{id:"cumulative-layout-shift",title:EO(x.cumulativeLayoutShiftMetric),description:EO(lE.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:.1,median:.25}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],{cumulativeLayoutShift:a,...o}=await ro.request(r,n),i={type:"debugdata",items:[o]};return{score:h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},a),numericValue:a,numericUnit:"unitless",displayValue:a.toLocaleString(n.settings.locale),details:i}}},Sre=uE});var xO={};S(xO,{UIStrings:()=>pE,default:()=>xre});var pE,dE,mE,xre,CO=v(()=>{"use strict";d();J();k();c1();pE={description:"First Contentful Paint marks the time at which the first text or image is painted. [Learn more about the First Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."},dE=w("core/audits/metrics/first-contentful-paint.js",pE),mE=class extends h{static{s(this,"FirstContentfulPaint")}static get meta(){return{id:"first-contentful-paint",title:dE(x.firstContentfulPaintMetric),description:dE(pE.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:1800,median:3e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL},c=await Ps.request(i,n),u=n.options[n.settings.formFactor];return{score:h.computeLogNormalScore(u.scoring,c.timing),numericValue:c.timing,numericUnit:"millisecond",displayValue:dE(x.seconds,{timeInMs:c.timing})}}},xre=mE});var AO={};S(AO,{UIStrings:()=>hE,default:()=>Cre});var hE,fE,gE,Cre,FO=v(()=>{"use strict";d();J();k();YD();hE={description:"First Meaningful Paint measures when the primary content of a page is visible. [Learn more about the First Meaningful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."},fE=w("core/audits/metrics/first-meaningful-paint.js",hE),gE=class extends h{static{s(this,"FirstMeaningfulPaint")}static get meta(){return{id:"first-meaningful-paint",title:fE(x.firstMeaningfulPaintMetric),description:fE(hE.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2336,median:4e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL},c=await q1.request(i,n),u=n.options[n.settings.formFactor];return{score:h.computeLogNormalScore(u.scoring,c.timing),numericValue:c.timing,numericUnit:"millisecond",displayValue:fE(x.seconds,{timeInMs:c.timing})}}},Cre=gE});var RO={};S(RO,{UIStrings:()=>bE,default:()=>wE});var bE,yE,vE,wE,DE=v(()=>{"use strict";d();J();Kp();k();bE={description:"Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more about the Interaction to Next Paint metric](https://web.dev/inp/)."},yE=w("core/audits/metrics/interaction-to-next-paint.js",bE),vE=class extends h{static{s(this,"InteractionToNextPaint")}static get meta(){return{id:"interaction-to-next-paint",title:yE(x.interactionToNextPaint),description:yE(bE.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:200,median:500}}static async audit(e,n){let{settings:r}=n;if(r.throttlingMethod==="simulate")return{score:null,notApplicable:!0};let o={trace:e.traces[h.DEFAULT_PASS],settings:r},i=await Fs.request(o,n);if(i===null)return{score:null,notApplicable:!0};let c=i.name==="FallbackTiming"?i.duration:i.args.data.duration;return{score:h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},c),numericValue:c,numericUnit:"millisecond",displayValue:yE(x.ms,{timeInMs:c})}}},wE=vE});var _O={};S(_O,{UIStrings:()=>SE,default:()=>Are});var SE,EE,TE,Are,kO=v(()=>{"use strict";d();J();k();ad();SE={description:"Time to Interactive is the amount of time it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."},EE=w("core/audits/metrics/interactive.js",SE),TE=class extends h{static{s(this,"InteractiveMetric")}static get meta(){return{id:"interactive",title:EE(x.interactiveMetric),description:EE(SE.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3785,median:7300}},desktop:{scoring:{p10:2468,median:4500}}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL},u=(await io.request(i,n)).timing,l=n.options[n.settings.formFactor];return{score:h.computeLogNormalScore(l.scoring,u),numericValue:u,numericUnit:"millisecond",displayValue:EE(x.seconds,{timeInMs:u})}}},Are=TE});var IO={};S(IO,{UIStrings:()=>AE,default:()=>Fre});var AE,xE,CE,Fre,MO=v(()=>{"use strict";d();J();k();Fd();AE={description:"Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)"},xE=w("core/audits/metrics/largest-contentful-paint.js",AE),CE=class extends h{static{s(this,"LargestContentfulPaint")}static get meta(){return{id:"largest-contentful-paint",title:xE(x.largestContentfulPaintMetric),description:xE(AE.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["HostUserAgent","traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2500,median:4e3}},desktop:{scoring:{p10:1200,median:2400}}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL},c=await ho.request(i,n),u=n.options[n.settings.formFactor];return{score:h.computeLogNormalScore(u.scoring,c.timing),numericValue:c.timing,numericUnit:"millisecond",displayValue:xE(x.seconds,{timeInMs:c.timing})}}},Fre=CE});var NO={};S(NO,{UIStrings:()=>_E,default:()=>Rre});var _E,FE,RE,Rre,LO=v(()=>{"use strict";d();J();nE();k();_E={description:"The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more about the Maximum Potential First Input Delay metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/)."},FE=w("core/audits/metrics/max-potential-fid.js",_E),RE=class extends h{static{s(this,"MaxPotentialFID")}static get meta(){return{id:"max-potential-fid",title:FE(x.maxPotentialFIDMetric),description:FE(_E.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{p10:130,median:250}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL},c=await G1.request(i,n);return{score:h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},c.timing),numericValue:c.timing,numericUnit:"millisecond",displayValue:FE(x.ms,{timeInMs:c.timing})}}},Rre=RE});var PO={};S(PO,{UIStrings:()=>ME,default:()=>_re});var ME,kE,IE,_re,OO=v(()=>{"use strict";d();J();k();QD();ME={description:"Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/)."},kE=w("core/audits/metrics/speed-index.js",ME),IE=class extends h{static{s(this,"SpeedIndex")}static get meta(){return{id:"speed-index",title:kE(x.speedIndexMetric),description:kE(ME.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3387,median:5800}},desktop:{scoring:{p10:1311,median:2300}}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL},c=await H1.request(i,n),u=n.options[n.settings.formFactor];return{score:h.computeLogNormalScore(u.scoring,c.timing),numericValue:c.timing,numericUnit:"millisecond",displayValue:kE(x.seconds,{timeInMs:c.timing})}}},_re=IE});var UO={};S(UO,{UIStrings:()=>PE,default:()=>kre});var PE,NE,LE,kre,BO=v(()=>{"use strict";d();J();iE();k();PE={description:"Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more about the Total Blocking Time metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/)."},NE=w("core/audits/metrics/total-blocking-time.js",PE),LE=class extends h{static{s(this,"TotalBlockingTime")}static get meta(){return{id:"total-blocking-time",title:NE(x.totalBlockingTimeMetric),description:NE(PE.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:200,median:600}},desktop:{scoring:{p10:150,median:350}}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:o,settings:n.settings,URL:e.URL};if(o.gatherMode==="timespan"&&n.settings.throttlingMethod==="simulate")return{score:1,notApplicable:!0};let c=await W1.request(i,n),u=n.options[n.settings.formFactor];return{score:h.computeLogNormalScore(u.scoring,c.timing),numericValue:c.timing,numericUnit:"millisecond",displayValue:NE(x.ms,{timeInMs:c.timing})}}},kre=LE});var jO={};S(jO,{default:()=>Ire});var OE,Ire,qO=v(()=>{"use strict";d();J();lt();De();Wt();ma();OE=class extends h{static{s(this,"NetworkRequests")}static get meta(){return{id:"network-requests",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:"Network Requests",description:"Lists the network requests that were made during page load.",requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await $.request(r,n),o=await gn.request({URL:e.URL,devtoolsLog:r},n),i=a.reduce((f,y)=>Math.min(f,y.rendererStartTime),1/0),c;e.GatherContext.gatherMode==="navigation"&&(c=(await je.request({devtoolsLog:r,URL:e.URL},n)).frameId);let u=s(f=>f<i||!Number.isFinite(f)?void 0:f-i,"normalizeTime"),l=a.map(f=>{let y=f.lrStatistics?.endTimeDeltaMs,b=f.lrStatistics?.TCPMs,D=f.lrStatistics?.requestMs,T=f.lrStatistics?.responseMs,A=f.isLinkPreload||void 0,R=c&&f.frameId===c||void 0,F=o.entityByUrl.get(f.url);return{url:te.elideDataURI(f.url),sessionTargetType:f.sessionTargetType,protocol:f.protocol,rendererStartTime:u(f.rendererStartTime),networkRequestTime:u(f.networkRequestTime),networkEndTime:u(f.networkEndTime),finished:f.finished,transferSize:f.transferSize,resourceSize:f.resourceSize,statusCode:f.statusCode,mimeType:f.mimeType,resourceType:f.resourceType,priority:f.priority,isLinkPreload:A,experimentalFromMainFrame:R,entity:F?.name,lrEndTimeDeltaMs:y,lrTCPMs:b,lrRequestMs:D,lrResponseMs:T}}),m=[{key:"url",valueType:"url",label:"URL"},{key:"protocol",valueType:"text",label:"Protocol"},{key:"networkRequestTime",valueType:"ms",granularity:1,label:"Network Request Time"},{key:"networkEndTime",valueType:"ms",granularity:1,label:"Network End Time"},{key:"transferSize",valueType:"bytes",displayUnit:"kb",granularity:1,label:"Transfer Size"},{key:"resourceSize",valueType:"bytes",displayUnit:"kb",granularity:1,label:"Resource Size"},{key:"statusCode",valueType:"text",label:"Status Code"},{key:"mimeType",valueType:"text",label:"MIME Type"},{key:"resourceType",valueType:"text",label:"Resource Type"}],p=h.makeTableDetails(m,l),g=Number.isFinite(i)?i*1e3:void 0;return p.debugData={type:"debugdata",networkStartTimeTs:g},{score:1,details:p}}},Ire=OE});var zO={};S(zO,{UIStrings:()=>$1,default:()=>Mre});var $1,Pd,UE,Mre,HO=v(()=>{"use strict";d();J();k();De();Xo();$1={title:"Network Round Trip Times",description:"Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more about the Round Trip Time](https://hpbn.co/primer-on-latency-and-bandwidth/)."},Pd=w("core/audits/network-rtt.js",$1),UE=class extends h{static{s(this,"NetworkRTT")}static get meta(){return{id:"network-rtt",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:Pd($1.title),description:Pd($1.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS];if(!(await $.request(r,n)).length)return{score:1,notApplicable:!0};let o=await dr.request(r,n),i=0,c=o.rtt,u=[];for(let[p,g]of o.additionalRttByOrigin.entries()){if(!p.startsWith("http"))continue;let f=g+c;u.push({origin:p,rtt:f}),i=Number.isFinite(f)?Math.max(f,i):i}u.sort((p,g)=>g.rtt-p.rtt);let l=[{key:"origin",valueType:"text",label:Pd(x.columnURL)},{key:"rtt",valueType:"ms",granularity:1,label:Pd(x.columnTimeSpent)}],m=h.makeTableDetails(l,u,{sortedBy:["rtt"]});return{score:1,numericValue:i,numericUnit:"millisecond",displayValue:Pd(x.ms,{timeInMs:i}),details:m}}},Mre=UE});var GO={};S(GO,{UIStrings:()=>Y1,default:()=>Nre});var Y1,Od,BE,Nre,WO=v(()=>{"use strict";d();J();k();De();Xo();Y1={title:"Server Backend Latencies",description:"Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more about server response time](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall)."},Od=w("core/audits/network-server-latency.js",Y1),BE=class extends h{static{s(this,"NetworkServerLatency")}static get meta(){return{id:"network-server-latency",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:Od(Y1.title),description:Od(Y1.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS];if(!(await $.request(r,n)).length)return{score:1,notApplicable:!0};let o=await dr.request(r,n),i=0,c=[];for(let[m,p]of o.serverResponseTimeByOrigin.entries())m.startsWith("http")&&(i=Math.max(p,i),c.push({origin:m,serverResponseTime:p}));c.sort((m,p)=>p.serverResponseTime-m.serverResponseTime);let u=[{key:"origin",valueType:"text",label:Od(x.columnURL)},{key:"serverResponseTime",valueType:"ms",granularity:1,label:Od(x.columnTimeSpent)}],l=h.makeTableDetails(u,c,{sortedBy:["serverResponseTime"]});return{score:Math.max(1-i/500,0),numericValue:i,numericUnit:"millisecond",displayValue:Od(x.ms,{timeInMs:i}),details:l}}},Nre=BE});var VO={};S(VO,{UIStrings:()=>Ud,default:()=>Lre});var Ud,K1,jE,Lre,$O=v(()=>{"use strict";d();J();Ta();k();Ud={title:"Avoids `unload` event listeners",failureTitle:"Registers an `unload` listener",description:"The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Use `pagehide` or `visibilitychange` events instead. [Learn more about unload event listeners](https://web.dev/bfcache/#never-use-the-unload-event)"},K1=w("core/audits/no-unload-listeners.js",Ud),jE=class extends h{static{s(this,"NoUnloadListeners")}static get meta(){return{id:"no-unload-listeners",title:K1(Ud.title),failureTitle:K1(Ud.failureTitle),description:K1(Ud.description),requiredArtifacts:["GlobalListeners","SourceMaps","Scripts"]}}static async audit(e,n){let r=e.GlobalListeners.filter(c=>c.type==="unload");if(!r.length)return{score:1};let a=await vn.request(e,n),o=[{key:"source",valueType:"source-location",label:K1(x.columnSource)}],i=r.map(c=>{let{lineNumber:u,columnNumber:l}=c,m=e.Scripts.find(g=>g.scriptId===c.scriptId);if(!m)return{source:{type:"url",value:`(unknown):${u}:${l}`}};let p=a.find(g=>g.script.scriptId===m.scriptId);return{source:h.makeSourceLocation(m.url,u,l,p)}});return{score:0,details:h.makeTableDetails(o,i)}}},Lre=jE});var YO={};S(YO,{UIStrings:()=>sr,default:()=>Ure});function Ore(t,e){return Pre.filter(n=>t&n.flag).map(n=>n.text===sr.unsupportedCSSProperty?yi(n.text,{propertyCount:e.length,properties:e.join(", ")}):yi(n.text))}var sr,yi,Pre,qE,Ure,KO=v(()=>{"use strict";d();J();k();sr={title:"Avoid non-composited animations",description:"Animations which are not composited can be janky and increase CLS. [Learn how to avoid non-composited animations](https://developer.chrome.com/docs/lighthouse/performance/non-composited-animations/)",displayValue:`{itemCount, plural,
+  =1 {# animated element found}
+  other {# animated elements found}
+  }`,unsupportedCSSProperty:`{propertyCount, plural,
+    =1 {Unsupported CSS Property: {properties}}
+    other {Unsupported CSS Properties: {properties}}
+  }`,transformDependsBoxSize:"Transform-related property depends on box size",filterMayMovePixels:"Filter-related property may move pixels",nonReplaceCompositeMode:'Effect has composite mode other than "replace"',incompatibleAnimations:"Target has another animation which is incompatible",unsupportedTimingParameters:"Effect has unsupported timing parameters"},yi=w("core/audits/non-composited-animations.js",sr),Pre=[{flag:8192,text:sr.unsupportedCSSProperty},{flag:2048,text:sr.transformDependsBoxSize},{flag:4096,text:sr.filterMayMovePixels},{flag:16,text:sr.nonReplaceCompositeMode},{flag:64,text:sr.incompatibleAnimations},{flag:8,text:sr.unsupportedTimingParameters}];s(Ore,"getActionableFailureReasons");qE=class extends h{static{s(this,"NonCompositedAnimations")}static get meta(){return{id:"non-composited-animations",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:yi(sr.title),description:yi(sr.description),requiredArtifacts:["TraceElements","HostUserAgent"]}}static async audit(e){let n=e.HostUserAgent.match(/Chrome\/(\d+)/);if(!n||Number(n[1])<86)return{score:1,notApplicable:!0,metricSavings:{CLS:0}};let r=[],a=!1;e.TraceElements.forEach(u=>{if(u.traceEventType!=="animation")return;let l=u.animations||[],m=new Map;for(let{name:g,failureReasonsMask:f,unsupportedProperties:y}of l){if(!f)continue;let b=Ore(f,y||[]);for(let D of b){g&&(a=!0);let T=m.get(g)||new Set;T.add(D),m.set(g,T)}}if(!m.size)return;let p=[];for(let[g,f]of m)for(let y of f)p.push({failureReason:y,animation:g});r.push({node:h.makeNodeItem(u.node),subItems:{type:"subitems",items:p}})});let o=[{key:"node",valueType:"node",subItemsHeading:{key:"failureReason",valueType:"text"},label:yi(x.columnElement)}];a&&o.push({key:null,valueType:"text",subItemsHeading:{key:"animation",valueType:"text"},label:yi(x.columnName)});let i=h.makeTableDetails(o,r),c;return r.length>0&&(c=yi(sr.displayValue,{itemCount:r.length})),{score:r.length===0?1:0,notApplicable:r.length===0,metricSavings:{CLS:0},details:i,displayValue:c}}},Ure=qE});var JO={};S(JO,{default:()=>Bre});var Bre,XO=v(()=>{"use strict";d();Bre={meta:{id:"oopif-iframe-test-audit",title:"IFrame Elements",failureTitle:"IFrame Elements",description:"Audit to force the inclusion of IFrameElements artifact",requiredArtifacts:["IFrameElements"]},audit:()=>({score:1})}});var zE,ZO,QO=v(()=>{"use strict";d();ma();we();De();St();Eu();Rr();zE=class t{static{s(this,"ResourceSummary")}static determineResourceType(e){return e.resourceType&&{Stylesheet:"stylesheet",Image:"image",Media:"media",Font:"font",Script:"script",Document:"document"}[e.resourceType]||"other"}static summarize(e,n,r,a){let o={stylesheet:{count:0,resourceSize:0,transferSize:0},image:{count:0,resourceSize:0,transferSize:0},media:{count:0,resourceSize:0,transferSize:0},font:{count:0,resourceSize:0,transferSize:0},script:{count:0,resourceSize:0,transferSize:0},document:{count:0,resourceSize:0,transferSize:0},other:{count:0,resourceSize:0,transferSize:0},total:{count:0,resourceSize:0,transferSize:0},"third-party":{count:0,resourceSize:0,transferSize:0}},i=Mr.getMatchingBudget(r,n.mainDocumentUrl),c=[];return i?.options?.firstPartyHostnames?c=i.options.firstPartyHostnames:c=a.firstParty?.domains.map(u=>`*.${u}`)||[`*.${rt.getRootDomain(n.finalDisplayedUrl)}`],e.filter(u=>!(this.determineResourceType(u)==="other"&&u.url.endsWith("/favicon.ico")||Y.isNonNetworkRequest(u))).forEach(u=>{let l=this.determineResourceType(u);o[l].count++,o[l].resourceSize+=u.resourceSize,o[l].transferSize+=u.transferSize,o.total.count++,o.total.resourceSize+=u.resourceSize,o.total.transferSize+=u.transferSize,c.some(p=>{let g=new URL(u.url);return p.startsWith("*.")?g.hostname.endsWith(p.slice(2)):g.hostname===p})||(o["third-party"].count++,o["third-party"].resourceSize+=u.resourceSize,o["third-party"].transferSize+=u.transferSize)}),o}static async compute_(e,n){let r=await $.request(e.devtoolsLog,n),a=await gn.request({URL:e.URL,devtoolsLog:e.devtoolsLog},n);return t.summarize(r,e.URL,e.budgets,a)}},ZO=W(zE,["URL","devtoolsLog","budgets"])});var e6={};S(e6,{UIStrings:()=>Bd,default:()=>jre});var Bd,vo,HE,jre,t6=v(()=>{"use strict";d();J();QO();Wt();Eu();k();Bd={title:"Performance budget",description:"Keep the quantity and size of network requests under the targets set by the provided performance budget. [Learn more about performance budgets](https://developers.google.com/web/tools/lighthouse/audits/budgets).",requestCountOverBudget:`{count, plural,
+    =1 {1 request}
+    other {# requests}
+   }`},vo=w("core/audits/performance-budget.js",Bd),HE=class extends h{static{s(this,"ResourceBudget")}static get meta(){return{id:"performance-budget",title:vo(Bd.title),description:vo(Bd.description),scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","URL"]}}static getRowLabel(e){return{total:x.totalResourceType,document:x.documentResourceType,script:x.scriptResourceType,stylesheet:x.stylesheetResourceType,image:x.imageResourceType,media:x.mediaResourceType,font:x.fontResourceType,other:x.otherResourceType,"third-party":x.thirdPartyResourceType}[e]}static tableItems(e,n){return Object.keys(n).map(a=>{let o=vo(this.getRowLabel(a)),i=n[a].count,c=n[a].transferSize,u,l;if(e.resourceSizes){let m=e.resourceSizes.find(p=>p.resourceType===a);m&&c>m.budget*1024&&(u=c-m.budget*1024)}if(e.resourceCounts){let m=e.resourceCounts.find(p=>p.resourceType===a);if(m&&i>m.budget){let p=i-m.budget;l=vo(Bd.requestCountOverBudget,{count:p})}}return{resourceType:a,label:o,requestCount:i,transferSize:c,countOverBudget:l,sizeOverBudget:u}}).filter(a=>!!(e.resourceSizes&&e.resourceSizes.some(o=>o.resourceType===a.resourceType)||e.resourceCounts&&e.resourceCounts.some(o=>o.resourceType===a.resourceType))).sort((a,o)=>(o.sizeOverBudget||0)-(a.sizeOverBudget||0))}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a={devtoolsLog:r,URL:e.URL,budgets:n.settings.budgets},o=await ZO.request(a,n),i=await je.request({URL:e.URL,devtoolsLog:r},n),c=Mr.getMatchingBudget(n.settings.budgets,i.url);if(!c)return{score:0,notApplicable:!0};let u=[{key:"label",valueType:"text",label:vo(x.columnResourceType)},{key:"requestCount",valueType:"numeric",label:vo(x.columnRequests)},{key:"transferSize",valueType:"bytes",label:vo(x.columnTransferSize)},{key:"countOverBudget",valueType:"text",label:""},{key:"sizeOverBudget",valueType:"bytes",label:vo(x.columnOverBudget)}];return{details:h.makeTableDetails(u,this.tableItems(c,o),{sortedBy:["sizeOverBudget"]}),score:1}}},jre=HE});var n6={};S(n6,{default:()=>Gre});var qre,zre,Hre,GE,Gre,r6=v(()=>{"use strict";d();J();k();fr();Xp();oi();XD();ii();V1();Vn();qre=3651,zre=1e4,Hre=w("core/audits/predictive-perf.js",{}),GE=class extends h{static{s(this,"PredictivePerf")}static get meta(){return{id:"predictive-perf",title:"Predicted Performance (beta)",description:"Predicted performance evaluates how your site will perform under a cellular connection on a mobile device.",scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static async audit(e,n){let r=e.GatherContext,a=e.traces[h.DEFAULT_PASS],o=e.devtoolsLogs[h.DEFAULT_PASS],i=e.URL,c=JSON.parse(JSON.stringify(Qn)),u={trace:a,devtoolsLog:o,gatherContext:r,settings:c,URL:i},l=await It.request(u,n),m=await ks.request(u,n),p=await jn.request(u,n),g=await z1.request(u,n),f=await rr.request(u,n),y=await rc.request(u,n),b={roughEstimateOfFCP:l.timing,optimisticFCP:l.optimisticEstimate.timeInMs,pessimisticFCP:l.pessimisticEstimate.timeInMs,roughEstimateOfFMP:m.timing,optimisticFMP:m.optimisticEstimate.timeInMs,pessimisticFMP:m.pessimisticEstimate.timeInMs,roughEstimateOfTTI:p.timing,optimisticTTI:p.optimisticEstimate.timeInMs,pessimisticTTI:p.pessimisticEstimate.timeInMs,roughEstimateOfSI:g.timing,optimisticSI:g.optimisticEstimate.timeInMs,pessimisticSI:g.pessimisticEstimate.timeInMs,roughEstimateOfLCP:f.timing,optimisticLCP:f.optimisticEstimate.timeInMs,pessimisticLCP:f.pessimisticEstimate.timeInMs,roughEstimateOfTTFB:y.metrics.timeToFirstByte,roughEstimateOfLCPLoadStart:y.metrics.lcpLoadStart,roughEstimateOfLCPLoadEnd:y.metrics.lcpLoadEnd};return{score:h.computeLogNormalScore({p10:qre,median:zre},b.roughEstimateOfTTI),numericValue:b.roughEstimateOfTTI,numericUnit:"millisecond",displayValue:Hre(x.ms,{timeInMs:b.roughEstimateOfTTI}),details:{type:"debugdata",items:[b]}}}},Gre=GE});var a6={};S(a6,{UIStrings:()=>jd,default:()=>Vre});var Wre,jd,J1,WE,Vre,o6=v(()=>{"use strict";d();J();k();dD();De();Wre=/^(optional)$/,jd={title:"Fonts with `font-display: optional` are preloaded",failureTitle:"Fonts with `font-display: optional` are not preloaded",description:"Preload `optional` fonts so first-time visitors may use them. [Learn more about preloading fonts](https://web.dev/preload-optional-fonts/)"},J1=w("core/audits/preload-fonts.js",jd),WE=class t extends h{static{s(this,"PreloadFontsAudit")}static get meta(){return{id:"preload-fonts",title:J1(jd.title),failureTitle:J1(jd.failureTitle),description:J1(jd.description),requiredArtifacts:["devtoolsLogs","URL","CSSUsage"]}}static getURLsAttemptedToPreload(e){let n=e.filter(r=>r.resourceType==="Font").filter(r=>r.isLinkPreload).map(r=>r.url);return new Set(n)}static async audit_(e,n){let r=e.devtoolsLogs[this.DEFAULT_PASS],a=await $.request(r,n),o=lD.findFontDisplayDeclarations(e,Wre).passingURLs,i=t.getURLsAttemptedToPreload(a),c=Array.from(o).filter(l=>!i.has(l)).map(l=>({url:l})),u=[{key:"url",valueType:"url",label:J1(x.columnURL)}];return{score:c.length>0?0:1,details:h.makeTableDetails(u,c),notApplicable:o.size===0}}static async audit(){return{score:1,notApplicable:!0}}},Vre=WE});var i6={};S(i6,{UIStrings:()=>X1,default:()=>$re});var X1,qd,VE,$re,s6=v(()=>{"use strict";d();J();k();St();Wt();ii();tr();Xt();Zp();X1={title:"Preload Largest Contentful Paint image",description:"If the LCP element is dynamically added to the page, you should preload the image in order to improve LCP. [Learn more about preloading LCP elements](https://web.dev/optimize-lcp/#optimize-when-the-resource-is-discovered)."},qd=w("core/audits/prioritize-lcp-image.js",X1),VE=class t extends h{static{s(this,"PrioritizeLcpImage")}static get meta(){return{id:"prioritize-lcp-image",title:qd(X1.title),description:qd(X1.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL","TraceElements"],scoreDisplayMode:h.SCORING_MODES.NUMERIC}}static shouldPreloadRequest(e,n,r){return e.isLinkPreload||Y.isNonNetworkRequest(e)||r.length<=2?!1:e.frameId===n.frameId}static findLCPNode(e,n){for(let{node:r}of e.traverseGenerator())if(r.type==="network"&&r.record.requestId===n.requestId)return r}static getLcpInitiatorPath(e,n){let r=[],a=!1,o=e;for(;o;){a||=o.requestId===n.requestId;let i=o.initiator?.type??"other";if(o.initiatorRequest&&o.initiatorRequest===o.redirectSource&&(i="redirect"),!o.initiatorRequest&&!a&&(i="fallbackToMain"),r.push({url:o.url,initiatorType:i}),a)break;o=o.initiatorRequest||n}return r}static getLCPNodeToPreload(e,n,r){if(!r)return{};let a=t.findLCPNode(n,r),o=t.getLcpInitiatorPath(r,e);return a?{lcpNodeToPreload:t.shouldPreloadRequest(r,e,o)?a:void 0,initiatorPath:o}:{initiatorPath:o}}static computeWasteWithGraph(e,n,r,a){if(!n)return{wastedMs:0,results:[]};let o=r.cloneWithRelationships(),i=new Set;for(let D of n.getDependencies())i.add(D.id);let c=null,u=null;for(let{node:D}of o.traverseGenerator())D.type==="network"&&(D.isMainDocument()?u=D:D.id===n.id&&(c=D));if(!u)throw new Error("Could not find main document node");if(!c)throw new Error("Could not find the LCP node");c.removeAllDependencies(),c.addDependency(u);let l=a.simulate(r,{flexibleOrdering:!0}),m=a.simulate(o,{flexibleOrdering:!0}),p=l.nodeTimings.get(n);if(!p)throw new Error("Impossible - node timings should never be undefined");let g=m.nodeTimings.get(c);if(!g)throw new Error("Impossible - node timings should never be undefined");let f=Array.from(m.nodeTimings.keys()).reduce((D,T)=>D.set(T.id,T),new Map),y=0;for(let D of Array.from(i)){let T=f.get(D);if(!T)throw new Error("Impossible - node should never be undefined");let R=m.nodeTimings.get(T)?.endTime||0;y=Math.max(y,R)}let b=p.endTime-Math.max(g.endTime,y);return{wastedMs:b,results:[{node:h.makeNodeItem(e.node),url:n.record.url,wastedMs:b}]}}static async audit(e,n){let r=e.GatherContext,a=e.traces[t.DEFAULT_PASS],o=e.devtoolsLogs[t.DEFAULT_PASS],i=e.URL,c=n.settings,u={trace:a,devtoolsLog:o,gatherContext:r,settings:c,URL:i},l=e.TraceElements.find(M=>M.traceEventType==="largest-contentful-paint");if(!l||l.type!=="image")return{score:null,notApplicable:!0,metricSavings:{LCP:0}};let m=await je.request({devtoolsLog:o,URL:i},n),p=await rr.request(u,n),g=await Ht.request({devtoolsLog:o,settings:c},n),f=await Is.request({trace:a,devtoolsLog:o},n),y=p.pessimisticGraph,{lcpNodeToPreload:b,initiatorPath:D}=t.getLCPNodeToPreload(m,y,f),{results:T,wastedMs:A}=t.computeWasteWithGraph(l,b,y,g),R=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:qd(x.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:qd(x.columnWastedMs)}],F=h.makeOpportunityDetails(R,T,{overallSavingsMs:A,sortedBy:["wastedMs"]});return D&&(F.debugData={type:"debugdata",initiatorPath:D,pathLength:D.length}),{score:ie.scoreForWastedMs(A),numericValue:A,numericUnit:"millisecond",displayValue:A?qd(x.displayValueMsSavings,{wastedMs:A}):"",details:F,metricSavings:{LCP:A}}}},$re=VE});var c6={};S(c6,{UIStrings:()=>Z1,default:()=>Yre});var Z1,zd,$E,Yre,u6=v(()=>{"use strict";d();J();Xt();k();Jt();De();oi();Z1={title:"Avoid multiple page redirects",description:"Redirects introduce additional delays before the page can be loaded. [Learn how to avoid page redirects](https://developer.chrome.com/docs/lighthouse/performance/redirects/)."},zd=w("core/audits/redirects.js",Z1),$E=class t extends h{static{s(this,"Redirects")}static get meta(){return{id:"redirects",title:zd(Z1.title),description:zd(Z1.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["URL","GatherContext","devtoolsLogs","traces"]}}static getDocumentRequestChain(e,n){let r=[];for(let a of n.processEvents){if(a.name!=="navigationStart")continue;let o=a.args.data||{};if(!o.documentLoaderURL||!o.isLoadingMainFrame)continue;let i=e.find(c=>c.requestId===o.navigationId);for(;i;)r.push(i),i=i.redirectDestination}if(!r.length)throw new Error("No navigation requests found");return r}static async audit(e,n){let r=n.settings,a=e.traces[h.DEFAULT_PASS],o=e.devtoolsLogs[h.DEFAULT_PASS],i=e.GatherContext,c=await Ye.request(a,n),u=await $.request(o,n),l={trace:a,devtoolsLog:o,gatherContext:i,settings:r,URL:e.URL},m=await jn.request(l,n),p=new Map;for(let[T,A]of m.pessimisticEstimate.nodeTimings.entries())T.type==="network"&&p.set(T.record.requestId,A);let g=t.getDocumentRequestChain(u,c),f=0,y=[];for(let T=0;T<g.length&&!(g.length<2);T++){let A=g[T],R=g[T+1]||A,F=p.get(A.requestId),M=p.get(R.requestId);if(!F||!M)throw new Error("Could not find redirects in graph");let V=M.startTime-F.startTime,z=R.networkRequestTime-A.networkRequestTime,ne=r.throttlingMethod==="simulate"?V:z;f+=ne,y.push({url:A.url,wastedMs:ne})}let b=[{key:"url",valueType:"url",label:zd(x.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:zd(x.columnTimeSpent)}],D=h.makeOpportunityDetails(b,y,{overallSavingsMs:f});return{score:g.length<=2?1:ie.scoreForWastedMs(f),numericValue:f,numericUnit:"millisecond",displayValue:f?zd(x.displayValueMsSavings,{wastedMs:f}):"",details:D,metricSavings:{LCP:f,FCP:f}}}},Yre=$E});var d6={};S(d6,{default:()=>Jre});var l6,Kre,YE,Jre,m6=v(()=>{"use strict";d();l6=zt(UD(),1);J();Bt();Nd();Kre=8,YE=class t extends h{static{s(this,"ScreenshotThumbnails")}static get meta(){return{id:"screenshot-thumbnails",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:"Screenshot Thumbnails",description:"This is what the load of your site looked like.",requiredArtifacts:["traces","GatherContext"]}}static scaleImageToThumbnail(e,n){let r=e.width/n,a=Math.floor(e.height/r),o=new Uint8Array(n*a*4);for(let i=0;i<n;i++)for(let c=0;c<a;c++){let u=Math.floor(i*r),m=(Math.floor(c*r)*e.width+u)*4,p=(c*n+i)*4;o[p]=e.data[m],o[p+1]=e.data[m+1],o[p+2]=e.data[m+2],o[p+3]=e.data[m+3]}return{width:n,height:a,data:o}}static async _audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=new Map,o=await yo.request(r,n),i=n.options.minimumTimelineDuration||3e3,c=n.options.numberOfThumbnails||Kre,u=n.options.thumbnailWidth||null,l=[],m=o.frames.filter(f=>!f.isProgressInterpolated()),p=o.complete||Math.max(...o.frames.map(f=>f.getTimeStamp()-o.beginning)),g=Math.max(p,i);if(!m.length||!Number.isFinite(g))throw new G(G.errors.INVALID_SPEEDLINE);for(let f=1;f<=c;f++){let y=o.beginning+g*f/c,b=null;f===c?b=m[m.length-1]:m.forEach(A=>{A.getTimeStamp()<=y&&(b=A)});let D,T=a.get(b);if(T)D=T;else if(u!==null){let A=b.getParsedImage(),R=t.scaleImageToThumbnail(A,u);D=l6.default.encode(R,90).data.toString("base64"),a.set(b,D)}else D=b.getImage().toString("base64"),a.set(b,D);l.push({timing:Math.round(y-o.beginning),timestamp:y*1e3,data:`data:image/jpeg;base64,${D}`})}return{score:1,details:{type:"filmstrip",scale:g,items:l}}}static async audit(e,n){try{return await this._audit(e,n)}catch(r){if(new Set([G.errors.NO_SCREENSHOTS.code,G.errors.SPEEDINDEX_OF_ZERO.code,G.errors.NO_SPEEDLINE_FRAMES.code,G.errors.INVALID_SPEEDLINE.code]).has(r.code)&&e.GatherContext.gatherMode==="timespan")return{notApplicable:!0,score:1};throw r}}},Jre=YE});var p6={};S(p6,{default:()=>Xre});var Xre,f6=v(()=>{"use strict";d();Xre={meta:{id:"script-elements-test-audit",title:"ScriptElements",failureTitle:"ScriptElements",description:"Audit to force the inclusion of ScriptElements artifact",requiredArtifacts:["ScriptElements"]},audit:()=>({score:1})}});var g6={};S(g6,{default:()=>Zre});var KE,Zre,h6=v(()=>{"use strict";d();J();Ta();f0();Yw();Ms();KE=class t extends h{static{s(this,"ScriptTreemapDataAudit")}static get meta(){return{id:"script-treemap-data",scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,title:"Script Treemap Data",description:"Used for treemap app",requiredArtifacts:["traces","devtoolsLogs","SourceMaps","Scripts","JsUsage","URL"]}}static makeScriptNode(e,n,r){function a(l){return{name:l,resourceBytes:0}}s(a,"newNode");let o=a(n);function i(l,m){let p=o;o.resourceBytes+=m.resourceBytes,m.unusedBytes&&(o.unusedBytes=(o.unusedBytes||0)+m.unusedBytes);let g=l.replace(n,"").split(/\/+/);g.forEach((f,y)=>{if(f.length===0)return;let b=y===g.length-1,D=p.children&&p.children.find(T=>T.name===f);D||(D=a(f),p.children=p.children||[],p.children.push(D)),p=D,p.resourceBytes+=m.resourceBytes,m.unusedBytes&&(p.unusedBytes=(p.unusedBytes||0)+m.unusedBytes),b&&m.duplicatedNormalizedModuleName!==void 0&&(p.duplicatedNormalizedModuleName=m.duplicatedNormalizedModuleName)})}s(i,"addAllNodesInSourcePath");for(let[l,m]of Object.entries(r))i(l,m);function c(l){for(;l.children&&l.children.length===1;)l.name+="/"+l.children[0].name,l.children=l.children[0].children;if(l.children)for(let m of l.children)c(m)}if(s(c,"collapseAll"),c(o),!o.name)return{...o,name:e,children:o.children};let u={...o};return u.name=e,u.children=[o],u}static async makeNodes(e,n){let r=[],a=new Map,o=await vn.request(e,n),i=await ed.request(e,n);for(let c of e.Scripts){if(c.scriptLanguage!=="JavaScript")continue;let u=c.url,l=o.find(f=>c.scriptId===f.script.scriptId),m=e.JsUsage[c.scriptId],p=m?await p1.request({scriptId:c.scriptId,scriptCoverage:m,bundle:l},n):void 0,g;if(l&&!("errorMessage"in l.sizes)){let f={};for(let y of Object.keys(l.sizes.files)){let b={resourceBytes:l.sizes.files[y]};p?.sourcesWastedBytes&&(b.unusedBytes=p.sourcesWastedBytes[y]);let D=y;l.rawMap.sourceRoot&&y.startsWith(l.rawMap.sourceRoot)&&(D=y.replace(l.rawMap.sourceRoot,""));let T=ed.normalizeSource(D);i.has(T)&&(b.duplicatedNormalizedModuleName=T),f[y]=b}if(l.sizes.unmappedBytes){let y={resourceBytes:l.sizes.unmappedBytes};p?.sourcesWastedBytes&&(y.unusedBytes=p.sourcesWastedBytes["(unmapped)"]),f["(unmapped)"]=y}g=this.makeScriptNode(c.url,l.rawMap.sourceRoot||"",f)}else g={name:u,resourceBytes:p?.totalBytes??c.length??0,unusedBytes:p?.wastedBytes};if(Qp(c)){let f=a.get(c.executionContextAuxData.frameId);f||(f={name:u,resourceBytes:0,unusedBytes:void 0,children:[]},a.set(c.executionContextAuxData.frameId,f),r.push(f)),f.resourceBytes+=g.resourceBytes,g.unusedBytes&&(f.unusedBytes=(f.unusedBytes||0)+g.unusedBytes),g.name=c.content?"(inline) "+c.content.trimStart().substring(0,15)+"…":"(inline)",f.children?.push(g)}else r.push(g)}return r}static async audit(e,n){return{score:1,details:{type:"treemap-data",nodes:await t.makeNodes(e,n)}}}},Zre=KE});var y6={};S(y6,{UIStrings:()=>$r,default:()=>Qre});var $r,bo,JE,Qre,v6=v(()=>{"use strict";d();J();lt();Wt();k();$r={title:"Document has a valid `rel=canonical`",failureTitle:"Document does not have a valid `rel=canonical`",description:"Canonical links suggest which URL to show in search results. [Learn more about canonical links](https://developer.chrome.com/docs/lighthouse/seo/canonical/).",explanationConflict:"Multiple conflicting URLs ({urlList})",explanationInvalid:"Invalid URL ({url})",explanationRelative:"Is not an absolute URL ({url})",explanationPointsElsewhere:"Points to another `hreflang` location ({url})",explanationRoot:"Points to the domain's root URL (the homepage), instead of an equivalent page of content"},bo=w("core/audits/seo/canonical.js",$r),JE=class t extends h{static{s(this,"Canonical")}static get meta(){return{id:"canonical",title:bo($r.title),failureTitle:bo($r.failureTitle),description:bo($r.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL","devtoolsLogs"]}}static collectCanonicalURLs(e){let n=new Set,r=new Set,a,o;for(let i of e)if(i.source!=="body")if(i.rel==="canonical"){if(!i.hrefRaw)continue;i.href?te.isValid(i.hrefRaw)?n.add(i.href):o=i:a=i}else i.rel==="alternate"&&i.href&&i.hreflang&&r.add(i.href);return{uniqueCanonicalURLs:n,hreflangURLs:r,invalidCanonicalLink:a,relativeCanonicallink:o}}static findInvalidCanonicalURLReason(e){let{uniqueCanonicalURLs:n,invalidCanonicalLink:r,relativeCanonicallink:a}=e;if(r)return{score:0,explanation:bo($r.explanationInvalid,{url:r.hrefRaw})};if(a)return{score:0,explanation:bo($r.explanationRelative,{url:a.hrefRaw})};let o=Array.from(n);if(o.length===0)return{score:1,notApplicable:!0};if(o.length>1)return{score:0,explanation:bo($r.explanationConflict,{urlList:o.join(", ")})}}static findCommonCanonicalURLMistakes(e,n,r){let{hreflangURLs:a}=e;if(a.has(r.href)&&a.has(n.href)&&r.href!==n.href)return{score:0,explanation:bo($r.explanationPointsElsewhere,{url:r.href})};if(n.origin===r.origin&&n.pathname==="/"&&r.pathname!=="/")return{score:0,explanation:bo($r.explanationRoot)}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await je.request({devtoolsLog:r,URL:e.URL},n),o=new URL(a.url),i=t.collectCanonicalURLs(e.LinkElements),c=t.findInvalidCanonicalURLReason(i);if(c)return c;let u=new URL([...i.uniqueCanonicalURLs][0]),l=t.findCommonCanonicalURLMistakes(i,u,o);return l||{score:1}}},Qre=JE});var b6={};S(b6,{UIStrings:()=>ac,default:()=>eae});var ac,Q1,XE,eae,w6=v(()=>{"use strict";d();J();k();ac={title:"Links are crawlable",failureTitle:"Links are not crawlable",description:"Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn how to make links crawlable](https://support.google.com/webmasters/answer/9112205)",columnFailingLink:"Uncrawlable Link"},Q1=w("core/audits/seo/crawlable-anchors.js",ac),XE=class extends h{static{s(this,"CrawlableAnchors")}static get meta(){return{id:"crawlable-anchors",title:Q1(ac.title),failureTitle:Q1(ac.failureTitle),description:Q1(ac.description),requiredArtifacts:["AnchorElements","URL"]}}static audit({AnchorElements:e,URL:n}){let r=e.filter(({rawHref:i,name:c="",role:u="",id:l})=>{if(i=i.replace(/\s/g,""),c=c.trim(),u=u.trim(),u.length>0||i.startsWith("mailto:")||i===""&&l)return;let m=/javascript:void(\(|)0(\)|)/;if(i.startsWith("file:"))return!0;if(!(c.length>0)){if(i===""||m.test(i))return!0;try{new URL(i,n.finalDisplayedUrl)}catch{return!0}}}),a=[{key:"node",valueType:"node",label:Q1(ac.columnFailingLink)}],o=r.map(i=>({node:h.makeNodeItem(i.node)}));return{score:+(r.length===0),details:h.makeTableDetails(a,o)}}},eae=XE});var E6=L(Gd=>{d();Gd.getRenderingDataFromViewport=function(t,e,n,r,a){var o=e/100,i=n/100,c=null,u=null,l=null,m=null,p=null,g=null,f=null,y=null,b=null,D=e,T=n,A="zoom",R="resizes-visual";if(t["maximum-scale"]!==void 0&&(c=ef(t["maximum-scale"])),t["minimum-scale"]!==void 0&&(u=ef(t["minimum-scale"])),t["initial-scale"]!==void 0&&(l=ef(t["initial-scale"])),u!==null&&c===null&&(u=Hd(r,ef(t["minimum-scale"]))),t.width!==void 0&&(m="extend-to-zoom",g=D6(t.width,o,i)),t.height!==void 0&&(p="extend-to-zoom",f=D6(t.height,o,i)),t["user-scalable"]!==void 0)if(A=t["user-scalable"],typeof A=="number")A>=1||A<=-1?A="zoom":A="fixed";else switch(A){case"yes":case"device-width":case"device-height":A="zoom";break;case"no":default:A="fixed";break}if(t["interactive-widget"]!==void 0)switch(t["interactive-widget"]){case"overlays-content":case"resizes-content":case"resizes-visual":R=t["interactive-widget"];break;default:R="resizes-visual";break}l!==null&&(t.width===void 0||y===void 0)&&(t.height!==void 0?(m=null,g=null):(m="extend-to-zoom",g="extend-to-zoom")),u!==null&&c!==null&&(c=oc(u,c)),l!==null&&(l=ZE(l,u,c));var F=l===null&&c===null?null:Hd(l,c),M,V;return F===null?(g==="extend-to-zoom"&&(g=null),f==="extend-to-zoom"&&(f=null),m==="extend-to-zoom"&&(m=g),p==="extend-to-zoom"&&(p=f)):(M=D/F,V=T/F,g==="extend-to-zoom"&&(g=M),f==="extend-to-zoom"&&(f=V),m==="extend-to-zoom"&&(m=oc(M,g)),p==="extend-to-zoom"&&(p=oc(V,f))),(m!==null||g!==null)&&(y=oc(m,Hd(g,D))),(p!==null||f!==null)&&(b=oc(p,Hd(f,T))),y===null&&(b===null?y=D:T!==0?y=Math.round(b*(D/T)):y=D),b===null&&(D!==0?b=Math.round(y*(T/D)):b=T),{zoom:l,width:y,height:b,userZoom:A,interactiveWidget:R}};function Hd(t,e){return t===null?e:e===null?t:Math.min(t,e)}s(Hd,"min");function oc(t,e){return t===null?e:e===null?t:Math.max(t,e)}s(oc,"max");function D6(t,e,n){return typeof t=="number"?t>=0?ZE(t,1,1e4):void 0:t==="device-width"?100*e:t==="device-height"?100*n:1}s(D6,"translateLengthProperty");function ef(t){if(typeof t=="number")return t>=0?ZE(t,.1,10):void 0;if(t==="yes")return 1;if(t==="device-width"||t==="device-height")return 10;if(t==="no"||t===null)return .1}s(ef,"translateZoomProperty");function ZE(t,e,n){return oc(Hd(t,n),e)}s(ZE,"clamp");Gd.parseMetaViewPortContent=function(t){for(var e={validProperties:{},unknownProperties:{},invalidValues:{}},n=1;n<=t.length;){for(;n<=t.length&&RegExp(` |
+|	|\0d|,|;|=`).test(t[n-1]);)n++;n<=t.length&&(n=nae(e,t,n))}return e};var tae=["width","height","initial-scale","minimum-scale","maximum-scale","user-scalable","shrink-to-fit","viewport-fit","interactive-widget"];function nae(t,e,n){for(var r=n;n<=e.length&&!RegExp(` |
+|	|\0d|,|;|=`).test(e[n-1]);)n++;if(n>e.length||RegExp(",|;").test(e[n-1]))return n;for(var a=e.slice(r-1,n-1);n<=e.length&&!RegExp(",|;|=").test(e[n-1]);)n++;if(n>e.length||RegExp(",|;").test(e[n-1]))return n;for(;n<=e.length&&RegExp(` |
+|	|\0d|=`).test(e[n-1]);)n++;if(n>e.length||RegExp(",|;").test(e[n-1]))return n;for(r=n;n<=e.length&&!RegExp(` |
+|	|\0d|,|;|=`).test(e[n-1]);)n++;var o=e.slice(r-1,n-1);return rae(t,a,o),n}s(nae,"parseProperty");function rae(t,e,n){if(tae.indexOf(e)>=0){var r=parseFloat(n);if(!isNaN(r)){t.validProperties[e]=r;return}var a=n.toLowerCase();if(a==="yes"||a==="no"||a==="device-width"||a==="device-height"||e.toLowerCase()==="viewport-fit"&&(a==="auto"||a==="cover")||e.toLowerCase()==="interactive-widget"&&Gd.expectedValues["interactive-widget"].includes(a)){t.validProperties[e]=a;return}t.validProperties[e]=null,t.invalidValues[e]=n}else t.unknownProperties[e]=n}s(rae,"setProperty");Gd.expectedValues={width:["device-width","device-height","a positive number"],height:["device-width","device-height","a positive number"],"initial-scale":["a positive number"],"minimum-scale":["a positive number"],"maximum-scale":["a positive number"],"user-scalable":["yes","no","0","1"],"shrink-to-fit":["yes","no"],"viewport-fit":["auto","cover"],"interactive-widget":["overlays-content","resizes-content","resizes-visual"]}});var T6,QE,ic,tf=v(()=>{"use strict";d();T6=zt(E6(),1);we();QE=class{static{s(this,"ViewportMeta")}static async compute_(e){let n=e.find(c=>c.name==="viewport");if(!n)return{hasViewportTag:!1,isMobileOptimized:!1,parserWarnings:[]};let r=[],a=T6.default.parseMetaViewPortContent(n.content||"");Object.keys(a.unknownProperties).length&&r.push(`Invalid properties found: ${JSON.stringify(a.unknownProperties)}`),Object.keys(a.invalidValues).length&&r.push(`Invalid values found: ${JSON.stringify(a.invalidValues)}`);let o=a.validProperties;return{hasViewportTag:!0,isMobileOptimized:!!(o.width||o["initial-scale"]),parserWarnings:r}}},ic=W(QE,null)});var S6={};S(S6,{UIStrings:()=>cr,default:()=>dae});function oae(t){let e=new Map;return t.forEach(n=>{let{nodeId:r,cssRule:a,fontSize:o,textLength:i,parentNode:c}=n,u=lae(a,r),l=e.get(u);l?l.textLength+=i:e.set(u,{nodeId:r,parentNode:c,cssRule:a,fontSize:o,textLength:i})}),[...e.values()]}function iae(t=[]){let e=new Map;for(let n=0;n<t.length;n+=2){let r=t[n],a=t[n+1];if(!r||!a)continue;let o=a.trim();o&&e.set(r.toLowerCase(),o)}return e}function sae(t){let e=iae(t.attributes);if(e.has("id"))return"#"+e.get("id");{let n=e.get("class");if(n)return"."+n.split(/\s+/).join(".")}return t.nodeName.toLowerCase()}function cae(t){let n=(t.attributes||[]).map((r,a)=>a%2===0?` ${r}`:`="${r}"`).join("");return{type:"node",selector:t.parentNode?sae(t.parentNode):"",snippet:`<${t.nodeName.toLowerCase()}${n}>`}}function uae(t,e,n){if(!e||e.type==="Attributes"||e.type==="Inline")return{source:{type:"url",value:t},selector:cae(n)};if(e.parentRule&&e.parentRule.origin==="user-agent")return{source:{type:"code",value:"User Agent Stylesheet"},selector:e.parentRule.selectors.map(a=>a.text).join(", ")};let r="";if(e.parentRule&&(r=e.parentRule.selectors.map(o=>o.text).join(", ")),e.stylesheet&&!e.stylesheet.sourceURL)return{source:{type:"code",value:"dynamic"},selector:r};if(e.stylesheet&&e.range){let{range:a,stylesheet:o}=e,i=o.hasSourceURL?"comment":"network",c=a.startLine,u=a.startColumn;o.isInline&&i!=="comment"&&(c+=o.startLine,a.startLine===0&&(u+=o.startColumn));let m=h.makeSourceLocation(o.sourceURL,c,u);return m.urlProvider=i,{source:m,selector:r}}return{selector:r,source:{type:"code",value:"Unknown"}}}function lae(t,e){if(t&&t.type==="Regular"){let n=t.range?t.range.startLine:0,r=t.range?t.range.startColumn:0;return`${t.styleSheetId}@${n}:${r}`}else return`node_${e}`}var aae,cr,br,eT,dae,x6=v(()=>{"use strict";d();k();J();tf();aae=60,cr={title:"Document uses legible font sizes",failureTitle:"Document doesn't use legible font sizes",description:"Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. [Learn more about legible font sizes](https://developer.chrome.com/docs/lighthouse/seo/font-size/).",displayValue:"{decimalProportion, number, extendedPercent} legible text",explanationViewport:"Text is illegible because there's no viewport meta tag optimized for mobile screens.",additionalIllegibleText:"Add'l illegible text",legibleText:"Legible text",columnSelector:"Selector",columnPercentPageText:"% of Page Text",columnFontSize:"Font Size"},br=w("core/audits/seo/font-size.js",cr);s(oae,"getUniqueFailingRules");s(iae,"getAttributeMap");s(sae,"getSelector");s(cae,"nodeToTableNode");s(uae,"findStyleRuleSource");s(lae,"getFontArtifactId");eT=class extends h{static{s(this,"FontSize")}static get meta(){return{id:"font-size",title:br(cr.title),failureTitle:br(cr.failureTitle),description:br(cr.description),requiredArtifacts:["FontSize","URL","MetaElements"]}}static async audit(e,n){if(n.settings.formFactor==="desktop")return{score:1,notApplicable:!0};if(!(await ic.request(e.MetaElements,n)).isMobileOptimized)return{score:0,explanation:br(cr.explanationViewport)};let{analyzedFailingNodesData:a,analyzedFailingTextLength:o,failingTextLength:i,totalTextLength:c}=e.FontSize;if(c===0)return{score:1};let u=oae(a),l=(c-i)/c*100,m=e.URL.finalDisplayedUrl,p=[{key:"source",valueType:"source-location",label:br(x.columnSource)},{key:"selector",valueType:"code",label:br(cr.columnSelector)},{key:"coverage",valueType:"text",label:br(cr.columnPercentPageText)},{key:"fontSize",valueType:"text",label:br(cr.columnFontSize)}],g=u.sort((T,A)=>A.textLength-T.textLength).map(({cssRule:T,textLength:A,fontSize:R,parentNode:F})=>{let M=A/c*100,V=uae(m,T,F);return{source:V.source,selector:V.selector,coverage:`${M.toFixed(2)}%`,fontSize:`${R}px`}});if(o<i){let T=(i-o)/c*100;g.push({source:{type:"code",value:br(cr.additionalIllegibleText)},selector:"",coverage:`${T.toFixed(2)}%`,fontSize:"< 12px"})}l>0&&g.push({source:{type:"code",value:br(cr.legibleText)},selector:"",coverage:`${l.toFixed(2)}%`,fontSize:"≥ 12px"});let f=l/100,y=br(cr.displayValue,{decimalProportion:f}),b=h.makeTableDetails(p,g),D=l>=aae;return{score:Number(D),details:b,displayValue:y}}},dae=eT});function C6(t){let e=mae;for(;t.length<3;)t+="`";for(let n=0;n<=t.length-1;n++){let r=t.charCodeAt(n)-96;if(e=e[r],!e)return!1}return!0}var mae,A6=v(()=>{"use strict";d();mae=[,[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,,,,,1,1,1,1,,,1,1,1,,1,,1,,1,1],[1,1,1,,1,1,,1,1,1,,1,,,1,1,1,,,1,1,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,,,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1],[,1,,,,,,1,,1,,,,,1,,1,,,,1,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,,,1,,,,,1,1,1,,1,,1,,1,,,,,,1],[1,,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,,1,,1,,,,,1,,1,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,,1,1,1,,1,,1,1,1,,,1,1,1,1,1,1,1,1],[,,1,,,1,,1,,,,1,1,1,,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1,1,1,1,1,,,1,1,1],[1,1,1,1,1,,,1,,,1,,,1,1,1,,,,,1,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1],[,1,,1,1,1,,1,1,,1,,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,,,1,1,1,,,1,1,,,,,,1,1],[1,1,1,,,,,1,,,,1,1,,1,,,,,,1,,,,,1],[,1,,,1,,,1,,,,,,1],[,1,,1,,,,1,,,,1],[1,,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,,1,,,1,1,1,1],[,1,1,1,1,1,,,1,,,1,,1,1,,1,,1,,,,,1,,1],[,1,,,,1,,,1,1,,1,,1,1,1,1,,1,1,,,1,,,1],[,1,1,,,,,,1,,,,1,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,,1,1,1,,,1,1,1,1,1,1,,1,,,,,1,1,,1,,1],[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,1,1],[,1,1,1,,,,1,1,1,,1,1,,,1,1,,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,,1,,,,,1,1,1,,,1,,1,,,1,1],[,,,,1,,,,,,,,,,,,,,,,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,,1,1,1,,1,1,,,,1,1,1,1,1,,,1,1,1,,,,,1],[1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,1,,,,,,,1],[,1,1,,1,1,,1,,,,,,,,,,,,,1],,[1,1,1,,,,,,,,,,,,,1],[,,,,,,,,1,,,1,,,1,1,,,,,1]],[,[1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,,1],[,,,1,,,,,,,,,,,,,,,1],[,1,,,1,1,,1,,1,1,,,,1,1,,,1,1,,,,1],[1,,,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,,,,1],,[,1,1,1,1,1,,1,1,1,,1,1,,1,1,,,1,1,1,1,,1,1,,1],[,1,,,1,,,1,,1,,,1,1,1,1,,,1,1,,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,,,1,1,1,1,1,1,1,,,1,,,1,,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,,,,1],[,,,,,,,1,,,,1,,1,1],[,1,1,1,1,1,1,1,,,,1,1,1,1,1,,,1,1,,1,1,1,1,1],[,1,,,1,1,,1,,1,1,1,,,1,1,,,1,,1,1,1,1,,1],[,1,1,1,,1,1,,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1],[,,,,,,,,,,,,,,,,1],,[,1,1,1,1,1,,1,1,1,,,1,,1,1,,1,1,1,1,1,,1,,1],[,,1,,,1,,,1,1,,,1,,1,1,,1],[,1,1,,1,,,,1,1,,1,,1,1,1,1,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,1,,1,,1,1],,[,1,1,,1,,,1,,1,,,,1,1,1,,,,,,1,,,,1],[1,1,,,1,1,,1,,,,,1,,1]],[,[,1],[,,,1,,,,1,,,,1,,,,1,,,1,,,1],[,,,,,,,,,,,,,,,,,,1,1,,,,,,1],,[1,,,,,1],[,1,,,,1,,,,1],[,1,,,,,,,,,,,1,,,1,,,,,,,,,1,1],[,,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,1,,1],[,1],[,1,,1,,1,,1,,1,,1,1,1,,1,1,,1,,,,,,,1],[1,,,,,1,,,1,1,,1,,1,,1,1,,,,,1,,,1],[,1,1,,,1,,1,,1,,1,,1,1,1,1,,,1,,1,,1,1,1],[1,1,1,1,1,,1,,1,,,,1,1,1,1,,1,1,,,1,1,1,1],[1,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],,[,1,,,,,,1,1,1,,1,,,,1,,,1,1,1,,,1],[1,,,,,1,,1,1,1,,1,1,1,1,1,,1,,1,,1,,,1,1],[1,,1,1,,,,,1,,,,,,1,1,,,1,1,1,1,,,1,,1],[1,,,,,,,,,,,,,,,,,1],[,,,,,1,,,1,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,,,1],[,1,,,,1]],[,[1,1,1,,1,,1,1,1,1,1,1,1,1,1,,1,,1,,1,1,,,1,1,1],[,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],,[,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1],,[1,1,,,,1,1,,,,,,1,,,,1,,1,,1,1,,1],[1],[,,,,,,,,,,,1,,,,,,,,,,,1],[,1,,,,,,,1,1,,,1,,1,,,,1,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,,1],[,,1,,,,,1,,1],[1,,,,1,,,,,1,,,,1,1,,,,1,1,,,,,1],[,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[1,,,1,1,,,,,,,1,,1,,1,1,1,1,1,1],[,,,,,1,,,,,,,1,,,,,,,1],,[,,1,1,1,1,1,,1,1,1,,,1,1,,,1,1,,1,1,1,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,,,,1],,[1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,,,1,1,1,1,,,,,,1,,1,,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,,,,1,,1,,,1,1,1,1,1],[,,,,,,,,,,,1,,,,,,,,,1,,,,1],[,1,1,,1,1,,1,,,,1,1,,1,1,,,1,,1,1,,1],[,1,,1,,1,,,1,,,1,1,,1,1,,,1,1,1],[,1,1,1,1,1,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,,,,,,,,,1,,1,,1,1,,,,1,,,1],[,1,,,1,1,,,,,,,,,1,1,1,,,,,1],[1,,,1,1,,,,1,1,1,1,1,,,1,,,1,,,1,,1,,1],[,1,1,,1,1,,1,1,,,,1,1,1,,,1,1,,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,,,,1,,,,,,,,,1],[,1,,,,,,,,1,,,,,1,,,,1,,,1],[,1,1,1,1,,,1,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1],[,,,,,1,,1,,,,,1,1,1,1,1,,,1,,,,1],[,1,,,,,,,,1,,,,,,,,,,,,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,1,,,,1,,1,1,1,1,1,,1,1,,,,,,1],[,1,1,1,1,1,1,1,,1,1,,,1,1,,,,1,,1,1,,1,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,1,1,,1,,,1,1,1,1,,,1,,,,,,,1],[,1,,,,,,,,1,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1],[,1,1,,,,,,,,,,,,1,1,,,,,,1],[,1,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,,,,,1],[1,1,,,1,,,1,1,1,,,,1],,[,,,,,,,,,,,,,1,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,1,,,,,,,1],[1,1,1,,1,,1,1,1,1,1,1,1,1,,1,,,1,,1,,,1,1],[,,,,,,,,,1],[,1,,,,1,,,,,,1,,,1,,,,,1],[,1,1,,1,1,,,,,,,,,,,,,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,1,1,1,,,,1,1,,,,1,,1],[1,1,1,1,1,1,,,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,,1,1],[,,,,,,,,,,,,,,,1,,,,1],,[1,1,,1,,1,,,,,,1,,1,,1,1,,1,,1,1,,1,1,,1],[,,1,,,,,,1,,,,1,,1,,,,,1],[1,,,,,,,,,1,,,,,,1,,,,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,,1,,,,,,1,,,1,,,,,,,,1],[,1,,1,,,,,,,,,,,,1],,[1,1,,,,,,,,,,,,,,,,,,,,,,1,1],[1]],[,[1,,,,,,,,,1,,,,,1,,1,,1],[,1,1,,1,1,,1,1,1,,,1,1,1,,,,1,,,1,,,,1],[,1,,,,,,,1,,,,1,,,,,,1],[1,1,1,1,1,1,,,,1,,,,,,,,,1,1,1,1],[1],[,1,1,,,1,1,,,,,1,,1,,,,,,,,1,,,,1],[1,,1,,,1,,1,,,,,1,1,1,1,,,,1,,,,1],[,,1,,,,,,,1,,,,,,,1,,,,,,,1],[1,,,,,,,,,,,,,,1,,,,1],[,,,1,,1,,,,,1,,,,1,1,,,,1],[1,,,,,1,,,,1,,1,1,,,1,1,,1,1,1,,1,1,1,,1],[,1,1,,,,,1,,1,,1,1,1,,1,1,,,1,,1,1,1],[,1,,,,1,,,,1,,,1,,1,1,,,1,1,,,,,,1],[1,,1,1,,1,,1,1,,1,,1,1,1,1,1,,,1,1,,,,,,1],[1,,,,,,,,,,,,,,,,,,1,,,1,,1],[,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,,1,,1],[,1,,,,1,,,1,1,,1,,,1,1,,,1,,,1,,,1,1],[1,1,,1,1,1,,1,1,1,,1,,1,1,1,,,1,,1,1],[1,,1,1,1,1,,,,1,,1,1,1,,1,,,1,1,1,,1,1,1,1,1],[1,,,,,,,,,,,,,1],[,,1,,,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,,,1,,1,,1,,,,1],[,,,1,,,,,,,,,1],[,1,,,,,,,,,,,,,,1,,,,,,,,,1],[,,,,,,,,1,1,,,,,,,,,1,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,,,1,1,1],[,,,,,1,,,,1,1,1,,,1,1,,,1,,1,1,,1],[,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,1,,,,,,,,,,,,,1],[,,1,,,1,,1,1,1,,1,1,,1,,,,1,,1,1],,[,,1,,,1,,,,,,1,,,,1],[,,,,,,,,,1,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,,1,1,,1,,1,,,1,1,1,,,1],[,,,,,1,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,1,,1,1,,1,,,1],[,,,,,1,,,,,,,,,,,,,,1],[,1,1,1,1,,,,,1,,,1,,1,,,,1,1,,,,1,1],[,1,,,1,,,1,,1,1,,1,,,,,,,1],[,,1,,1,,,1,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,,,,,,,,,,1,,1,1],[,,,,,,,,,,,,1],,[,1,1,1,1,,,,1,1,,1,1,1,1,1,1,,1,1,1,1,,1,,1],[1,,,,1,,,,,,,,,,1],[1,,,,,,,,,1],,[,1,,,,1,,,,,,,,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,,1,,,,1,1,,,1,1,,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,1],[1,1,1,,,,,1,1,1,,1,1,1,1,,,1,1,,1,1,,,,,1],[,1,,,,,,,1,1,,,1,1,1,,1,,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,,,1,,,,1,,,1,,,,1,,,,,,,1,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1],[1,1,1,,1,,,1,1,1,1,,1,1,1,1,,,,1,,1,,1,,,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,,1,1,,,,,,,,,1],,[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,,1,,1,,,,1],[,1,,,1,1,,1,1,1,,,1,1,1,1,1,,1,1,1,,1,,,1],[1,,,1,,,,1,1,1,,,,,1,1,,,,1,,1],[1,1,,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,,1,,1,,,,,,,,1,,1],[,1,,,,1,,1,1,,,,1,1,,1,,,,1,1,1,,1],,[,1,,,,,,1,,,,,,,1],[,,,,,,,,1,,,,1,,1,,,,,,,,,,,,1]],[,[,1,1,,1,1,1,1,,1,1,1,,1,1,,1,1,,1,1,1,1,1,1,,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,,,1,,,,,,,,1,,,,,,1,,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,,1,,1,1,1,1,1,1,1,,1,1,,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1],[,1,1,,,,,1,1,1,,,1,,1,1,,,,1,,1,,,1,1],[,,,,,,,1,,,,1,1,1,1,1,,1,,,,,,,,1],[1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,,1,,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,1,1,,1,,1,1,1,,1,,1,1,,1,1,,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,,1,,,,,1,,1],[,1,1,1,,1,,1,,1,,,,1,,1,,,1,,,,,,1,1],[,1,,,1,1,,1,,1,,1,1,1,1,1,,1,1,,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,,1,,1,,1,,,,,,1,,1,,,,1,1]],[,[,1,,1,,,,,,,,,,,,,,,1,,,,1],[,,,,,,,,,1,,1,1,1,,1,,,1,,1,1],[1,1,,,,,,,1,,,,,,,1,,,,,,1],[,1,,,,,,,,,,1,,,,,,,,,1,1],,[,,,,,,,,,,,,,,,1,,,,1,,1],[,,1,1,,1,,1,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,,,,,,,,1],[1,,1,1,,,,1,,,,,,,,,1,,,1,,,1,1],[,1,1,,1,1,,1,1,1,1,1,1,1,1,1,,,1,1,,1,1,,1],[,1,,,1,1,,,,,,1,,1,,1,,,1,,1,1],[1,1,1,1,,1,,1,,1,,1,1,,1,1,1,1,1,,1,1,1,1,1],[,1,1,,,1,,1,,1,1,1,,,1,1,1,,1,1,1,1,,1,1],[,,,,1,,,1,,,,,,,1,,,,1,1],[,1,,,,,,,,,,1,,1,,1,,,,,1,,,,,1],,[1,1,,1,,1,,1,1,,,,,,1,1,,,1,1,1,1,1,1,1,1,1],[1,1,,1,,,,,,1,,,,,,1,1,,,,1,1,,,1],[,1,1,,1,1,,,,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,,,1,,,,1,,,,1,1],[,,,,1],[,,,,,,,,,1,,,1],,[,,1,,1,,,,,,,,,1,,,,,,,,,,,,1],[,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,,,1],[,1,,1,,,,,,1,,,,,1,1,,,,,1,1],[,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,,,1,,1,1,1],[,1,,,,1,,,,,,,1],[,1,,,1,,,1,,1,,1,1,,1,,,,,1,,1,,,,1,1],[,1,,,1,,,1,1,1,,1,1,1,1,1,,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,1,1,,,,1,1,,,,,,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,,1,1,,1,1,1,1,1],[,1,,,,1,,,,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,1,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,,1,1,1,,1,1,1,,,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,,,,,,,1,1,,,,,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,1,,1,1,1,1],,[,1,1,,,,,1,,1,,,,1,1,1,,,1,,,,,1],[,,,,,,,,,,,,,1],[,,,,,1,,,,,,,,1,1,,,,,1,,1,,,1,1],[,,,,,,,,,,,,,,1]],[,[,1],,,,,,,,,,,,,,,,,,,,[1,1,1,1,1,,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,1,1,1,1],[,1,,1,,1,,,1,1,1,,1,1,1,1,1,,,1,,,,1,,1,1],[,1,,1,,1,,,1,,,,,1,,,,,,1,1],[,1,,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1],[,1,,,,,,,,,,,,,,,1]],[,[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,,,,,,,,,1,1,,,,1],[,,,,,,1],[,,1],[,1,1,,,1,,1,,1,1,,1,1,1,,,,1,1,1,,,,,1],,[,1,,,,1,,,,,,1,,,1,,,,1,1,,1],[,,,,,,,1,,,,,,,,,1],[,1,,,,1,1,,,,,,1,1,1,,,,1,,1,1],[,,,,,,,1,,1,,,,,,,,,,1],[,1,1,,,,,,1,1,,,,1,,,,,,,1,,,1],,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,,1,,,1,,,,,1,,1,,1,,1,,,,,1],[1,1,1,1,1,1,1,1,,,,,1,1,,1,1,,1,,,1,,1],[,,,,,,,,,,,,,,1,,,,,,1],,[,,,,,,,,,1,,,,,,1,,,,,1],[,,1,,,,,,,1,,,1,1],[,,,1,,,,,1,,,,,1,,,,,,1,,,,1],[1,,1,1,,1,1,1,1,1,,1,,,,1,1,1,,,1,1,,,,1,1],,[1,1,,,,,,,,,,1,,1,,1,,,1],[,,,,1,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,1],[,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,,1,,,1,,,,,,,,1,,,,,,1,,,,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,1,,,,1,1,1,1,1,1,,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,1,,1,1,,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,,1,,1,,1,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,,,,,,1,,1,,,,,1,1,,,,,1],[1,,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,,1,,,,1,1,1,1,1,,,1,1,,1,,1],[,1,1,1,1,,,,,1,,1,1,1,1,1,,,1,1,,,,1,1,1],[,1,1,1,1,1,,1,,,,,1,,1,,1,,,1,,,1,1,,1]],[,[1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,,,,,1,,,,,1,1,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,,,,1,,1,1,,1,1,1,1,1,,,1,,1,,1],[1,1,1,,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,,1,,,,,,,,,,1,1,1,1,1,1,1,,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,1,1,,,,,,1,1,1,1,1,,,,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,,1,1,1],[,1,1,1,,1,,1,1,1,1,,,1,1,1,,1,1,1,1,1,,,1,1],[1,1,,,,1,,,1,1,1,,1,,1,,1,,1,1,1,1,1,,1,,1],[,1,,,,,,,1,,1,,1,1,1,1,,,,,,,,,1]],[,[,,,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,1,,,1,,,,,,1,,,1,,,,1],,[,1,,,,1,,1,,1,1,,1,1,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],[1,1,1,,,1,,,,,,,,,1,1,,,,,,,,,,1],[,1,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1,,,1],[,,,,,,,,,1],[1,1,,,,,,1,1,1,,1,1,,,,1,1,,1,,1,1,1,,1],[,1,1,1,,1,1,,,1,,1,1,1,1,,,,,,,1,,1],[,1,1,1,1,,,1,,1,,,,1,1,1,1,,1,1,,1],[,1,,,1,1,,1,,,,1,,1,1,,1,,1,,,1,,,1,,1],[,,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,,,,,1],,[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1],[,1,,,,,,,1,1,,1,,,,,1,,,1,,1],[,1,,,,1,,,1,,,,,,,,1,,1,,,1],[,,,,,,,,,,,,,1,1,,,,1,,,1],[,,,,,1,,,1,,,,1],[,1],,[,1],[1,,,,,,,,,,,,,,1,,,,,1]],[,[,1,,,,1,1,1,1,1,1,,1,1,1,1,1,,1,1,,1,1,,,1],[,,1,,,,,,,,,1],,,[1,,,1,1,,,,,,,,1,1,,1,1,,1],,[,,,,,,,,,,,,,,,,,,1,,1],,[1,,,1,1,,1,1,,,,,1,,1,,,,,1,1,,1],,[,1,,,,,,,,1,1,1,1,1,,1,1,,,,1,1],[,,,,,,,,,,,,,,,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,1,1,1,1],[,,,,,,,,,,,1,,1,,,1],[1,,,,,,,,,,,,,,,,,,1,,1],,,[,1,,,,,,,,,,,,,,1,,,,1,1],[,,,,,,,,,1,,,1,,,,,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,1,1,,,,,,1],,[,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,1,1,,1,1,1,1,1,1,,,1,1,1,1,1,,1,1],[,1,,,,,,,,1],[,,,,1,,,1,,,1,1,,,,,,,,,,1,,,,1],[,1,,1,1,,,1,1,1,,,,1,1,1,1,,1,1,1,1,,1],[,,,,,,,1],[,1,1,,,,,1,,1,,,,,,1,,,,,,1,,1,,1],[,1,,,,,,1,,,,1,,,,,,,,,,1],[,,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1,1,1,1,,1],[,1,,,,,,,,1],[,1,1,,1,,,,,,,,1,,,,,,1,,,1,,1,,1],[,1,,1,,1,,1,1,1,,1,1,1,,1,,,1,1,,1,1,1,1,1],[,1,1,1,1,1,,,1,1,,,,1,1,1,,,,1,1,,,1,1],[,,1,1,1,1,,1,,1,,1,,1,1,1,1,,,,,1,,1,,1],[1,1,1,1,1,1,1,1,,1,,1,,1,1,1,,,1,1,,,,1,,1],[,,,1],,[,1,1,,1,,,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1],[,1,,,,,,1,,1,,1,,,,,,,1,1,,1,1],[,,,,,,1,,1,1,,1,,1,,,,,,,,,,1],[,1,1,,1,,,,1,,,,1,1,1,,,,1,,1,1,1,,1,1],,[,1,1,,,,,,,,,,,,,1,,,1,,,,,1],[,1,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,1,,,,1,,,,,1,,,,,,,1]],[,[,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[,1,1,1,1,1,,1,,1,1,,,1,1,1,1,,1,,,,,1,1,1],[,,1,1,,1,,1,1,,,,1,1,1,1,,,1,,1,1,1,1,,1],[,1,,1,,,,,,,,1,,1,,1,,,,,,,,,,1],[,,1,,1,,,1,,,,,1,1,,,1,,1,1,1,1],[,1],[,1,1,,1,,1,1,,1,,,1,1,1,,,,1,,,1,,1],[1,1,,1,1,1,,,,,,,,,,,,,1,,1,1,1],[,1,1,,,,,,,1,,,1,,1,,1,,1,1,,,1,,,1],[,,1,,,,,,,,,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,,1,,,,,1,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,1,1,1,,,,1,1],[,,,1,1,,,1,,1,,1,,1,1,1,1,,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,,1,,1,,,,1,1,,,1,1,,1,1,,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1,,1,1,,,1],[,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,,1,,,1,,,1,,1,1,1,1,1,,1,,1,1],[,,,,,1,,,,1,,,,,1,1,,,,1],[,1,,1,1,1,,1,,,1,1,1,,,1,,,1,,1,,,1],[,,1,,,,,,,,,1,,1,,,,,1,,1],[,1,1,,,,,,,,1,1,1,,,,,,,,1,,,,,1],[,,,,,,,,1,,,,,1,,,1]],[,[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,,1,1,1,1,1,1,1,1,,,,,,,,,1,1],[,,,,,,,,1,,,,1,,1,,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,1,,1,,1,,,,1,1,,1,,1,,,,1,1,1,1,1,,,1],,[,1,,,,,,,,1,,,1,1,,,1,,1,1,,1,,1],[,1,,,1,,,,,,,,1,,,,,,,1],[1,1,,,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1],,[,1,,,,,,1,,1,,1,1,1,1,1,,,1,,1,1,,,,1],[,1,1,,,1,,1,,1,,,1,1,1,1,,,1,,,1,,,,1],[,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1],[,1,,,1,1,,1,1,,,1,1,,1,1,,1,,1,,1],[1,,1,,,,,1,,1,,1,1,1,1,,,,,1,1,,,,1,1],[,1,1,,,,,1,1,,,1,,1,1,1,1,,,,,,,,,,1],,[,1,1,,,1,,,,1,,1,1,1,1,1,,,,1,,,,1,,1],[,,,1,1,,,1,,,,,1,,1,1,1,,1,1,,,,,,1],[,1,,,,,,,,,,,1,,,,1,,,,,,,1,,1],[,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,1,,,,,1,,1,,,1,1,,1,1,,1],[,1,,,,,,1,,,,,1,1,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1,,,1,,,,,1],[,,,,,,,1,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,,1,,,,,,,1,,,,,,,,1,,,1],[,1,,,,,,,1],[,,,,,,,,,,1],[,1,,,,,,1,1,,,,,,1],,[,1,1,,,,,,1,,,,,1,1,,,,1],[1,,1,,1,,,,,1,,,,,1,,,,,,,,,1,1],[,1,1,,,,,,,,,1,1,1,1,,,,1,,,,,1,,,1],,[,1,1,,1,,,1,1,,,1,,,1,1,1,,1,,1,1,1,,,,1],[,,,,,1,,,,,1,,,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,,,1,,,,,1,,,,,1,,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,1],[,1,,,,,,1,,,,,,,1,1,1,,,1],[,1,,,,,,,,,,1,1,1,,,,,1,,,1],[,,,,,1,,1,,,,,1,1,1,,1,1,,1,1,1,,,1,1],[1,1,,,,,,,1,,,,,1,1,,,,,,,,,,,1],,[,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,,1,,,,,1,,,1,,,,1,,1],[,1,,,,,,,,,1]]];s(C6,"isValidLang")});var F6={};S(F6,{UIStrings:()=>vi,default:()=>hae});function fae(t){return t.startsWith("http:")||t.startsWith("https:")}function gae(t){if(t.toLowerCase()===pae)return!0;let[e]=t.split("-");return C6(e.toLowerCase())}var pae,vi,Wd,tT,hae,R6=v(()=>{"use strict";d();J();k();A6();pae="x-default",vi={title:"Document has a valid `hreflang`",failureTitle:"Document doesn't have a valid `hreflang`",description:"hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more about `hreflang`](https://developer.chrome.com/docs/lighthouse/seo/hreflang/).",unexpectedLanguage:"Unexpected language code",notFullyQualified:"Relative href value"},Wd=w("core/audits/seo/hreflang.js",vi);s(fae,"isFullyQualified");s(gae,"isExpectedLanguageCode");tT=class extends h{static{s(this,"Hreflang")}static get meta(){return{id:"hreflang",title:Wd(vi.title),failureTitle:Wd(vi.failureTitle),description:Wd(vi.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL"]}}static audit({LinkElements:e}){let n=[],r=e.filter(i=>{let c=i.rel==="alternate",u=i.hreflang,l=i.source==="body";return c&&u&&!l});for(let i of r){let c=[],u;gae(i.hreflang)||c.push(Wd(vi.unexpectedLanguage)),fae(i.hrefRaw.toLowerCase())||c.push(Wd(vi.notFullyQualified)),i.source==="head"?i.node?u={...h.makeNodeItem(i.node),snippet:`<link rel="alternate" hreflang="${i.hreflang}" href="${i.hrefRaw}" />`}:u={type:"node",snippet:`<link rel="alternate" hreflang="${i.hreflang}" href="${i.hrefRaw}" />`}:i.source==="headers"&&(u=`Link: <${i.hrefRaw}>; rel="alternate"; hreflang="${i.hreflang}"`),!(!u||!c.length)&&n.push({source:u,subItems:{type:"subitems",items:c.map(l=>({reason:l}))}})}let a=[{key:"source",valueType:"code",subItemsHeading:{key:"reason",valueType:"text"},label:""}],o=h.makeTableDetails(a,n);return{score:+(n.length===0),details:o}}},hae=tT});var _6={};S(_6,{UIStrings:()=>Vd,default:()=>bae});var yae,vae,Vd,nT,rT,bae,k6=v(()=>{"use strict";d();J();k();Wt();yae=400,vae=599,Vd={title:"Page has successful HTTP status code",failureTitle:"Page has unsuccessful HTTP status code",description:"Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more about HTTP status codes](https://developer.chrome.com/docs/lighthouse/seo/http-status-code/)."},nT=w("core/audits/seo/http-status-code.js",Vd),rT=class extends h{static{s(this,"HTTPStatusCode")}static get meta(){return{id:"http-status-code",title:nT(Vd.title),failureTitle:nT(Vd.failureTitle),description:nT(Vd.description),requiredArtifacts:["devtoolsLogs","URL","GatherContext"],supportedModes:["navigation"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=e.URL,i=(await je.request({devtoolsLog:r,URL:a},n)).statusCode;return i>=yae&&i<=vae?{score:0,displayValue:`${i}`}:{score:1}}},bae=rT});var P6=L((U6e,L6)=>{d();function I6(t){return t?Array.isArray(t)?t.map(I6):String(t).trim():null}s(I6,"trimLine");function wae(t){var e=t.indexOf("#");return e>-1?t.substr(0,e):t}s(wae,"removeComments");function Dae(t){var e=String(t).indexOf(":");return!t||e<0?null:[t.slice(0,e),t.slice(e+1)]}s(Dae,"splitLine");function aT(t){var e=t.toLowerCase(),n=e.indexOf("/");return n>-1&&(e=e.substr(0,n)),e.trim()}s(aT,"formatUserAgent");function Eae(t){try{return M6(encodeURI(t).replace(/%25/g,"%"))}catch{return t}}s(Eae,"normaliseEncoding");function M6(t){return t.replace(/%[0-9a-fA-F]{2}/g,function(e){return e.toUpperCase()})}s(M6,"urlEncodeToUpper");function Tae(t,e){var n=new Array(e.length+1),r=1;n[0]=0;for(var a=0;a<t.length;a++){if(t[a]==="$"&&a+1===t.length)return n[r-1]===e.length;if(t[a]=="*"){r=e.length-n[0]+1;for(var o=1;o<r;o++)n[o]=n[o-1]+1}else{for(var i=0,o=0;o<r;o++)n[o]<e.length&&e[n[o]]===t[a]&&(n[i++]=n[o]+1);if(i==0)return!1;r=i}}return!0}s(Tae,"matches");function Sae(t,e){for(var n=/\r\n|\r|\n/,r=t.split(n).map(wae).map(Dae).map(I6),a=[],o=!0,i=0;i<r.length;i++){var c=r[i];if(!(!c||!c[0])){switch(c[0].toLowerCase()){case"user-agent":o&&(a.length=0),c[1]&&a.push(aT(c[1]));break;case"disallow":e.addRule(a,c[1],!1,i+1);break;case"allow":e.addRule(a,c[1],!0,i+1);break;case"crawl-delay":e.setCrawlDelay(a,c[1]);break;case"sitemap":c[1]&&e.addSitemap(c[1]);break;case"host":c[1]&&e.setPreferredHost(c[1].toLowerCase());break}o=c[0].toLowerCase()!=="user-agent"}}}s(Sae,"parseRobots");function xae(t,e){for(var n=null,r=0;r<e.length;r++){var a=e[r];Tae(a.pattern,t)&&(!n||a.pattern.length>n.pattern.length||a.pattern.length==n.pattern.length&&a.allow&&!n.allow)&&(n=a)}return n}s(xae,"findRule");function N6(t){try{var t=new URL(t,"http://robots-relative.samclarke.com/");return t.port||(t.port=t.protocol==="https:"?443:80),t}catch{return null}}s(N6,"parseUrl");function ur(t,e){this._url=N6(t)||{},this._rules=Object.create(null),this._sitemaps=[],this._preferredHost=null,Sae(e||"",this)}s(ur,"Robots");ur.prototype.addRule=function(t,e,n,r){var a=this._rules;t.forEach(function(o){a[o]=a[o]||[],e&&a[o].push({pattern:Eae(e),allow:n,lineNumber:r})})};ur.prototype.setCrawlDelay=function(t,e){var n=this._rules,r=Number(e);t.forEach(function(a){n[a]=n[a]||[],!isNaN(r)&&(n[a].crawlDelay=r)})};ur.prototype.addSitemap=function(t){this._sitemaps.push(t)};ur.prototype.setPreferredHost=function(t){this._preferredHost=t};ur.prototype._getRule=function(t,e){var n=N6(t)||{},r=aT(e||"*");if(!(n.protocol!==this._url.protocol||n.hostname!==this._url.hostname||n.port!==this._url.port)){var a=this._rules[r]||this._rules["*"]||[],o=M6(n.pathname+n.search),i=xae(o,a);return i}};ur.prototype.isAllowed=function(t,e){var n=this._getRule(t,e);if(!(typeof n>"u"))return!n||n.allow};ur.prototype.getMatchingLineNumber=function(t,e){var n=this._getRule(t,e);return n?n.lineNumber:-1};ur.prototype.isDisallowed=function(t,e){return!this.isAllowed(t,e)};ur.prototype.getCrawlDelay=function(t){var e=aT(t||"*");return(this._rules[e]||this._rules["*"]||{}).crawlDelay};ur.prototype.getPreferredHost=function(){return this._preferredHost};ur.prototype.getSitemaps=function(){return this._sitemaps.slice(0)};L6.exports=ur});var U6=L((q6e,O6)=>{d();var Cae=P6();O6.exports=function(t,e){return new Cae(t,e)}});var H6={};S(H6,{UIStrings:()=>$d,default:()=>kae});function Rae(t){let e=t.split(":");if(e.length<=1||e[0]!==z6)return!1;let n=Date.parse(e.slice(1).join(":"));return!isNaN(n)&&n<Date.now()}function j6(t){return t.split(",").map(e=>e.toLowerCase().trim()).some(e=>Aae.has(e)||Rae(e))}function _ae(t){let e=t.match(/^([^,:]+):/);if(e&&e[1].toLowerCase()!==z6)return e[1]}var q6,B6,Aae,Fae,z6,$d,oT,iT,kae,G6=v(()=>{"use strict";d();q6=zt(U6(),1);J();Wt();k();B6=new Set([void 0,"Googlebot","bingbot","DuckDuckBot","archive.org_bot"]),Aae=new Set(["noindex","none"]),Fae="x-robots-tag",z6="unavailable_after",$d={title:"Page isn’t blocked from indexing",failureTitle:"Page is blocked from indexing",description:"Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more about crawler directives](https://developer.chrome.com/docs/lighthouse/seo/is-crawlable/)."},oT=w("core/audits/seo/is-crawlable.js",$d);s(Rae,"isUnavailable");s(j6,"hasBlockingDirective");s(_ae,"getUserAgentFromHeaderDirectives");iT=class t extends h{static{s(this,"IsCrawlable")}static get meta(){return{id:"is-crawlable",title:oT($d.title),failureTitle:oT($d.failureTitle),description:oT($d.description),supportedModes:["navigation"],requiredArtifacts:["MetaElements","RobotsTxt","URL","devtoolsLogs"]}}static handleMetaElement(e){let n=e.content||"";if(j6(n))return{source:{...h.makeNodeItem(e.node),snippet:`<meta name="${e.name}" content="${n}" />`}}}static determineIfCrawlableForUserAgent(e,n,r,a,o){let i=[],c;if(e&&(c=r.find(u=>u.name===e.toLowerCase())),c||(c=r.find(u=>u.name==="robots")),c){let u=t.handleMetaElement(c);u&&i.push(u)}for(let u of n.responseHeaders||[]){if(u.name.toLowerCase()!==Fae)continue;let l=_ae(u.value);if(l!==e&&l!==void 0)continue;let m=u.value.trim();e&&u.value.startsWith(`${e}:`)&&(m=u.value.replace(`${e}:`,"")),j6(m)&&i.push({source:`${u.name}: ${u.value}`})}if(a&&!a.isAllowed(n.url,e)){let u=a.getMatchingLineNumber(n.url)||1;i.push({source:{type:"source-location",url:o.href,urlProvider:"network",line:u-1,column:0}})}return i}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await je.request({devtoolsLog:r,URL:e.URL},n),o=new URL("/robots.txt",a.url),i=e.RobotsTxt.content?(0,q6.default)(o.href,e.RobotsTxt.content):void 0,c=[],u=[];for(let f of B6){let y=t.determineIfCrawlableForUserAgent(f,a,e.MetaElements,i,o);y.length>0&&c.push(f),f===void 0&&u.push(...y)}let l=c.length===B6.size?0:1,m=[];if(l&&c.length>0){let f=c.filter(Boolean).join(", ");m.push(`The following bot user agents are blocked from crawling: ${f}. The audit is otherwise passing, because at least one bot was explicitly allowed.`)}let p=[{key:"source",valueType:"code",label:"Blocking Directive Source"}],g=h.makeTableDetails(p,l===0?u:[]);return{score:l,details:g,warnings:m}}},kae=iT});var W6={};S(W6,{UIStrings:()=>sc,default:()=>Mae});var Iae,sc,nf,sT,Mae,V6=v(()=>{"use strict";d();J();lt();k();Iae=new Set(["click here","click this","go","here","information","learn more","more","more info","more information","right here","read more","see more","start","this","ここをクリック","こちらをクリック","リンク","続きを読む","続く","全文表示","click aquí","click aqui","clicka aquí","clicka aqui","pincha aquí","pincha aqui","aquí","aqui","más","mas","más información","más informacion","mas información","mas informacion","este","enlace","este enlace","empezar","clique aqui","ir","mais informação","mais informações","mais","veja mais","여기","여기를 클릭","클릭","링크","자세히","자세히 보기","계속","이동","전체 보기","här","klicka här","läs mer","mer","mer info","mer information","அடுத்த பக்கம்","மறுபக்கம்","முந்தைய பக்கம்","முன்பக்கம்","மேலும் அறிக","மேலும் தகவலுக்கு","மேலும் தரவுகளுக்கு","தயவுசெய்து இங்கே அழுத்தவும்","இங்கே கிளிக் செய்யவும்"]),sc={title:"Links have descriptive text",failureTitle:"Links do not have descriptive text",description:"Descriptive link text helps search engines understand your content. [Learn how to make links more accessible](https://developer.chrome.com/docs/lighthouse/seo/link-text/).",displayValue:`{itemCount, plural,
+    =1 {1 link found}
+    other {# links found}
+    }`},nf=w("core/audits/seo/link-text.js",sc),sT=class extends h{static{s(this,"LinkText")}static get meta(){return{id:"link-text",title:nf(sc.title),failureTitle:nf(sc.failureTitle),description:nf(sc.description),requiredArtifacts:["URL","AnchorElements"]}}static audit(e){let n=e.AnchorElements.filter(i=>i.href&&!i.rel.includes("nofollow")).filter(i=>{let c=i.href.toLowerCase();return c.startsWith("javascript:")||c.startsWith("mailto:")||te.equalWithExcludedFragments(i.href,e.URL.finalDisplayedUrl)?!1:Iae.has(i.text.trim().toLowerCase())}).map(i=>({href:i.href,text:i.text.trim()})),r=[{key:"href",valueType:"url",label:"Link destination"},{key:"text",valueType:"text",label:"Link Text"}],a=h.makeTableDetails(r,n),o;return n.length&&(o=nf(sc.displayValue,{itemCount:n.length})),{score:+(n.length===0),details:a,displayValue:o}}},Mae=sT});var Y6={};S(Y6,{UIStrings:()=>rf,default:()=>Nae});var rf,$6,cT,Nae,K6=v(()=>{"use strict";d();Rn();k();rf={description:"Run the [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool/) and the [Structured Data Linter](http://linter.structured-data.org/) to validate structured data. [Learn more about Structured Data](https://developer.chrome.com/docs/lighthouse/seo/structured-data/).",title:"Structured data is valid"},$6=w("core/audits/seo/manual/structured-data.js",rf),cT=class extends ht{static{s(this,"StructuredData")}static get meta(){return Object.assign({id:"structured-data",description:$6(rf.description),title:$6(rf.title)},super.partialMeta)}},Nae=cT});var J6={};S(J6,{UIStrings:()=>cc,default:()=>Lae});var cc,af,uT,Lae,X6=v(()=>{"use strict";d();J();k();cc={title:"Document has a meta description",failureTitle:"Document does not have a meta description",description:"Meta descriptions may be included in search results to concisely summarize page content. [Learn more about the meta description](https://developer.chrome.com/docs/lighthouse/seo/meta-description/).",explanation:"Description text is empty."},af=w("core/audits/seo/meta-description.js",cc),uT=class extends h{static{s(this,"Description")}static get meta(){return{id:"meta-description",title:af(cc.title),failureTitle:af(cc.failureTitle),description:af(cc.description),requiredArtifacts:["MetaElements"]}}static audit(e){let n=e.MetaElements.find(a=>a.name==="description");return n?(n.content||"").trim().length===0?{score:0,explanation:af(cc.explanation)}:{score:1}:{score:0}}},Lae=uT});var e4={};S(e4,{UIStrings:()=>Yd,default:()=>jae});function Bae(t){return t=t.trim().toLowerCase(),Pae.has(t)||t.startsWith(Z6)||t.startsWith(Q6)}function dT(t){try{let n=new URL(t,"http://example.com").pathname.split(".");if(n.length<2)return!1;let r=n[n.length-1];return Oae.has(r.trim().toLowerCase())}catch{return!1}}var Z6,Q6,Pae,Oae,Uae,Yd,lT,mT,jae,t4=v(()=>{"use strict";d();J();k();Z6="application/x-java-applet",Q6="application/x-java-bean",Pae=new Set(["application/x-shockwave-flash",Z6,Q6,"application/x-silverlight","application/x-silverlight-2"]),Oae=new Set(["swf","flv","class","xap"]),Uae=new Set(["code","movie","source","src"]),Yd={title:"Document avoids plugins",failureTitle:"Document uses plugins",description:"Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more about avoiding plugins](https://developer.chrome.com/docs/lighthouse/seo/plugins/)."},lT=w("core/audits/seo/plugins.js",Yd);s(Bae,"isPluginType");s(dT,"isPluginURL");mT=class extends h{static{s(this,"Plugins")}static get meta(){return{id:"plugins",title:lT(Yd.title),failureTitle:lT(Yd.failureTitle),description:lT(Yd.description),requiredArtifacts:["EmbeddedContent"]}}static audit(e){let n=e.EmbeddedContent.filter(o=>{if(o.tagName==="APPLET"||(o.tagName==="EMBED"||o.tagName==="OBJECT")&&o.type&&Bae(o.type))return!0;let i=o.src||o.code;return o.tagName==="EMBED"&&i&&dT(i)||o.tagName==="OBJECT"&&o.data&&dT(o.data)?!0:o.params.filter(u=>Uae.has(u.name.trim().toLowerCase())&&dT(u.value)).length>0}).map(o=>({source:h.makeNodeItem(o.node)})),r=[{key:"source",valueType:"code",label:"Element source"}],a=h.makeTableDetails(r,n);return{score:+(n.length===0),details:a}}},jae=mT});var r4={};S(r4,{UIStrings:()=>wo,default:()=>Kae});function Vae(t,e){if(!Gae.has(t))throw new Error("Unknown directive");if(t===n4){let n;try{n=new URL(e)}catch{throw new Error("Invalid sitemap URL")}if(!Wae.has(n.protocol))throw new Error("Invalid sitemap URL protocol")}if(t===fT&&!e)throw new Error("No user-agent specified");if(t===gT||t===hT){if(e!==""&&e[0]!=="/"&&e[0]!=="*")throw new Error('Pattern should either be empty, start with "/" or "*"');let n=e.indexOf("$");if(n!==-1&&n!==e.length-1)throw new Error('"$" should only be used at the end of the pattern')}}function $ae(t){let e=t.indexOf("#");if(e!==-1&&(t=t.substr(0,e)),t=t.trim(),t.length===0)return null;let n=t.indexOf(":");if(n===-1)throw new Error("Syntax not understood");let r=t.slice(0,n).trim().toLowerCase(),a=t.slice(n+1).trim();return Vae(r,a),{directive:r,value:a}}function Yae(t){let e=[],n=!1;return t.split(/\r\n|\r|\n/).forEach((r,a)=>{let o;try{o=$ae(r)}catch(i){e.push({index:(a+1).toString(),line:r,message:i.message.toString()})}o&&(o.directive===fT?n=!0:!n&&Hae.has(o.directive)&&e.push({index:(a+1).toString(),line:r,message:"No user-agent specified"}))}),e}var qae,zae,n4,fT,gT,hT,Hae,Gae,Wae,wo,uc,pT,Kae,a4=v(()=>{"use strict";d();J();k();qae=400,zae=500,n4="sitemap",fT="user-agent",gT="allow",hT="disallow",Hae=new Set([gT,hT]),Gae=new Set([fT,hT,gT,n4,"crawl-delay","clean-param","host","request-rate","visit-time","noindex"]),Wae=new Set(["https:","http:","ftp:"]),wo={title:"robots.txt is valid",failureTitle:"robots.txt is not valid",description:"If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more about robots.txt](https://developer.chrome.com/docs/lighthouse/seo/invalid-robots-txt/).",displayValueHttpBadCode:"Request for robots.txt returned HTTP status: {statusCode}",displayValueValidationError:`{itemCount, plural,
+    =1 {1 error found}
+    other {# errors found}
+    }`,explanation:"Lighthouse was unable to download a robots.txt file"},uc=w("core/audits/seo/robots-txt.js",wo);s(Vae,"verifyDirective");s($ae,"parseLine");s(Yae,"validateRobots");pT=class extends h{static{s(this,"RobotsTxt")}static get meta(){return{id:"robots-txt",title:uc(wo.title),failureTitle:uc(wo.failureTitle),description:uc(wo.description),requiredArtifacts:["RobotsTxt"]}}static audit(e){let{status:n,content:r}=e.RobotsTxt;if(!n)return{score:0,explanation:uc(wo.explanation)};if(n>=zae)return{score:0,displayValue:uc(wo.displayValueHttpBadCode,{statusCode:n})};if(n>=qae||r==="")return{score:1,notApplicable:!0};if(r===null)throw new Error(`Status ${n} was valid, but content was null`);let a=Yae(r),o=[{key:"index",valueType:"text",label:"Line #"},{key:"line",valueType:"code",label:"Content"},{key:"message",valueType:"code",label:"Error"}],i=h.makeTableDetails(o,a),c;return a.length&&(c=uc(wo.displayValueValidationError,{itemCount:a.length})),{score:+(a.length===0),details:i,displayValue:c}}},Kae=pT});function o4(t){return t=wM(t),t=DM(t),t=i4(t),t}function of(t,e){return Math.abs(t-e)<=10}function i4(t){for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++){let r=t[e],a=t[n],o=of(r.top,a.top)||of(r.bottom,a.bottom),i=of(r.left,a.left)||of(r.right,a.right);if(Yp(r,a)&&(o||i)){let u=EM([r,a]),l=$p(u);if(!(zy(r,l)||zy(a,l)))continue;return t=t.filter(m=>m!==r&&m!==a),t.push(u),i4(t)}}return t}var s4=v(()=>{"use strict";d();zu();s(o4,"getTappableRectsFromClientRects");s(of,"almostEqual");s(i4,"mergeTouchingClientRects")});var c4={};S(c4,{UIStrings:()=>Aa,default:()=>aoe});function Xae(t){return t.map(e=>({tapTarget:e,paddedBoundsRect:Hy(e.clientRects,Kd)}))}function Zae(t){return t.width<Kd||t.height<Kd}function Qae(t){return t.filter(e=>e.tapTarget.clientRects.every(Zae))}function eoe(t,e){let n=[];return t.forEach(r=>{let a=o4(r.tapTarget.clientRects);for(let o of e){if(o===r||!Yp(r.paddedBoundsRect,o.paddedBoundsRect)||r.tapTarget.href===o.tapTarget.href&&/https?:\/\//.test(r.tapTarget.href))continue;let i=o.tapTarget.clientRects;if(CM(a,i))continue;let c=toe(a,i);c&&n.push({...c,tapTarget:r.tapTarget,overlappingTarget:o.tapTarget})}}),n}function toe(t,e){let n=null;for(let r of t){let a=SM(r,Kd),o=qu(a,r);for(let i of e){let c=qu(a,i),u=c/o;u<Jae||(!n||u>n.overlapScoreRatio)&&(n={overlapScoreRatio:u,tapTargetScore:o,overlappingTargetScore:c})}}return n}function noe(t){let e=[];return t.forEach((n,r)=>{let a=t.find(c=>c.tapTarget===n.overlappingTarget&&c.overlappingTarget===n.tapTarget);if(!a){e.push(n);return}let{overlapScoreRatio:o}=n,{overlapScoreRatio:i}=a;(o>i||o===i&&r<t.indexOf(a))&&e.push(n)}),e}function roe(t){let e=t.map(n=>{let r=xM(n.tapTarget.clientRects),a=Math.floor(r.width),o=Math.floor(r.height),i=a+"x"+o;return{tapTarget:h.makeNodeItem(n.tapTarget.node),overlappingTarget:h.makeNodeItem(n.overlappingTarget.node),tapTargetScore:n.tapTargetScore,overlappingTargetScore:n.overlappingTargetScore,overlapScoreRatio:n.overlapScoreRatio,size:i,width:a,height:o}});return e.sort((n,r)=>r.overlapScoreRatio-n.overlapScoreRatio),e}var Aa,Do,Kd,Jae,sf,aoe,u4=v(()=>{"use strict";d();J();tf();zu();s4();k();Aa={title:"Tap targets are sized appropriately",failureTitle:"Tap targets are not sized appropriately",description:"Interactive elements like buttons and links should be large enough (48x48px), or have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more about tap targets](https://developer.chrome.com/docs/lighthouse/seo/tap-targets/).",tapTargetHeader:"Tap Target",overlappingTargetHeader:"Overlapping Target",explanationViewportMetaNotOptimized:"Tap targets are too small because there's no viewport meta tag optimized for mobile screens",displayValue:"{decimalProportion, number, percent} appropriately sized tap targets"},Do=w("core/audits/seo/tap-targets.js",Aa),Kd=48,Jae=.25;s(Xae,"getBoundedTapTargets");s(Zae,"clientRectBelowMinimumSize");s(Qae,"getTooSmallTargets");s(eoe,"getAllOverlapFailures");s(toe,"getOverlapFailureForTargetPair");s(noe,"mergeSymmetricFailures");s(roe,"getTableItems");sf=class extends h{static{s(this,"TapTargets")}static get meta(){return{id:"tap-targets",title:Do(Aa.title),failureTitle:Do(Aa.failureTitle),description:Do(Aa.description),requiredArtifacts:["MetaElements","TapTargets"]}}static async audit(e,n){if(n.settings.formFactor==="desktop")return{score:1,notApplicable:!0};if(!(await ic.request(e.MetaElements,n)).isMobileOptimized)return{score:0,explanation:Do(Aa.explanationViewportMetaNotOptimized)};let a=Xae(e.TapTargets),o=Qae(a),i=eoe(o,a),c=noe(i),u=roe(c),l=[{key:"tapTarget",valueType:"node",label:Do(Aa.tapTargetHeader)},{key:"size",valueType:"text",label:Do(x.columnSize)},{key:"overlappingTarget",valueType:"node",label:Do(Aa.overlappingTargetHeader)}],m=h.makeTableDetails(l,u),p=e.TapTargets.length,g=new Set(i.map(T=>T.tapTarget)).size,f=p-g,y=1,b=1;g>0&&(b=f/p,y=b*.89);let D=Do(Aa.displayValue,{decimalProportion:b});return{score:y,details:m,displayValue:D}}};sf.FINGER_SIZE_PX=Kd;aoe=sf});var l4={};S(l4,{UIStrings:()=>dc,default:()=>soe});var dc,lc,ooe,ioe,yT,soe,d4=v(()=>{"use strict";d();J();k();Wt();dc={title:"Initial server response time was short",failureTitle:"Reduce initial server response time",description:"Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",displayValue:"Root document took {timeInMs, number, milliseconds} ms"},lc=w("core/audits/server-response-time.js",dc),ooe=600,ioe=100,yT=class t extends h{static{s(this,"ServerResponseTime")}static get meta(){return{id:"server-response-time",title:lc(dc.title),failureTitle:lc(dc.failureTitle),description:lc(dc.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static calculateResponseTime(e){return globalThis.isLightrider&&e.lrStatistics?e.lrStatistics.requestMs:e.timing?e.timing.receiveHeadersStart-e.timing.sendEnd:null}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await je.request({devtoolsLog:r,URL:e.URL},n),o=t.calculateResponseTime(a);if(o===null)throw new Error("no timing found for main resource");let i=o<ooe,c=lc(dc.displayValue,{timeInMs:o}),u=[{key:"url",valueType:"url",label:lc(x.columnURL)},{key:"responseTime",valueType:"timespanMs",label:lc(x.columnTimeSpent)}],l=Math.max(o-ioe,0),m=h.makeOpportunityDetails(u,[{url:a.url,responseTime:o}],{overallSavingsMs:l});return{numericValue:o,numericUnit:"millisecond",score:Number(i),displayValue:c,details:m,metricSavings:{FCP:l,LCP:l}}}},soe=yT});var vT,cf,bT=v(()=>{"use strict";d();J();vT=class extends h{static{s(this,"MultiCheckAudit")}static async audit(e,n){let r=await this.audit_(e,n);return this.createAuditProduct(r)}static createAuditProduct(e){let n={...e,...e.manifestValues,manifestValues:void 0,allChecks:void 0};e.manifestValues?.allChecks&&e.manifestValues.allChecks.forEach(a=>{n[a.id]=a.passing});let r={type:"debugdata",items:[n]};return e.failures.length>0?{score:0,explanation:`Failures: ${e.failures.join(`,
+`)}.`,details:r}:{score:1,details:r}}static audit_(e,n){throw new Error("audit_ unimplemented")}},cf=vT});var m4={};S(m4,{UIStrings:()=>Jd,default:()=>coe});var Jd,wT,DT,coe,p4=v(()=>{"use strict";d();bT();Ad();k();Jd={title:"Configured for a custom splash screen",failureTitle:"Is not configured for a custom splash screen",description:"A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more about splash screens](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."},wT=w("core/audits/splash-screen.js",Jd),DT=class t extends cf{static{s(this,"SplashScreen")}static get meta(){return{id:"splash-screen",title:wT(Jd.title),failureTitle:wT(Jd.failureTitle),description:wT(Jd.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static assessManifest(e,n){if(e.isParseFailure&&e.parseFailureReason){n.push(e.parseFailureReason);return}let r=["hasName","hasBackgroundColor","hasThemeColor","hasIconsAtLeast512px"];e.allChecks.filter(a=>r.includes(a.id)).forEach(a=>{a.passing||n.push(a.failureText)})}static async audit_(e,n){let r=[],a=await fo.request(e,n);return t.assessManifest(a,r),{failures:r,manifestValues:a}}},coe=DT});var f4={};S(f4,{UIStrings:()=>Xd,default:()=>uoe});var Xd,ET,TT,uoe,g4=v(()=>{"use strict";d();bT();Ad();k();Xd={title:"Sets a theme color for the address bar.",failureTitle:"Does not set a theme color for the address bar.",description:"The browser address bar can be themed to match your site. [Learn more about theming the address bar](https://developer.chrome.com/docs/lighthouse/pwa/themed-omnibox/)."},ET=w("core/audits/themed-omnibox.js",Xd),TT=class t extends cf{static{s(this,"ThemedOmnibox")}static get meta(){return{id:"themed-omnibox",title:ET(Xd.title),failureTitle:ET(Xd.failureTitle),description:ET(Xd.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors","MetaElements"]}}static assessMetaThemecolor(e,n){e?e.content||n.push("The theme-color meta tag did not contain a content value"):n.push('No `<meta name="theme-color">` tag found')}static assessManifest(e,n){if(e.isParseFailure&&e.parseFailureReason){n.push(e.parseFailureReason);return}let r=e.allChecks.find(a=>a.id==="hasThemeColor");r&&!r.passing&&n.push(r.failureText)}static async audit_(e,n){let r=[],a=e.MetaElements.find(i=>i.name==="theme-color"),o=await fo.request(e,n);return t.assessManifest(o,r),t.assessMetaThemecolor(a,r),{failures:r,manifestValues:o,themeColor:a?.content||null}}},uoe=TT});var h4={};S(h4,{UIStrings:()=>bi,default:()=>xT});var bi,Eo,loe,doe,moe,ST,xT,CT=v(()=>{"use strict";d();J();ma();k();De();ba();Ql();bi={title:"Minimize third-party usage",failureTitle:"Reduce the impact of third-party code",description:"Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. [Learn how to minimize third-party impact](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/).",columnThirdParty:"Third-Party",displayValue:"Third-party code blocked the main thread for {timeInMs, number, milliseconds} ms"},Eo=w("core/audits/third-party-summary.js",bi),loe=250,doe=4096,moe=5,ST=class t extends h{static{s(this,"ThirdPartySummary")}static get meta(){return{id:"third-party-summary",title:Eo(bi.title),failureTitle:Eo(bi.failureTitle),description:Eo(bi.description),requiredArtifacts:["traces","devtoolsLogs","URL"]}}static getSummaries(e,n,r,a){let o=new Map,i=new Map,c={mainThreadTime:0,blockingTime:0,transferSize:0};for(let m of e){let p=o.get(m.url)||{...c};p.transferSize+=m.transferSize,o.set(m.url,p)}let u=Zl(e);for(let m of n){let p=_s(m,u),g=o.get(p)||{...c},f=m.selfTime*r;g.mainThreadTime+=f,g.blockingTime+=Math.max(f-50,0),o.set(p,g)}let l=new Map;for(let[m,p]of o.entries()){let g=a.entityByUrl.get(m);if(!g){o.delete(m);continue}let f=i.get(g)||{...c};f.transferSize+=p.transferSize,f.mainThreadTime+=p.mainThreadTime,f.blockingTime+=p.blockingTime,i.set(g,f);let y=l.get(g)||[];y.push(m),l.set(g,y)}return{byURL:o,byEntity:i,urls:l}}static makeSubItems(e,n,r){let o=(n.urls.get(e)||[]).map(p=>({url:p,...n.byURL.get(p)})).filter(p=>p.transferSize>0).sort((p,g)=>g.blockingTime-p.blockingTime||g.transferSize-p.transferSize),i={transferSize:0,blockingTime:0},c=Math.max(doe,r.transferSize/20),u=Math.min(moe,o.length),l=0;for(;l<u;){let p=o[l];if(p.blockingTime===0&&p.transferSize<c)break;l++,i.transferSize+=p.transferSize,i.blockingTime+=p.blockingTime}if(!i.blockingTime&&!i.transferSize)return[];o=o.slice(0,l);let m={url:Eo(x.otherResourcesLabel),transferSize:r.transferSize-i.transferSize,blockingTime:r.blockingTime-i.blockingTime};return m.transferSize>c&&o.push(m),o}static async audit(e,n){let r=n.settings||{},a=e.traces[h.DEFAULT_PASS],o=e.devtoolsLogs[h.DEFAULT_PASS],i=await $.request(o,n),c=await gn.request({URL:e.URL,devtoolsLog:o},n),u=c.firstParty,l=await yn.request(a,n),m=r.throttlingMethod==="simulate"?r.throttling.cpuSlowdownMultiplier:1,p=t.getSummaries(i,l,m,c),g={wastedBytes:0,wastedMs:0},f=Array.from(p.byEntity.entries()).filter(([D])=>!(u&&u===D)).map(([D,T])=>(g.wastedBytes+=T.transferSize,g.wastedMs+=T.blockingTime,{...T,entity:D.name,subItems:{type:"subitems",items:t.makeSubItems(D,p,T)}})).sort((D,T)=>T.blockingTime-D.blockingTime||T.transferSize-D.transferSize),y=[{key:"entity",valueType:"text",label:Eo(bi.columnThirdParty),subItemsHeading:{key:"url",valueType:"url"}},{key:"transferSize",granularity:1,valueType:"bytes",label:Eo(x.columnTransferSize),subItemsHeading:{key:"transferSize"}},{key:"blockingTime",granularity:1,valueType:"ms",label:Eo(x.columnBlockingTime),subItemsHeading:{key:"blockingTime"}}];if(!f.length)return{score:1,notApplicable:!0};let b=h.makeTableDetails(y,f,{...g,isEntityGrouped:!0});return{score:+(g.wastedMs<=loe),displayValue:Eo(bi.displayValue,{timeInMs:g.wastedMs}),details:b}}},xT=ST});var y4={};S(y4,{UIStrings:()=>wr,default:()=>foe});var wr,Fa,poe,AT,foe,v4=v(()=>{"use strict";d();J();k();ma();pp();De();ba();CT();wr={title:"Lazy load third-party resources with facades",failureTitle:"Some third-party resources can be lazy loaded with a facade",description:"Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. [Learn how to defer third-parties with a facade](https://developer.chrome.com/docs/lighthouse/performance/third-party-facades/).",displayValue:`{itemCount, plural,
+  =1 {# facade alternative available}
+  other {# facade alternatives available}
+  }`,columnProduct:"Product",categoryVideo:"{productName} (Video)",categoryCustomerSuccess:"{productName} (Customer Success)",categoryMarketing:"{productName} (Marketing)",categorySocial:"{productName} (Social)"},Fa=w("core/audits/third-party-facades.js",wr),poe={video:wr.categoryVideo,"customer-success":wr.categoryCustomerSuccess,marketing:wr.categoryMarketing,social:wr.categorySocial},AT=class t extends h{static{s(this,"ThirdPartyFacades")}static get meta(){return{id:"third-party-facades",title:Fa(wr.title),failureTitle:Fa(wr.failureTitle),description:Fa(wr.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static condenseItems(e){e.sort((o,i)=>i.transferSize-o.transferSize);let n=e.findIndex(o=>o.transferSize<1e3)||1;if((n===-1||n>5)&&(n=5),n>=e.length-1)return;let a=e.splice(n).reduce((o,i)=>(o.transferSize+=i.transferSize,o.blockingTime+=i.blockingTime,o));a.transferSize<1e3||(a.url=Fa(x.otherResourcesLabel),e.push(a))}static getProductsWithFacade(e,n){let r=new Map;for(let a of e.keys()){let o=n.entityByUrl.get(a);if(!o||n.isFirstParty(a))continue;let i=Va.getProduct(a);!i||!i.facades||!i.facades.length||r.has(i.name)||r.set(i.name,{product:i,entity:o})}return Array.from(r.values())}static async audit(e,n){let r=n.settings,a=e.traces[h.DEFAULT_PASS],o=e.devtoolsLogs[h.DEFAULT_PASS],i=await $.request(o,n),c=await gn.request({URL:e.URL,devtoolsLog:o},n),u=await yn.request(a,n),l=r.throttlingMethod==="simulate"?r.throttling.cpuSlowdownMultiplier:1,m=xT.getSummaries(i,u,l,c),p=t.getProductsWithFacade(m.byURL,c),g=[];for(let{product:y,entity:b}of p){let D=poe[y.categories[0]],T;D?T=Fa(D,{productName:y.name}):T=y.name;let A=m.urls.get(b),R=m.byEntity.get(b);if(!A||!R)continue;let F=Array.from(A).map(M=>{let V=m.byURL.get(M);return{url:M,...V}});this.condenseItems(F),g.push({product:T,transferSize:R.transferSize,blockingTime:R.blockingTime,subItems:{type:"subitems",items:F},entity:b.name})}if(!g.length)return{score:1,notApplicable:!0};let f=[{key:"product",valueType:"text",subItemsHeading:{key:"url",valueType:"url"},label:Fa(wr.columnProduct)},{key:"transferSize",valueType:"bytes",subItemsHeading:{key:"transferSize"},granularity:1,label:Fa(x.columnTransferSize)},{key:"blockingTime",valueType:"ms",subItemsHeading:{key:"blockingTime"},granularity:1,label:Fa(x.columnBlockingTime)}];return{score:0,displayValue:Fa(wr.displayValue,{itemCount:g.length}),details:h.makeTableDetails(f,g)}}},foe=AT});var b4={};S(b4,{UIStrings:()=>pc,default:()=>goe});var pc,mc,FT,goe,w4=v(()=>{"use strict";d();J();V1();Wt();Eu();k();pc={title:"Timing budget",description:"Set a timing budget to help you keep an eye on the performance of your site. Performant sites load fast and respond to user input events quickly. [Learn more about performance budgets](https://developers.google.com/web/tools/lighthouse/audits/budgets).",columnTimingMetric:"Metric",columnMeasurement:"Measurement"},mc=w("core/audits/timing-budget.js",pc),FT=class extends h{static{s(this,"TimingBudget")}static get meta(){return{id:"timing-budget",title:mc(pc.title),description:mc(pc.description),scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL","GatherContext"]}}static getRowLabel(e){let n={"first-contentful-paint":x.firstContentfulPaintMetric,interactive:x.interactiveMetric,"first-meaningful-paint":x.firstMeaningfulPaintMetric,"max-potential-fid":x.maxPotentialFIDMetric,"total-blocking-time":x.totalBlockingTimeMetric,"speed-index":x.speedIndexMetric,"largest-contentful-paint":x.largestContentfulPaintMetric,"cumulative-layout-shift":x.cumulativeLayoutShiftMetric};return mc(n[e])}static getMeasurement(e,n){return{"first-contentful-paint":n.firstContentfulPaint,interactive:n.interactive,"first-meaningful-paint":n.firstMeaningfulPaint,"max-potential-fid":n.maxPotentialFID,"total-blocking-time":n.totalBlockingTime,"speed-index":n.speedIndex,"largest-contentful-paint":n.largestContentfulPaint,"cumulative-layout-shift":n.cumulativeLayoutShift}[e]}static tableItems(e,n){let r=[];if(!e.timings)return r;r=e.timings.map(o=>{let i=o.metric,c=this.getRowLabel(i),u=this.getMeasurement(i,n),l=u&&u>o.budget?u-o.budget:void 0;return{metric:i,label:c,measurement:u,overBudget:l}}).sort((o,i)=>(i.overBudget||0)-(o.overBudget||0));let a=r.find(o=>o.metric==="cumulative-layout-shift");return a&&(typeof a.measurement=="number"&&(a.measurement={type:"numeric",value:Number(a.measurement),granularity:.01}),typeof a.overBudget=="number"&&(a.overBudget={type:"numeric",value:Number(a.overBudget),granularity:.01})),r}static async audit(e,n){let r=e.GatherContext,a=e.devtoolsLogs[h.DEFAULT_PASS],o=e.traces[h.DEFAULT_PASS],i=e.URL,c=await je.request({URL:i,devtoolsLog:a},n),u={trace:o,devtoolsLog:a,gatherContext:r,settings:n.settings,URL:i},l=(await rc.request(u,n)).metrics,m=Mr.getMatchingBudget(n.settings.budgets,c.url);if(!m)return{score:0,notApplicable:!0};let p=[{key:"label",valueType:"text",label:mc(pc.columnTimingMetric)},{key:"measurement",valueType:"ms",label:mc(pc.columnMeasurement)},{key:"overBudget",valueType:"ms",label:mc(x.columnOverBudget)}];return{details:h.makeTableDetails(p,this.tableItems(m,l),{sortedBy:["overBudget"]}),score:1}}},goe=FT});var D4={};S(D4,{UIStrings:()=>Zd,default:()=>hoe});var Zd,uf,RT,hoe,E4=v(()=>{"use strict";d();J();k();lt();Zd={title:"Image elements have explicit `width` and `height`",failureTitle:"Image elements do not have explicit `width` and `height`",description:"Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn how to set image dimensions](https://web.dev/optimize-cls/#images-without-dimensions)"},uf=w("core/audits/unsized-images.js",Zd),RT=class t extends h{static{s(this,"UnsizedImages")}static get meta(){return{id:"unsized-images",title:uf(Zd.title),failureTitle:uf(Zd.failureTitle),description:uf(Zd.description),requiredArtifacts:["ImageElements"]}}static doesHtmlAttrProvideExplicitSize(e){return!e||e.startsWith("+")?!1:parseInt(e,10)>=0}static isCssPropExplicitlySet(e){return e?!["auto","initial","unset","inherit"].includes(e):!1}static isSizedImage(e){if(e.cssEffectiveRules===void 0)return!0;let n=e.attributeWidth,r=e.attributeHeight,a=e.cssEffectiveRules.width,o=e.cssEffectiveRules.height,i=e.cssEffectiveRules.aspectRatio,c=t.doesHtmlAttrProvideExplicitSize(n),u=t.isCssPropExplicitlySet(a),l=t.doesHtmlAttrProvideExplicitSize(r),m=t.isCssPropExplicitlySet(o),p=t.isCssPropExplicitlySet(i),g=c||u,f=l||m;return g&&f||g&&p||f&&p}static isNonNetworkSvg(e){let n=te.guessMimeType(e.src)==="image/svg+xml",r=e.src.slice(0,e.src.indexOf(":")),a=te.isNonNetworkProtocol(r);return n&&a}static async audit(e){let n=e.ImageElements.filter(o=>!o.isCss&&!o.isInShadowDOM),r=[];for(let o of n){if(o.computedStyles.position==="fixed"||o.computedStyles.position==="absolute"||t.isNonNetworkSvg(o)||t.isSizedImage(o))continue;let c=o.node.boundingRect;c.width===0&&c.height===0||r.push({url:te.elideDataURI(o.src),node:h.makeNodeItem(o.node)})}let a=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:uf(x.columnURL)}];return{score:r.length>0?0:1,notApplicable:n.length===0,details:h.makeTableDetails(a,r),metricSavings:{CLS:0}}}},hoe=RT});var _T,T4,S4=v(()=>{"use strict";d();we();Jt();_T=class{static{s(this,"UserTimings")}static async compute_(e,n){let r=await Ye.request(e,n),a=[],o={};return r.processEvents.filter(i=>i.cat.includes("blink.user_timing")?i.name!=="requestStart"&&i.name!=="navigationStart"&&i.name!=="paintNonDefaultBackgroundColor"&&i.args.frame===void 0:!1).forEach(i=>{i.ph==="R"||i.ph.toUpperCase()==="I"?a.push({name:i.name,isMark:!0,args:i.args,startTime:i.ts}):i.ph.toLowerCase()==="b"?o[i.name]=i.ts:i.ph.toLowerCase()==="e"&&a.push({name:i.name,isMark:!1,args:i.args,startTime:o[i.name],endTime:i.ts,duration:i.ts-o[i.name]})}),a.forEach(i=>{i.startTime=(i.startTime-r.timeOriginEvt.ts)/1e3,i.isMark||(i.endTime=(i.endTime-r.timeOriginEvt.ts)/1e3,i.duration=i.duration/1e3)}),a}},T4=W(_T,null)});var x4={};S(x4,{UIStrings:()=>fc,default:()=>yoe});var fc,wi,kT,yoe,C4=v(()=>{"use strict";d();J();k();S4();fc={title:"User Timing marks and measures",description:"Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more about User Timing marks](https://developer.chrome.com/docs/lighthouse/performance/user-timings/).",displayValue:`{itemCount, plural,
+    =1 {1 user timing}
+    other {# user timings}
+    }`,columnType:"Type"},wi=w("core/audits/user-timings.js",fc),kT=class t extends h{static{s(this,"UserTimings")}static get meta(){return{id:"user-timings",title:wi(fc.title),description:wi(fc.description),scoreDisplayMode:h.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces"]}}static get excludedPrefixes(){return["goog_"]}static excludeEvent(e){return t.excludedPrefixes.every(n=>!e.name.startsWith(n))}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],o=(await T4.request(r,n)).filter(t.excludeEvent),i=o.map(m=>({name:m.name,startTime:m.startTime,duration:m.isMark?void 0:m.duration,timingType:m.isMark?"Mark":"Measure"})).sort((m,p)=>m.timingType===p.timingType?m.startTime-p.startTime:m.timingType==="Measure"?-1:1),c=[{key:"name",valueType:"text",label:wi(x.columnName)},{key:"timingType",valueType:"text",label:wi(fc.columnType)},{key:"startTime",valueType:"ms",granularity:.01,label:wi(x.columnStartTime)},{key:"duration",valueType:"ms",granularity:.01,label:wi(x.columnDuration)}],u=h.makeTableDetails(c,i),l;return o.length&&(l=wi(fc.displayValue,{itemCount:o.length})),{score:+(o.length===0),notApplicable:o.length===0,displayValue:l,details:u}}},yoe=kT});var A4={};S(A4,{UIStrings:()=>Di,default:()=>woe});var voe,boe,Di,To,IT,woe,F4=v(()=>{"use strict";d();J();Xt();lt();k();De();Wt();tr();Ur();$n();ii();fr();voe=15e3,boe=50,Di={title:"Preconnect to required origins",description:"Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",unusedWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Only use `preconnect` for important origins that the page will certainly request.',crossoriginWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.',tooManyPreconnectLinksWarning:"More than 2 `<link rel=preconnect>` connections were found. These should be used sparingly and only to the most important origins."},To=w("core/audits/uses-rel-preconnect.js",Di),IT=class t extends h{static{s(this,"UsesRelPreconnectAudit")}static get meta(){return{id:"uses-rel-preconnect",title:To(Di.title),description:To(Di.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL","LinkElements"],scoreDisplayMode:h.SCORING_MODES.NUMERIC}}static hasValidTiming(e){return!!e.timing&&e.timing.connectEnd>=0&&e.timing.connectStart>=0}static hasAlreadyConnectedToOrigin(e){return e.timing?e.timing.dnsStart===-1&&e.timing.dnsEnd===-1&&e.timing.connectStart===-1&&e.timing.connectEnd===-1||e.timing.dnsEnd-e.timing.dnsStart===0&&e.timing.connectEnd-e.timing.connectStart===0:!1}static socketStartTimeIsBelowThreshold(e,n){return Math.max(0,e.networkRequestTime-n.networkEndTime)<voe}static async audit(e,n){let r=e.traces[t.DEFAULT_PASS],a=e.devtoolsLogs[t.DEFAULT_PASS],o=n.settings,i=0,c=0,u=[],[l,m,p,g,f]=await Promise.all([$.request(a,n),je.request({devtoolsLog:a,URL:e.URL},n),Ht.request({devtoolsLog:a,settings:o},n),on.request(r,n),kt.request({trace:r,devtoolsLog:a,URL:e.URL},n)]),{rtt:y,additionalRttByOrigin:b}=p.getOptions(),D=await rr.getPessimisticGraph(f,g),T=new Set;D.traverse(Z=>{Z.type==="network"&&T.add(Z.record.url)});let A=await It.getPessimisticGraph(f,g),R=new Set;A.traverse(Z=>{Z.type==="network"&&R.add(Z.record.url)});let F=new Map;l.forEach(Z=>{if(!t.hasValidTiming(Z)||Z.initiator.url===m.url||!Z.parsedURL||!Z.parsedURL.securityOrigin||m.parsedURL.securityOrigin===Z.parsedURL.securityOrigin||!T.has(Z.url)||t.hasAlreadyConnectedToOrigin(Z)||!t.socketStartTimeIsBelowThreshold(Z,m))return;let de=Z.parsedURL.securityOrigin,Le=F.get(de)||[];Le.push(Z),F.set(de,Le)});let M=e.LinkElements.filter(Z=>Z.rel==="preconnect"),V=new Set(M.map(Z=>te.getOrigin(Z.href||""))),z=[];F.forEach(Z=>{let de=Z.reduce((mt,at)=>at.networkRequestTime<mt.networkRequestTime?at:mt);if(!de.timing)return;let Le=de.parsedURL.securityOrigin,pe=b.get(Le)||0,wt=y+pe;de.parsedURL.scheme==="https"&&(wt=wt*2);let ye=de.networkRequestTime-m.networkEndTime+de.timing.dnsStart,_e=Math.min(wt,ye);if(!(_e<boe)){if(V.has(Le)){u.push(To(Di.crossoriginWarning,{securityOrigin:Le}));return}i=Math.max(_e,i),R.has(de.url)&&(c=Math.max(_e,i)),z.push({url:Le,wastedMs:_e})}}),z=z.sort((Z,de)=>de.wastedMs-Z.wastedMs);for(let Z of V)Z&&(l.some(de=>Z===de.parsedURL.securityOrigin)||u.push(To(Di.unusedWarning,{securityOrigin:Z})));if(M.length>=2)return{score:1,warnings:M.length>=3?[...u,To(Di.tooManyPreconnectLinksWarning)]:u,metricSavings:{LCP:i,FCP:c}};let ne=[{key:"url",valueType:"url",label:To(x.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:To(x.columnWastedMs)}],se=h.makeOpportunityDetails(ne,z,{overallSavingsMs:i,sortedBy:["wastedMs"]});return{score:ie.scoreForWastedMs(i),numericValue:i,numericUnit:"millisecond",displayValue:i?To(x.displayValueMsSavings,{wastedMs:i}):"",warnings:u,details:se,metricSavings:{LCP:i,FCP:c}}}},woe=IT});var R4={};S(R4,{UIStrings:()=>Qd,default:()=>Eoe});var Qd,gc,Doe,MT,Eoe,_4=v(()=>{"use strict";d();lt();St();J();Xt();R0();k();Wt();$n();tr();Qd={title:"Preload key requests",description:"Consider using `<link rel=preload>` to prioritize fetching resources that are currently requested later in page load. [Learn how to preload key requests](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preload/).",crossoriginWarning:'A preload `<link>` was found for "{preloadURL}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.'},gc=w("core/audits/uses-rel-preload.js",Qd),Doe=100,MT=class t extends h{static{s(this,"UsesRelPreloadAudit")}static get meta(){return{id:"uses-rel-preload",title:gc(Qd.title),description:gc(Qd.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL"],scoreDisplayMode:h.SCORING_MODES.NUMERIC}}static getURLsToPreload(e,n){let r=new Set;return n.traverse((a,o)=>{if(a.type!=="network")return;let i=o.slice(1).filter(c=>c.type==="network");t.shouldPreloadRequest(a.record,e,i)&&r.add(a.record.url)}),r}static getURLsFailedToPreload(e){let n=[];e.traverse(i=>i.type==="network"&&n.push(i.record));let r=n.filter(i=>i.isLinkPreload),a=new Map;for(let i of r){let c=a.get(i.frameId)||new Set;c.add(i.url),a.set(i.frameId,c)}let o=n.filter(i=>{let c=a.get(i.frameId);return!c||!c.has(i.url)?!1:!(i.fromDiskCache||i.fromMemoryCache||i.fromPrefetchCache)&&!i.isLinkPreload});return new Set(o.map(i=>i.url))}static shouldPreloadRequest(e,n,r){let a=n.redirects?n.redirects.length:0;return e.isLinkPreload||!v1.isCritical(e,n)||Y.isNonNetworkRequest(e)||r.length!==a+2||e.frameId!==n.frameId?!1:te.rootDomainsMatch(e.url,n.url)}static computeWasteWithGraph(e,n,r){if(!e.size)return{wastedMs:0,results:[]};let a=r.simulate(n,{flexibleOrdering:!0}),o=n.cloneWithRelationships(),i=[],c=null;if(o.traverse(p=>{p.type==="network"&&(p.isMainDocument()?c=p:p.record&&e.has(p.record.url)&&i.push(p))}),!c)throw new Error("Could not find main document node");for(let p of i)p.removeAllDependencies(),p.addDependency(c);let u=r.simulate(o,{flexibleOrdering:!0}),l=Array.from(a.nodeTimings.keys()).reduce((p,g)=>p.set(g.record,g),new Map),m=[];for(let p of i){let g=l.get(p.record),f=u.nodeTimings.get(p),y=a.nodeTimings.get(g);if(!y||!f)throw new Error("Missing preload node");let b=Math.round(y.endTime-f.endTime);b<Doe||m.push({url:p.record.url,wastedMs:b})}return m.length?{wastedMs:Math.max(...m.map(p=>p.wastedMs)),results:m}:{wastedMs:0,results:m}}static async audit_(e,n){let r=e.traces[t.DEFAULT_PASS],a=e.devtoolsLogs[t.DEFAULT_PASS],o=e.URL,i={devtoolsLog:a,settings:n.settings},[c,u,l]=await Promise.all([je.request({devtoolsLog:a,URL:o},n),kt.request({trace:r,devtoolsLog:a,URL:o},n),Ht.request(i,n)]),m=t.getURLsToPreload(c,u),{results:p,wastedMs:g}=t.computeWasteWithGraph(m,u,l);p.sort((T,A)=>A.wastedMs-T.wastedMs);let f,y=t.getURLsFailedToPreload(u);y.size&&(f=Array.from(y).map(T=>gc(Qd.crossoriginWarning,{preloadURL:T})));let b=[{key:"url",valueType:"url",label:gc(x.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:gc(x.columnWastedMs)}],D=h.makeOpportunityDetails(b,p,{overallSavingsMs:g,sortedBy:["wastedMs"]});return{score:ie.scoreForWastedMs(g),numericValue:g,numericUnit:"millisecond",displayValue:g?gc(x.displayValueMsSavings,{wastedMs:g}):"",details:D,warnings:f}}static async audit(){return{score:1,notApplicable:!0,details:h.makeOpportunityDetails([],[],{overallSavingsMs:0})}}},Eoe=MT});var k4={};S(k4,{UIStrings:()=>So,default:()=>Soe});var So,Ei,Toe,NT,Soe,I4=v(()=>{"use strict";d();J();ma();k();Rr();lt();So={title:"Page has valid source maps",failureTitle:"Missing source maps for large first-party JavaScript",description:"Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more about source maps](https://developer.chrome.com/docs/devtools/javascript/source-maps/).",columnMapURL:"Map URL",missingSourceMapErrorMessage:"Large JavaScript file is missing a source map",missingSourceMapItemsWarningMesssage:"{missingItems, plural,\n    =1 {Warning: missing 1 item in `.sourcesContent`}\n    other {Warning: missing # items in `.sourcesContent`}\n    }"},Ei=w("core/audits/valid-source-maps.js",So),Toe=500*1024,NT=class extends h{static{s(this,"ValidSourceMaps")}static get meta(){return{id:"valid-source-maps",title:Ei(So.title),failureTitle:Ei(So.failureTitle),description:Ei(So.description),requiredArtifacts:["Scripts","SourceMaps","URL","devtoolsLogs"]}}static isLargeFirstPartyJS(e,n){let r=e.url;if(!e.length||!r||!te.isValid(r)||!rt.createOrReturnURL(r).protocol.startsWith("http"))return!1;let a=e.length>=Toe;return n.isFirstParty(r)&&a}static async audit(e,n){let{SourceMaps:r}=e,a=e.devtoolsLogs[h.DEFAULT_PASS],o=await gn.request({URL:e.URL,devtoolsLog:a},n),i=new Set,c=!1,u=[];for(let m of e.Scripts){let p=r.find(y=>y.scriptId===m.scriptId),g=[];if(this.isLargeFirstPartyJS(m,o)&&(!p||!p.map)&&(c=!0,i.add(m.url),g.push({error:Ei(So.missingSourceMapErrorMessage)})),p&&!p.map&&g.push({error:p.errorMessage}),p?.map){let y=p.map.sourcesContent||[],b=0;for(let D=0;D<p.map.sources.length;D++)(y.length<D||!y[D])&&(b+=1);b>0&&g.push({error:Ei(So.missingSourceMapItemsWarningMesssage,{missingItems:b})})}(p||g.length)&&u.push({scriptUrl:m.url,sourceMapUrl:p?.sourceMapUrl,subItems:{type:"subitems",items:g}})}let l=[{key:"scriptUrl",valueType:"url",subItemsHeading:{key:"error"},label:Ei(x.columnURL)},{key:"sourceMapUrl",valueType:"url",label:Ei(So.columnMapURL)}];return u.sort((m,p)=>{let g=i.has(m.scriptUrl),f=i.has(p.scriptUrl);return g&&!f?-1:!g&&f?1:m.subItems.items.length&&!p.subItems.items.length?-1:!m.subItems.items.length&&p.subItems.items.length?1:p.scriptUrl.localeCompare(m.scriptUrl)}),{score:c?0:1,details:h.makeTableDetails(l,u)}}},Soe=NT});var M4={};S(M4,{UIStrings:()=>hc,default:()=>xoe});var hc,lf,LT,xoe,N4=v(()=>{"use strict";d();J();tf();k();hc={title:'Has a `<meta name="viewport">` tag with `width` or `initial-scale`',failureTitle:'Does not have a `<meta name="viewport">` tag with `width` or `initial-scale`',description:'A `<meta name="viewport">` not only optimizes your app for mobile screen sizes, but also prevents [a 300 millisecond delay to user input](https://developer.chrome.com/blog/300ms-tap-delay-gone-away/). [Learn more about using the viewport meta tag](https://developer.chrome.com/docs/lighthouse/pwa/viewport/).',explanationNoTag:'No `<meta name="viewport">` tag found'},lf=w("core/audits/viewport.js",hc),LT=class extends h{static{s(this,"Viewport")}static get meta(){return{id:"viewport",title:lf(hc.title),failureTitle:lf(hc.failureTitle),description:lf(hc.description),requiredArtifacts:["MetaElements"]}}static async audit(e,n){let r=await ic.request(e.MetaElements,n),a=300;return r.hasViewportTag?(r.isMobileOptimized&&(a=0),{score:Number(r.isMobileOptimized),metricSavings:{INP:a},warnings:r.parserWarnings}):{score:0,explanation:lf(hc.explanationNoTag),metricSavings:{INP:a}}}},xoe=LT});var L4={};S(L4,{UIStrings:()=>xo,default:()=>Aoe});var Coe,xo,yc,PT,Aoe,P4=v(()=>{"use strict";d();J();Kp();Jt();k();De();Uw();Xl();Ar();Ql();DE();Bt();Coe=1,xo={title:"Minimizes work during key interaction",failureTitle:"Minimize work during key interaction",description:"This is the thread-blocking work occurring during the Interaction to Next Paint measurement. [Learn more about the Interaction to Next Paint metric](https://web.dev/inp/).",inputDelay:"Input delay",processingTime:"Processing time",presentationDelay:"Presentation delay",displayValue:"{timeInMs, number, milliseconds} ms spent on event '{interactionType}'",eventTarget:"Event target"},yc=w("core/audits/work-during-interaction.js",xo),PT=class t extends h{static{s(this,"WorkDuringInteraction")}static get meta(){return{id:"work-during-interaction",title:yc(xo.title),failureTitle:yc(xo.failureTitle),description:yc(xo.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces","devtoolsLogs","TraceElements"]}}static recursivelyClipTasks(e,n,r,a){let o=e.event.ts,i=e.endEvent?.ts??e.event.ts+Number(e.event.dur||0);e.startTime=Math.max(r,Math.min(a,o))/1e3,e.endTime=Math.max(r,Math.min(a,i))/1e3,e.duration=e.endTime-e.startTime;let c=e.children.map(u=>t.recursivelyClipTasks(u,e,r,a)).reduce((u,l)=>u+l,0);return e.selfTime=e.duration-c,e.duration}static clipTasksByTs(e,n,r){for(let a of e)a.parent||t.recursivelyClipTasks(a,void 0,n,r)}static getPhaseTimes(e){let n=e.args.data,r=e.ts,a=r-n.timeStamp*1e3,o=a+n.processingStart*1e3,i=a+n.processingEnd*1e3,c=r+n.duration*1e3;return{inputDelay:{startTs:r,endTs:o},processingTime:{startTs:o,endTs:i},presentationDelay:{startTs:i,endTs:c}}}static getThreadBreakdownTable(e,n,r,a){let o=Kt.filteredTraceSort(n.traceEvents,g=>g.pid===e.pid&&g.tid===e.tid),i=o.reduce((g,f)=>Math.max(f.ts+(f.dur||0),g),0),{frames:c}=r,u=Rs.getMainThreadTasks(o,c,i),l=t.getPhaseTimes(e),m=[];for(let[g,f]of Object.entries(l)){t.clipTasksByTs(u,f.startTs,f.endTs);let y=Jp(u,a),b=[];for(let[T,A]of y){let R=Object.values(A).reduce((z,ne)=>z+ne),F=A[kn.scriptEvaluation.id]||0,M=A[kn.styleLayout.id]||0,V=A[kn.paintCompositeRender.id]||0;b.push({url:T,total:R,scripting:F,layout:M,render:V})}let D=b.filter(T=>T.total>Coe).sort((T,A)=>A.total-T.total);m.push({phase:yc(xo[g]),total:(f.endTs-f.startTs)/1e3,subItems:{type:"subitems",items:D}})}let p=[{key:"phase",valueType:"text",subItemsHeading:{key:"url",valueType:"url"},label:"Phase"},{key:"total",valueType:"ms",subItemsHeading:{key:"total",granularity:1,valueType:"ms"},granularity:1,label:"Total time"},{key:null,valueType:"ms",subItemsHeading:{key:"scripting",granularity:1,valueType:"ms"},label:"Script evaluation"},{key:null,valueType:"ms",subItemsHeading:{key:"layout",granularity:1,valueType:"ms"},label:kn.styleLayout.label},{key:null,valueType:"ms",subItemsHeading:{key:"render",granularity:1,valueType:"ms"},label:kn.paintCompositeRender.label}];return{table:h.makeTableDetails(p,m,{sortedBy:["total"]}),phases:l}}static getTraceElementTable(e){let n=e.find(o=>o.traceEventType==="responsiveness");if(!n)return;let r=[{key:"node",valueType:"node",label:yc(xo.eventTarget)}],a=[{node:h.makeNodeItem(n.node)}];return h.makeTableDetails(r,a)}static async audit(e,n){let{settings:r}=n;if(r.throttlingMethod==="simulate")return{score:null,notApplicable:!0,metricSavings:{INP:0}};let a=e.traces[t.DEFAULT_PASS],o={trace:a,settings:r},i=await Fs.request(o,n);if(i===null)return{score:null,notApplicable:!0,metricSavings:{INP:0}};if(i.name==="FallbackTiming")throw new G(G.errors.UNSUPPORTED_OLD_CHROME,{featureName:"detailed EventTiming trace events"});let c=[],u=t.getTraceElementTable(e.TraceElements);u&&c.push(u);let l=e.devtoolsLogs[t.DEFAULT_PASS],m=await $.request(l,n),p=await Ye.request(a,n),{table:g,phases:f}=t.getThreadBreakdownTable(i,a,p,m);c.push(g);let y=i.args.data.type;c.push({type:"debugdata",interactionType:y,phases:f});let b=i.args.data.duration,D=yc(xo.displayValue,{timeInMs:b,interactionType:y});return{score:b<wE.defaultOptions.p10?1:0,displayValue:D,details:{type:"list",items:c},metricSavings:{INP:b}}}},Aoe=PT});var Mt,Co,Tn,me,vc,O4,df,Ct=v(()=>{d();k();Mt={GROUPS__METRICS:"Metrics",GROUPS__ADS_PERFORMANCE:"Ad Speed",GROUPS__ADS_BEST_PRACTICES:"Tag Best Practices",NOT_APPLICABLE__DEFAULT:"Audit not applicable",NOT_APPLICABLE__INVALID_TIMING:"Invalid timing task data",NOT_APPLICABLE__NO_AD_RELATED_REQ:"No ad-related requests",NOT_APPLICABLE__NO_AD_RENDERED:"No ads rendered",NOT_APPLICABLE__NO_ADS_VIEWPORT:"No ads in viewport",NOT_APPLICABLE__NO_ADS:"No ads requested",NOT_APPLICABLE__NO_BIDS:"No bids detected",NOT_APPLICABLE__NO_EVENT_MATCHING_REQ:"No event matches network records",NOT_APPLICABLE__NO_GPT:"GPT not requested",NOT_APPLICABLE__NO_RECORDS:"No successful network records",NOT_APPLICABLE__NO_VISIBLE_SLOTS:"No visible slots",NOT_APPLICABLE__NO_TAG:"No tag requested",NOT_APPLICABLE__NO_TAGS:"No tags requested",NOT_APPLICABLE__NO_TASKS:"No tasks to compare",NOT_APPLICABLE__NO_VALID_AD_WIDTHS:"No requested ads contain ads of valid width",NOT_APPLICABLE__NO_LAYOUT_SHIFTS:"No layout shift events found",ERRORS__AREA_LARGER_THAN_VIEWPORT:"Calculated ad area is larger than viewport",ERRORS__VIEWPORT_AREA_ZERO:"Viewport area is zero",WARNINGS__NO_ADS:"No ads were requested when fetching this page.",WARNINGS__NO_AD_RENDERED:"No ads were rendered when rendering this page.",WARNINGS__NO_TAG:"The GPT tag was not requested."},Co=w("node_modules/lighthouse-plugin-publisher-ads/messages/common-strings.js",Mt),Tn=s(t=>({notApplicable:!0,score:1,displayValue:Co(t)}),"notApplicableObj"),me={Default:Tn(Mt.NOT_APPLICABLE__DEFAULT),InvalidTiming:Tn(Mt.NOT_APPLICABLE__INVALID_TIMING),NoAdRelatedReq:Tn(Mt.NOT_APPLICABLE__NO_AD_RELATED_REQ),NoAdRendered:Tn(Mt.NOT_APPLICABLE__NO_AD_RENDERED),NoAdsViewport:Tn(Mt.NOT_APPLICABLE__NO_ADS_VIEWPORT),NoAds:Tn(Mt.NOT_APPLICABLE__NO_ADS),NoBids:Tn(Mt.NOT_APPLICABLE__NO_BIDS),NoEventMatchingReq:Tn(Mt.NOT_APPLICABLE__NO_EVENT_MATCHING_REQ),NoGpt:Tn(Mt.NOT_APPLICABLE__NO_GPT),NoLayoutShifts:Tn(Mt.NOT_APPLICABLE__NO_LAYOUT_SHIFTS),NoRecords:Tn(Mt.NOT_APPLICABLE__NO_RECORDS),NoVisibleSlots:Tn(Mt.NOT_APPLICABLE__NO_VISIBLE_SLOTS),NoTag:Tn(Mt.NOT_APPLICABLE__NO_TAG),NoTags:Tn(Mt.NOT_APPLICABLE__NO_TAGS),NoTasks:Tn(Mt.NOT_APPLICABLE__NO_TASKS),NoValidAdWidths:Tn(Mt.NOT_APPLICABLE__NO_VALID_AD_WIDTHS)},vc={NoAds:Co(Mt.WARNINGS__NO_ADS),NoAdRendered:Co(Mt.WARNINGS__NO_AD_RENDERED),NoTag:Co(Mt.WARNINGS__NO_TAG)},O4={ViewportAreaZero:Co(Mt.ERRORS__VIEWPORT_AREA_ZERO)},df={Metrics:Co(Mt.GROUPS__METRICS),AdsPerformance:Co(Mt.GROUPS__ADS_PERFORMANCE),AdsBestPractices:Co(Mt.GROUPS__ADS_BEST_PRACTICES)}});var U4={};S(U4,{UIStrings:()=>OT,default:()=>Roe});var Nt,OT,Foe,Roe,B4=v(()=>{d();k();Ct();Nt="lighthouse-plugin-publisher-ads",OT={categoryDescription:"A Lighthouse plugin to improve ad speed and overall quality that is targeted at sites using GPT or AdSense tag. [Learn more](https://developers.google.com/publisher-ads-audits/reference)"},Foe=w("node_modules/lighthouse-plugin-publisher-ads/plugin.js",OT),Roe={audits:[{path:`${Nt}/audits/ad-blocking-tasks`},{path:`${Nt}/audits/ad-render-blocking-resources`},{path:`${Nt}/audits/ad-request-critical-path`},{path:`${Nt}/audits/bid-request-from-page-start`},{path:`${Nt}/audits/ad-request-from-page-start`},{path:`${Nt}/audits/ad-top-of-viewport`},{path:`${Nt}/audits/ads-in-viewport`},{path:`${Nt}/audits/async-ad-tags`},{path:`${Nt}/audits/blocking-load-events`},{path:`${Nt}/audits/bottleneck-requests`},{path:`${Nt}/audits/duplicate-tags`},{path:`${Nt}/audits/first-ad-render`},{path:`${Nt}/audits/full-width-slots`},{path:`${Nt}/audits/gpt-bids-parallel`},{path:`${Nt}/audits/loads-gpt-from-official-source`},{path:`${Nt}/audits/loads-ad-tag-over-https`},{path:`${Nt}/audits/script-injected-tags`},{path:`${Nt}/audits/serial-header-bidding`},{path:`${Nt}/audits/tag-load-time`},{path:`${Nt}/audits/viewport-ad-density`},{path:`${Nt}/audits/cumulative-ad-shift`},{path:`${Nt}/audits/deprecated-api-usage`},{path:`${Nt}/audits/gpt-errors-overall`},{path:`${Nt}/audits/total-ad-blocking-time`}],groups:{metrics:{title:df.Metrics},"ads-performance":{title:df.AdsPerformance},"ads-best-practices":{title:df.AdsBestPractices}},category:{title:"Publisher Ads",description:Foe(OT.categoryDescription),auditRefs:[{id:"tag-load-time",weight:5,group:"metrics"},{id:"bid-request-from-page-start",weight:5,group:"metrics"},{id:"ad-request-from-page-start",weight:25,group:"metrics"},{id:"first-ad-render",weight:10,group:"metrics"},{id:"cumulative-ad-shift",weight:5,group:"metrics"},{id:"total-ad-blocking-time",weight:2,group:"metrics"},{id:"gpt-bids-parallel",weight:1,group:"ads-performance"},{id:"serial-header-bidding",weight:1,group:"ads-performance"},{id:"bottleneck-requests",weight:1,group:"ads-performance"},{id:"script-injected-tags",weight:1,group:"ads-performance"},{id:"blocking-load-events",weight:1,group:"ads-performance"},{id:"ad-render-blocking-resources",weight:1,group:"ads-performance"},{id:"ad-blocking-tasks",weight:1,group:"ads-performance"},{id:"ad-request-critical-path",weight:0,group:"ads-performance"},{id:"ads-in-viewport",weight:4,group:"ads-best-practices"},{id:"async-ad-tags",weight:2,group:"ads-best-practices"},{id:"loads-ad-tag-over-https",weight:1,group:"ads-best-practices"},{id:"loads-gpt-from-official-source",weight:4,group:"ads-best-practices"},{id:"viewport-ad-density",weight:2,group:"ads-best-practices"},{id:"ad-top-of-viewport",weight:2,group:"ads-best-practices"},{id:"duplicate-tags",weight:1,group:"ads-best-practices"},{id:"deprecated-gpt-api-usage",weight:0,group:"ads-best-practices"},{id:"gpt-errors-overall",weight:0,group:"ads-best-practices"}]}}});var j4,q4=v(()=>{d();j4=[{label:"Prebid JS",patterns:["^https?://([^.]*.)?prebid[.]org/.*","^https?://acdn[.]adnxs[.]com/prebid/.*"]},{label:"33Across",patterns:["^https?://ssc[.]33across.com/api/.*"]},{label:"AppNexus",patterns:["^https?://ib[.]adnxs[.]com/.*"]},{label:"Amazon Ads",patterns:["^https?://[a-z-_.]*[.]amazon-adsystem[.]com/.*bid.*"]},{label:"AdTechus (AOL)",patterns:["^https?://([^.]*.)?adserver[.]adtechus[.]com/.*"]},{label:"Aardvark",patterns:["^https?://thor[.]rtk[.]io/.*"]},{label:"AdBlade",patterns:["^https?://rtb[.]adblade[.]com/prebidjs/bid.*"]},{label:"AdBund",patterns:["^https?://us-east-engine[.]adbund[.]xyz/prebid/ad/get.*","^https?://us-west-engine[.]adbund[.]xyz/prebid/ad/get.*"]},{label:"AdButler",patterns:["^https?://servedbyadbutler[.]com/adserve.*"]},{label:"Adequant",patterns:["^https?://rex[.]adequant[.]com/rex/c2s_prebid.*"]},{label:"AdForm",patterns:["^https?://adx[.]adform[.]net/adx.*"]},{label:"AdMedia",patterns:["^https?://b[.]admedia[.]com/banner/prebid/bidder.*"]},{label:"AdMixer",patterns:["^https?://inv-nets[.]admixer[.]net/prebid[.]aspx.*","^https?://inv-nets[.]admixer[.]net/videoprebid[.]aspx.*"]},{label:"AOL",patterns:["^https?://adserver-us[.]adtech[.]advertising[.]com.*","^https?://adserver-eu[.]adtech[.]advertising[.]com.*","^https?://adserver-as[.]adtech[.]advertising[.]com.*","^https?://adserver[.]adtech[.]de/pubapi/.*"]},{label:"Beachfront",patterns:["^https?://reachms[.]bfmio[.]com/bid[.]json?exchange_id=.*"]},{label:"Bidfluence",patterns:["^https?://cdn[.]bidfluence[.]com/forge[.]js.*"]},{label:"Brightcom",patterns:["^https?://hb[.]iselephant[.]com/auc/ortb.*"]},{label:"C1x",patterns:["^https?://ht-integration[.]c1exchange[.]com:9000/ht.*"]},{label:"CentroBid",patterns:["^https?://t[.]brand-server[.]com/hb.*"]},{label:"Conversant",patterns:["^https?://media[.]msg[.]dotomi[.]com/s2s/.*"]},{label:"Criteo",patterns:["^https?://static[.]criteo[.]net/js/ld/publishertag[.]js.*","^https?://([^.]*.)?bidder[.]criteo[.]com/cdb.*","^https?://([^.]*.)?rtax[.]criteo[.]com/delivery/rta.*","^https?://([^.]*.)?rtax[.]eu[.]criteo[.]com/delivery/rta.*"]},{label:"Datablocks",patterns:["^https?://[a-z0-9_.-]*[.]dblks[.]net/.*"]},{label:"Districtm",patterns:["^https?://prebid[.]districtm[.]ca/lib[.]js.*"]},{label:"E-Planning",patterns:["^https?://ads[.]us[.]e-planning[.]net.*"]},{label:"Essens",patterns:["^https?://bid[.]essrtb[.]com/bid/prebid_call.*"]},{label:"Facebook",patterns:["^https?://an[.]facebook[.]com/v2/placementbid[.]json.*"]},{label:"FeatureForward",patterns:["^https?://prmbdr[.]featureforward[.]com/newbidder/.*"]},{label:"Fidelity",patterns:["^https?://x[.]fidelity-media[.]com.*"]},{label:"GetIntent",patterns:["^https?://px[.]adhigh[.]net/rtb/direct_banner.*","^https?://px[.]adhigh[.]net/rtb/direct_vast.*"]},{label:"GumGum",patterns:["^https?://g2[.]gumgum[.]com/hbid/imp.*"]},{label:"Hiromedia",patterns:["^https?://hb-rtb[.]ktdpublishers[.]com/bid/get.*"]},{label:"Imonomy",patterns:["^https?://b[.]imonomy[.]com/openrtb/hb/.*"]},{label:"ImproveDigital",patterns:["^https?://ad[.]360yield[.]com/hb.*"]},{label:"IndexExchange",patterns:["^https?://as(-sec)?[.]casalemedia[.]com/(cygnus|headertag).*","^https?://js(-sec)?[.]indexww[.]com/ht/.*"]},{label:"InnerActive",patterns:["^https?://ad-tag[.]inner-active[.]mobi/simpleM2M/requestJsonAd.*"]},{label:"Innity",patterns:["^https?://as[.]innity[.]com/synd/.*"]},{label:"JCM",patterns:["^https?://media[.]adfrontiers[.]com/pq.*"]},{label:"JustPremium",patterns:["^https?://pre[.]ads[.]justpremium[.]com/v/.*"]},{label:"Kargo",patterns:["^https?://krk[.]kargo[.]com/api/v1/bid.*"]},{label:"Komoona",patterns:["^https?://bidder[.]komoona[.]com/v1/GetSBids.*"]},{label:"KruxLink",patterns:["^https?://link[.]krxd[.]net/hb.*"]},{label:"Kumma",patterns:["^https?://cdn[.]kumma[.]com/pb_ortb[.]js.*"]},{label:"Mantis",patterns:["^https?://mantodea[.]mantisadnetwork[.]com/website/prebid.*"]},{label:"MarsMedia",patterns:["^https?://bid306[.]rtbsrv[.]com:9306/bidder.*"]},{label:"Media.net",patterns:["^https?://contextual[.]media[.]net/bidexchange.*"]},{label:"MemeGlobal",patterns:["^https?://stinger[.]memeglobal[.]com/api/v1/services/prebid.*"]},{label:"MobFox",patterns:["^https?://my[.]mobfox[.]com/request[.]php.*"]},{label:"NanoInteractive",patterns:["^https?://tmp[.]audiencemanager[.]de/hb.*"]},{label:"OpenX",patterns:["^https?://([^.]*.)?d[.]openx[.]net/w/1[.]0/arj.*","^https?://([^.]*.)?servedbyopenx[.]com/.*"]},{label:"Piximedia",patterns:["^https?://static[.]adserver[.]pm/prebid.*"]},{label:"Platformio",patterns:["^https?://piohbdisp[.]hb[.]adx1[.]com.*"]},{label:"Pollux",patterns:["^https?://adn[.]plxnt[.]com/prebid.*"]},{label:"PubGears",patterns:["^https?://c[.]pubgears[.]com/tags.*"]},{label:"Pubmatic",patterns:["^https?://ads[.]pubmatic[.]com/AdServer/js/gshowad[.]js.*","^https?://([^.]*.)?gads.pubmatic[.]com/.*","^https?://hbopenbid.pubmatic[.]com/.*"]},{label:"Pulsepoint",patterns:["^https?://bid[.]contextweb[.]com/header/tag.*"]},{label:"Quantcast",patterns:["^https?://global[.]qc[.]rtb[.]quantserve[.]com:8080/qchb.*"]},{label:"Rhythmone",patterns:["^https?://tag[.]1rx[.]io/rmp/.*"]},{label:"Roxot",patterns:["^https?://r[.]rxthdr[.]com.*"]},{label:"Rubicon",patterns:["^https?://([^.]*.)?(fastlane|optimized-by|anvil)[.]rubiconproject[.]com/a/api.*","^https?://fastlane-adv[.]rubiconproject[.]com/v1/auction/video.*"]},{label:"Sekindo",patterns:["^https?://hb[.]sekindo[.]com/live/liveView[.]php.*"]},{label:"ShareThrough",patterns:["^https?://btlr[.]sharethrough[.]com/header-bid/.*"]},{label:"Smart AdServer",patterns:["^https?://prg[.]smartadserver[.]com/prebid.*"]},{label:"Sonobi",patterns:["^https?://apex[.]go[.]sonobi[.]com/trinity[.]js.*"]},{label:"Sovrn",patterns:["^https?://ap[.]lijit[.]com/rtb/bid.*"]},{label:"SpringServe",patterns:["^https?://bidder[.]springserve[.]com/display/hbid.*"]},{label:"StickyAds",patterns:["^https?://cdn[.]stickyadstv[.]com/mustang/mustang[.]min[.]js.*","^https?://cdn[.]stickyadstv[.]com/prime-time/.*"]},{label:"TapSense3",patterns:["^https?://ads04[.]tapsense[.]com/ads/headerad.*"]},{label:"ThoughtLeadr",patterns:["^https?://a[.]thoughtleadr[.]com/v4/.*"]},{label:"TremorBid",patterns:["^https?://([^.]*.)?ads[.]tremorhub[.]com/ad/tag.*"]},{label:"Trion",patterns:["^https?://in-appadvertising[.]com/api/bidRequest.*"]},{label:"TripleLift",patterns:["^https?://tlx[.]3lift[.]com/header/auction.*"]},{label:"TrustX",patterns:["^https?://sofia[.]trustx[.]org/hb.*"]},{label:"UCFunnel",patterns:["^https?://agent[.]aralego[.]com/header.*"]},{label:"Underdog Media",patterns:["^https?://udmserve[.]net/udm/img[.]fetch.*"]},{label:"UnRuly",patterns:["^https?://targeting[.]unrulymedia[.]com/prebid.*"]},{label:"VertaMedia",patterns:["^https?://rtb[.]vertamedia[.]com/hb/.*"]},{label:"Vertoz",patterns:["^https?://hb[.]vrtzads[.]com/vzhbidder/bid.*"]},{label:"WideOrbig",patterns:["^https?://([^.]*.)?atemda[.]com/JSAdservingMP[.]ashx.*"]},{label:"WideSpace",patterns:["^https?://engine[.]widespace[.]com/map/engine/hb/.*"]},{label:"YieldBot",patterns:["^https?://cdn[.]yldbt[.]com/js/yieldbot[.]intent[.]js.*"]},{label:"YieldMo",patterns:["^https?://ads[.]yieldmo[.]com/exchange/prebid.*"]}]});var H4=L((dBe,z4)=>{d();var _oe=/([a-zA-Z][a-zA-Z_-]*)\s*(?:=(?:"([^"]*)"|([^ \t",;]*)))?/g,vt={maxAge:"max-age",sharedMaxAge:"s-maxage",maxStale:"max-stale",minFresh:"min-fresh",immutable:"immutable",mustRevalidate:"must-revalidate",noCache:"no-cache",noStore:"no-store",noTransform:"no-transform",onlyIfCached:"only-if-cached",private:"private",proxyRevalidate:"proxy-revalidate",public:"public"};function Yr(t){return t===null}s(Yr,"parseBooleanOnly");function mf(t){if(!t)return null;let e=parseInt(t,10);return!Number.isFinite(e)||e<0?null:e}s(mf,"parseDuration");var bc=class{static{s(this,"CacheControl")}constructor(){this.maxAge=null,this.sharedMaxAge=null,this.maxStale=null,this.maxStaleDuration=null,this.minFresh=null,this.immutable=null,this.mustRevalidate=null,this.noCache=null,this.noStore=null,this.noTransform=null,this.onlyIfCached=null,this.private=null,this.proxyRevalidate=null,this.public=null}parse(e){if(!e||e.length===0)return this;let n={},r=e.match(_oe)||[];return Array.prototype.forEach.call(r,a=>{let o=a.split("=",2),[i]=o,c=null;o.length>1&&(c=o[1].trim()),n[i.toLowerCase()]=c}),this.maxAge=mf(n[vt.maxAge]),this.sharedMaxAge=mf(n[vt.sharedMaxAge]),this.maxStale=Yr(n[vt.maxStale]),this.maxStaleDuration=mf(n[vt.maxStale]),this.maxStaleDuration&&(this.maxStale=!0),this.minFresh=mf(n[vt.minFresh]),this.immutable=Yr(n[vt.immutable]),this.mustRevalidate=Yr(n[vt.mustRevalidate]),this.noCache=Yr(n[vt.noCache]),this.noStore=Yr(n[vt.noStore]),this.noTransform=Yr(n[vt.noTransform]),this.onlyIfCached=Yr(n[vt.onlyIfCached]),this.private=Yr(n[vt.private]),this.proxyRevalidate=Yr(n[vt.proxyRevalidate]),this.public=Yr(n[vt.public]),this}format(){let e=[];return typeof this.maxAge=="number"&&e.push(`${vt.maxAge}=${this.maxAge}`),typeof this.sharedMaxAge=="number"&&e.push(`${vt.sharedMaxAge}=${this.sharedMaxAge}`),this.maxStale&&(typeof this.maxStaleDuration=="number"?e.push(`${vt.maxStale}=${this.maxStaleDuration}`):e.push(vt.maxStale)),typeof this.minFresh=="number"&&e.push(`${vt.minFresh}=${this.minFresh}`),this.immutable&&e.push(vt.immutable),this.mustRevalidate&&e.push(vt.mustRevalidate),this.noCache&&e.push(vt.noCache),this.noStore&&e.push(vt.noStore),this.noTransform&&e.push(vt.noTransform),this.onlyIfCached&&e.push(vt.onlyIfCached),this.private&&e.push(vt.private),this.proxyRevalidate&&e.push(vt.proxyRevalidate),this.public&&e.push(vt.public),e.join(", ")}};function koe(t){return new bc().parse(t)}s(koe,"parse");function Ioe(t){return t instanceof bc?t.format():bc.prototype.format.call(t)}s(Ioe,"format");z4.exports={CacheControl:bc,parse:koe,format:Ioe}});function UT(t,e){let n=e.toLowerCase();return(t.responseHeaders||[]).find(r=>r.name.toLowerCase()===n)}function pf(t){if(!y0.isCacheableAsset(t))return!1;let e=UT(t,"cache-control");if(e){try{let n=(0,G4.parse)(e.value);if(n.noStore||n.noCache||n.maxAge===0)return!1}catch{}return!0}return!!UT(t,"expires")||!!UT(t,"last-modified")}var G4,BT=v(()=>{d();v0();G4=zt(H4(),1);s(UT,"getHeader");s(pf,"isCacheable")});function Nn(t){let e;try{e=typeof t=="string"?new URL(t):t}catch{e=new URL("http://_")}return e}function Ti(t){return t=Nn(t),/(^|\.)(doubleclick.net|google(syndication|tagservices).com)$/.test(t.hostname)}function jT(t){t=Nn(t);let e=t.host==="pagead2.googlesyndication.com",n=["/pagead/js/adsbygoogle.js","/pagead/show_ads.js"].includes(t.pathname);return e&&n}function Moe(t){t=Nn(t);let e=t.host==="pagead2.googlesyndication.com",n=/(^\/pagead\/js\/.*\/show_ads_impl.*?\.js)/.test(t.pathname);return e&&n}function ff(t){return t=Nn(t),jT(t)||Moe(t)}function Noe(t){if(!t)return!1;let e=new URL(t.url);return e.pathname==="/pagead/ads"&&e.host==="googleads.g.doubleclick.net"}function Loe(t){return/(^aswift_\d+)/.test(t.id)}function wc(t){let{host:e,pathname:n}=Nn(t);return["securepubads.g.doubleclick.net","googleads4.g.doubleclick.net"].includes(e)&&["/pcs/view","/pagead/adview"].includes(n)}function Dc(t){let{host:e,pathname:n}=Nn(t),r=["www.googletagservices.com","pagead2.googlesyndication.com","securepubads.g.doubleclick.net"].includes(e),a=["/tag/js/gpt.js","/tag/js/gpt_mobile.js"].includes(n);return r&&a}function qT(t){let{host:e,pathname:n}=Nn(t),r=["cdn.ampproject.org"].includes(e),a=["/v0/amp-ad-0.1.js"].includes(n);return r&&a}function Kr(t){return Ti(t)&&/(^\/gpt\/pubads_impl([a-z_]*)((?<!rendering)_)\d+\.js)/.test(Nn(t).pathname)}function W4(t){return/^\/[a-z_]*\/\d+\/v0\/amp-ad-network-doubleclick-impl-0.1.js/.test(Nn(t).pathname)}function Ao(t){return t=Nn(t),Dc(t)||Kr(t)}function Poe(t){return qT(t)||W4(t)}function zT(t){return t?new URL(t.url).pathname==="/gampad/ads"&&t.resourceType==="XHR"&&Ti(t.url):!1}function Ooe(t){if(!t)return!1;let e=new URL(t.url);return e.pathname==="/gampad/ads"&&e.host==="securepubads.g.doubleclick.net"&&t.resourceType==="Fetch"}function HT(t){return/(^google_ads_iframe_)/.test(t.id)}function Ec(t){return jT(t)||Dc(t)||qT(t)}function em(t){return ff(t)||Ao(t)||Poe(t)}function Jr(t){return Noe(t)||zT(t)||Ooe(t)}function Tc(t){return Loe(t)||HT(t)}function Sc(t){return jT(t)||Kr(t)||W4(t)}function V4(t,e){return e.some(n=>t.includes(n))}function Fo(t){for(let e of j4)for(let n of e.patterns)if(new RegExp(n).test(t))return e.label}function tm(t){return!!Fo(typeof t=="string"?t:t.url)}function Uoe(t){return(t.resourceSize==null||t.resourceSize>0)&&t.resourceType!="Image"&&!pf(t)}function Ra(t){return tm(t)&&Uoe(t)}function $4(t){return["parser","preload","other"].includes(t.initiator.type)}function Y4(t){let e=new URL(t),n=60,r=e.pathname.length>n?e.pathname.substr(0,n)+"...":e.pathname;return e.origin+r}function gf(t){let e=Fo(t);if(e)return e;if(Ao(t))return"GPT";if(ff(t))return"AdSense";if(qT(t))return"AMP tag";let n=Va.getEntity(t);if(n)return n.name;let{host:r}=new URL(t),[a=""]=r.match(/([^.]*(\.[a-z]{2,3}){1,2})$/)||[];return a||r}function Si(t){let e=typeof t=="string"?t:t.url;if(!e)return!1;if(em(e)||Fo(e))return!0;let n=Va.getEntity(e);return n?n.categories.includes("ad"):!1}var At=v(()=>{d();q4();pp();BT();s(Nn,"toURL");s(Ti,"isGoogleAds");s(jT,"isAdSenseTag");s(Moe,"isAdSenseImplTag");s(ff,"isAdSense");s(Noe,"isAdSenseAdRequest");s(Loe,"isAdSenseIframe");s(wc,"isImpressionPing");s(Dc,"isGptTag");s(qT,"isAMPTag");s(Kr,"isGptImplTag");s(W4,"isAMPImplTag");s(Ao,"isGpt");s(Poe,"isAMP");s(zT,"isGptAdRequest");s(Ooe,"isAMPAdRequest");s(HT,"isGptIframe");s(Ec,"isAdTag");s(em,"isAdScript");s(Jr,"isAdRequest");s(Tc,"isAdIframe");s(Sc,"isImplTag");s(V4,"containsAnySubstring");s(Fo,"getHeaderBidder");s(tm,"isBidRelatedRequest");s(Uoe,"isPossibleBidRequest");s(Ra,"isBidRequest");s($4,"isStaticRequest");s(Y4,"trimUrl");s(gf,"getNameOrTld");s(Si,"isAdRelated")});function K4(t){return t.args.frame||t.args.data&&t.args.data.frame||null}function Boe(t){let e=new Set;for(let{args:n}of t.childEvents)n.data&&n.data.url&&e.add(n.data.url);return Array.from(e)}function joe(t){return!!Boe(t).find(e=>tm(e)||Ti(Nn(e)))}function qoe(t){return t.event.dur>50*1e3}function hf(t,e){t===e||t.endTime>e.startTime||t.addDependent(e)}function J4(t){let e=[],n=[];t.traverse(r=>{r.type===Fe.TYPES.NETWORK&&(Dc(r.record.url)&&r.record.resourceType==="Script"?n.push(r):zT(r.record)&&e.push(r))}),t.traverse(r=>{if(r.type===Fe.TYPES.NETWORK){if(Kr(r.record.url)){let a=r;for(let o of n)hf(o,a)}if(tm(r.record)){let a=r;for(let o of e)hf(a,o)}if(wc(r.record.url)){let a=r;for(let o of e){hf(o,a);for(let i of o.getDependents())hf(i,a)}}}})}var GT,dn,xi=v(()=>{d();An();vu();Ea();yu();At();s(K4,"getFrame");s(Boe,"getCpuNodeUrls");s(joe,"isAdTask");s(qoe,"isLongTask");s(hf,"addEdge");s(J4,"addEdges");GT=class t extends nn{static{s(this,"AdLanternMetric")}static get COEFFICIENTS(){return{intercept:0,optimistic:1,pessimistic:0}}static getPessimisticGraph(e){let n=e.cloneWithRelationships(r=>!0);return J4(n),n}static getOptimisticGraph(e){let n=e.record.frameId,r=t.getPessimisticGraph(e),a=r.cloneWithRelationships(o=>{if(o.type===Fe.TYPES.CPU)return qoe(o)||joe(o)||!!K4(o.event)&&K4(o.event)!==n;if(o.hasRenderBlockingPriority())return!0;let i=o.record.url;return tm(i)||Ti(Nn(i))});return J4(r),a}static getEstimateFromSimulation(e,n){throw new Error("getEstimateFromSimulation not implemented by "+this.name)}static findTiming(e,n){let r={startTime:1/0,endTime:-1/0,duration:0};for(let[a,o]of e.entries())n(a,o)&&r.startTime>o.startTime&&(r=o);return r}static findNetworkTiming(e,n){return this.findTiming(e,r=>r.type===Fe.TYPES.NETWORK&&n(r.record))}},dn=GT});function X4(t){let e=t.find(n=>Sc(new URL(n.url)));return e?e.endTime:-1}function yf(t){let e=t.find(Jr);return e?e.startTime:-1}function Z4(t){let e=t.find(Ra);return e?e.startTime:-1}function Q4(t){let e=t.find(n=>wc(n.url));return e?e.startTime:-1}function Xr(t,e=-1){let n=t.find(r=>r.statusCode==200);return n?n.startTime:e}async function Dr(t,e,n){let r=new Map,a=await $.request(e,n);if(n.settings.throttlingMethod=="simulate"){let o=await kt.request({trace:t,devtoolsLog:e},n),i=dn.getOptimisticGraph(o),c=await Ht.request({devtoolsLog:e,settings:n.settings},n),{nodeTimings:u}=c.simulate(i,{});for(let[{record:l},m]of u.entries())l&&r.set(l,m)}else{let o=Xr(a);for(let i of a)r.set(i,{startTime:(i.startTime-o)*1e3,endTime:(i.endTime-o)*1e3,duration:(i.endTime-i.startTime)*1e3})}return r}function vf(t){if(t.args.data&&["EvaluateScript","FunctionCall"].includes(t.name)){if(t.args.data.url)return t.args.data.url;if(t.args.data.stackTrace)return t.args.data.stackTrace[0].url}}async function eU(t,e,n){let r=await $.request(e,n),a=Xr(r)*1e3,o=new Map;for(let u of t.traceEvents){let l=vf(u);if(!l)continue;let m=u.ts/1e3-a;(!o.has(l)||o.get(l)>m)&&o.set(l,m)}if(n.settings.throttlingMethod!=="simulate")return o;let i=await Dr(t,e,n),c=new Map;for(let[u,l]of i.entries()){let m=o.get(u.url);if(!m||c.has(u.url))continue;let p=u.startTime*1e3-a,g=l.endTime,f=n.settings.throttling.cpuSlowdownMultiplier,y=m-p,b=f*y;c.set(u.url,g+b)}return c}var lr=v(()=>{d();xi();tr();De();$n();At();s(X4,"getTagEndTime");s(yf,"getAdStartTime");s(Z4,"getBidStartTime");s(Q4,"getImpressionStartTime");s(Xr,"getPageStartTime");s(Dr,"getTimingsByRecord");s(vf,"getScriptUrl");s(eU,"getScriptEvaluationTimes")});var nm,rm,xc,bf=v(()=>{d();xi();oo();we();lr();At();nm=class extends dn{static{s(this,"LanternAdRequestTime")}static getEstimateFromSimulation(e,n){let{nodeTimings:r}=e;return{timeInMs:dn.findNetworkTiming(r,Jr).startTime,nodeTimings:r}}};nm=W(nm);rm=class extends bn{static{s(this,"AdRequestTime")}static async computeSimulatedMetric(e,n){return nm.request(e,n)}static async computeObservedMetric(e){let{networkRecords:n}=e,r=Xr(n),o=(yf(n)-r)*1e3;return Promise.resolve({timing:o})}static async request(e,n){throw Error("Not implemented -- class not decorated")}};rm=W(rm);xc=rm});function Ro(t,e=new Set){let n=t.attributableURLs.find(c=>e.has(c)),r=t.attributableURLs[0],a=n||r;if(a)return a;let o=50,i="";for(let c of t.children){let u=Ro(c,e);u&&c.duration>o&&(i=u,o=c.duration)}return i}var wf=v(()=>{d();s(Ro,"getAttributableUrl")});function Goe(t,e){if(t.duration<zoe)return!1;let n=Ro(t,e);if(!n)return!1;if(t.parent){let r=Ro(t.parent,e);return n!=r}return!0}var zoe,Hoe,am,Df,WT=v(()=>{d();xi();An();oo();vu();wf();tr();ba();we();yu();De();$n();zoe=50,Hoe=100;s(Goe,"isLong");am=class extends bn{static{s(this,"LongTasks")}static async getSimulationGraph(e,n,r){let a=await kt.request({trace:e,devtoolsLog:n},r);return dn.getOptimisticGraph(a)}static async computeSimulatedResult(e,n,r){let a=await this.getSimulationGraph(e,n,r),o=await Ht.request({devtoolsLog:n,settings:r.settings},r),{nodeTimings:i}=o.simulate(a,{}),c=[];for(let[u,l]of i.entries())u.type!==Fe.TYPES.CPU||l.duration<Hoe||c.push({event:u.event,startTime:l.startTime,endTime:l.endTime,duration:l.duration,selfTime:l.duration,attributableURLs:Array.from(u.getEvaluateScriptURLs()),children:[],parent:u.parent,unbounded:u.unbounded,group:u.group});return c}static async computeObservedResult(e,n,r){let a=await yn.request(e,r),o=await $.request(n,r),i=new Set(o.filter(c=>c.resourceType==="Script").map(c=>c.url));return a.filter(c=>Goe(c,i))}static async compute_({trace:e,devtoolsLog:n},r){return r.settings.throttlingMethod=="simulate"?this.computeSimulatedResult(e,n,r):this.computeObservedResult(e,n,r)}static async request(e,n){throw Error("Not implemented -- class not decorated")}};am=W(am);Df=am});var tU={};S(tU,{UIStrings:()=>_a,default:()=>Voe});var _a,Ci,Woe,VT,Voe,nU=v(()=>{d();bf();k();WT();Ct();bt();wf();At();_a={title:"No long tasks blocking ad-related network requests",failureTitle:"Avoid long tasks that block ad-related network requests",description:"Tasks blocking the main thread can delay ad requests and cause a poor user experience. Consider removing long blocking tasks or moving them off of the main thread. These tasks can be especially detrimental to performance on less powerful devices. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-blocking-tasks).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",columnScript:"Attributable URL",columnStartTime:"Start",columnDuration:"Duration"},Ci=w("node_modules/lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks.js",_a),Woe=[{key:"script",itemType:"url",text:Ci(_a.columnScript)},{key:"startTime",itemType:"ms",text:Ci(_a.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:Ci(_a.columnDuration),granularity:1}],VT=class t extends h{static{s(this,"AdBlockingTasks")}static get meta(){return{id:"ad-blocking-tasks",title:Ci(_a.title),failureTitle:Ci(_a.failureTitle),description:Ci(_a.description),requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,n){let r=n.settings.throttlingMethod=="simulate"?200:100,a=e.traces[h.DEFAULT_PASS],o=e.devtoolsLogs[h.DEFAULT_PASS],i={trace:a,devtoolsLog:o,settings:n.settings},c=[];try{c=await Df.request(i,n)}catch{return me.InvalidTiming}if(!c.length)return me.NoTasks;let{timing:u}=await xc.request(i,n);if(!(u>0))return me.NoAdRelatedReq;let l=[];for(let y of c){if(y.startTime>u||y.duration<r)continue;let b=Ro(y);if(b&&em(new URL(b)))continue;let D=b&&new URL(b),T=D&&D.origin+D.pathname||"Other";l.push({script:T,rawUrl:b,startTime:y.startTime,endTime:y.endTime,duration:y.duration,isTopLevel:!y.parent})}let m=Array.from(l),p=10;m.length>p&&(m=l.filter(y=>y.script!=="Other"&&y.isTopLevel).sort((y,b)=>b.duration-y.duration).splice(0,p).sort((y,b)=>y.startTime-b.startTime));let g=m.reduce((y,b)=>b.isTopLevel?y+b.duration:y,0),f=m.length>0;return{score:f?0:1,numericValue:g,numericUnit:"millisecond",displayValue:f?Ci(_a.failureDisplayValue,{timeInMs:g}):"",details:t.makeTableDetails(Woe,m)}}},Voe=VT});var rU={};S(rU,{UIStrings:()=>ka,default:()=>Koe});var ka,Ai,$oe,Yoe,$T,Koe,aU=v(()=>{d();k();De();Ct();bt();lr();At();ka={title:"Minimal render-blocking resources found",failureTitle:"Avoid render-blocking resources",description:"Render-blocking resources slow down tag load times. Consider loading critical JS/CSS inline or loading scripts asynchronously or loading the tag earlier in the head. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources).",failureDisplayValue:"Up to {timeInMs, number, seconds} s tag load time improvement",columnUrl:"Resource",columnStartTime:"Start",columnDuration:"Duration"},Ai=w("node_modules/lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources.js",ka),$oe=100,Yoe=[{key:"url",itemType:"url",text:Ai(ka.columnUrl)},{key:"startTime",itemType:"ms",text:Ai(ka.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:Ai(ka.columnDuration),granularity:1}],$T=class t extends h{static{s(this,"AdRenderBlockingResources")}static get meta(){return{id:"ad-render-blocking-resources",title:Ai(ka.title),failureTitle:Ai(ka.failureTitle),scoreDisplayMode:"binary",description:Ai(ka.description),requiredArtifacts:["LinkElements","ScriptElements","devtoolsLogs","traces"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=e.traces[h.DEFAULT_PASS],o=await $.request(r,n),i=o.find(R=>Ec(new URL(R.url)));if(!i)return me.NoTag;let c=await Dr(a,r,n),u=new Set;for(let R of e.LinkElements)R.href&&R.rel=="stylesheet"&&u.add(R.href);for(let R of e.ScriptElements)R.src&&!R.defer&&!R.async&&u.add(R.src);let m=o.filter(R=>R.endTime<i.startTime).filter(R=>R!=i.initiatorRequest).filter(R=>R.initiator.type="parser").filter(R=>u.has(R.url)).map(R=>Object.assign({url:R.url},c.get(R)));m.sort((R,F)=>R.endTime-F.endTime);let p=c.get(i)||{startTime:1/0},g=m.map(R=>R.startTime),f=m.map(R=>R.endTime),y=Math.min(...g),D=Math.min(Math.max(...f),p.startTime)-y,T="";return m.length>0&&D>0&&(T=Ai(ka.failureDisplayValue,{timeInMs:D})),{score:m.length>0&&D>$oe?0:1,numericValue:m.length,numericUnit:"unitless",displayValue:T,details:{opportunity:D,...t.makeTableDetails(Yoe,m)}}}},Koe=$T});function om(t){if(t==null)throw new Error("Expected not to be null");return t}var YT=v(()=>{d();s(om,"assert")});function Joe(t,e,n){let r=e.xhrEdges.get(t.url);if(!r)return!1;for(let{url:a}of n)if(r.has(a))return!0;return!1}function Xoe(t,e,n,r){let a=n.allRecords.filter(o=>o.resourceType!=null).filter(o=>["Script","XHR"].includes(o.resourceType||"")&&o.endTime<e.startTime).filter(o=>o.initiatorRequest==t||kt.getNetworkInitiators(o).includes(t.url));for(let o of a)o.resourceType=="XHR"&&Joe(o,n,r)&&im(n,o,r)}function oU(t,e,n){let r=iU(t,e),a=new Set;return im(r,n,a),a}function im(t,e,n=new Set){if(!e||n.has(e))return n;n.add(e);let r=new Set;for(let a=e.initiator.stack;a;a=a.parent)for(let{url:o}of a.callFrames){if(r.has(o))continue;r.add(o);let i=t.requestsByUrl.get(o);if(i&&(im(t,i,n),i.resourceType=="Script")){let c=a.callFrames[0].url,u=t.requestsByUrl.get(c);u&&Xoe(u,e,t,n)}}return im(t,e.initiatorRequest||null,n),n}function iU(t,e){let n=new Map;for(let o of t)n.set(o.url,o);let r=e.filter(o=>o.name.startsWith("XHR")).filter(o=>!!(o.args.data||{}).url),a=new Map;for(let o of r){let i=o.args.data||{},c=a.get(i.url)||new Set;for(let{url:u}of i.stackTrace||[])c.add(u);a.set(i.url,c)}return{requestsByUrl:n,xhrEdges:a,allRecords:t}}function Zoe(t,e){return Math.max(t.startTime,e.startTime)>Math.min(t.endTime,e.endTime)||t.type&&e.type&&t.type!=e.type||t.type=="Script"?!1:t.nameOrTld==e.nameOrTld}function Qoe(t){t.sort((n,r)=>n.nameOrTld!=r.nameOrTld?n.nameOrTld<r.nameOrTld?-1:1:n.type!=r.type?n.type<r.type?-1:1:n.startTime!=r.startTime?n.startTime<r.startTime?-1:1:n.endTime-r.endTime);let e=[];for(let n=0;n<t.length;n++){let r=t[n],a;for(;n<t.length&&(a=t[n+1],!(!a||!Zoe(a,r)));)r.endTime=Math.max(r.endTime,a.endTime),r.duration=r.endTime-r.startTime,n++;e.push(r)}return e.sort((n,r)=>n.startTime-r.startTime),e}function eie(t){if(!t.length)return[];let e=om(t[0]);e.selfTime=e.duration;let n=e.startTime;for(let r of t){if(r.endTime<n||r==e)continue;let a=Math.max(n,r.startTime),o=Math.min(e.endTime,r.endTime);a<o&&(e.selfTime-=o-a),n=Math.max(n,o),r.endTime>e.endTime&&(r.selfTime=r.endTime-a,e=r)}}async function _o(t,e,n){let r=await $.request(e,n),a=r.find(Jr)||r.find(Ra)||r.find(Si);if(a==null)return Promise.resolve([]);let o=new Set,i=om(a),c=r.filter(b=>Ao(b.url)||ff(b.url)),u=r.filter(b=>Ra(b)&&b.endTime<=i.startTime),l=iU(r,t.traceEvents);for(let b of[i,...u,...c])im(l,b,o);let m=new Set(["Script","XHR","Fetch","EventStream","Document",void 0]),p=Array.from(o).filter(b=>b.endTime<i.startTime).filter(b=>m.has(b.resourceType)).filter(b=>b.mimeType!="text/css"),g=await Dr(t,e,n),f=p.map(b=>{let{startTime:D,endTime:T}=g.get(b)||b;return{startTime:D,endTime:T,duration:T-D,selfTime:0,url:Y4(b.url),nameOrTld:gf(b.url),type:b.resourceType,record:b}}),y=Qoe(f);return eie(y),y}var Cc=v(()=>{d();An();vu();yu();De();YT();At();$n();lr();At();s(Joe,"isXhrCritical");s(Xoe,"addInitiatedRequests");s(oU,"getCriticalGraph");s(im,"linkGraph");s(iU,"buildNetworkSummary");s(Zoe,"areSimilarRequests");s(Qoe,"computeSummaries");s(eie,"computeSelfTimes");s(_o,"computeAdRequestWaterfall")});var sU={};S(sU,{UIStrings:()=>Zr,default:()=>oie});function nie(t){let e=0,n=0;for(let{startTime:r,endTime:a}of t)r>=e?(++n,e=a):e=Math.min(e,a);return n}function aie(t){let e=1/0,n=[];for(let r=0;r<t.length;){let{startTime:a,endTime:o}=t[r];for(a-e>rie&&n.push(a-e),e=o;++r<t.length&&t[r].startTime<e;)e=Math.max(e,t[r].endTime)}return n}var Zr,ko,tie,rie,KT,oie,cU=v(()=>{d();k();Ct();bt();Cc();Zr={title:"Ad request waterfall",failureTitle:"Reduce critical path for ad loading",description:"Consider reducing the number of resources, loading multiple resources simultaneously, or loading resources earlier to improve ad speed. Requests that block ad loading can be found below. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-critical-path).",displayValue:"{serialResources, plural, =1 {1 serial resource} other {# serial resources}}",columnUrl:"Request",columnType:"Type",columnStartTime:"Start",columnEndTime:"End"},ko=w("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-critical-path.js",Zr),tie=[{key:"nameOrTld",itemType:"text",text:ko(Zr.columnType)},{key:"url",itemType:"url",text:ko(Zr.columnUrl)},{key:"startTime",itemType:"ms",text:ko(Zr.columnStartTime),granularity:1},{key:"endTime",itemType:"ms",text:ko(Zr.columnEndTime),granularity:1}];s(nie,"computeDepth");rie=150;s(aie,"computeIdleTimes");KT=class t extends h{static{s(this,"AdRequestCriticalPath")}static get meta(){return{id:"ad-request-critical-path",title:ko(Zr.title),failureTitle:ko(Zr.failureTitle),description:ko(Zr.description),scoreDisplayMode:"informative",requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=(await _o(r,a,n)).filter(p=>p.startTime>0&&p.startTime<p.endTime);if(!o.length)return me.NoAds;let i=nie(o),c=i>3;for(let p of o)delete p.record;let u=aie(o),l=Math.max(...u),m=u.reduce((p,g)=>p+g,0);return{numericValue:i,numericUnit:"unitless",score:c?0:1,displayValue:ko(Zr.displayValue,{serialResources:i}),details:{size:o.length,depth:i,maxIdleTime:l,totalIdleTime:m,...t.makeTableDetails(tie,o)}}}},oie=KT});var sm,cm,uU,lU=v(()=>{d();xi();oo();we();lr();At();sm=class extends dn{static{s(this,"LanternBidRequestTime")}static getEstimateFromSimulation(e,n){let{nodeTimings:r}=e,a=dn.findNetworkTiming(r,Ra).startTime,o=dn.findNetworkTiming(r,Jr).startTime;return a>o?{timeInMs:-1,nodeTimings:r}:{timeInMs:a,nodeTimings:r}}};sm=W(sm);cm=class extends bn{static{s(this,"BidRequestTime")}static async computeSimulatedMetric(e,n){return sm.request(e,n)}static async computeObservedMetric(e){let{networkRecords:n}=e,r=Xr(n),a=Z4(n);return yf(n)<a?{timing:-1}:{timing:(a-r)*1e3}}static async request(e,n){throw Error("Not implemented -- class not decorated")}};cm=W(cm);uU=cm});var dU={};S(dU,{UIStrings:()=>Ac,default:()=>iie});var Ac,Ef,JT,iie,mU=v(()=>{d();lU();k();Ct();bt();Ac={title:"First bid request time",failureTitle:"Reduce time to send the first bid request",description:"This metric measures the elapsed time from the start of page load until the first bid request is made. Delayed bid requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bid-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"},Ef=w("node_modules/lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start.js",Ac),JT=class extends h{static{s(this,"BidRequestFromPageStart")}static get meta(){return{id:"bid-request-from-page-start",title:Ef(Ac.title),failureTitle:Ef(Ac.failureTitle),description:Ef(Ac.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o={trace:r,devtoolsLog:a,settings:n.settings},i=n.options[n.settings.throttlingMethod=="provided"?"provided":"simulate"],{timing:c}=await uU.request(o,n);return c>0?{numericValue:c,numericUnit:"millisecond",score:h.computeLogNormalScore(i,c),displayValue:Ef(Ac.displayValue,{timeInMs:c})}:me.NoBids}},iie=JT});var pU={};S(pU,{UIStrings:()=>Fc,default:()=>sie});var Fc,Tf,XT,sie,fU=v(()=>{d();bf();k();Ct();bt();Fc={title:"First ad request time",failureTitle:"Reduce time to send the first ad request",description:"This metric measures the elapsed time from the start of page load until the first ad request is made. Delayed ad requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"},Tf=w("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start.js",Fc),XT=class extends h{static{s(this,"AdRequestFromPageStart")}static get meta(){return{id:"ad-request-from-page-start",title:Tf(Fc.title),failureTitle:Tf(Fc.failureTitle),description:Tf(Fc.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:6500,median:1e4},provided:{p10:1900,median:3500}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o={trace:r,devtoolsLog:a,settings:n.settings},i=n.options[n.settings.throttlingMethod=="provided"?"provided":"simulate"],{timing:c}=await xc.request(o,n);if(!(c>0)){let u=me.NoAds;return u.runWarnings=[vc.NoAds],u}return{numericValue:c,numericUnit:"millisecond",score:h.computeLogNormalScore(i,c),displayValue:Tf(Fc.displayValue,{timeInMs:c})}}},sie=XT});var gU={};S(gU,{UIStrings:()=>Fi,default:()=>lie});var Fi,um,cie,uie,ZT,lie,hU=v(()=>{d();k();Ct();bt();At();Fi={title:"No ad found at the very top of the viewport",failureTitle:"Move the top ad further down the page",description:"Over 10% of ads are never viewed because users scroll past them before they become viewable. By moving ad slots away from the very top of the viewport, users are more likely to see ads before scrolling away. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-top-of-viewport).",failureDisplayValue:"A scroll of {valueInPx, number} px would hide half of your topmost ad",columnSlot:"Top Slot ID"},um=w("node_modules/lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport.js",Fi),cie=100,uie=[{key:"slot",itemType:"text",text:um(Fi.columnSlot)}],ZT=class t extends h{static{s(this,"AdTopOfViewport")}static get meta(){return{id:"ad-top-of-viewport",title:um(Fi.title),failureTitle:um(Fi.failureTitle),description:um(Fi.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){let n=e.ViewportDimensions,r=e.IFrameElements.filter(Tc).filter(c=>c.clientRect.width*c.clientRect.height>1&&!c.isPositionFixed).map(c=>({midpoint:c.clientRect.top+c.clientRect.height/2,id:c.id}));if(!r.length)return me.NoVisibleSlots;let a=r.reduce((c,u)=>c.midpoint<u.midpoint?c:u),o=a.midpoint<n.innerHeight;if(!o)return me.NoAdsViewport;let i=o&&a.midpoint<cie?0:1;return{score:i,numericValue:a.midpoint,numericUnit:"unitless",displayValue:i?"":um(Fi.failureDisplayValue,{valueInPx:a.midpoint}),details:t.makeTableDetails(uie,i?[]:[{slot:a.id}])}}},lie=ZT});function yU(t,e){let{innerWidth:n,innerHeight:r}=e,{left:a,top:o,right:i,bottom:c}=t;return a<i&&o<c&&a<n&&o<r&&0<i&&0<c}function QT([t,e,n,r]){return{left:t,top:e,width:n,height:r,right:t+n,bottom:e+r}}function vU(t,e){let n=!(t.right<e.left||e.right<t.left),r=!(t.bottom<e.top||e.bottom<t.top);return n&&r}var eS=v(()=>{d();s(yU,"isBoxInViewport");s(QT,"toClientRect");s(vU,"overlaps")});var bU={};S(bU,{UIStrings:()=>Ri,default:()=>mie});var Ri,lm,die,tS,mie,wU=v(()=>{d();Ct();bt();k();eS();At();Ri={title:"Few or no ads loaded outside viewport",failureTitle:"Avoid loading ads until they are nearly on-screen",description:"Too many ads loaded outside the viewport lowers viewability rates and impacts user experience. Consider loading ads below the fold lazily as the user scrolls down. Consider using GPT's [Lazy Loading API](https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_enableLazyLoad). [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ads-in-viewport).",failureDisplayValue:"{hiddenAds, plural, =1 {1 ad} other {# ads}} out of view",columnSlot:"Slots Outside Viewport"},lm=w("node_modules/lighthouse-plugin-publisher-ads/audits/ads-in-viewport.js",Ri),die=[{key:"slot",itemType:"text",text:lm(Ri.columnSlot)}],tS=class t extends h{static{s(this,"AdsInViewport")}static get meta(){return{id:"ads-in-viewport",title:lm(Ri.title),failureTitle:lm(Ri.failureTitle),description:lm(Ri.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){let n=e.ViewportDimensions,r=e.IFrameElements.filter(i=>HT(i)&&i.clientRect.height*i.clientRect.width>1);if(!r.length)return me.NoVisibleSlots;let a=r.filter(i=>!yU(i.clientRect,n)).map(i=>({slot:i.id})).sort((i,c)=>i.slot.localeCompare(c.slot));return{numericValue:(r.length-a.length)/r.length,numericUnit:"unitless",score:a.length>3?0:1,displayValue:a.length?lm(Ri.failureDisplayValue,{hiddenAds:a.length}):"",details:t.makeTableDetails(die,a)}}},mie=tS});function Sf(t,e){let n=0;for(let r of t)e(r)&&n++;return n}function DU(t,e){let n=new Map;for(let r of t){let a=e(r);if(a!=null){let o=n.get(a)||[];o.push(r),n.set(a,o)}}return n}var xf=v(()=>{d();s(Sf,"count");s(DU,"bucket")});var TU={};S(TU,{UIStrings:()=>dm,default:()=>fie});function pie(t){return t.priority=="Low"||$4(t)}var dm,nS,rS,fie,SU=v(()=>{d();xf();k();Wt();De();Ct();bt();At();dm={title:"Ad tag is loaded asynchronously",failureTitle:"Load ad tag asynchronously",description:"Loading the ad tag synchronously blocks content rendering until the tag is fetched and loaded. Consider using the `async` attribute to load gpt.js and/or adsbygoogle.js asynchronously. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/async-ad-tags)."},nS=w("node_modules/lighthouse-plugin-publisher-ads/audits/async-ad-tags.js",dm);s(pie,"isAsync");rS=class extends h{static{s(this,"AsyncAdTags")}static get meta(){return{id:"async-ad-tags",title:nS(dm.title),failureTitle:nS(dm.failureTitle),description:nS(dm.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await $.request(r,n),o=await je.request({URL:e.URL,devtoolsLog:r},n),i=a.filter(l=>Ec(new URL(l.url))).filter(l=>l.frameId===o.frameId);if(!i.length)return me.NoTag;let c=Sf(i,pie)-i.length;return{score:Number(c===0),numericValue:c,numericUnit:"unitless"}}},fie=rS});var CU={};S(CU,{UIStrings:()=>Qr,default:()=>bie});function hie(t){let{record:e}=t,n=e&&e.initiator&&e.initiator.stack;if(n){for(;n.parent;)n=n.parent;return n.callFrames[n.callFrames.length-1]}}function yie(t,e){return e.find(n=>n.name=="FunctionCall"&&n.args.data&&n.args.data.functionName==t.functionName&&n.args.data.scriptId==t.scriptId&&n.args.data.url==t.url&&Math.abs(n.args.data.lineNumber==t.lineNumber)<2&&Math.abs(n.args.data.columnNumber==t.columnNumber)<2)}function xU(t,e){let n={},r=[];for(let a of e)a.name==`${t}EventStart`?n={start:a.ts,end:1/0,eventName:t}:a.name==`${t}EventEnd`&&(n.end=a.ts,r.push(n));return r}function vie(t,e,n){let r=e.find(c=>c.url==t.url),a=e.find(c=>c.url==t.blockedUrl);if(!r||!a)return 0;let o=n.get(r),i=n.get(a);return!o||!i?0:i.startTime-o.endTime}var Qr,Io,gie,aS,bie,AU=v(()=>{d();k();De();Jt();Ur();Ct();bt();Cc();lr();Qr={title:"Ads not blocked by load events",failureTitle:"Avoid waiting on load events",description:"Waiting on load events increases ad latency. To speed up ads, eliminate the following load event handlers. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/blocking-load-events).",displayValue:"{timeInMs, number, seconds} s blocked",columnEvent:"Event Name",columnTime:"Event Time",columnScript:"Script",columnBlockedUrl:"Blocked URL",columnFunctionName:"Function"},Io=w("node_modules/lighthouse-plugin-publisher-ads/audits/blocking-load-events.js",Qr),gie=[{key:"eventName",itemType:"text",text:Io(Qr.columnEvent)},{key:"time",itemType:"ms",text:Io(Qr.columnTime),granularity:1},{key:"url",itemType:"url",text:Io(Qr.columnScript)},{key:"functionName",itemType:"text",text:Io(Qr.columnFunctionName)}];s(hie,"findOriginalCallFrame");s(yie,"findTraceEventOfCallFrame");s(xU,"findEventIntervals");s(vie,"quantifyBlockedTime");aS=class t extends h{static{s(this,"BlockingLoadEvents")}static get meta(){return{id:"blocking-load-events",title:Io(Qr.title),failureTitle:Io(Qr.failureTitle),description:Io(Qr.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=await $.request(a,n),i=await Ye.request(r,n),{timings:c}=await on.request(i,n),{processEvents:u}=i,l=await Dr(r,a,n),m=(await _o(r,a,n)).sort((D,T)=>D.startTime-T.startTime);if(!m.length)return me.NoAdRelatedReq;let p=[...xU("domContentLoaded",u),...xU("load",u)],g=[],f=new Set;for(let D of m){let T=hie(D);if(!T)continue;let A=JSON.stringify(T);if(f.has(A))continue;f.add(A);let R=yie(T,u);if(!R)continue;let F=p.find(M=>M.start<=R.ts&&R.ts<=M.end);if(F){let M=Object.assign({eventName:F.eventName,blockedUrl:D.url,time:c[F.eventName],blockedTime:1/0},T);M.blockedTime=vie(M,o,l),g.push(M)}}let y=g.length>0,b=0;return y&&(b=Math.min(...g.map(D=>D.blockedTime))),{numericValue:g.length,numericUnit:"unitless",score:y?0:1,displayValue:y&&b?Io(Qr.displayValue,{timeInMs:b}):"",details:t.makeTableDetails(gie,g)}}},bie=aS});var FU={};S(FU,{UIStrings:()=>Ia,default:()=>Die});var Ia,_i,wie,oS,Die,RU=v(()=>{d();k();Ct();bt();Cc();At();Ia={title:"No bottleneck requests found",failureTitle:"Avoid bottleneck requests",description:"Speed up, load earlier, parallelize, or eliminate the following requests and their dependencies in order to speed up ad loading. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bottleneck-requests).",displayValue:"{blockedTime, number, seconds} s spent blocked on requests",columnUrl:"Blocking Request",columnInitiatorUrl:"Initiator Request",columnStartTime:"Start",columnSelfTime:"Exclusive Time",columnDuration:"Total Time"},_i=w("node_modules/lighthouse-plugin-publisher-ads/audits/bottleneck-requests.js",Ia),wie=[{key:"url",itemType:"url",text:_i(Ia.columnUrl)},{key:"selfTime",itemType:"ms",text:_i(Ia.columnSelfTime),granularity:1},{key:"duration",itemType:"ms",text:_i(Ia.columnDuration),granularity:1}],oS=class t extends h{static{s(this,"BottleneckRequests")}static get meta(){return{id:"bottleneck-requests",title:_i(Ia.title),failureTitle:_i(Ia.failureTitle),description:_i(Ia.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o=(await _o(r,a,n)).filter(f=>f.startTime>0);if(!o.length)return me.NoAdRelatedReq;let i=250,c=1e3,u=s(f=>!em(Nn(f.url))&&(f.selfTime>i||f.duration>c),"isBottleneck"),l=s(f=>f.selfTime*3+f.duration,"cost"),m=o.filter(u).sort((f,y)=>l(y)-l(f)).slice(0,5),p=m.reduce((f,y)=>f+y.selfTime,0)/1e3,g=p*1e3>i*4;for(let f of m)delete f.record;return{numericValue:m.length,numericUnit:"unitless",score:g?0:1,displayValue:g?_i(Ia.displayValue,{blockedTime:p}):"",details:t.makeTableDetails(wie,m)}}},Die=oS});var _U={};S(_U,{UIStrings:()=>Mo,default:()=>Sie});var Mo,Rc,Eie,Tie,iS,Sie,kU=v(()=>{d();k();Wt();De();St();Ct();bt();At();Mo={title:"No duplicate tags found",failureTitle:"Load tags only once",description:"Loading a tag more than once in the same page is redundant and adds overhead without benefit. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/duplicate-tags).",failureDisplayValue:"{duplicateTags, plural, =1 {1 duplicate tag} other {# duplicate tags}}",columnScript:"Script",columnNumReqs:"Duplicate Requests",columnFrameId:"Frame ID"},Rc=w("node_modules/lighthouse-plugin-publisher-ads/audits/duplicate-tags.js",Mo),Eie=["googletagservices.com/tag/js/gpt.js","securepubads.g.doubleclick.net/tag/js/gpt.js","pagead2.googlesyndication.com/pagead/js/adsbygoogle.js","pagead2.googlesyndication.com/pagead/js/show_ads.js","cdn.ampproject.org/v0/amp-ad-0.1.js"],Tie=[{key:"script",itemType:"url",text:Rc(Mo.columnScript)},{key:"numReqs",itemType:"text",text:Rc(Mo.columnNumReqs)}],iS=class t extends h{static{s(this,"DuplicateTags")}static get meta(){return{id:"duplicate-tags",title:Rc(Mo.title),failureTitle:Rc(Mo.failureTitle),description:Rc(Mo.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await $.request(r,n),o=await je.request({URL:e.URL,devtoolsLog:r},n),i=a.filter(l=>l.frameId===o.frameId).filter(l=>V4(l.url,Eie)).filter(l=>l.resourceType===Y.TYPES.Script);if(!i.length)return me.NoTags;let c=new Map;for(let l of i){let m=new URL(l.url).pathname,p=c.get(m)||0;c.set(m,p+1)}let u=[];for(let[l,m]of c)m>1&&u.push({script:l,numReqs:m});return{numericValue:u.length,numericUnit:"unitless",score:u.length?0:1,details:t.makeTableDetails(Tie,u),displayValue:u.length?Rc(Mo.failureDisplayValue,{duplicateTags:u.length}):""}}},Sie=iS});var mm,pm,IU,MU=v(()=>{d();xi();oo();we();lr();At();mm=class extends dn{static{s(this,"LanternAdRenderTime")}static getEstimateFromSimulation(e,n){let{nodeTimings:r}=e;return{timeInMs:dn.findNetworkTiming(r,o=>!!o.url&&wc(new URL(o.url))).startTime,nodeTimings:r}}};mm=W(mm);pm=class extends bn{static{s(this,"AdRenderTime")}static async computeSimulatedMetric(e,n){return mm.request(e,n)}static async computeObservedMetric(e,n){let{networkRecords:r}=e,a=Xr(r),i=(Q4(r)-a)*1e3;return Promise.resolve({timing:i})}static async request(e,n){throw Error("Not implemented -- class not decorated")}};pm=W(pm);IU=pm});var NU={};S(NU,{UIStrings:()=>_c,default:()=>xie});var _c,Cf,sS,xie,LU=v(()=>{d();MU();k();Ct();bt();_c={title:"Latency of first ad render",failureTitle:"Reduce time to render first ad",description:"This metric measures the time for the first ad iframe to render from page navigation. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/first-ad-render).",displayValue:"{timeInMs, number, seconds} s"},Cf=w("node_modules/lighthouse-plugin-publisher-ads/audits/first-ad-render.js",_c),sS=class extends h{static{s(this,"FirstAdRender")}static get meta(){return{id:"first-ad-render",title:Cf(_c.title),failureTitle:Cf(_c.failureTitle),description:Cf(_c.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:12900,median:22e3},provided:{p10:2750,median:3700}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],o={devtoolsLog:e.devtoolsLogs[h.DEFAULT_PASS],trace:r,settings:n.settings},{timing:i}=await IU.request(o,n);if(!(i>0)){let u=me.NoAdRendered;return u.runWarnings=[vc.NoAdRendered],u}let c=n.options[n.settings.throttlingMethod=="provided"?"provided":"simulate"];return{numericValue:i,numericUnit:"millisecond",score:h.computeLogNormalScore(c,i),displayValue:Cf(_c.displayValue,{timeInMs:i})}}},xie=sS});var PU={};S(PU,{UIStrings:()=>kc,default:()=>Cie});var kc,Af,cS,Cie,OU=v(()=>{d();k();De();Ct();bt();At();kc={title:"Ad slots effectively use horizontal space",failureTitle:"Increase the width of ad slots",description:"Ad slots that utilize most of the page width generally experience increased click-through rate over smaller ad sizes. We recommend leaving no more than 25% of the viewport width unutilized on mobile devices.",failureDisplayValue:"{percentUnused, number, percent} of viewport width is underutilized"},Af=w("node_modules/lighthouse-plugin-publisher-ads/audits/full-width-slots.js",kc),cS=class extends h{static{s(this,"FullWidthSlots")}static get meta(){return{id:"full-width-slots",title:Af(kc.title),failureTitle:Af(kc.failureTitle),description:Af(kc.description),requiredArtifacts:["ViewportDimensions","devtoolsLogs"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await $.request(r,n),i=e.ViewportDimensions.innerWidth,c=a.filter(Jr).map(y=>new URL(y.url));if(!c.length)return me.NoAds;let m=c.map(y=>y.searchParams.get("prev_iu_szs")||y.searchParams.get("sz")).join("|").split(/[|,]/).map(y=>parseInt(y.split("x")[0])).filter(y=>y<=i&&y>1);if(!m.length)return me.NoValidAdWidths;let g=1-Math.max(...m)/i,f=g>.25?0:1;return{score:f,numericValue:g,numericUnit:"unitless",displayValue:f?"":Af(kc.failureDisplayValue,{percentUnused:g})}}},Cie=cS});var UU={};S(UU,{UIStrings:()=>No,default:()=>Rie});var Aie,No,Fie,uS,Rie,BU=v(()=>{d();De();YT();Ct();bt();Cc();lr();At();Aie="gpt-bids-parallel",No={title:"GPT and bids loaded in parallel",failureTitle:"Load GPT and bids in parallel",description:"To optimize ad loading, bid requests should not wait on GPT to load. This issue can often be fixed by making sure that bid requests do not wait on `googletag.pubadsReady` or `googletag.cmd.push`. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-bids-parallel).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},Fie=[{key:"bidder",itemType:"text",text:No.columnBidder},{key:"url",itemType:"url",text:No.columnUrl},{key:"startTime",itemType:"ms",text:No.columnStartTime},{key:"duration",itemType:"ms",text:No.columnDuration}],uS=class t extends h{static{s(this,"GptBidsInParallel")}static get meta(){return{id:Aie,title:No.title,failureTitle:No.failureTitle,description:No.description,requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=e.traces[h.DEFAULT_PASS],o=await $.request(r,n),i=o.find(g=>Kr(g.url));if(!i)return me.NoGpt;let c=o.filter(Ra).filter(g=>g.frameId==i.frameId);if(!c.length)return me.NoBids;let u=await Dr(a,r,n),l=[],m=new Set;for(let g of c)if(oU(o,a.traceEvents,g).has(i)){let{startTime:f,endTime:y}=u.get(g)||g,b=om(Fo(g.url));if(m.has(b))continue;m.add(b),l.push({bidder:b,url:g.url,startTime:f,duration:y-f})}let p=l.length>0;return{numericValue:l.length,numericUnit:"unitless",score:p?0:1,details:p?t.makeTableDetails(Fie,l):void 0}}},Rie=uS});var jU={};S(jU,{UIStrings:()=>fm,default:()=>_ie});var fm,lS,dS,_ie,qU=v(()=>{d();k();De();Ct();bt();At();fm={title:"GPT tag is loaded from an official source",failureTitle:"Load GPT from an official source",description:"Load GPT from 'securepubads.g.doubleclick.net' for standard integrations or from 'pagead2.googlesyndication.com' for limited ads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-gpt-from-official-source)."},lS=w("node_modules/lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source.js",fm),dS=class extends h{static{s(this,"LoadsGptFromOfficalSource")}static get meta(){return{id:"loads-gpt-from-official-source",title:lS(fm.title),failureTitle:lS(fm.failureTitle),description:lS(fm.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],o=(await $.request(r,n)).map(c=>new URL(c.url)).find(Dc);if(!o)return me.NoGpt;let i=["securepubads.g.doubleclick.net","pagead2.googlesyndication.com"].includes(o.host);return{score:Number(i),numericValue:+!i,numericUnit:"unitless"}}},_ie=dS});var zU={};S(zU,{UIStrings:()=>gm,default:()=>kie});var gm,mS,pS,kie,HU=v(()=>{d();k();De();Ct();bt();At();gm={title:"Ad tag is loaded over HTTPS",failureTitle:"Load ad tag over HTTPS",description:'For privacy and security, always load GPT/AdSense over HTTPS. Insecure pages should explicitly request the ad script securely. GPT Example: `<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js">` AdSense Example: `<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">`. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-ad-tag-over-https).'},mS=w("node_modules/lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https.js",gm),pS=class extends h{static{s(this,"LoadsAdTagOverHttps")}static get meta(){return{id:"loads-ad-tag-over-https",title:mS(gm.title),failureTitle:mS(gm.failureTitle),description:mS(gm.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=await $.request(r,n);if(!a.find(l=>l.statusCode==200))return me.NoRecords;let i=a.filter(l=>Ec(new URL(l.url))),c=i.filter(l=>l.isSecure),u={type:"debugdata",numAdTagHttpReqs:i.length-c.length,numAdTagHttpsReqs:c.length};if(!i.length){let l=me.NoTag;return l.details=u,l}return{numericValue:u.numAdTagHttpReqs,score:u.numAdTagHttpReqs?0:1,details:u}}},kie=pS});var GU={};S(GU,{UIStrings:()=>Lo,default:()=>Oie});function Lie(t){if(t.initiator.type!=="script")return!1;let e=kt.getNetworkInitiators(t);return!(e.length!==1||e[0]!==t.documentURL)}async function Pie(t,e){let n=t.devtoolsLogs[h.DEFAULT_PASS],r=t.traces[h.DEFAULT_PASS],a=[],o=await _o(r,n,e);for(let{record:i}of o)!i||i.resourceType!=="Script"||(Lie(i)||Nie.find(c=>i.url.match(c)))&&a.push(i);return a}var Iie,Lo,Ic,Mie,Nie,fS,Oie,WU=v(()=>{d();xf();k();$n();Ct();bt();Cc();lr();Iie=400,Lo={title:"Ad scripts are loaded statically",failureTitle:"Load ad scripts statically",description:"Load the following scripts directly with `<script async src=...>` instead of injecting scripts with JavaScript. Doing so allows the browser to preload scripts sooner. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/script-injected-tags).",failureDisplayValue:"Load {tags, plural, =1 {1 script} other {# scripts}} statically",columnUrl:"Script",columnLoadTime:"Load Time"},Ic=w("node_modules/lighthouse-plugin-publisher-ads/audits/script-injected-tags.js",Lo),Mie=[{key:"url",itemType:"url",text:Ic(Lo.columnUrl)},{key:"loadTime",itemType:"ms",granularity:1,text:Ic(Lo.columnLoadTime)}],Nie=[/amazon-adsystem\.com\/aax2\/apstag.js/,/js-sec\.indexww\.com\/ht\/p\/.*\.js/,/pubads\.g\.doubleclick\.net\/tag\/js\/gpt\.js/,/static\.criteo\.net\/js\/.*\/publishertag\.js/,/www\.googletagservices\.com\/tag\/js\/gpt\.js/,/pagead2\.googlesyndication\.com\/pagead\/js\/adsbygoogle\.js/,/cdn\.ampproject\.org\/v0\/amp-ad-\d+\.\d+\.js/];s(Lie,"initiatedByInlineScript");s(Pie,"findStaticallyLoadableTags");fS=class t extends h{static{s(this,"StaticAdTags")}static get meta(){return{id:"script-injected-tags",title:Ic(Lo.title),failureTitle:Ic(Lo.failureTitle),description:Ic(Lo.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,n){let r=await Pie(e,n);if(!r.length)return me.NoTag;let a=new Set,o=[],i=e.devtoolsLogs[h.DEFAULT_PASS],c=e.traces[h.DEFAULT_PASS],u=await eU(c,i,n);for(let m of r){if(a.has(m.url))continue;a.add(m.url);let p=r.filter(f=>f.url===m.url);if(Sf(p,f=>f.initiator.type==="parser"&&!f.isLinkPreload)===0){let f=u.get(m.url)||0;if(f<Iie)continue;o.push({url:m.url,loadTime:f})}}o.sort((m,p)=>m.loadTime-p.loadTime);let l=o.length>0;return{displayValue:l?Ic(Lo.failureDisplayValue,{tags:o.length}):"",score:+!l,numericValue:o.length,numericUnit:"unitless",details:t.makeTableDetails(Mie,o)}}},Oie=fS});var VU={};S(VU,{UIStrings:()=>Ma,default:()=>Gie});function jie(t,e,n){let r=[];for(let a of t){let o=n.get(a);o&&r.push(Object.assign({},o,{url:a.url,type:e}))}return r}function qie(t){return Ti(new URL(t.url))?Mc.AD:Fo(t.url)?Mc.BID:Mc.UNKNOWN}function zie(t){return(t.resourceSize==null||t.resourceSize>0)&&t.resourceType!="Image"&&t.endTime-t.startTime>=Uie&&!pf(t)}function Hie(t){let e=new URL(t);return e.search="",e.toString()}var Ma,ki,Uie,Bie,Mc,gS,Gie,$U=v(()=>{d();bf();k();Wt();De();Ct();bt();xf();lr();BT();At();Ma={title:"Header bidding is parallelized",failureTitle:"Parallelize bid requests",description:"Send header bidding requests simultaneously, rather than serially, to retrieve bids more quickly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/serial-header-bidding).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},ki=w("node_modules/lighthouse-plugin-publisher-ads/audits/serial-header-bidding.js",Ma),Uie=.05,Bie=[{key:"bidder",itemType:"text",text:ki(Ma.columnBidder)},{key:"url",itemType:"url",text:ki(Ma.columnUrl)},{key:"startTime",itemType:"ms",text:ki(Ma.columnStartTime)},{key:"duration",itemType:"ms",text:ki(Ma.columnDuration)}],Mc={AD:"ad",BID:"bid",UNKNOWN:"unknown"};s(jie,"constructRecords");s(qie,"checkRecordType");s(zie,"isPossibleBid");s(Hie,"clearQueryString");gS=class t extends h{static{s(this,"SerialHeaderBidding")}static get meta(){return{id:"serial-header-bidding",title:ki(Ma.title),failureTitle:ki(Ma.failureTitle),description:ki(Ma.description),requiredArtifacts:["devtoolsLogs","traces","URL"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS],a=e.traces[h.DEFAULT_PASS],o=await $.request(r,n);if(!o.length)return me.NoRecords;let i=await je.request({URL:e.URL,devtoolsLog:r},n),c=o.filter(zie).filter(D=>D.frameId==i.frameId),u=DU(c,qie);if(!u.has(Mc.BID))return me.NoBids;let l={trace:a,devtoolsLog:r,settings:n.settings},{timing:m}=await xc.request(l,n),p=await Dr(a,r,n),g=jie(u.get(Mc.BID)||[],Mc.BID,p),f=[],y;for(let D of g)m>0&&D.endTime>m||(D.bidder=Fo(D.url),D.url=Hie(D.url),y&&D.startTime>=y.endTime&&(f.push(y),f.push(D)),(!y||D.endTime<y.endTime||D.startTime>=y.endTime)&&(y=D));f=Array.from(new Set(f));let b=f.length>1;return{numericValue:Number(b),numericUnit:"unitless",score:b?0:1,details:b?t.makeTableDetails(Bie,f):void 0}}},Gie=gS});var hm,ym,YU,KU=v(()=>{d();xi();oo();we();lr();At();hm=class extends dn{static{s(this,"LanternTagLoadTime")}static getEstimateFromSimulation(e,n){let{nodeTimings:r}=e;return{timeInMs:dn.findNetworkTiming(r,o=>!!o.url&&Sc(new URL(o.url))).endTime,nodeTimings:r}}};hm=W(hm);ym=class extends bn{static{s(this,"TagLoadTime")}static async computeSimulatedMetric(e,n){return hm.request(e,n)}static async computeObservedMetric(e,n){let{networkRecords:r}=e,a=Xr(r),i=(X4(r)-a)*1e3;return Promise.resolve({timing:i})}static async request(e,n){throw Error("Not implemented -- class not decorated")}};ym=W(ym);YU=ym});var JU={};S(JU,{UIStrings:()=>Nc,default:()=>Wie});var Nc,Ff,hS,Wie,XU=v(()=>{d();KU();k();Ct();bt();Nc={title:"Tag load time",failureTitle:"Reduce tag load time",description:"This metric measures the time for the ad tag's implementation script (pubads_impl.js for GPT; adsbygoogle.js for AdSense) to load after the page loads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/tag-load-time).",displayValue:"{timeInMs, number, seconds} s"},Ff=w("node_modules/lighthouse-plugin-publisher-ads/audits/tag-load-time.js",Nc),hS=class extends h{static{s(this,"TagLoadTime")}static get meta(){return{id:"tag-load-time",title:Ff(Nc.title),failureTitle:Ff(Nc.failureTitle),description:Ff(Nc.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=e.devtoolsLogs[h.DEFAULT_PASS],o={trace:r,devtoolsLog:a,settings:n.settings},i=n.options[n.settings.throttlingMethod=="provided"?"provided":"simulate"],{timing:c}=await YU.request(o,n);if(!(c>0)){let u=me.NoTag;return u.runWarnings=[vc.NoTag],u}return{numericValue:c,numericUnit:"millisecond",score:h.computeLogNormalScore(i,c),displayValue:Ff(Nc.displayValue,{timeInMs:c})}}},Wie=hS});var ZU={};S(ZU,{UIStrings:()=>Lc,default:()=>$ie});function Vie(t,e){let n=new Set([...t.map(a=>a.clientRect.left),...t.map(a=>a.clientRect.right)].map(a=>Math.min(Math.max(1,a),e.innerWidth-1)));t=t.sort((a,o)=>a.clientRect.top!==o.clientRect.top?a.clientRect.top-o.clientRect.top:a.clientRect.bottom-o.clientRect.bottom);let r=0;for(let a of n){let o=0,i=0;for(let c of t){if(a<c.clientRect.left||a>c.clientRect.right)continue;if(c.isPositionFixed){o+=c.clientRect.height;continue}let u=c.clientRect.bottom-Math.max(i,c.clientRect.top);u>0&&(o+=u),i=Math.max(i,c.clientRect.bottom)}r=Math.max(r,o)}return r}var Lc,Rf,yS,$ie,QU=v(()=>{d();k();Ct();bt();At();Lc={title:"Ads to page-height ratio is within recommended range",failureTitle:"Reduce ads to page-height ratio",description:"The ads to page-height ratio can impact user experience and ultimately user retention. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/viewport-ad-density).",displayValue:"{adDensity, number, percent} ads to page-height ratio"},Rf=w("node_modules/lighthouse-plugin-publisher-ads/audits/viewport-ad-density.js",Lc);s(Vie,"computeAdLength");yS=class extends h{static{s(this,"ViewportAdDensity")}static get meta(){return{id:"viewport-ad-density",title:Rf(Lc.title),failureTitle:Rf(Lc.failureTitle),description:Rf(Lc.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){let n=e.ViewportDimensions,r=e.IFrameElements.filter(l=>Tc(l)&&l.clientRect.width*l.clientRect.height>1);if(!r.length)return me.NoVisibleSlots;if(n.innerHeight<=0)throw new Error(O4.ViewportAreaZero);let a=Vie(r,n),i=Math.max(...r.map(l=>l.clientRect.top+l.clientRect.height/2))+n.innerHeight,c=Math.min(1,a/i);return{score:c>.3?0:1,numericValue:c,numericUnit:"unitless",displayValue:Rf(Lc.displayValue,{adDensity:c})}}},$ie=yS});var eB={};S(eB,{UIStrings:()=>vm,default:()=>Yie});var vm,vS,bS,Yie,tB=v(()=>{d();k();Ct();bt();lr();At();eS();vm={title:"Cumulative ad shift",failureTitle:"Reduce ad-related layout shift",description:"Measures layout shifts that were caused by ads or happened near ads. Reducing cumulative ad-related layout shift will improve user experience. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/cumulative-ad-shift)."},vS=w("node_modules/lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift.js",vm),bS=class extends h{static{s(this,"CumulativeAdShift")}static get meta(){return{id:"cumulative-ad-shift",title:vS(vm.title),failureTitle:vS(vm.failureTitle),description:vS(vm.description),scoreDisplayMode:h.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","IFrameElements"]}}static get defaultOptions(){return{p10:.05,median:.25}}static isAdExpansion(e,n){if(!e.args||!e.args.data)return!1;for(let r of e.args.data.impacted_nodes||[]){let a=QT(r.old_rect||[]),o=QT(r.new_rect||[]);if(!(a.top>o.top||a.height!==o.height))for(let i of n){let c=i.clientRect;if((a.top>=c.top||o.top>=c.bottom)&&vU(a,c))return!0}}return!1}static isAttributableToTask(e,n){if(!e.args||!e.args.data)return!1;let r=50*1e3;return!!n.find(o=>o.ts<e.ts&&e.ts-o.ts<r)}static compute(e,n,r,a){let o=0,i=0,c=0,u=0,l=0,m=0;for(let p of e)!p.args||!p.args.data||!p.args.data.is_main_frame||(o+=p.args.data.score,i++,(this.isAdExpansion(p,r)||this.isAttributableToTask(p,n))&&(c+=p.args.data.score,u++,p.ts<a&&(l+=p.args.data.score,m++)));return{cumulativeShift:o,numShifts:i,cumulativeAdShift:c,numAdShifts:u,cumulativePreImplTagAdShift:l,numPreImplTagAdShifts:m}}static getLayoutShiftEventsByWindow(e){let a=0,o=[],i=0,c=[];for(let u of e){if(u.name!=="LayoutShift"||!u.args||!u.args.data)continue;if(c.length){let m=c[0],p=c[c.length-1];(p.ts-m.ts>5e6||u.ts-p.ts>1e6)&&(i>a&&(o=c,a=i),c=[],i=0)}c.push(u);let l=u.args.data;i+=l.weighted_score_delta||l.score||0}return o.length||(o=c),o}static async audit(e,n){let r=e.traces[h.DEFAULT_PASS],a=this.getLayoutShiftEventsByWindow(r.traceEvents);if(!a.length)return me.NoLayoutShifts;let o=r.traceEvents.filter(m=>Si(vf(m)||"")),i=o.find(m=>Sc(vf(m)||""))||{ts:1/0},c=e.IFrameElements.filter(Tc),u=this.compute(a,o,c,i.ts),l=u.cumulativeAdShift;return!c.length&&!l?me.NoAdRendered:{numericValue:l,numericUnit:"unitless",score:h.computeLogNormalScore({p10:n.options.p10,median:n.options.median},l),displayValue:l.toLocaleString(n.settings.locale),details:u}}},Yie=bS});var nB={};S(nB,{UIStrings:()=>Oc,default:()=>Kie});var Oc,Pc,wS,Kie,rB=v(()=>{d();k();De();Ct();bt();At();Oc={title:"Deprecated GPT API Usage",failureTitle:"Avoid deprecated GPT APIs",description:"Deprecated GPT API methods should be avoided to ensure your page is tagged correctly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/deprecated-gpt-api-usage).",displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},Pc=w("node_modules/lighthouse-plugin-publisher-ads/audits/deprecated-api-usage.js",Oc),wS=class extends h{static{s(this,"DeprecatedApiUsage")}static get meta(){return{id:"deprecated-gpt-api-usage",title:Pc(Oc.title),failureTitle:Pc(Oc.failureTitle),description:Pc(Oc.description),scoreDisplayMode:"informative",requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS];if(!(await $.request(r,n)).find(m=>Kr(m.url)))return me.NoGpt;let i=e.ConsoleMessages.filter(m=>m.level==="warning"||m.level==="error").filter(m=>m.url&&Ao(m.url)).filter(m=>m.text.toLowerCase().includes("deprecated")||m.text.toLowerCase().includes("discouraged")).map(m=>({source:m.source,description:m.text,url:m.url,timestamp:m.timestamp})).sort((m,p)=>(m.timestamp||0)-(p.timestamp||0)),c=[{key:"url",itemType:"url",text:Pc(x.columnURL)},{key:"description",itemType:"code",text:Pc(x.columnDescription)}],u=h.makeTableDetails(c,i),l=i.length;return{score:+(l===0),details:u,displayValue:Pc(Oc.displayValue,{numErrors:l})}}},Kie=wS});var aB={};S(aB,{UIStrings:()=>Bc,default:()=>Jie});var Bc,Uc,DS,Jie,oB=v(()=>{d();k();De();Ct();bt();At();Bc={title:"GPT Errors",failureTitle:"Fix GPT errors",description:"Fix GPT errors to ensure your page is tagged as intended. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-errors-overall).",displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},Uc=w("node_modules/lighthouse-plugin-publisher-ads/audits/gpt-errors-overall.js",Bc),DS=class extends h{static{s(this,"GptErrorsOverall")}static get meta(){return{id:"gpt-errors-overall",title:Uc(Bc.title),failureTitle:Uc(Bc.failureTitle),description:Uc(Bc.description),scoreDisplayMode:"informative",requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,n){let r=e.devtoolsLogs[h.DEFAULT_PASS];if(!(await $.request(r,n)).find(m=>Kr(m.url)))return me.NoGpt;let i=e.ConsoleMessages.filter(m=>m.level==="error"||m.level==="warning").filter(m=>m.url&&Ao(m.url)).filter(m=>!m.text.toLowerCase().includes("deprecated")&&!m.text.toLowerCase().includes("discouraged")).map(m=>({source:m.source,description:m.text,url:m.url,timestamp:m.timestamp})).sort((m,p)=>(m.timestamp||0)-(p.timestamp||0)),c=[{key:"url",itemType:"url",text:Uc(x.columnURL)},{key:"description",itemType:"code",text:Uc(x.columnDescription)}],u=h.makeTableDetails(c,i),l=i.length;return{score:+(l===0),details:u,displayValue:Uc(Bc.displayValue,{numErrors:l})}}},Jie=DS});var iB={};S(iB,{UIStrings:()=>Po,default:()=>Zie});var Po,jc,Xie,ES,Zie,sB=v(()=>{d();k();WT();De();Ct();bt();wf();At();Po={title:"Total ad JS blocking time",failureTitle:"Reduce ad JS blocking time",description:"Ad-related scripts are blocking the main thread. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/total-ad-blocking-time).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",columnName:"Name",columnBlockingTime:"Blocking Time"},jc=w("node_modules/lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time.js",Po),Xie=[{key:"name",itemType:"text",text:jc(Po.columnName)},{key:"blockingTime",itemType:"ms",text:jc(Po.columnBlockingTime),granularity:1}],ES=class t extends h{static{s(this,"TotalAdBlockingTime")}static get meta(){return{id:"total-ad-blocking-time",title:jc(Po.title),failureTitle:jc(Po.failureTitle),description:jc(Po.description),requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{simulate:{p10:290,median:600},provided:{p10:150,median:350}}}static async audit(e,n){let a=e.traces[h.DEFAULT_PASS],o=e.devtoolsLogs[h.DEFAULT_PASS];if(!(await $.request(o,n)).find(f=>Si(f.url)))return me.NoAdRelatedReq;let c={trace:a,devtoolsLog:o,settings:n.settings},u=[];try{u=await Df.request(c,n)}catch{return me.InvalidTiming}let l=0,m=new Map;for(let f of u){let y=Ro(f);if(!y||!Si(y)||f.parent)continue;let b=f.duration-50;l+=b;let D=gf(y),T=m.get(D)||0;m.set(D,T+b)}let p=[];for(let[f,y]of m.entries())p.push({name:f,blockingTime:y});p.sort((f,y)=>y.blockingTime-f.blockingTime);let g=n.options[n.settings.throttlingMethod]||n.options.provided;return{score:h.computeLogNormalScore(g,l),numericValue:l,numericUnit:"millisecond",displayValue:jc(Po.failureDisplayValue,{timeInMs:l}),details:t.makeTableDetails(Xie,p)}}},Zie=ES});var cB={};S(cB,{default:()=>Qie});var Qie,uB=v(()=>{d();Qie={audits:[{path:"lighthouse-plugin-soft-navigation/audits/soft-nav-fcp"},{path:"lighthouse-plugin-soft-navigation/audits/soft-nav-lcp"}],groups:{metrics:{title:"Metrics associated with a soft navigation"}},category:{title:"Soft Navigation",supportedModes:["timespan"],auditRefs:[{id:"soft-nav-fcp",weight:1,group:"metrics"},{id:"soft-nav-lcp",weight:1,group:"metrics"}]}}});function _f(t){let e,n,r,a;for(let c of t)switch(c.name){case"SoftNavigationHeuristics::UserInitiatedClick":n||(e=c);break;case"SoftNavigationHeuristics_SoftNavigationDetected":if(n)throw new Error("Multiple soft navigations detected");n=c;break;case"largestContentfulPaint::Candidate":e&&(r=c);break;case"firstContentfulPaint":e&&(a=c);break}if(!e)return{};let o=e.ts,i=s(c=>{if(c)return(c.ts-o)/1e3},"getTiming");return{lcpTiming:i(r),fcpTiming:i(a)}}var TS=v(()=>{d();s(_f,"computeMetricTimings")});var lB={};S(lB,{default:()=>ese});var SS,ese,dB=v(()=>{d();bt();Jt();TS();SS=class extends h{static{s(this,"SoftNavFCP")}static get meta(){return{id:"soft-nav-fcp",title:"Soft Navigation First Contentful Paint",description:"First Contentful Paint of a soft navigation.",scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["Trace"]}}static async audit(e,n){let r=e.Trace,a=await Ye.request(r,n),{fcpTiming:o}=_f(a.mainThreadEvents);return o?{numericValue:o,numericUnit:"millisecond",displayValue:`${o} ms`,score:h.computeLogNormalScore({p10:1800,median:3e3},o)}:{notApplicable:!0,score:1}}},ese=SS});var mB={};S(mB,{default:()=>tse});var xS,tse,pB=v(()=>{d();bt();Jt();TS();xS=class extends h{static{s(this,"SoftNavLCP")}static get meta(){return{id:"soft-nav-lcp",title:"Soft Navigation Largest Contentful Paint",description:"Largest Contentful Paint of a soft navigation.",scoreDisplayMode:h.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["Trace"]}}static async audit(e,n){let r=e.Trace,a=await Ye.request(r,n),{lcpTiming:o}=_f(a.mainThreadEvents);return o?{numericValue:o,numericUnit:"millisecond",displayValue:`${o} ms`,score:h.computeLogNormalScore({p10:2500,median:4e3},o)}:{notApplicable:!0,score:1}}},tse=xS});function CS(){if(globalThis.isDevtools||globalThis.isLightrider)return!0;try{return qc.resolve("lighthouse-logger"),!1}catch{return!0}}function yB(t,e,n=!1){if(typeof t>"u"||t===null)return e;if(typeof e>"u")return t;if(Array.isArray(e)){if(n)return e;if(!Array.isArray(t))throw new TypeError(`Expected array but got ${typeof t}`);let r=t.slice();return e.forEach(a=>{r.some(o=>(0,hB.default)(o,a))||r.push(a)}),r}else if(typeof e=="object"){if(typeof t!="object")throw new TypeError(`Expected object but got ${typeof t}`);if(Array.isArray(t))throw new TypeError("Expected object but got Array");return Object.keys(e).forEach(r=>{let a=n||r==="settings"&&typeof t[r]=="object";t[r]=yB(t[r],e[r],a)}),t}return e}function vB(t,e,n){let r=new Map,a=t||[];for(let o=0;o<a.length;o++){let i=a[o];r.set(n(i),{index:o,item:i})}for(let o of e||[]){let i=r.get(n(o));if(i){let c=i.item,u=typeof o=="object"&&typeof c=="object"?Ii(c,o,!0):o;a[i.index]=u}else a.push(o)}return a}function rse(t){if(typeof t=="string")return{path:t};if("implementation"in t||"instance"in t)return t;if("path"in t){if(typeof t.path!="string")throw new Error("Invalid Gatherer type "+JSON.stringify(t));return t}else{if(typeof t=="function")return{implementation:t};if(t&&typeof t.getArtifact=="function")return{instance:t};throw new Error("Invalid Gatherer type "+JSON.stringify(t))}}function ase(t){if(typeof t=="string")return{path:t,options:{}};if("implementation"in t&&typeof t.implementation.audit=="function")return t;if("path"in t&&typeof t.path=="string")return t;if("audit"in t&&typeof t.audit=="function")return{implementation:t,options:{}};throw new Error("Invalid Audit type "+JSON.stringify(t))}async function AS(t){Ot.isAbsolute(t)&&(t=Wo.pathToFileURL(t).href);let e;if(fB.has(t)?e=await fB.get(t):t.match(/\.(js|mjs|cjs)$/)?e=await import(t):(t+=".js",e=await import(t)),e.default)return e.default;let n=new Set(["meta"]),r=Object.keys(e).filter(a=>e[a]&&e[a]instanceof Object?Object.getOwnPropertyNames(e[a]).some(o=>n.has(o)):!1);if(r.length===1)return r[0];throw r.length>1?new Error(`module '${t}' has too many possible exports`):new Error(`module '${t}' missing default export`)}async function ose(t,e,n){let r=e.find(i=>i===`${t}.js`),a=`../gather/gatherers/${t}`;r||(a=FS(t,n,"gatherer"));let o=await AS(a);return{instance:new o,implementation:o,path:t}}function ise(t,e,n){let r=`${t}.js`,a=e.find(i=>i===r),o=`../audits/${t}`;if(!a)if(CS())o=t;else{let i=FS(t,n,"audit");CS()?o=Ot.relative("",i):o=i}return AS(o)}function sse(t={}){let e={};for(let n of Object.keys(t))n in Qn&&(e[n]=t[n]);return e}function bB(t={},e=void 0){let n=Zm(e?.locale||t.locale),{defaultSettings:r}=Ir,a=Ii(RS(r),t,!0),o=Ii(a,sse(e),!0);return o.budgets&&(o.budgets=Mr.initializeBudget(o.budgets)),o.locale=n,o.emulatedUserAgent===!0&&(o.emulatedUserAgent=Wa[o.formFactor]),yh(o),o}async function wB(t,e,n){let r=t.plugins||[],a=n?.plugins||[],o=new Set([...r,...a]);for(let i of o){q_(t,i);let c=CS()?i:FS(i,e,"plugin"),u=await AS(c),l=ek.parsePlugin(u,i);t=Ii(t,l)}return t}async function DB(t,e,n){let r=rse(t);if(r.instance)return{instance:r.instance,implementation:r.implementation,path:r.path};if(r.implementation){let a=r.implementation;return{instance:new a,implementation:r.implementation,path:r.path}}else if(r.path){let a=r.path;return ose(a,e,n)}else throw new Error("Invalid expanded Gatherer: "+JSON.stringify(r))}async function EB(t,e){if(!t)return null;let n=cn.getAuditList(),r=t.map(async i=>{let c=ase(i),u;return"implementation"in c?u=c.implementation:u=await ise(c.path,n,e),{implementation:u,path:c.path,options:c.options||{}}}),a=await Promise.all(r),o=nse(a);return o.forEach(i=>hh(i)),o}function FS(t,e,n){try{return qc.resolve(t)}catch{}try{return qc.resolve(t,{paths:[process.cwd()]})}catch{}let r=Ot.resolve(process.cwd(),t);try{return qc.resolve(r)}catch{}let a="Unable to locate "+(n?`${n}: `:"")+`\`${t}\`.
+     Tried to resolve the module from these locations:
+       
+       ${r}`;if(!e)throw new Error(a);let o=Ot.resolve(e,t);try{return qc.resolve(o)}catch{}try{return qc.resolve(t,{paths:[e]})}catch{}throw new Error(a+`
+       ${o}`)}function gB(t){return typeof t=="object"?Object.assign(Object.create(Object.getPrototypeOf(t)),t):t}function RS(t){return JSON.parse(JSON.stringify(t))}function _S(t){let e=RS(t);return Array.isArray(t.audits)&&(e.audits=t.audits.map(n=>gB(n))),Array.isArray(t.artifacts)&&(e.artifacts=t.artifacts.map(n=>({...n,gatherer:gB(n.gatherer)}))),e}var hB,qc,nse,Ii,fB,kS=v(()=>{"use strict";d();qo();es();lu();hB=zt(cu(),1);Vn();Eu();tk();$a();k();bh();Vo();qc=Go("core/config/config-helpers.js");s(CS,"isBundledEnvironment");nse=s(function(t){let e=[];for(let n of t){let r=n.path&&e.find(a=>a.path===n.path);if(!r){e.push(n);continue}r.options=Object.assign({},r.options,n.options)}return e},"mergeOptionsOfItems");s(yB,"_mergeConfigFragment");Ii=yB;s(vB,"mergeConfigFragmentArrayByKey");s(rse,"expandGathererShorthand");s(ase,"expandAuditShorthand");fB=new Map([["../gather/gatherers/accessibility",Promise.resolve().then(()=>(ok(),ak))],["../gather/gatherers/anchor-elements",Promise.resolve().then(()=>(lk(),uk))],["../gather/gatherers/bf-cache-failures",Promise.resolve().then(()=>(hk(),gk))],["../gather/gatherers/cache-contents",Promise.resolve().then(()=>(vk(),yk))],["../gather/gatherers/console-messages",Promise.resolve().then(()=>(wk(),bk))],["../gather/gatherers/css-usage",Promise.resolve().then(()=>(Ek(),Dk))],["../gather/gatherers/devtools-log-compat",Promise.resolve().then(()=>(Sk(),Tk))],["../gather/gatherers/devtools-log",Promise.resolve().then(()=>(Kn(),fk))],["../gather/gatherers/dobetterweb/doctype",Promise.resolve().then(()=>(Ck(),xk))],["../gather/gatherers/dobetterweb/domstats",Promise.resolve().then(()=>(Fk(),Ak))],["../gather/gatherers/dobetterweb/optimized-images",Promise.resolve().then(()=>(_k(),Rk))],["../gather/gatherers/dobetterweb/response-compression",Promise.resolve().then(()=>(FI(),AI))],["../gather/gatherers/dobetterweb/tags-blocking-first-paint",Promise.resolve().then(()=>(_I(),RI))],["../gather/gatherers/full-page-screenshot",Promise.resolve().then(()=>(LI(),NI))],["../gather/gatherers/global-listeners",Promise.resolve().then(()=>(OI(),PI))],["../gather/gatherers/iframe-elements",Promise.resolve().then(()=>(BI(),UI))],["../gather/gatherers/image-elements",Promise.resolve().then(()=>(WI(),GI))],["../gather/gatherers/inputs",Promise.resolve().then(()=>($I(),VI))],["../gather/gatherers/inspector-issues",Promise.resolve().then(()=>(KI(),YI))],["../gather/gatherers/installability-errors",Promise.resolve().then(()=>(XI(),JI))],["../gather/gatherers/js-usage",Promise.resolve().then(()=>(QI(),ZI))],["../gather/gatherers/link-elements",Promise.resolve().then(()=>(iM(),oM))],["../gather/gatherers/main-document-content",Promise.resolve().then(()=>(cM(),sM))],["../gather/gatherers/meta-elements",Promise.resolve().then(()=>(lM(),uM))],["../gather/gatherers/network-user-agent",Promise.resolve().then(()=>(mM(),dM))],["../gather/gatherers/script-elements",Promise.resolve().then(()=>(fM(),pM))],["../gather/gatherers/scripts",Promise.resolve().then(()=>(Uy(),gM))],["../gather/gatherers/seo/embedded-content",Promise.resolve().then(()=>(yM(),hM))],["../gather/gatherers/seo/font-size",Promise.resolve().then(()=>(wy(),by))],["../gather/gatherers/seo/robots-txt",Promise.resolve().then(()=>(bM(),vM))],["../gather/gatherers/seo/tap-targets",Promise.resolve().then(()=>(MM(),IM))],["../gather/gatherers/service-worker",Promise.resolve().then(()=>(UM(),OM))],["../gather/gatherers/source-maps",Promise.resolve().then(()=>(QM(),ZM))],["../gather/gatherers/stacks",Promise.resolve().then(()=>(tN(),eN))],["../gather/gatherers/trace-compat",Promise.resolve().then(()=>(rN(),nN))],["../gather/gatherers/trace-elements",Promise.resolve().then(()=>(iN(),oN))],["../gather/gatherers/trace",Promise.resolve().then(()=>(Vi(),kx))],["../gather/gatherers/viewport-dimensions",Promise.resolve().then(()=>(cN(),sN))],["../gather/gatherers/web-app-manifest",Promise.resolve().then(()=>(pN(),mN))],["../audits/accessibility/accesskeys",Promise.resolve().then(()=>(hN(),gN))],["../audits/accessibility/aria-allowed-attr",Promise.resolve().then(()=>(vN(),yN))],["../audits/accessibility/aria-allowed-role",Promise.resolve().then(()=>(wN(),bN))],["../audits/accessibility/aria-command-name",Promise.resolve().then(()=>(EN(),DN))],["../audits/accessibility/aria-dialog-name",Promise.resolve().then(()=>(SN(),TN))],["../audits/accessibility/aria-hidden-body",Promise.resolve().then(()=>(CN(),xN))],["../audits/accessibility/aria-hidden-focus",Promise.resolve().then(()=>(FN(),AN))],["../audits/accessibility/aria-input-field-name",Promise.resolve().then(()=>(_N(),RN))],["../audits/accessibility/aria-meter-name",Promise.resolve().then(()=>(IN(),kN))],["../audits/accessibility/aria-progressbar-name",Promise.resolve().then(()=>(NN(),MN))],["../audits/accessibility/aria-required-attr",Promise.resolve().then(()=>(PN(),LN))],["../audits/accessibility/aria-required-children",Promise.resolve().then(()=>(UN(),ON))],["../audits/accessibility/aria-required-parent",Promise.resolve().then(()=>(jN(),BN))],["../audits/accessibility/aria-roles",Promise.resolve().then(()=>(zN(),qN))],["../audits/accessibility/aria-text",Promise.resolve().then(()=>(GN(),HN))],["../audits/accessibility/aria-toggle-field-name",Promise.resolve().then(()=>(VN(),WN))],["../audits/accessibility/aria-tooltip-name",Promise.resolve().then(()=>(YN(),$N))],["../audits/accessibility/aria-treeitem-name",Promise.resolve().then(()=>(JN(),KN))],["../audits/accessibility/aria-valid-attr-value",Promise.resolve().then(()=>(ZN(),XN))],["../audits/accessibility/aria-valid-attr",Promise.resolve().then(()=>(e3(),QN))],["../audits/accessibility/button-name",Promise.resolve().then(()=>(n3(),t3))],["../audits/accessibility/bypass",Promise.resolve().then(()=>(a3(),r3))],["../audits/accessibility/color-contrast",Promise.resolve().then(()=>(i3(),o3))],["../audits/accessibility/definition-list",Promise.resolve().then(()=>(c3(),s3))],["../audits/accessibility/dlitem",Promise.resolve().then(()=>(l3(),u3))],["../audits/accessibility/document-title",Promise.resolve().then(()=>(m3(),d3))],["../audits/accessibility/duplicate-id-active",Promise.resolve().then(()=>(f3(),p3))],["../audits/accessibility/duplicate-id-aria",Promise.resolve().then(()=>(h3(),g3))],["../audits/accessibility/empty-heading",Promise.resolve().then(()=>(v3(),y3))],["../audits/accessibility/form-field-multiple-labels",Promise.resolve().then(()=>(w3(),b3))],["../audits/accessibility/frame-title",Promise.resolve().then(()=>(E3(),D3))],["../audits/accessibility/heading-order",Promise.resolve().then(()=>(S3(),T3))],["../audits/accessibility/html-has-lang",Promise.resolve().then(()=>(C3(),x3))],["../audits/accessibility/html-lang-valid",Promise.resolve().then(()=>(F3(),A3))],["../audits/accessibility/html-xml-lang-mismatch",Promise.resolve().then(()=>(_3(),R3))],["../audits/accessibility/identical-links-same-purpose",Promise.resolve().then(()=>(I3(),k3))],["../audits/accessibility/image-alt",Promise.resolve().then(()=>(N3(),M3))],["../audits/accessibility/image-redundant-alt",Promise.resolve().then(()=>(P3(),L3))],["../audits/accessibility/input-button-name",Promise.resolve().then(()=>(U3(),O3))],["../audits/accessibility/input-image-alt",Promise.resolve().then(()=>(j3(),B3))],["../audits/accessibility/label-content-name-mismatch",Promise.resolve().then(()=>(z3(),q3))],["../audits/accessibility/label",Promise.resolve().then(()=>(G3(),H3))],["../audits/accessibility/landmark-one-main",Promise.resolve().then(()=>(V3(),W3))],["../audits/accessibility/link-in-text-block",Promise.resolve().then(()=>(Y3(),$3))],["../audits/accessibility/link-name",Promise.resolve().then(()=>(J3(),K3))],["../audits/accessibility/list",Promise.resolve().then(()=>(Z3(),X3))],["../audits/accessibility/listitem",Promise.resolve().then(()=>(eL(),Q3))],["../audits/accessibility/manual/custom-controls-labels",Promise.resolve().then(()=>(nL(),tL))],["../audits/accessibility/manual/custom-controls-roles",Promise.resolve().then(()=>(aL(),rL))],["../audits/accessibility/manual/focus-traps",Promise.resolve().then(()=>(iL(),oL))],["../audits/accessibility/manual/focusable-controls",Promise.resolve().then(()=>(cL(),sL))],["../audits/accessibility/manual/interactive-element-affordance",Promise.resolve().then(()=>(lL(),uL))],["../audits/accessibility/manual/logical-tab-order",Promise.resolve().then(()=>(mL(),dL))],["../audits/accessibility/manual/managed-focus",Promise.resolve().then(()=>(fL(),pL))],["../audits/accessibility/manual/offscreen-content-hidden",Promise.resolve().then(()=>(hL(),gL))],["../audits/accessibility/manual/use-landmarks",Promise.resolve().then(()=>(vL(),yL))],["../audits/accessibility/manual/visual-order-follows-dom",Promise.resolve().then(()=>(wL(),bL))],["../audits/accessibility/meta-refresh",Promise.resolve().then(()=>(EL(),DL))],["../audits/accessibility/meta-viewport",Promise.resolve().then(()=>(SL(),TL))],["../audits/accessibility/object-alt",Promise.resolve().then(()=>(CL(),xL))],["../audits/accessibility/select-name",Promise.resolve().then(()=>(FL(),AL))],["../audits/accessibility/skip-link",Promise.resolve().then(()=>(_L(),RL))],["../audits/accessibility/tabindex",Promise.resolve().then(()=>(IL(),kL))],["../audits/accessibility/table-duplicate-name",Promise.resolve().then(()=>(NL(),ML))],["../audits/accessibility/table-fake-caption",Promise.resolve().then(()=>(PL(),LL))],["../audits/accessibility/target-size",Promise.resolve().then(()=>(UL(),OL))],["../audits/accessibility/td-has-header",Promise.resolve().then(()=>(jL(),BL))],["../audits/accessibility/td-headers-attr",Promise.resolve().then(()=>(zL(),qL))],["../audits/accessibility/th-has-data-cells",Promise.resolve().then(()=>(GL(),HL))],["../audits/accessibility/valid-lang",Promise.resolve().then(()=>(VL(),WL))],["../audits/accessibility/video-caption",Promise.resolve().then(()=>(YL(),$L))],["../audits/autocomplete",Promise.resolve().then(()=>(XL(),JL))],["../audits/bf-cache",Promise.resolve().then(()=>(t8(),e8))],["../audits/bootup-time",Promise.resolve().then(()=>(r8(),n8))],["../audits/byte-efficiency/duplicated-javascript",Promise.resolve().then(()=>(s8(),i8))],["../audits/byte-efficiency/efficient-animated-content",Promise.resolve().then(()=>(u8(),c8))],["../audits/byte-efficiency/legacy-javascript",Promise.resolve().then(()=>(d8(),l8))],["../audits/byte-efficiency/modern-image-formats",Promise.resolve().then(()=>(p8(),m8))],["../audits/byte-efficiency/offscreen-images",Promise.resolve().then(()=>(v8(),y8))],["../audits/byte-efficiency/render-blocking-resources",Promise.resolve().then(()=>(D8(),w8))],["../audits/byte-efficiency/total-byte-weight",Promise.resolve().then(()=>(T8(),E8))],["../audits/byte-efficiency/unminified-css",Promise.resolve().then(()=>(F8(),A8))],["../audits/byte-efficiency/unminified-javascript",Promise.resolve().then(()=>(_8(),R8))],["../audits/byte-efficiency/unused-css-rules",Promise.resolve().then(()=>(I8(),k8))],["../audits/byte-efficiency/unused-javascript",Promise.resolve().then(()=>(N8(),M8))],["../audits/byte-efficiency/uses-long-cache-ttl",Promise.resolve().then(()=>(v0(),U8))],["../audits/byte-efficiency/uses-optimized-images",Promise.resolve().then(()=>(j8(),B8))],["../audits/byte-efficiency/uses-responsive-images-snapshot",Promise.resolve().then(()=>(G8(),H8))],["../audits/byte-efficiency/uses-responsive-images",Promise.resolve().then(()=>(S0(),T0))],["../audits/byte-efficiency/uses-text-compression",Promise.resolve().then(()=>(V8(),W8))],["../audits/content-width",Promise.resolve().then(()=>(Y8(),$8))],["../audits/critical-request-chains",Promise.resolve().then(()=>(J8(),K8))],["../audits/csp-xss",Promise.resolve().then(()=>(SP(),TP))],["../audits/deprecations",Promise.resolve().then(()=>(_P(),RP))],["../audits/diagnostics",Promise.resolve().then(()=>(IP(),kP))],["../audits/dobetterweb/charset",Promise.resolve().then(()=>(PP(),LP))],["../audits/dobetterweb/doctype",Promise.resolve().then(()=>(UP(),OP))],["../audits/dobetterweb/dom-size",Promise.resolve().then(()=>(jP(),BP))],["../audits/dobetterweb/geolocation-on-start",Promise.resolve().then(()=>(zP(),qP))],["../audits/dobetterweb/inspector-issues",Promise.resolve().then(()=>(GP(),HP))],["../audits/dobetterweb/js-libraries",Promise.resolve().then(()=>(VP(),WP))],["../audits/dobetterweb/no-document-write",Promise.resolve().then(()=>(YP(),$P))],["../audits/dobetterweb/notification-on-start",Promise.resolve().then(()=>(JP(),KP))],["../audits/dobetterweb/paste-preventing-inputs",Promise.resolve().then(()=>(ZP(),XP))],["../audits/dobetterweb/uses-http2",Promise.resolve().then(()=>(e5(),QP))],["../audits/dobetterweb/uses-passive-event-listeners",Promise.resolve().then(()=>(n5(),t5))],["../audits/errors-in-console",Promise.resolve().then(()=>(a5(),r5))],["../audits/final-screenshot",Promise.resolve().then(()=>(c5(),s5))],["../audits/font-display",Promise.resolve().then(()=>(dD(),l5))],["../audits/image-aspect-ratio",Promise.resolve().then(()=>(m5(),d5))],["../audits/image-size-responsive",Promise.resolve().then(()=>(g5(),f5))],["../audits/installable-manifest",Promise.resolve().then(()=>(D5(),w5))],["../audits/is-on-https",Promise.resolve().then(()=>(S5(),T5))],["../audits/largest-contentful-paint-element",Promise.resolve().then(()=>(C5(),x5))],["../audits/layout-shift-elements",Promise.resolve().then(()=>(F5(),A5))],["../audits/lcp-lazy-loaded",Promise.resolve().then(()=>(_5(),R5))],["../audits/long-tasks",Promise.resolve().then(()=>(I5(),k5))],["../audits/main-thread-tasks",Promise.resolve().then(()=>(N5(),M5))],["../audits/mainthread-work-breakdown",Promise.resolve().then(()=>(P5(),L5))],["../audits/manual/pwa-cross-browser",Promise.resolve().then(()=>(B5(),U5))],["../audits/manual/pwa-each-page-has-url",Promise.resolve().then(()=>(z5(),q5))],["../audits/manual/pwa-page-transitions",Promise.resolve().then(()=>(W5(),G5))],["../audits/maskable-icon",Promise.resolve().then(()=>($5(),V5))],["../audits/metrics",Promise.resolve().then(()=>(DO(),wO))],["../audits/metrics/cumulative-layout-shift",Promise.resolve().then(()=>(SO(),TO))],["../audits/metrics/first-contentful-paint",Promise.resolve().then(()=>(CO(),xO))],["../audits/metrics/first-meaningful-paint",Promise.resolve().then(()=>(FO(),AO))],["../audits/metrics/interaction-to-next-paint",Promise.resolve().then(()=>(DE(),RO))],["../audits/metrics/interactive",Promise.resolve().then(()=>(kO(),_O))],["../audits/metrics/largest-contentful-paint",Promise.resolve().then(()=>(MO(),IO))],["../audits/metrics/max-potential-fid",Promise.resolve().then(()=>(LO(),NO))],["../audits/metrics/speed-index",Promise.resolve().then(()=>(OO(),PO))],["../audits/metrics/total-blocking-time",Promise.resolve().then(()=>(BO(),UO))],["../audits/network-requests",Promise.resolve().then(()=>(qO(),jO))],["../audits/network-rtt",Promise.resolve().then(()=>(HO(),zO))],["../audits/network-server-latency",Promise.resolve().then(()=>(WO(),GO))],["../audits/no-unload-listeners",Promise.resolve().then(()=>($O(),VO))],["../audits/non-composited-animations",Promise.resolve().then(()=>(KO(),YO))],["../audits/oopif-iframe-test-audit",Promise.resolve().then(()=>(XO(),JO))],["../audits/performance-budget",Promise.resolve().then(()=>(t6(),e6))],["../audits/predictive-perf",Promise.resolve().then(()=>(r6(),n6))],["../audits/preload-fonts",Promise.resolve().then(()=>(o6(),a6))],["../audits/prioritize-lcp-image",Promise.resolve().then(()=>(s6(),i6))],["../audits/redirects",Promise.resolve().then(()=>(u6(),c6))],["../audits/screenshot-thumbnails",Promise.resolve().then(()=>(m6(),d6))],["../audits/script-elements-test-audit",Promise.resolve().then(()=>(f6(),p6))],["../audits/script-treemap-data",Promise.resolve().then(()=>(h6(),g6))],["../audits/seo/canonical",Promise.resolve().then(()=>(v6(),y6))],["../audits/seo/crawlable-anchors",Promise.resolve().then(()=>(w6(),b6))],["../audits/seo/font-size",Promise.resolve().then(()=>(x6(),S6))],["../audits/seo/hreflang",Promise.resolve().then(()=>(R6(),F6))],["../audits/seo/http-status-code",Promise.resolve().then(()=>(k6(),_6))],["../audits/seo/is-crawlable",Promise.resolve().then(()=>(G6(),H6))],["../audits/seo/link-text",Promise.resolve().then(()=>(V6(),W6))],["../audits/seo/manual/structured-data",Promise.resolve().then(()=>(K6(),Y6))],["../audits/seo/meta-description",Promise.resolve().then(()=>(X6(),J6))],["../audits/seo/plugins",Promise.resolve().then(()=>(t4(),e4))],["../audits/seo/robots-txt",Promise.resolve().then(()=>(a4(),r4))],["../audits/seo/tap-targets",Promise.resolve().then(()=>(u4(),c4))],["../audits/server-response-time",Promise.resolve().then(()=>(d4(),l4))],["../audits/splash-screen",Promise.resolve().then(()=>(p4(),m4))],["../audits/themed-omnibox",Promise.resolve().then(()=>(g4(),f4))],["../audits/third-party-facades",Promise.resolve().then(()=>(v4(),y4))],["../audits/third-party-summary",Promise.resolve().then(()=>(CT(),h4))],["../audits/timing-budget",Promise.resolve().then(()=>(w4(),b4))],["../audits/unsized-images",Promise.resolve().then(()=>(E4(),D4))],["../audits/user-timings",Promise.resolve().then(()=>(C4(),x4))],["../audits/uses-rel-preconnect",Promise.resolve().then(()=>(F4(),A4))],["../audits/uses-rel-preload",Promise.resolve().then(()=>(_4(),R4))],["../audits/valid-source-maps",Promise.resolve().then(()=>(I4(),k4))],["../audits/viewport",Promise.resolve().then(()=>(N4(),M4))],["../audits/work-during-interaction",Promise.resolve().then(()=>(P4(),L4))],["lighthouse-plugin-publisher-ads",Promise.resolve().then(()=>(B4(),U4))],["lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks",Promise.resolve().then(()=>(nU(),tU))],["lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources",Promise.resolve().then(()=>(aU(),rU))],["lighthouse-plugin-publisher-ads/audits/ad-request-critical-path",Promise.resolve().then(()=>(cU(),sU))],["lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start",Promise.resolve().then(()=>(mU(),dU))],["lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start",Promise.resolve().then(()=>(fU(),pU))],["lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport",Promise.resolve().then(()=>(hU(),gU))],["lighthouse-plugin-publisher-ads/audits/ads-in-viewport",Promise.resolve().then(()=>(wU(),bU))],["lighthouse-plugin-publisher-ads/audits/async-ad-tags",Promise.resolve().then(()=>(SU(),TU))],["lighthouse-plugin-publisher-ads/audits/blocking-load-events",Promise.resolve().then(()=>(AU(),CU))],["lighthouse-plugin-publisher-ads/audits/bottleneck-requests",Promise.resolve().then(()=>(RU(),FU))],["lighthouse-plugin-publisher-ads/audits/duplicate-tags",Promise.resolve().then(()=>(kU(),_U))],["lighthouse-plugin-publisher-ads/audits/first-ad-render",Promise.resolve().then(()=>(LU(),NU))],["lighthouse-plugin-publisher-ads/audits/full-width-slots",Promise.resolve().then(()=>(OU(),PU))],["lighthouse-plugin-publisher-ads/audits/gpt-bids-parallel",Promise.resolve().then(()=>(BU(),UU))],["lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source",Promise.resolve().then(()=>(qU(),jU))],["lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https",Promise.resolve().then(()=>(HU(),zU))],["lighthouse-plugin-publisher-ads/audits/script-injected-tags",Promise.resolve().then(()=>(WU(),GU))],["lighthouse-plugin-publisher-ads/audits/serial-header-bidding",Promise.resolve().then(()=>($U(),VU))],["lighthouse-plugin-publisher-ads/audits/tag-load-time",Promise.resolve().then(()=>(XU(),JU))],["lighthouse-plugin-publisher-ads/audits/viewport-ad-density",Promise.resolve().then(()=>(QU(),ZU))],["lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift",Promise.resolve().then(()=>(tB(),eB))],["lighthouse-plugin-publisher-ads/audits/deprecated-api-usage",Promise.resolve().then(()=>(rB(),nB))],["lighthouse-plugin-publisher-ads/audits/gpt-errors-overall",Promise.resolve().then(()=>(oB(),aB))],["lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time",Promise.resolve().then(()=>(sB(),iB))],["lighthouse-plugin-soft-navigation",Promise.resolve().then(()=>(uB(),cB))],["lighthouse-plugin-soft-navigation/audits/soft-nav-fcp",Promise.resolve().then(()=>(dB(),lB))],["lighthouse-plugin-soft-navigation/audits/soft-nav-lcp",Promise.resolve().then(()=>(pB(),mB))]]);s(AS,"requireWrapper");s(ose,"requireGatherer");s(ise,"requireAudit");s(sse,"cleanFlagsForSettings");s(bB,"resolveSettings");s(wB,"mergePlugins");s(DB,"resolveGathererToDefn");s(EB,"resolveAuditsToDefns");s(FS,"resolveModulePath");s(gB,"shallowClone");s(RS,"deepClone");s(_S,"deepCloneConfigJson")});function use(t,e){let{configPath:n}=e;if(n&&!Ot.isAbsolute(n))throw new Error("configPath must be an absolute path");t||(t=Ep,n=cse);let r=n?Ot.dirname(n):void 0;return{configWorkingCopy:_S(t),configPath:n,configDir:r}}function lse(t){if(!t.extends)return t;if(t.extends!=="lighthouse:default")throw new Error("`lighthouse:default` is the only valid extension method.");let{artifacts:e,...n}=t,r=_S(Ep),a=Ii(r,n);return a.artifacts=vB(r.artifacts,e,o=>o.id),a}function dse(t,e,n){if(!("dependencies"in e.instance.meta))return;let r=Object.entries(e.instance.meta.dependencies).map(([a,o])=>{let i=n.get(o);return i||vh(t.id,a),j_(e,i.gatherer)||G_(t.id,a),[a,{id:i.id}]});return Object.fromEntries(r)}async function mse(t,e){if(!t)return null;let n={msg:"Resolve artifact definitions",id:"lh:config:resolveArtifactsToDefns"};N.time(n,"verbose");let r=[...t];r.sort((c,u)=>{let l=TB[c.id]||0,m=TB[u.id]||0;return l-m});let a=new Map,o=cn.getGathererList(),i=[];for(let c of r){let u=c.gatherer,l=await DB(u,o,e),m={id:c.id,gatherer:l,dependencies:dse(c,l,a)},p=m.gatherer.instance.meta.symbol;p&&a.set(p,m),i.push(m)}return N.timeEnd(n),i}function pse(t,e){e==="timespan"&&t.throttlingMethod==="simulate"&&(t.throttlingMethod="devtools")}function fse(t,e){t.disableThrottling||e.throttlingMethod!=="simulate"&&(t.cpuQuietThresholdMs=Math.max(t.cpuQuietThresholdMs||0,cs.cpuQuietThresholdMs),t.networkQuietThresholdMs=Math.max(t.networkQuietThresholdMs||0,cs.networkQuietThresholdMs),t.pauseAfterFcpMs=Math.max(t.pauseAfterFcpMs||0,cs.pauseAfterFcpMs),t.pauseAfterLoadMs=Math.max(t.pauseAfterLoadMs||0,cs.pauseAfterLoadMs))}function gse(t,e){if(!t)return null;let n={msg:"Resolve navigation definitions",id:"lh:config:resolveNavigationsToDefns"};N.time(n,"verbose");let r={...fu,artifacts:t,pauseAfterFcpMs:e.pauseAfterFcpMs,pauseAfterLoadMs:e.pauseAfterLoadMs,networkQuietThresholdMs:e.networkQuietThresholdMs,cpuQuietThresholdMs:e.cpuQuietThresholdMs,blankPage:e.blankPage};fse(r,e);let a=[r];return z_(a),N.timeEnd(n),a}async function Mi(t,e,n={}){let r={msg:"Initialize config",id:"lh:config"};N.time(r,"verbose");let{configWorkingCopy:a,configDir:o}=use(e,n);a=lse(a),a=await wB(a,o,n);let i=bB(a.settings||{},n);pse(i,t);let c=await mse(a.artifacts,o),u=gse(c,i),l={artifacts:c,navigations:u,audits:await EB(a.audits,o),categories:a.categories||null,groups:a.groups||null,settings:i},{warnings:m}=H_(l);return l=Y_(l,t),l=K_(l,i),N.timeEnd(r),{resolvedConfig:l,warnings:m}}var cse,TB,bm=v(()=>{"use strict";d();qo();He();$a();gh();Vn();bh();J_();kS();Vo();la();cse=Ot.join("","../../config/default-config.js"),TB={FullPageScreenshot:1,BFCacheFailures:1};s(use,"resolveWorkingCopy");s(lse,"resolveExtensions");s(dse,"resolveArtifactDependencies");s(mse,"resolveArtifactsToDefns");s(pse,"overrideSettingsForGatherMode");s(fse,"overrideNavigationThrottlingWindows");s(gse,"resolveFakeNavigations");s(Mi,"initializeConfig")});async function xB(t){let e={msg:"Getting browser version",id:"lh:gather:getVersion"};N.time(e,"verbose");let n=await t.sendCommand("Browser.getVersion"),r=n.product.match(/\/(\d+)/),a=r?parseInt(r[1]):0;return N.timeEnd(e),Object.assign(n,{milestone:a})}async function CB(t){let e={msg:"Benchmarking machine",id:"lh:gather:getBenchmarkIndex"};N.time(e);let n=await t.evaluate(Ee.computeBenchmarkIndex,{args:[]});return N.timeEnd(e),n}function vse(t){let{settings:e,baseArtifacts:n}=t,{throttling:r,throttlingMethod:a}=e,o=Qn.throttling;if(e.channel!=="cli")return;let i=a==="simulate"||a==="devtools",c=r.cpuSlowdownMultiplier===o.cpuSlowdownMultiplier;if(!(!i||!c)&&!(n.BenchmarkIndex>hse))return yse(SB.warningSlowHostCpu)}function AB(t){return[vse(t)].filter(e=>!!e)}var SB,hse,yse,FB=v(()=>{"use strict";d();He();Vn();un();k();SB={warningSlowHostCpu:"The tested device appears to have a slower CPU than  Lighthouse expects. This can negatively affect your performance score. Learn more about [calibrating an appropriate CPU slowdown multiplier](https://github.com/GoogleChrome/lighthouse/blob/main/docs/throttling.md#cpu-throttling)."},hse=1e3,yse=w("core/gather/driver/environment.js",SB);s(xB,"getBrowserVersion");s(CB,"getBenchmarkIndex");s(vse,"getSlowHostCpuWarning");s(AB,"getEnvironmentWarnings")});async function zc(t,e,n){let r=await CB(e.executionContext),{userAgent:a}=await xB(e.defaultSession);return{fetchTime:new Date().toJSON(),Timing:[],LighthouseRunWarnings:[],settings:t.settings,BenchmarkIndex:r,HostUserAgent:a,HostFormFactor:a.includes("Android")||a.includes("Mobile")?"mobile":"desktop",URL:{finalDisplayedUrl:""},PageLoadError:null,GatherContext:n}}function bse(t){let e=[];for(let n of t)e.some(r=>(0,RB.default)(n,r))||e.push(n);return e}function Hc(t,e){let n=t.LighthouseRunWarnings.concat(e.LighthouseRunWarnings||[]).concat(AB({settings:t.settings,baseArtifacts:t})),r={...t,...e};if(r.Timing=N.getTimeEntries(),r.LighthouseRunWarnings=bse(n),r.PageLoadError&&!r.URL.finalDisplayedUrl&&(r.URL.finalDisplayedUrl=r.URL.requestedUrl||""),!r.URL.finalDisplayedUrl)throw new Error("Runner did not set finalDisplayedUrl");return r}var RB,kf=v(()=>{"use strict";d();He();RB=zt(cu(),1);FB();s(zc,"getBaseArtifacts");s(bse,"deduplicateWarnings");s(Hc,"finalizeArtifacts")});async function IS(t,e={}){let{flags:n={},config:r}=e;N.setLevel(n.logLevel||"error");let{resolvedConfig:a}=await Mi("snapshot",r,n),o=new Ja(t);await o.connect();let i=new Map,c=await o.url(),u={resolvedConfig:a,computedCache:i};return{artifacts:await cn.gather(async()=>{let m=await zc(a,o,{gatherMode:"snapshot"});m.URL={finalDisplayedUrl:c};let p=a.artifacts||[],g=gs();await Fn({phase:"getArtifact",gatherMode:"snapshot",driver:o,page:t,baseArtifacts:m,artifactDefinitions:p,artifactState:g,computedCache:i,settings:a.settings}),await o.disconnect();let f=await hs(g);return Hc(m,f)},u),runnerOptions:u}}var MS=v(()=>{"use strict";d();He();wp();$a();Dp();bm();kf();s(IS,"snapshotGather")});async function Mf(t,e){let n={msg:"Cleaning origin data",id:"lh:storage:clearDataForOrigin"};N.time(n);let r=[],a=new URL(e).origin,o=["file_systems","shader_cache","service_workers","cache_storage"].join(",");t.setNextProtocolTimeout(5e3);try{await t.sendCommand("Storage.clearDataForOrigin",{origin:a,storageTypes:o})}catch(i){if(i.code==="PROTOCOL_TIMEOUT")N.warn("Driver","clearDataForOrigin timed out"),r.push(NS(If.warningOriginDataTimeout));else throw i}finally{N.timeEnd(n)}return r}async function _B(t,e){let n=await t.sendCommand("Storage.getUsageAndQuota",{origin:e}),r={local_storage:"Local Storage",indexeddb:"IndexedDB",websql:"Web SQL"},a=n.usageBreakdown.filter(o=>o.usage).map(o=>r[o.storageType]||"").filter(Boolean);if(a.length)return NS(If.warningData,{locations:a.join(", "),locationCount:a.length})}async function kB(t){let e={msg:"Cleaning browser cache",id:"lh:storage:clearBrowserCaches"};N.time(e);let n=[];try{await t.sendCommand("Network.clearBrowserCache"),await t.sendCommand("Network.setCacheDisabled",{cacheDisabled:!0}),await t.sendCommand("Network.setCacheDisabled",{cacheDisabled:!1})}catch(r){if(r.code==="PROTOCOL_TIMEOUT")N.warn("Driver","clearBrowserCaches timed out"),n.push(NS(If.warningCacheTimeout));else throw r}finally{N.timeEnd(e)}return n}var If,NS,LS=v(()=>{"use strict";d();He();k();If={warningData:`{locationCount, plural,
+    =1 {There may be stored data affecting loading performance in this location: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}
+    other {There may be stored data affecting loading performance in these locations: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}
+  }`,warningCacheTimeout:"Clearing the browser cache timed out. Try auditing this page again and file a bug if the issue persists.",warningOriginDataTimeout:"Clearing the origin data timed out. Try auditing this page again and file a bug if the issue persists."},NS=w("core/gather/driver/storage.js",If);s(Mf,"clearDataForOrigin");s(_B,"getImportantStorageWarning");s(kB,"clearBrowserCaches")});async function Nf(t){let e=s(async()=>{await t.sendCommand("Debugger.enable"),await t.sendCommand("Debugger.setSkipAllPauses",{skip:!0}),await t.sendCommand("Debugger.setAsyncCallStackDepth",{maxDepth:8})},"enable");function n(){t.sendCommand("Debugger.resume")}s(n,"onDebuggerPaused");function r(a){a.frame.parentId||e().catch(o=>N.error("Driver",o))}return s(r,"onFrameNavigated"),t.on("Debugger.paused",n),t.on("Page.frameNavigated",r),await e(),async()=>{await t.sendCommand("Debugger.disable"),t.off("Debugger.paused",n),t.off("Page.frameNavigated",r)}}async function wse(t,e){await t.executionContext.evaluateOnNewDocument(Ee.wrapRequestIdleCallback,{args:[e.throttling.cpuSlowdownMultiplier]})}async function Dse(t){t.on("Page.javascriptDialogOpening",e=>{N.warn("Driver",`${e.type} dialog opened by the page automatically suppressed.`),t.sendCommand("Page.handleJavaScriptDialog",{accept:!0,promptText:"Lighthouse prompt response"}).catch(n=>N.warn("Driver",n))}),await t.sendCommand("Page.enable")}async function Ese(t,e){let n=[],r=await _B(t,e);r&&n.push(r);let a=await Mf(t,e);n.push(...a);let o=await kB(t);return n.push(...o),{warnings:n}}async function MB(t,e,n){let r={msg:"Preparing network conditions",id:"lh:gather:prepareThrottlingAndNetwork"};N.time(r),n.disableThrottling?await Hp(t):await kI(t,e);let a=(n.blockedUrlPatterns||[]).concat(e.blockedUrlPatterns||[]);await t.sendCommand("Network.setBlockedURLs",{urls:a});let o=e.extraHeaders;o&&await t.sendCommand("Network.setExtraHTTPHeaders",{headers:o}),N.timeEnd(r)}async function NB(t,e){await t.defaultSession.sendCommand("Network.enable"),await zp(t.defaultSession,e)}async function LB(t,e){let n={msg:"Preparing target for timespan mode",id:"lh:prepare:timespanMode"};N.time(n),await NB(t,e),await MB(t.defaultSession,e,{disableThrottling:!1,blockedUrlPatterns:void 0}),await PB(t),N.timeEnd(n)}async function PB(t){await t.executionContext.evaluate(Ee.truncate,{args:["aaa",2]})}async function OB(t,e){let n={msg:"Preparing target for navigation mode",id:"lh:prepare:navigationMode"};N.time(n),await NB(t,e),await Dse(t.defaultSession),await t.executionContext.cacheNativesOnNewDocument(),e.throttlingMethod==="simulate"&&await wse(t,e),await PB(t),N.timeEnd(n)}async function UB(t,e,n){let r={msg:"Preparing target for navigation",id:"lh:prepare:navigation"};N.time(r);let a=[],{requestor:o}=n;if(!e.disableStorageReset&&!n.disableStorageReset&&typeof o=="string"){let c=o,{warnings:u}=await Ese(t,c);a.push(...u)}return await MB(t,e,n),N.timeEnd(r),{warnings:a}}var PS=v(()=>{"use strict";d();He();LS();Gp();un();s(Nf,"enableAsyncStacks");s(wse,"shimRequestIdleCallbackOnNewDocument");s(Dse,"dismissJavaScriptDialogs");s(Ese,"resetStorageForUrl");s(MB,"prepareThrottlingAndNetwork");s(NB,"prepareDeviceEmulation");s(LB,"prepareTargetForTimespanMode");s(PB,"warmUpIntlSegmenter");s(OB,"prepareTargetForNavigationMode");s(UB,"prepareTargetForIndividualNavigation")});async function OS(t,e={}){let{flags:n={},config:r}=e;N.setLevel(n.logLevel||"error");let{resolvedConfig:a}=await Mi("timespan",r,n),o=new Ja(t);await o.connect();let i=new Map,c=a.artifacts||[],u=await zc(a,o,{gatherMode:"timespan"}),l=gs(),m={driver:o,page:t,artifactDefinitions:c,artifactState:l,baseArtifacts:u,computedCache:i,gatherMode:"timespan",settings:a.settings};await LB(o,a.settings);let p=await Nf(o.defaultSession);return await Fn({phase:"startInstrumentation",...m}),await Fn({phase:"startSensitiveInstrumentation",...m}),{async endTimespanGather(){let g=await o.url(),f={resolvedConfig:a,computedCache:i};return{artifacts:await cn.gather(async()=>{u.URL={finalDisplayedUrl:g},await Fn({phase:"stopSensitiveInstrumentation",...m}),await Fn({phase:"stopInstrumentation",...m}),await p(),await Fn({phase:"getArtifact",...m}),await o.disconnect();let b=await hs(l);return Hc(u,b)},f),runnerOptions:f}}}}var US=v(()=>{"use strict";d();He();wp();$a();Dp();PS();bm();kf();s(OS,"startTimespanGather")});var BB,jB=v(()=>{d();BB={}});function Fse(t){let{pauseAfterFcpMs:e,pauseAfterLoadMs:n,networkQuietThresholdMs:r,cpuQuietThresholdMs:a}=t,o=t.maxWaitForLoad,i=t.maxWaitForFcp;return typeof e!="number"&&(e=Sse),typeof n!="number"&&(n=xse),typeof r!="number"&&(r=Cse),typeof a!="number"&&(a=Ase),typeof o!="number"&&(o=Qn.maxWaitForLoad),typeof i!="number"&&(i=Qn.maxWaitForFcp),t.waitUntil.includes("fcp")||(i=void 0),{pauseAfterFcpMs:e,pauseAfterLoadMs:n,networkQuietThresholdMs:r,cpuQuietThresholdMs:a,maxWaitForLoadedMs:o,maxWaitForFcpMs:i}}async function Lf(t,e,n){let r=typeof e=="string"?{msg:`Navigating to ${e}`,id:"lh:driver:navigate"}:{msg:"Navigating using a user defined function",id:"lh:driver:navigate"};N.time(r);let a=t.defaultSession,o=t.networkMonitor;await a.sendCommand("Page.enable"),await a.sendCommand("Page.setLifecycleEventsEnabled",{enabled:!0});let i;typeof e=="string"?(a.setNextProtocolTimeout(1/0),i=a.sendCommand("Page.navigate",{url:e})):i=e();let c=n.waitUntil.includes("navigated"),u=n.waitUntil.includes("load"),l=n.waitUntil.includes("fcp"),m=[];if(c){let D=xp(a).promise;m.push(D.then(()=>({timedOut:!1})))}if(u){let D=Fse(n);m.push(mk(a,o,D))}else if(l)throw new Error("Cannot wait for FCP without waiting for page load");let g=(await Promise.all(m)).some(D=>D.timedOut),f=await o.getNavigationUrls(),y=f.requestedUrl;if(typeof e=="string"&&(y&&!te.equalWithExcludedFragments(e,y)&&N.error("Navigation",`Provided URL (${e}) did not match initial navigation URL (${y})`),y=e),!y)throw Error("No navigations detected when running user defined requestor.");let b=f.mainDocumentUrl||y;return await i,n.debugNavigation&&await pk(t),N.timeEnd(r),{requestedUrl:y,mainDocumentUrl:b,warnings:Rse({timedOut:g,mainDocumentUrl:b,requestedUrl:y})}}function Rse(t){let{requestedUrl:e,mainDocumentUrl:n}=t,r=[];return t.timedOut&&r.push(qB(BS.warningTimeout)),te.equalWithExcludedFragments(e,n)||r.push(qB(BS.warningRedirected,{requested:e,final:n})),r}var BS,qB,Sse,xse,Cse,Ase,zB=v(()=>{"use strict";d();He();Cp();Vn();k();lt();BS={warningRedirected:"The page may not be loading as expected because your test URL ({requested}) was redirected to {final}. Try testing the second URL directly.",warningTimeout:"The page loaded too slowly to finish within the time limit. Results may be incomplete."},qB=w("core/gather/driver/navigation.js",BS),Sse=0,xse=0,Cse=5e3,Ase=0;s(Fse,"resolveWaitForFullyLoadedOptions");s(Lf,"gotoURL");s(Rse,"getNavigationWarnings")});function Ise(t){if(t){if(t.failed){let e=t.localizedFailDescription;return e==="net::ERR_NAME_NOT_RESOLVED"||e==="net::ERR_NAME_RESOLUTION_FAILED"||e.startsWith("net::ERR_DNS_")?new G(G.errors.DNS_FAILURE):new G(G.errors.FAILED_DOCUMENT_REQUEST,{errorDetails:e})}else if(t.hasErrorStatusCode())return new G(G.errors.ERRORED_DOCUMENT_REQUEST,{statusCode:`${t.statusCode}`})}else return new G(G.errors.NO_DOCUMENT_REQUEST)}function Mse(t,e){if(!(!t||!e.find(r=>r.documentURL.startsWith("chrome-error://")))&&t.failed)return t.localizedFailDescription.startsWith("net::ERR_CERT")?new G(G.errors.INSECURE_DOCUMENT_REQUEST,{securityMessages:t.localizedFailDescription}):new G(G.errors.CHROME_INTERSTITIAL_ERROR)}function Nse(t){if(t&&!(!t.mimeType||t.statusCode===-1)&&t.mimeType!==kse&&t.mimeType!==GB)return new G(G.errors.NOT_HTML,{mimeType:t.mimeType})}function WB(t,e){let{url:n,loadFailureMode:r,networkRecords:a}=e,o=Qt.findResourceForUrl(a,n);if(!o){let m=a.filter(p=>p.resourceType===Y.TYPES.Document);m.length&&(o=m.reduce((p,g)=>g.networkRequestTime<p.networkRequestTime?g:p))}let i;o&&(i=Qt.resolveRedirects(o)),i?.mimeType===GB&&e.warnings.push(_se(HB.warningXhtml));let c=Ise(o),u=Mse(o,a),l=Nse(i);if(r!=="ignore")return u||c||l||t}var HB,_se,kse,GB,VB=v(()=>{"use strict";d();Bt();Jo();St();k();HB={warningXhtml:"The page MIME type is XHTML: Lighthouse does not explicitly support this document type"},_se=w("core/lib/navigation-error.js",HB),kse="text/html",GB="application/xhtml+xml";s(Ise,"getNetworkError");s(Mse,"getInterstitialError");s(Nse,"getNonHtmlError");s(WB,"getPageLoadError")});async function Ose({driver:t,resolvedConfig:e,requestor:n}){await t.connect(),typeof n=="string"&&!e.settings.skipAboutBlank&&await Lf(t,fu.blankPage,{waitUntil:["navigated"]});let r=await zc(e,t,{gatherMode:"navigation"});return await OB(t,e.settings),{baseArtifacts:r}}async function Use({requestor:t,driver:e,navigation:n,resolvedConfig:r}){typeof t=="string"&&!r.settings.skipAboutBlank&&await Lf(e,n.blankPage,{...n,waitUntil:["navigated"]});let{warnings:a}=await UB(e.defaultSession,r.settings,{...n,requestor:t});return{warnings:a}}async function Bse({driver:t}){await Hp(t.defaultSession)}async function jse(t){let{driver:e,resolvedConfig:n,requestor:r}=t;try{let{requestedUrl:a,mainDocumentUrl:o,warnings:i}=await Lf(e,r,{...t.navigation,debugNavigation:n.settings.debugNavigation,maxWaitForFcp:n.settings.maxWaitForFcp,maxWaitForLoad:n.settings.maxWaitForLoad,waitUntil:t.navigation.pauseAfterFcpMs?["fcp","load"]:["load"]});return{requestedUrl:a,mainDocumentUrl:o,navigationError:void 0,warnings:i}}catch(a){if(!(a instanceof G)||a.code!=="NO_FCP"&&a.code!=="PAGE_HUNG"||typeof r!="string")throw a;return{requestedUrl:r,mainDocumentUrl:r,navigationError:a,warnings:[]}}}async function qse(t,e){let n=e.artifactDefinitions.find(p=>p.gatherer.instance.meta.symbol===Lt.symbol),r=e.artifactDefinitions.find(p=>p.gatherer.instance.meta.symbol===sa.symbol),a=[n,r].filter(p=>!!p);if(!a.length)return{};await Fn({...e,phase:"getArtifact",artifactDefinitions:a});let o=e.artifactState.getArtifact,i=n?.id,c=i&&await o[i],u=c&&await $.request(c,t),l=r?.id,m=l&&await o[l];return{devtoolsLog:c,records:u,trace:m}}async function zse(t,e,n,r){let{navigationError:a,mainDocumentUrl:o}=r,i=[...n.warnings,...r.warnings],c=await qse(t,e),u=c.records?WB(a,{url:o,loadFailureMode:t.navigation.loadFailureMode,networkRecords:c.records,warnings:i}):a;if(u){let l=t.resolvedConfig.settings.locale,m=$o(u.friendlyMessage,l);N.error("NavigationRunner",m,r.requestedUrl);let p={},g=`pageLoadError-${t.navigation.id}`;return c.devtoolsLog&&(p.DevtoolsLogError=c.devtoolsLog,p.devtoolsLogs={[g]:c.devtoolsLog}),c.trace&&(p.TraceError=c.trace,p.traces={[g]:c.trace}),{pageLoadError:u,artifacts:p,warnings:[...i,u.friendlyMessage]}}else return await Fn({phase:"getArtifact",...e}),{artifacts:await hs(e.artifactState),warnings:i,pageLoadError:void 0}}async function Hse(t){let e=gs(),n={url:await t.driver.url(),gatherMode:"navigation",driver:t.driver,page:t.page,computedCache:t.computedCache,artifactDefinitions:t.navigation.artifacts,artifactState:e,baseArtifacts:t.baseArtifacts,settings:t.resolvedConfig.settings},r=await Use(t),a=await Nf(t.driver.defaultSession);await Fn({phase:"startInstrumentation",...n}),await Fn({phase:"startSensitiveInstrumentation",...n});let o=await jse(t);return Object.values(n.baseArtifacts).every(Boolean)||(n.baseArtifacts.URL={requestedUrl:o.requestedUrl,mainDocumentUrl:o.mainDocumentUrl,finalDisplayedUrl:await t.driver.url()}),n.url=o.mainDocumentUrl,await Fn({phase:"stopSensitiveInstrumentation",...n}),await Fn({phase:"stopInstrumentation",...n}),await a(),await Bse(t),zse(t,n,r,o)}async function Gse(t){let{driver:e,page:n,resolvedConfig:r,requestor:a,baseArtifacts:o,computedCache:i}=t;if(!r.artifacts||!r.navigations)throw new Error("No artifacts were defined on the config");let c={},u=[];for(let l of r.navigations){let m={driver:e,page:n,navigation:l,requestor:a,resolvedConfig:r,baseArtifacts:o,computedCache:i},p=!1,g=await Hse(m);if(l.loadFailureMode==="fatal"&&g.pageLoadError&&(c.PageLoadError=g.pageLoadError,p=!0),u.push(...g.warnings),Object.assign(c,g.artifacts),p)break}return{artifacts:{...c,LighthouseRunWarnings:u}}}async function Wse({requestedUrl:t,driver:e,resolvedConfig:n,lhBrowser:r,lhPage:a}){!n.settings.disableStorageReset&&t&&await Mf(e.defaultSession,t),await e.disconnect(),await a?.close(),await r?.disconnect()}async function jS(t,e,n={}){let{flags:r={},config:a}=n;N.setLevel(r.logLevel||"error");let{resolvedConfig:o}=await Mi("navigation",a,r),i=new Map,c=typeof e=="function",u={resolvedConfig:o,computedCache:i};return{artifacts:await cn.gather(async()=>{let m=c?e:te.normalizeUrl(e),p,g;if(!t){let{hostname:T=Lse,port:A=Pse}=r;p=await BB.connect({browserURL:`http://${T}:${A}`,defaultViewport:null}),g=await p.newPage(),t=g}let y={driver:new Ja(t),lhBrowser:p,lhPage:g,resolvedConfig:o,requestor:m},{baseArtifacts:b}=await Ose(y),{artifacts:D}=await Gse({...y,page:t,baseArtifacts:b,computedCache:i});return await Wse(y),Hc(b,D)},u),runnerOptions:u}}var Lse,Pse,qS=v(()=>{"use strict";d();jB();He();wp();$a();Dp();PS();zB();LS();Gp();Vn();bm();kf();la();Bt();lt();VB();Vi();Kn();De();Lse="127.0.0.1",Pse=9222;s(Ose,"_setup");s(Use,"_setupNavigation");s(Bse,"_cleanupNavigation");s(jse,"_navigate");s(qse,"_collectDebugData");s(zse,"_computeNavigationResult");s(Hse,"_navigation");s(Gse,"_navigations");s(Wse,"_cleanup");s(jS,"navigationGather")});var Vse,lGe,$B=v(()=>{"use strict";d();mp();MS();US();qS();$a();bm();la();kS();k();Yt();Vse={defaultFlowName:"User flow ({url})",defaultNavigationName:"Navigation report ({url})",defaultTimespanName:"Timespan report ({url})",defaultSnapshotName:"Snapshot report ({url})"},lGe=w("core/user-flow.js",Vse)});var gGe,YB=v(()=>{"use strict";d();Yt();Vn();gGe={extends:"lighthouse:default",settings:{formFactor:"desktop",throttling:Wn.desktopDense4G,screenEmulation:ip.desktop,emulatedUserAgent:Wa.desktop}}});async function $se(t,e={},n,r){return Pf(r,t,{config:n,flags:e})}async function Pf(t,e,n){let r=await jS(t,e,n);return cn.audit(r.artifacts,r.runnerOptions)}async function zS(t,e){let n=await IS(t,e);return cn.audit(n.artifacts,n.runnerOptions)}async function HS(t,e){let{endTimespanGather:n}=await OS(t,e);return{endTimespan:s(async()=>{let a=await n();return cn.audit(a.artifacts,a.runnerOptions)},"endTimespan")}}var RGe,KB,bt=v(()=>{"use strict";d();Vi();$a();$B();mp();US();MS();qS();Yt();J();Ue();De();gh();YB();Yt();s($se,"lighthouse");s(Pf,"navigation");s(zS,"snapshot");s(HS,"startTimespan");RGe=sa.getDefaultTraceCategories(),KB=$se});d();Bi();He();bt();k();la();Vn();globalThis.Buffer=H;function Yse(t,e){let n={onlyCategories:t,screenEmulation:{disabled:!0}};return e==="desktop"&&(n.throttling=Wn.desktopDense4G,n.emulatedUserAgent=Wa.desktop,n.formFactor="desktop"),{extends:"lighthouse:default",plugins:["lighthouse-plugin-publisher-ads"],settings:n}}s(Yse,"createConfig");function Kse(t){N.events.addListener("status",t),N.events.addListener("warning",t)}s(Kse,"listenForStatus");function Jse(t){return Zm(t,MF())}s(Jse,"lookupCanonicalLocale");function Xse(t,{page:e,...n}){return Pf(e,t,n)}s(Xse,"runLighthouseNavigation");function Zse({page:t,...e}){return HS(t,e)}s(Zse,"startLighthouseTimespan");function Qse({page:t,...e}){return zS(t,e)}s(Qse,"runLighthouseSnapshot");typeof self<"u"?(globalThis.isDevtools=!0,self.runLighthouseNavigation=Xse,self.navigation=Pf,self.startLighthouseTimespan=Zse,self.startTimespan=HS,self.runLighthouseSnapshot=Qse,self.snapshot=zS,self.createConfig=Yse,self.listenForStatus=Kse,self.registerLocaleData=LF,self.lookupLocale=Jse):globalThis.runBundledLighthouse=KB;})();
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+/*! Bundled license information:
+
+lighthouse-stack-packs/packs/joomla.js:
+  (**
+   * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.
+   * Licensed under the Apache License, Version 2.0 (the 'License'); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+   *)
+
+image-ssim/index.js:
+  (**
    * @preserve
    * Copyright 2015 Igor Bezkrovny
    * All rights reserved. (MIT Licensed)
    *
    * ssim.ts - part of Image Quantization Library
-   */!function(e){var t,n;(t=e.Channels||(e.Channels={}))[t.Grey=1]="Grey",t[t.GreyAlpha=2]="GreyAlpha",t[t.RGB=3]="RGB",t[t.RGBAlpha=4]="RGBAlpha",e.Channels,e.compare=function compare(e,t,a,r,o,i,s){if(void 0===a&&(a=8),void 0===r&&(r=.01),void 0===o&&(o=.03),void 0===i&&(i=!0),void 0===s&&(s=8),e.width!==t.width||e.height!==t.height)throw new Error("Images have different sizes!");var c=(1<<s)-1,l=Math.pow(r*c,2),u=Math.pow(o*c,2),d=0,m=0,p=0;return n._iterate(e,t,a,i,(function iteration(e,t,n,a){var r,o,i;r=o=i=0;for(var s=0;s<e.length;s++)o+=Math.pow(e[s]-n,2),i+=Math.pow(t[s]-a,2),r+=(e[s]-n)*(t[s]-a);var c=e.length-1;o/=c,i/=c;var h=(2*n*a+l)*(2*(r/=c)+u),f=(Math.pow(n,2)+Math.pow(a,2)+l)*(o+i+u);m+=h/f,p+=(2*r+u)/(o+i+u),d++})),{ssim:m/d,mcs:p/d}},function(e){function _lumaValuesForWindow(e,t,n,a,r,o){for(var i=e.data,s=new Float32Array(new ArrayBuffer(a*r*4)),c=0,l=n+r,u=n;u<l;u++){var d=u*e.width,m=(d+t)*e.channels,p=(d+t+a)*e.channels;switch(e.channels){case 1:
-for(;m<p;)s[c++]=i[m++];break;case 2:for(;m<p;)s[c++]=i[m++]*(i[m++]/255);break;case 3:if(o)for(;m<p;)s[c++]=.212655*i[m++]+.715158*i[m++]+.072187*i[m++];else for(;m<p;)s[c++]=i[m++]+i[m++]+i[m++];break;case 4:if(o)for(;m<p;)s[c++]=(.212655*i[m++]+.715158*i[m++]+.072187*i[m++])*(i[m++]/255);else for(;m<p;)s[c++]=(i[m++]+i[m++]+i[m++])*(i[m++]/255)}}return s}function _averageLuma(e){for(var t=0,n=0;n<e.length;n++)t+=e[n];return t/e.length}e._iterate=function _iterate(e,t,n,a,r){for(var o=e.width,i=e.height,s=0;s<i;s+=n)for(var c=0;c<o;c+=n){var l=Math.min(n,o-c),u=Math.min(n,i-s),d=_lumaValuesForWindow(e,c,s,l,u,a),m=_lumaValuesForWindow(t,c,s,l,u,a);r(d,m,_averageLuma(d),_averageLuma(m))}}}(n||(n={}))}(Gf||(Gf={}));const Kf=Gf,Jf=Math.log(4/6);function calculateFastModeAllowableChange(e){const t=e/1e3;return 6*Math.exp(Jf*t)-1}function calculateProgressBetweenFrames(e,t,n,a,r,o){if(!a)return void e.forEach((e=>o(e,r(e),!1)))
-;const i=e[t],s=e[n],c=s.getTimeStamp()-i.getTimeStamp(),l=r(i),u=r(s);if(o(i,l,!1),o(s,u,!1),Math.abs(l-u)<calculateFastModeAllowableChange(c))for(let a=t+1;a<n;a++)o(e[a],l,!0);else if(n-t>1){const i=Math.floor((t+n)/2);calculateProgressBetweenFrames(e,t,i,a,r,o),calculateProgressBetweenFrames(e,i,n,a,r,o)}}function calculateFrameSimilarity(e,t){const n={channels:4},a=Object.assign(e.getParsedImage(),n),r=Object.assign(t.getParsedImage(),n);return Kf.compare(a,r).ssim}var Xf={calculateFastModeAllowableChange,calculateFrameSimilarity,calculateVisualProgress:function calculateVisualProgress(e,t){const n=e[0],a=e[e.length-1];return calculateProgressBetweenFrames(e,0,e.length-1,t&&t.fastMode,(function getProgress(e){return"number"==typeof e.getProgress()?e.getProgress():function calculateFrameProgress(e,t,n){let a=0,r=0;const o=e.getHistogram(),i=t.getHistogram(),s=n.getHistogram();for(let e=0;e<3;e++)for(let t=0;t<256;t++){
-const n=o[e][t],c=i[e][t],l=s[e][t],u=Math.abs(n-c),d=Math.abs(l-c);r+=Math.min(u,d),a+=d}let c;return c=0===r&&0===a?100:Math.floor(r/a*100),c}(e,n,a)}),(function setProgress(e,t,n){return e.setProgress(t,n)})),e},calculatePerceptualProgress:function calculatePerceptualProgress(e,t){const n=e[0],a=e[e.length-1],r=calculateFrameSimilarity(n,a);return calculateProgressBetweenFrames(e,0,e.length-1,t&&t.fastMode,(function getProgress(e){if("number"==typeof e.getPerceptualProgress())return e.getPerceptualProgress();const t=calculateFrameSimilarity(e,a);return Math.max(100*(t-r)/(1-r),0)}),(function setProgress(e,t,n){return e.setPerceptualProgress(t,n)})),e},calculateSpeedIndexes:function calculateSpeedIndexes(e,t){const n="number"==typeof e[0].getProgress(),a="number"==typeof e[0].getPerceptualProgress(),r=n?"getProgress":"getPerceptualProgress",o=t.startTs;let i,s;for(let t=0;t<e.length&&!s;t++)e[t][r]()>0&&(s=e[t].getTimeStamp())
-;for(let t=0;t<e.length&&!i;t++)e[t][r]()>=100&&(i=e[t].getTimeStamp());let c=e[0].getTimeStamp(),l=e[0].getProgress(),u=e[0].getPerceptualProgress(),d=s-o,m=s-o;return e.forEach((function(e){if(e.getTimeStamp()>s){const t=e.getTimeStamp()-c;d+=t*(1-l),m+=t*(1-u)}c=e.getTimeStamp(),l=e.getProgress()/100,u=e.getPerceptualProgress()/100})),d=n?d:void 0,m=a?m:void 0,{firstPaintTs:s,visuallyCompleteTs:i,speedIndex:d,perceptualSpeedIndex:m}}};const Zf=Yf,Qf=Xf;const ey={All:"all",pSI:"perceptualSpeedIndex",SI:"speedIndex"};var lib=function(e,t){const n=t&&t.include||ey.All;if(!Object.keys(ey).some((e=>ey[e]===n)))throw new Error(`Unrecognized include option: ${n}`);return Zf.extractFramesFromTimeline(e,t).then((function(e){const a=e.frames;return n!==ey.All&&n!==ey.SI||Qf.calculateVisualProgress(a,t),n!==ey.All&&n!==ey.pSI||Qf.calculatePerceptualProgress(a,t),function calculateValues(e,t){
-const n=Qf.calculateSpeedIndexes(e,t),a=Math.floor(t.endTs-t.startTs),r=Math.floor(n.firstPaintTs-t.startTs),o=Math.floor(n.visuallyCompleteTs-t.startTs);return{beginning:t.startTs,end:t.endTs,frames:e,first:r,complete:o,duration:a,speedIndex:n.speedIndex,perceptualSpeedIndex:n.perceptualSpeedIndex}}(a,e)}))};const ty=makeComputedArtifact(class Speedline{static async compute_(e,t){return mo.request(e,t).then((t=>{const n=e.traceEvents.slice(),a=t.timestamps.timeOrigin;return lib(n,{timeOrigin:a,fastMode:!0,include:"speedIndex"})})).catch((e=>{if(/No screenshots found in trace/.test(e.message))throw new LighthouseError(LighthouseError.errors.NO_SCREENSHOTS);throw e})).then((e=>{if(0===e.frames.length)throw new LighthouseError(LighthouseError.errors.NO_SPEEDLINE_FRAMES);if(0===e.speedIndex)throw new LighthouseError(LighthouseError.errors.SPEEDINDEX_OF_ZERO);return e}))}},null);const ny=makeComputedArtifact(class FirstContentfulPaintAllFrames extends NavigationMetric{
-static computeSimulatedMetric(){throw new Error("FCP All Frames not implemented in lantern")}static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaintAllFrames,timestamp:t.timestamps.firstContentfulPaintAllFrames}}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const ay=makeComputedArtifact(class FirstMeaningfulPaint$1 extends NavigationMetric{static computeSimulatedMetric(e,t){const n=NavigationMetric.getMetricComputationInput(e);return Mm.request(n,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.firstMeaningfulPaint)throw new LighthouseError(LighthouseError.errors.NO_FMP);return{timing:t.timings.firstMeaningfulPaint,timestamp:t.timestamps.firstMeaningfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const ry=makeComputedArtifact(class LargestContentfulPaintAllFrames extends NavigationMetric{static async computeSimulatedMetric(){
-throw new Error("LCP All Frames not implemented in lantern")}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.largestContentfulPaintAllFrames)throw new LighthouseError(LighthouseError.errors.NO_LCP_ALL_FRAMES);return{timing:t.timings.largestContentfulPaintAllFrames,timestamp:t.timestamps.largestContentfulPaintAllFrames}}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);class LanternSpeedIndex extends LanternMetric{static get COEFFICIENTS(){return{intercept:-250,optimistic:1.4,pessimistic:.65}}static getScaledCoefficients(e){const t=this.COEFFICIENTS,n=Jr.mobileSlow4G.rttMs-30,a=Math.max((e-30)/n,0);return{intercept:t.intercept*a,optimistic:.5+(t.optimistic-.5)*a,pessimistic:.5+(t.pessimistic-.5)*a}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");if(!t.speedline)throw new Error("missing speedline")
-;const n=t.fcpResult.pessimisticEstimate.timeInMs;return{timeInMs:t.optimistic?t.speedline.speedIndex:LanternSpeedIndex.computeLayoutBasedSpeedIndex(e.nodeTimings,n),nodeTimings:e.nodeTimings}}static async compute_(e,t){const n=await ty.request(e.trace,t),a=await Im.request(e,t),r=await this.computeMetricWithGraphs(e,t,{speedline:n,fcpResult:a});return r.timing=Math.max(r.timing,a.timing),r}static computeLayoutBasedSpeedIndex(e,t){const n=[];for(const[t,a]of e.entries())if(t.type===BaseNode.TYPES.CPU&&t.childEvents.some((e=>"Layout"===e.name))){const e=Math.max(Math.log2(a.endTime-a.startTime),0);n.push({time:a.endTime,weight:e})}const a=n.map((e=>e.weight*Math.max(e.time,t))).reduce(((e,t)=>e+t),0),r=n.map((e=>e.weight)).reduce(((e,t)=>e+t),0);return r?a/r:t}}const oy=makeComputedArtifact(LanternSpeedIndex,["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const iy=makeComputedArtifact(class SpeedIndex$1 extends NavigationMetric{static computeSimulatedMetric(e,t){
-const n=NavigationMetric.getMetricComputationInput(e);return oy.request(n,t)}static async computeObservedMetric(e,t){const n=await ty.request(e.trace,t),a=Math.round(n.speedIndex),r=1e3*(a+n.beginning);return Promise.resolve({timing:a,timestamp:r})}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);class LanternMaxPotentialFID extends LanternMetric{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");const n=t.optimistic?t.fcpResult.pessimisticEstimate.timeInMs:t.fcpResult.optimisticEstimate.timeInMs,a=LanternMaxPotentialFID.getTimingsAfterFCP(e.nodeTimings,n);return{timeInMs:Math.max(...a.map((e=>e.duration)),16),nodeTimings:e.nodeTimings}}static async compute_(e,t){const n=await Im.request(e,t);return super.computeMetricWithGraphs(e,t,{fcpResult:n})}
-static getTimingsAfterFCP(e,t){return Array.from(e.entries()).filter((([e,n])=>e.type===BaseNode.TYPES.CPU&&n.endTime>t)).map((([e,t])=>t))}}const sy=makeComputedArtifact(LanternMaxPotentialFID,["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const cy=makeComputedArtifact(class MaxPotentialFID$1 extends NavigationMetric{static computeSimulatedMetric(e,t){const n=NavigationMetric.getMetricComputationInput(e);return sy.request(n,t)}static computeObservedMetric(e){const{firstContentfulPaint:t}=e.processedNavigation.timings,n=TraceProcessor.getMainThreadTopLevelEvents(e.processedTrace,t).filter((e=>e.duration>=1));return Promise.resolve({timing:Math.max(...n.map((e=>e.duration)),16)})}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);function calculateTbtImpactForEvent(e,t,n,a){let r=50;if(a&&(r*=e.duration/a.duration),e.duration<r)return 0;if(e.end<t)return 0;if(e.start>n)return 0;const o=Math.max(e.start,t),i=Math.min(e.end,n)-o;return i<r?0:i-r
-}function calculateSumOfBlockingTime(e,t,n){if(n<=t)return 0;let a=0;for(const r of e)a+=calculateTbtImpactForEvent(r,t,n);return a}class LanternTotalBlockingTime extends LanternMetric{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");if(!t.interactiveResult)throw new Error("missing interactiveResult");const n=t.optimistic?t.fcpResult.pessimisticEstimate.timeInMs:t.fcpResult.optimisticEstimate.timeInMs,a=t.optimistic?t.interactiveResult.optimisticEstimate.timeInMs:t.interactiveResult.pessimisticEstimate.timeInMs;return{timeInMs:calculateSumOfBlockingTime(LanternTotalBlockingTime.getTopLevelEvents(e.nodeTimings,50),n,a),nodeTimings:e.nodeTimings}}static async compute_(e,t){const n=await Im.request(e,t),a=await Lm.request(e,t);return this.computeMetricWithGraphs(e,t,{fcpResult:n,interactiveResult:a
-})}static getTopLevelEvents(e,t){const n=[];for(const[a,r]of e.entries())a.type===BaseNode.TYPES.CPU&&(r.duration<t||n.push({start:r.startTime,end:r.endTime,duration:r.duration}));return n}}const ly=makeComputedArtifact(LanternTotalBlockingTime,["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);const uy=makeComputedArtifact(class TotalBlockingTime$1 extends Metric{static computeSimulatedMetric(e,t){const n=Metric.getMetricComputationInput(e);return ly.request(n,t)}static async computeObservedMetric(e,t){const n=TraceProcessor.getMainThreadTopLevelEvents(e.processedTrace);if(e.processedNavigation){const{firstContentfulPaint:a}=e.processedNavigation.timings,r=Metric.getMetricComputationInput(e);return{timing:calculateSumOfBlockingTime(n,a,(await ep.request(r,t)).timing)}}return{timing:calculateSumOfBlockingTime(n,0,e.processedTrace.timings.traceEnd)}}},["devtoolsLog","gatherContext","settings","simulator","trace","URL"]);class TimingSummary{
-static async summarize(e,t,n,a,r,o){const i={trace:e,devtoolsLog:t,gatherContext:n,settings:a,URL:r},requestOrUndefined=(e,t)=>e.request(t,o).catch((e=>{})),s=await mo.request(e,o),c=await requestOrUndefined(Lc,e),l=await ty.request(e,o),u=await requestOrUndefined(ip,i),d=await requestOrUndefined(ny,i),m=await requestOrUndefined(ay,i),p=await requestOrUndefined(sf,i),h=await requestOrUndefined(ry,i),f=await requestOrUndefined(ep,i),y=await requestOrUndefined(Uc,e),b=await requestOrUndefined(cy,i),v=await requestOrUndefined(iy,i),w=await requestOrUndefined(uy,i),D=await requestOrUndefined(lf,i),E=await requestOrUndefined(cf,i),{cumulativeLayoutShift:T,cumulativeLayoutShiftMainFrame:C}=y||{};return{metrics:{firstContentfulPaint:u?.timing,firstContentfulPaintTs:u?.timestamp,firstContentfulPaintAllFrames:d?.timing,firstContentfulPaintAllFramesTs:d?.timestamp,firstMeaningfulPaint:m?.timing,firstMeaningfulPaintTs:m?.timestamp,largestContentfulPaint:p?.timing,
-largestContentfulPaintTs:p?.timestamp,largestContentfulPaintAllFrames:h?.timing,largestContentfulPaintAllFramesTs:h?.timestamp,interactive:f?.timing,interactiveTs:f?.timestamp,speedIndex:v?.timing,speedIndexTs:v?.timestamp,totalBlockingTime:w?.timing,maxPotentialFID:b?.timing,cumulativeLayoutShift:T,cumulativeLayoutShiftMainFrame:C,lcpLoadStart:D?.loadStart,lcpLoadEnd:D?.loadEnd,timeToFirstByte:E?.timing,timeToFirstByteTs:E?.timestamp,observedTimeOrigin:s.timings.timeOrigin,observedTimeOriginTs:s.timestamps.timeOrigin,observedNavigationStart:c?.timings.timeOrigin,observedNavigationStartTs:c?.timestamps.timeOrigin,observedFirstPaint:c?.timings.firstPaint,observedFirstPaintTs:c?.timestamps.firstPaint,observedFirstContentfulPaint:c?.timings.firstContentfulPaint,observedFirstContentfulPaintTs:c?.timestamps.firstContentfulPaint,observedFirstContentfulPaintAllFrames:c?.timings.firstContentfulPaintAllFrames,observedFirstContentfulPaintAllFramesTs:c?.timestamps.firstContentfulPaintAllFrames,
-observedFirstMeaningfulPaint:c?.timings.firstMeaningfulPaint,observedFirstMeaningfulPaintTs:c?.timestamps.firstMeaningfulPaint,observedLargestContentfulPaint:c?.timings.largestContentfulPaint,observedLargestContentfulPaintTs:c?.timestamps.largestContentfulPaint,observedLargestContentfulPaintAllFrames:c?.timings.largestContentfulPaintAllFrames,observedLargestContentfulPaintAllFramesTs:c?.timestamps.largestContentfulPaintAllFrames,observedTraceEnd:s.timings.traceEnd,observedTraceEndTs:s.timestamps.traceEnd,observedLoad:c?.timings.load,observedLoadTs:c?.timestamps.load,observedDomContentLoaded:c?.timings.domContentLoaded,observedDomContentLoadedTs:c?.timestamps.domContentLoaded,observedCumulativeLayoutShift:T,observedCumulativeLayoutShiftMainFrame:C,observedFirstVisualChange:l.first,observedFirstVisualChangeTs:1e3*(l.first+l.beginning),observedLastVisualChange:l.complete,observedLastVisualChangeTs:1e3*(l.complete+l.beginning),observedSpeedIndex:l.speedIndex,
-observedSpeedIndexTs:1e3*(l.speedIndex+l.beginning)},debugInfo:{lcpInvalidated:!!c?.lcpInvalidated}}}static async compute_(e,t){return TimingSummary.summarize(e.trace,e.devtoolsLog,e.gatherContext,e.settings,e.URL,t)}}const dy=makeComputedArtifact(TimingSummary,["devtoolsLog","gatherContext","settings","trace","URL"]),my=new Set(["cumulativeLayoutShift","cumulativeLayoutShiftMainFrame","observedCumulativeLayoutShift","observedCumulativeLayoutShiftMainFrame"]);var py=Object.freeze({__proto__:null,default:class Metrics extends Audit{static get meta(){return{id:"metrics",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:"Metrics",description:"Collects all available metrics.",supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static async audit(e,t){const n=e.GatherContext,a=e.traces[Audit.DEFAULT_PASS],r=e.devtoolsLogs[Audit.DEFAULT_PASS],o=e.URL,i=await dy.request({trace:a,devtoolsLog:r,gatherContext:n,settings:t.settings,URL:o
-},t),s=i.metrics,c=i.debugInfo;for(const[e,t]of Object.entries(s)){const n=e;"number"!=typeof t||my.has(n)||(s[n]=Math.round(t))}const l={type:"debugdata",items:[s,c]};return{score:1,numericValue:s.interactive||0,numericUnit:"millisecond",details:l}}}});const gy={description:"Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more about the Cumulative Layout Shift metric](https://web.dev/cls/)."},hy=createIcuMessageFn("core/audits/metrics/cumulative-layout-shift.js",gy);var fy=Object.freeze({__proto__:null,default:class CumulativeLayoutShift extends Audit{static get meta(){return{id:"cumulative-layout-shift",title:hy(Ar.cumulativeLayoutShiftMetric),description:hy(gy.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:.1,median:.25}}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],{cumulativeLayoutShift:a,...r}=await Uc.request(n,t),o={type:"debugdata",
-items:[r]};return{score:Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a),numericValue:a,numericUnit:"unitless",displayValue:a.toLocaleString(t.settings.locale),details:o}}},UIStrings:gy});const yy={description:"Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more about the Interaction to Next Paint metric](https://web.dev/inp/)."},by=createIcuMessageFn("core/audits/metrics/experimental-interaction-to-next-paint.js",yy);class ExperimentalInteractionToNextPaint extends Audit{static get meta(){return{id:"experimental-interaction-to-next-paint",title:by(Ar.interactionToNextPaint),description:by(yy.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:200,median:500}}static async audit(e,t){const{settings:n}=t;if("simulate"===n.throttlingMethod)return{score:null,notApplicable:!0};const a={
-trace:e.traces[Audit.DEFAULT_PASS],settings:n},r=await Bc.request(a,t);if(null===r)return{score:null,notApplicable:!0};const o="FallbackTiming"===r.name?r.duration:r.args.data.duration;return{score:Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},o),numericValue:o,numericUnit:"millisecond",displayValue:by(Ar.ms,{timeInMs:o})}}}var vy=Object.freeze({__proto__:null,default:ExperimentalInteractionToNextPaint,UIStrings:yy});const wy=Jr.mobileRegular3G;var Dy=Object.freeze({__proto__:null,default:class FirstContentfulPaint3G extends Audit{static get meta(){return{id:"first-contentful-paint-3g",title:"First Contentful Paint (3G)",description:"First Contentful Paint 3G marks the time at which the first text or image is painted while on a 3G network. [Learn more about the First Contentful Paint (3G) metric](https://developers.google.com/web/tools/lighthouse/audits/first-contentful-paint).",scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],
-requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{p10:2700,median:4500}}static async audit(e,t){const n=e.GatherContext,a={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:n,settings:{...t.settings,throttlingMethod:"simulate",throttling:wy},URL:e.URL},r=await ip.request(a,t);return{score:Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},r.timing),numericValue:r.timing,numericUnit:"millisecond",displayValue:`${r.timing} ms`}}}});const Ey={description:"First Contentful Paint marks the time at which the first text or image is painted. [Learn more about the First Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."},Ty=createIcuMessageFn("core/audits/metrics/first-contentful-paint.js",Ey);var Cy=Object.freeze({__proto__:null,default:class FirstContentfulPaint extends Audit{static get meta(){return{
-id:"first-contentful-paint",title:Ty(Ar.firstContentfulPaintMetric),description:Ty(Ey.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:1800,median:3e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings,URL:e.URL},a=await ip.request(n,t),r=t.options[t.settings.formFactor];return{score:Audit.computeLogNormalScore(r.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:Ty(Ar.seconds,{timeInMs:a.timing})}}},UIStrings:Ey});const Sy={
-description:"First Meaningful Paint measures when the primary content of a page is visible. [Learn more about the First Meaningful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."},_y=createIcuMessageFn("core/audits/metrics/first-meaningful-paint.js",Sy);var Ay=Object.freeze({__proto__:null,default:class FirstMeaningfulPaint extends Audit{static get meta(){return{id:"first-meaningful-paint",title:_y(Ar.firstMeaningfulPaintMetric),description:_y(Sy.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2336,median:4e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings,URL:e.URL
-},a=await ay.request(n,t),r=t.options[t.settings.formFactor];return{score:Audit.computeLogNormalScore(r.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:_y(Ar.seconds,{timeInMs:a.timing})}}},UIStrings:Sy});const ky={description:"Time to Interactive is the amount of time it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."},xy=createIcuMessageFn("core/audits/metrics/interactive.js",ky);var Fy=Object.freeze({__proto__:null,default:class InteractiveMetric extends Audit{static get meta(){return{id:"interactive",title:xy(Ar.interactiveMetric),description:xy(ky.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3785,median:7300}},desktop:{scoring:{p10:2468,median:4500}}}}
-static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings,URL:e.URL},a=(await ep.request(n,t)).timing,r=t.options[t.settings.formFactor];return{score:Audit.computeLogNormalScore(r.scoring,a),numericValue:a,numericUnit:"millisecond",displayValue:xy(Ar.seconds,{timeInMs:a})}}},UIStrings:ky});const Ry={description:"Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)"},Iy=createIcuMessageFn("core/audits/metrics/largest-contentful-paint.js",Ry);var My=Object.freeze({__proto__:null,default:class LargestContentfulPaint extends Audit{static get meta(){return{id:"largest-contentful-paint",title:Iy(Ar.largestContentfulPaintMetric),description:Iy(Ry.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,
-supportedModes:["navigation"],requiredArtifacts:["HostUserAgent","traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2500,median:4e3}},desktop:{scoring:{p10:1200,median:2400}}}}static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings,URL:e.URL},a=await sf.request(n,t),r=t.options[t.settings.formFactor];return{score:Audit.computeLogNormalScore(r.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:Iy(Ar.seconds,{timeInMs:a.timing})}}},UIStrings:Ry});const Ly={description:"The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more about the Maximum Potential First Input Delay metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/)."},Ny=createIcuMessageFn("core/audits/metrics/max-potential-fid.js",Ly)
-;var Py=Object.freeze({__proto__:null,default:class MaxPotentialFID extends Audit{static get meta(){return{id:"max-potential-fid",title:Ny(Ar.maxPotentialFIDMetric),description:Ny(Ly.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{p10:130,median:250}}static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings,URL:e.URL},a=await cy.request(n,t);return{score:Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:Ny(Ar.ms,{timeInMs:a.timing})}}},UIStrings:Ly});const Oy={
-description:"Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/)."},By=createIcuMessageFn("core/audits/metrics/speed-index.js",Oy);var Uy=Object.freeze({__proto__:null,default:class SpeedIndex extends Audit{static get meta(){return{id:"speed-index",title:By(Ar.speedIndexMetric),description:By(Oy.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3387,median:5800}},desktop:{scoring:{p10:1311,median:2300}}}}static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings,URL:e.URL},a=await iy.request(n,t),r=t.options[t.settings.formFactor];return{
-score:Audit.computeLogNormalScore(r.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:By(Ar.seconds,{timeInMs:a.timing})}}},UIStrings:Oy});const jy={description:"Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more about the Total Blocking Time metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/)."},zy=createIcuMessageFn("core/audits/metrics/total-blocking-time.js",jy);var qy=Object.freeze({__proto__:null,default:class TotalBlockingTime extends Audit{static get meta(){return{id:"total-blocking-time",title:zy(Ar.totalBlockingTimeMetric),description:zy(jy.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static get defaultOptions(){return{mobile:{scoring:{p10:200,median:600}},desktop:{scoring:{p10:150,median:350}}}}static async audit(e,t){
-const n=e.traces[Audit.DEFAULT_PASS],a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=e.GatherContext,o={trace:n,devtoolsLog:a,gatherContext:r,settings:t.settings,URL:e.URL};if("timespan"===r.gatherMode&&"simulate"===t.settings.throttlingMethod)return{score:1,notApplicable:!0};const i=await uy.request(o,t),s=t.options[t.settings.formFactor];return{score:Audit.computeLogNormalScore(s.scoring,i.timing),numericValue:i.timing,numericUnit:"millisecond",displayValue:zy(Ar.ms,{timeInMs:i.timing})}}},UIStrings:jy});var Wy=Object.freeze({__proto__:null,default:class NetworkRequests extends Audit{static get meta(){return{id:"network-requests",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:"Network Requests",description:"Lists the network requests that were made during page load.",requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await bo.request(n,t),r=await li.request({URL:e.URL,devtoolsLog:n
-},t),o=a.reduce(((e,t)=>Math.min(e,t.rendererStartTime)),1/0);let i;if("navigation"===e.GatherContext.gatherMode){const a=await mc.request({devtoolsLog:n,URL:e.URL},t);i=a.frameId}const normalizeTime=e=>e<o||!Number.isFinite(e)?void 0:e-o,s=a.map((e=>{const t=e.lrStatistics?.endTimeDeltaMs,n=e.lrStatistics?.TCPMs,a=e.lrStatistics?.requestMs,o=e.lrStatistics?.responseMs,s=e.isLinkPreload||void 0,c=i&&e.frameId===i||void 0,l=r.entityByUrl.get(e.url);return{url:UrlUtils.elideDataURI(e.url),sessionTargetType:e.sessionTargetType,protocol:e.protocol,rendererStartTime:normalizeTime(e.rendererStartTime),networkRequestTime:normalizeTime(e.networkRequestTime),networkEndTime:normalizeTime(e.networkEndTime),finished:e.finished,transferSize:e.transferSize,resourceSize:e.resourceSize,statusCode:e.statusCode,mimeType:e.mimeType,resourceType:e.resourceType,priority:e.priority,isLinkPreload:s,experimentalFromMainFrame:c,entity:l?.name,lrEndTimeDeltaMs:t,lrTCPMs:n,lrRequestMs:a,lrResponseMs:o}
-})),c=Audit.makeTableDetails([{key:"url",valueType:"url",label:"URL"},{key:"protocol",valueType:"text",label:"Protocol"},{key:"networkRequestTime",valueType:"ms",granularity:1,label:"Network Request Time"},{key:"networkEndTime",valueType:"ms",granularity:1,label:"Network End Time"},{key:"transferSize",valueType:"bytes",displayUnit:"kb",granularity:1,label:"Transfer Size"},{key:"resourceSize",valueType:"bytes",displayUnit:"kb",granularity:1,label:"Resource Size"},{key:"statusCode",valueType:"text",label:"Status Code"},{key:"mimeType",valueType:"text",label:"MIME Type"},{key:"resourceType",valueType:"text",label:"Resource Type"}],s),l=Number.isFinite(o)?1e3*o:void 0;return c.debugData={type:"debugdata",networkStartTimeTs:l},{score:1,details:c}}}});const $y={title:"Network Round Trip Times",
-description:"Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more about the Round Trip Time](https://hpbn.co/primer-on-latency-and-bandwidth/)."},Vy=createIcuMessageFn("core/audits/network-rtt.js",$y);var Hy=Object.freeze({__proto__:null,default:class NetworkRTT extends Audit{static get meta(){return{id:"network-rtt",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:Vy($y.title),description:Vy($y.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS];if(!(await bo.request(n,t)).length)return{score:1,notApplicable:!0};const a=await Ho.request(n,t);let r=0;const o=a.rtt,i=[];for(const[e,t]of a.additionalRttByOrigin.entries()){if(!e.startsWith("http"))continue;const n=t+o;i.push({origin:e,rtt:n}),r=Number.isFinite(n)?Math.max(n,r):r}i.sort(((e,t)=>t.rtt-e.rtt));const s=[{key:"origin",
-valueType:"text",label:Vy(Ar.columnURL)},{key:"rtt",valueType:"ms",granularity:1,label:Vy(Ar.columnTimeSpent)}],c=Audit.makeTableDetails(s,i,{sortedBy:["rtt"]});return{score:1,numericValue:r,numericUnit:"millisecond",displayValue:Vy(Ar.ms,{timeInMs:r}),details:c}}},UIStrings:$y});const Gy={title:"Server Backend Latencies",description:"Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more about server response time](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall)."},Yy=createIcuMessageFn("core/audits/network-server-latency.js",Gy);var Ky=Object.freeze({__proto__:null,default:class NetworkServerLatency extends Audit{static get meta(){return{id:"network-server-latency",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:Yy(Gy.title),description:Yy(Gy.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){
-const n=e.devtoolsLogs[Audit.DEFAULT_PASS];if(!(await bo.request(n,t)).length)return{score:1,notApplicable:!0};const a=await Ho.request(n,t);let r=0;const o=[];for(const[e,t]of a.serverResponseTimeByOrigin.entries())e.startsWith("http")&&(r=Math.max(t,r),o.push({origin:e,serverResponseTime:t}));o.sort(((e,t)=>t.serverResponseTime-e.serverResponseTime));const i=[{key:"origin",valueType:"text",label:Yy(Ar.columnURL)},{key:"serverResponseTime",valueType:"ms",granularity:1,label:Yy(Ar.columnTimeSpent)}],s=Audit.makeTableDetails(i,o,{sortedBy:["serverResponseTime"]});return{score:Math.max(1-r/500,0),numericValue:r,numericUnit:"millisecond",displayValue:Yy(Ar.ms,{timeInMs:r}),details:s}}},UIStrings:Gy});const Jy={title:"Avoids `unload` event listeners",failureTitle:"Registers an `unload` listener",
-description:"The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Use `pagehide` or `visibilitychange` events instead. [Learn more about unload event listeners](https://web.dev/bfcache/#never-use-the-unload-event)"},Xy=createIcuMessageFn("core/audits/no-unload-listeners.js",Jy);var Zy=Object.freeze({__proto__:null,default:class NoUnloadListeners extends Audit{static get meta(){return{id:"no-unload-listeners",title:Xy(Jy.title),failureTitle:Xy(Jy.failureTitle),description:Xy(Jy.description),requiredArtifacts:["GlobalListeners","SourceMaps","Scripts"]}}static async audit(e,t){const n=e.GlobalListeners.filter((e=>"unload"===e.type));if(!n.length)return{score:1};const a=await Bm.request(e,t),r=[{key:"source",valueType:"source-location",label:Xy(Ar.columnSource)}],o=n.map((t=>{const{lineNumber:n,columnNumber:r}=t,o=e.Scripts.find((e=>e.scriptId===t.scriptId));if(!o)return{source:{type:"url",value:`(unknown):${n}:${r}`}
-};const i=a.find((e=>e.script.scriptId===o.scriptId));return{source:Audit.makeSourceLocation(o.url,n,r,i)}}));return{score:0,details:Audit.makeTableDetails(r,o)}}},UIStrings:Jy});const Qy={title:"Avoid non-composited animations",description:"Animations which are not composited can be janky and increase CLS. [Learn how to avoid non-composited animations](https://developer.chrome.com/docs/lighthouse/performance/non-composited-animations/)",displayValue:"{itemCount, plural,\n  =1 {# animated element found}\n  other {# animated elements found}\n  }",unsupportedCSSProperty:"{propertyCount, plural,\n    =1 {Unsupported CSS Property: {properties}}\n    other {Unsupported CSS Properties: {properties}}\n  }",transformDependsBoxSize:"Transform-related property depends on box size",filterMayMovePixels:"Filter-related property may move pixels",nonReplaceCompositeMode:'Effect has composite mode other than "replace"',incompatibleAnimations:"Target has another animation which is incompatible",
-unsupportedTimingParameters:"Effect has unsupported timing parameters"},eb=createIcuMessageFn("core/audits/non-composited-animations.js",Qy),tb=[{flag:8192,text:Qy.unsupportedCSSProperty},{flag:2048,text:Qy.transformDependsBoxSize},{flag:4096,text:Qy.filterMayMovePixels},{flag:16,text:Qy.nonReplaceCompositeMode},{flag:64,text:Qy.incompatibleAnimations},{flag:8,text:Qy.unsupportedTimingParameters}];function getActionableFailureReasons(e,t){return tb.filter((t=>e&t.flag)).map((e=>e.text===Qy.unsupportedCSSProperty?eb(e.text,{propertyCount:t.length,properties:t.join(", ")}):eb(e.text)))}var nb=Object.freeze({__proto__:null,default:class NonCompositedAnimations extends Audit{static get meta(){return{id:"non-composited-animations",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:eb(Qy.title),description:eb(Qy.description),requiredArtifacts:["TraceElements","HostUserAgent"]}}static async audit(e){const t=e.HostUserAgent.match(/Chrome\/(\d+)/);if(!t||Number(t[1])<86)return{score:1,
-notApplicable:!0,metricSavings:{CLS:0}};const n=[];let a=!1;e.TraceElements.forEach((e=>{if("animation"!==e.traceEventType)return;const t=e.animations||[],r=new Map;for(const{name:e,failureReasonsMask:n,unsupportedProperties:o}of t){if(!n)continue;const t=getActionableFailureReasons(n,o||[]);for(const n of t){e&&(a=!0);const t=r.get(e)||new Set;t.add(n),r.set(e,t)}}if(!r.size)return;const o=[];for(const[e,t]of r)for(const n of t)o.push({failureReason:n,animation:e});n.push({node:Audit.makeNodeItem(e.node),subItems:{type:"subitems",items:o}})}));const r=[{key:"node",valueType:"node",subItemsHeading:{key:"failureReason",valueType:"text"},label:eb(Ar.columnElement)}];a&&r.push({key:null,valueType:"text",subItemsHeading:{key:"animation",valueType:"text"},label:eb(Ar.columnName)});const o=Audit.makeTableDetails(r,n);let i;return n.length>0&&(i=eb(Qy.displayValue,{itemCount:n.length})),{score:0===n.length?1:0,notApplicable:0===n.length,metricSavings:{CLS:0},details:o,displayValue:i}}},
-UIStrings:Qy}),ab=Object.freeze({__proto__:null,default:{meta:{id:"oopif-iframe-test-audit",title:"IFrame Elements",failureTitle:"IFrame Elements",description:"Audit to force the inclusion of IFrameElements artifact",requiredArtifacts:["IFrameElements"]},audit:()=>({score:1})}});class ResourceSummary$1{static determineResourceType(e){if(!e.resourceType)return"other";return{Stylesheet:"stylesheet",Image:"image",Media:"media",Font:"font",Script:"script",Document:"document"}[e.resourceType]||"other"}static summarize(e,t,n,a){const r={stylesheet:{count:0,resourceSize:0,transferSize:0},image:{count:0,resourceSize:0,transferSize:0},media:{count:0,resourceSize:0,transferSize:0},font:{count:0,resourceSize:0,transferSize:0},script:{count:0,resourceSize:0,transferSize:0},document:{count:0,resourceSize:0,transferSize:0},other:{count:0,resourceSize:0,transferSize:0},total:{count:0,resourceSize:0,transferSize:0},"third-party":{count:0,resourceSize:0,transferSize:0}
-},o=Budget.getMatchingBudget(n,t.mainDocumentUrl);let i=[];return i=o?.options?.firstPartyHostnames?o.options.firstPartyHostnames:a.firstParty?.domains.map((e=>`*.${e}`))||[`*.${Util.getRootDomain(t.finalDisplayedUrl)}`],e.filter((e=>("other"!==this.determineResourceType(e)||!e.url.endsWith("/favicon.ico"))&&!NetworkRequest.isNonNetworkRequest(e))).forEach((e=>{const t=this.determineResourceType(e);r[t].count++,r[t].resourceSize+=e.resourceSize,r[t].transferSize+=e.transferSize,r.total.count++,r.total.resourceSize+=e.resourceSize,r.total.transferSize+=e.transferSize;i.some((t=>{const n=new URL(e.url);return t.startsWith("*.")?n.hostname.endsWith(t.slice(2)):n.hostname===t}))||(r["third-party"].count++,r["third-party"].resourceSize+=e.resourceSize,r["third-party"].transferSize+=e.transferSize)})),r}static async compute_(e,t){const n=await bo.request(e.devtoolsLog,t),a=await li.request({URL:e.URL,devtoolsLog:e.devtoolsLog},t);return ResourceSummary$1.summarize(n,e.URL,e.budgets,a)}}
-const rb=makeComputedArtifact(ResourceSummary$1,["URL","devtoolsLog","budgets"]),ob={title:"Performance budget",description:"Keep the quantity and size of network requests under the targets set by the provided performance budget. [Learn more about performance budgets](https://developers.google.com/web/tools/lighthouse/audits/budgets).",requestCountOverBudget:"{count, plural,\n    =1 {1 request}\n    other {# requests}\n   }"},ib=createIcuMessageFn("core/audits/performance-budget.js",ob);var sb=Object.freeze({__proto__:null,default:class ResourceBudget extends Audit{static get meta(){return{id:"performance-budget",title:ib(ob.title),description:ib(ob.description),scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","URL"]}}static getRowLabel(e){return{total:Ar.totalResourceType,document:Ar.documentResourceType,script:Ar.scriptResourceType,stylesheet:Ar.stylesheetResourceType,image:Ar.imageResourceType,
-media:Ar.mediaResourceType,font:Ar.fontResourceType,other:Ar.otherResourceType,"third-party":Ar.thirdPartyResourceType}[e]}static tableItems(e,t){return Object.keys(t).map((n=>{const a=ib(this.getRowLabel(n)),r=t[n].count,o=t[n].transferSize;let i,s;if(e.resourceSizes){const t=e.resourceSizes.find((e=>e.resourceType===n));t&&o>1024*t.budget&&(i=o-1024*t.budget)}if(e.resourceCounts){const t=e.resourceCounts.find((e=>e.resourceType===n));if(t&&r>t.budget){const e=r-t.budget;s=ib(ob.requestCountOverBudget,{count:e})}}return{resourceType:n,label:a,requestCount:r,transferSize:o,countOverBudget:s,sizeOverBudget:i}})).filter((t=>!(!e.resourceSizes||!e.resourceSizes.some((e=>e.resourceType===t.resourceType)))||!(!e.resourceCounts||!e.resourceCounts.some((e=>e.resourceType===t.resourceType))))).sort(((e,t)=>(t.sizeOverBudget||0)-(e.sizeOverBudget||0)))}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a={devtoolsLog:n,URL:e.URL,budgets:t.settings.budgets
-},r=await rb.request(a,t),o=await mc.request({URL:e.URL,devtoolsLog:n},t),i=Budget.getMatchingBudget(t.settings.budgets,o.url);if(!i)return{score:0,notApplicable:!0};const s=[{key:"label",valueType:"text",label:ib(Ar.columnResourceType)},{key:"requestCount",valueType:"numeric",label:ib(Ar.columnRequests)},{key:"transferSize",valueType:"bytes",label:ib(Ar.columnTransferSize)},{key:"countOverBudget",valueType:"text",label:""},{key:"sizeOverBudget",valueType:"bytes",label:ib(Ar.columnOverBudget)}];return{details:Audit.makeTableDetails(s,this.tableItems(i,r),{sortedBy:["sizeOverBudget"]}),score:1}}},UIStrings:ob});const cb=createIcuMessageFn("core/audits/predictive-perf.js",{});var lb=Object.freeze({__proto__:null,default:class PredictivePerf extends Audit{static get meta(){return{id:"predictive-perf",title:"Predicted Performance (beta)",description:"Predicted performance evaluates how your site will perform under a cellular connection on a mobile device.",
-scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL"]}}static async audit(e,t){const n=e.GatherContext,a=e.traces[Audit.DEFAULT_PASS],r=e.devtoolsLogs[Audit.DEFAULT_PASS],o=e.URL,i={trace:a,devtoolsLog:r,gatherContext:n,settings:JSON.parse(JSON.stringify(Qr)),URL:o},s=await Im.request(i,t),c=await Mm.request(i,t),l=await Lm.request(i,t),u=await oy.request(i,t),d=await Nm.request(i,t),m=await dy.request(i,t),p={roughEstimateOfFCP:s.timing,optimisticFCP:s.optimisticEstimate.timeInMs,pessimisticFCP:s.pessimisticEstimate.timeInMs,roughEstimateOfFMP:c.timing,optimisticFMP:c.optimisticEstimate.timeInMs,pessimisticFMP:c.pessimisticEstimate.timeInMs,roughEstimateOfTTI:l.timing,optimisticTTI:l.optimisticEstimate.timeInMs,pessimisticTTI:l.pessimisticEstimate.timeInMs,roughEstimateOfSI:u.timing,optimisticSI:u.optimisticEstimate.timeInMs,pessimisticSI:u.pessimisticEstimate.timeInMs,roughEstimateOfLCP:d.timing,
-optimisticLCP:d.optimisticEstimate.timeInMs,pessimisticLCP:d.pessimisticEstimate.timeInMs,roughEstimateOfTTFB:m.metrics.timeToFirstByte,roughEstimateOfLCPLoadStart:m.metrics.lcpLoadStart,roughEstimateOfLCPLoadEnd:m.metrics.lcpLoadEnd};return{score:Audit.computeLogNormalScore({p10:3651,median:1e4},p.roughEstimateOfTTI),numericValue:p.roughEstimateOfTTI,numericUnit:"millisecond",displayValue:cb(Ar.ms,{timeInMs:p.roughEstimateOfTTI}),details:{type:"debugdata",items:[p]}}}}});const ub=/^(optional)$/,db={title:"Fonts with `font-display: optional` are preloaded",failureTitle:"Fonts with `font-display: optional` are not preloaded",description:"Preload `optional` fonts so first-time visitors may use them. [Learn more about preloading fonts](https://web.dev/preload-optional-fonts/)"},mb=createIcuMessageFn("core/audits/preload-fonts.js",db);class PreloadFontsAudit extends Audit{static get meta(){return{id:"preload-fonts",title:mb(db.title),failureTitle:mb(db.failureTitle),
-description:mb(db.description),requiredArtifacts:["devtoolsLogs","URL","CSSUsage"]}}static getURLsAttemptedToPreload(e){const t=e.filter((e=>"Font"===e.resourceType)).filter((e=>e.isLinkPreload)).map((e=>e.url));return new Set(t)}static async audit_(e,t){const n=e.devtoolsLogs[this.DEFAULT_PASS],a=await bo.request(n,t),r=FontDisplay.findFontDisplayDeclarations(e,ub).passingURLs,o=PreloadFontsAudit.getURLsAttemptedToPreload(a),i=Array.from(r).filter((e=>!o.has(e))).map((e=>({url:e}))),s=[{key:"url",valueType:"url",label:mb(Ar.columnURL)}];return{score:i.length>0?0:1,details:Audit.makeTableDetails(s,i),notApplicable:0===r.size}}static async audit(){return{score:1,notApplicable:!0}}}var pb=Object.freeze({__proto__:null,default:PreloadFontsAudit,UIStrings:db});const gb={title:"Preload Largest Contentful Paint image",
-description:"If the LCP element is dynamically added to the page, you should preload the image in order to improve LCP. [Learn more about preloading LCP elements](https://web.dev/optimize-lcp/#optimize-when-the-resource-is-discovered)."},hb=createIcuMessageFn("core/audits/prioritize-lcp-image.js",gb);class PrioritizeLcpImage extends Audit{static get meta(){return{id:"prioritize-lcp-image",title:hb(gb.title),description:hb(gb.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL","TraceElements"],scoreDisplayMode:Audit.SCORING_MODES.NUMERIC}}static shouldPreloadRequest(e,t,n){return!e.isLinkPreload&&(!NetworkRequest.isNonNetworkRequest(e)&&(!(n.length<=2)&&e.frameId===t.frameId))}static findLCPNode(e,t){for(const{node:n}of e.traverseGenerator())if("network"===n.type&&n.record.requestId===t.requestId)return n}static getLcpInitiatorPath(e,t){const n=[];let a=!1,r=e;for(;r;){a||=r.requestId===t.requestId;let e=r.initiator?.type??"other"
-;if(r.initiatorRequest&&r.initiatorRequest===r.redirectSource&&(e="redirect"),r.initiatorRequest||a||(e="fallbackToMain"),n.push({url:r.url,initiatorType:e}),a)break;r=r.initiatorRequest||t}return n}static getLCPNodeToPreload(e,t,n){if(!n)return{};const a=PrioritizeLcpImage.findLCPNode(t,n),r=PrioritizeLcpImage.getLcpInitiatorPath(n,e);if(!a)return{initiatorPath:r};return{lcpNodeToPreload:PrioritizeLcpImage.shouldPreloadRequest(n,e,r)?a:void 0,initiatorPath:r}}static computeWasteWithGraph(e,t,n,a){if(!t)return{wastedMs:0,results:[]};const r=n.cloneWithRelationships(),o=new Set;for(const e of t.getDependencies())o.add(e.id);let i=null,s=null;for(const{node:e}of r.traverseGenerator())"network"===e.type&&(e.isMainDocument()?s=e:e.id===t.id&&(i=e));if(!s)throw new Error("Could not find main document node");if(!i)throw new Error("Could not find the LCP node");i.removeAllDependencies(),i.addDependency(s);const c=a.simulate(n,{flexibleOrdering:!0}),l=a.simulate(r,{flexibleOrdering:!0
-}),u=c.nodeTimings.get(t);if(!u)throw new Error("Impossible - node timings should never be undefined");const d=l.nodeTimings.get(i);if(!d)throw new Error("Impossible - node timings should never be undefined");const m=Array.from(l.nodeTimings.keys()).reduce(((e,t)=>e.set(t.id,t)),new Map);let p=0;for(const e of Array.from(o)){const t=m.get(e);if(!t)throw new Error("Impossible - node should never be undefined");const n=l.nodeTimings.get(t)?.endTime||0;p=Math.max(p,n)}const h=u.endTime-Math.max(d.endTime,p);return{wastedMs:h,results:[{node:Audit.makeNodeItem(e.node),url:t.record.url,wastedMs:h}]}}static async audit(e,t){const n=e.GatherContext,a=e.traces[PrioritizeLcpImage.DEFAULT_PASS],r=e.devtoolsLogs[PrioritizeLcpImage.DEFAULT_PASS],o=e.URL,i=t.settings,s={trace:a,devtoolsLog:r,gatherContext:n,settings:i,URL:o},c=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType));if(!c||"image"!==c.type)return{score:null,notApplicable:!0,metricSavings:{LCP:0}}
-;const l=await mc.request({devtoolsLog:r,URL:o},t),u=await Nm.request(s,t),d=await Go.request({devtoolsLog:r,settings:i},t),m=await Pm.request({trace:a,devtoolsLog:r},t),p=u.pessimisticGraph,{lcpNodeToPreload:h,initiatorPath:f}=PrioritizeLcpImage.getLCPNodeToPreload(l,p,m),{results:y,wastedMs:b}=PrioritizeLcpImage.computeWasteWithGraph(c,h,p,d),v=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:hb(Ar.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:hb(Ar.columnWastedMs)}],w=Audit.makeOpportunityDetails(v,y,{overallSavingsMs:b,sortedBy:["wastedMs"]});return f&&(w.debugData={type:"debugdata",initiatorPath:f,pathLength:f.length}),{score:ByteEfficiencyAudit.scoreForWastedMs(b),numericValue:b,numericUnit:"millisecond",displayValue:b?hb(Ar.displayValueMsSavings,{wastedMs:b}):"",details:w,metricSavings:{LCP:b}}}}var fb=Object.freeze({__proto__:null,default:PrioritizeLcpImage,UIStrings:gb});const yb={title:"Avoid multiple page redirects",
-description:"Redirects introduce additional delays before the page can be loaded. [Learn how to avoid page redirects](https://developer.chrome.com/docs/lighthouse/performance/redirects/)."},bb=createIcuMessageFn("core/audits/redirects.js",yb);class Redirects extends Audit{static get meta(){return{id:"redirects",title:bb(yb.title),description:bb(yb.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["URL","GatherContext","devtoolsLogs","traces"]}}static getDocumentRequestChain(e,t){const n=[];for(const a of t.processEvents){if("navigationStart"!==a.name)continue;const t=a.args.data||{};if(!t.documentLoaderURL||!t.isLoadingMainFrame)continue;let r=e.find((e=>e.requestId===t.navigationId));for(;r;)n.push(r),r=r.redirectDestination}if(!n.length)throw new Error("No navigation requests found");return n}static async audit(e,t){
-const n=t.settings,a=e.traces[Audit.DEFAULT_PASS],r=e.devtoolsLogs[Audit.DEFAULT_PASS],o=e.GatherContext,i=await mo.request(a,t),s=await bo.request(r,t),c={trace:a,devtoolsLog:r,gatherContext:o,settings:n,URL:e.URL},l=await Lm.request(c,t),u=new Map;for(const[e,t]of l.pessimisticEstimate.nodeTimings.entries())"network"===e.type&&u.set(e.record.requestId,t);const d=Redirects.getDocumentRequestChain(s,i);let m=0;const p=[];for(let e=0;e<d.length&&!(d.length<2);e++){const t=d[e],a=d[e+1]||t,r=u.get(t.requestId),o=u.get(a.requestId);if(!r||!o)throw new Error("Could not find redirects in graph");const i=o.startTime-r.startTime,s=a.networkRequestTime-t.networkRequestTime,c="simulate"===n.throttlingMethod?i:s;m+=c,p.push({url:t.url,wastedMs:c})}const h=[{key:"url",valueType:"url",label:bb(Ar.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:bb(Ar.columnTimeSpent)}],f=Audit.makeOpportunityDetails(h,p,{overallSavingsMs:m});return{
-score:d.length<=2?1:ByteEfficiencyAudit.scoreForWastedMs(m),numericValue:m,numericUnit:"millisecond",displayValue:m?bb(Ar.displayValueMsSavings,{wastedMs:m}):"",details:f,metricSavings:{LCP:m,FCP:m}}}}var vb=Object.freeze({__proto__:null,default:Redirects,UIStrings:yb});const wb={title:"Keep request counts low and transfer sizes small",description:"To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more about performance budgets](https://web.dev/use-lighthouse-for-performance-budgets/).",displayValue:"{requestCount, plural, =1 {1 request • {byteCount, number, bytes} KiB} other {# requests • {byteCount, number, bytes} KiB}}"},Db=createIcuMessageFn("core/audits/resource-summary.js",wb);var Eb=Object.freeze({__proto__:null,default:class ResourceSummary extends Audit{static get meta(){return{id:"resource-summary",title:Db(wb.title),description:Db(wb.description),scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["devtoolsLogs","URL"]
-}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await rb.request({devtoolsLog:n,URL:e.URL,budgets:t.settings.budgets},t),r=[{key:"label",valueType:"text",label:Db(Ar.columnResourceType)},{key:"requestCount",valueType:"numeric",label:Db(Ar.columnRequests)},{key:"transferSize",valueType:"bytes",label:Db(Ar.columnTransferSize)}],o={total:Db(Ar.totalResourceType),document:Db(Ar.documentResourceType),script:Db(Ar.scriptResourceType),stylesheet:Db(Ar.stylesheetResourceType),image:Db(Ar.imageResourceType),media:Db(Ar.mediaResourceType),font:Db(Ar.fontResourceType),other:Db(Ar.otherResourceType),"third-party":Db(Ar.thirdPartyResourceType)},i=Object.keys(a).map((e=>({resourceType:e,label:o[e],requestCount:a[e].count,transferSize:a[e].transferSize}))),s=i.find((e=>"third-party"===e.resourceType))||[],c=i.filter((e=>"third-party"!==e.resourceType)).sort(((e,t)=>t.transferSize-e.transferSize)).concat(s);return{details:Audit.makeTableDetails(r,c),score:1,
-displayValue:Db(wb.displayValue,{requestCount:a.total.count,byteCount:a.total.transferSize})}}},UIStrings:wb});class ScreenshotThumbnails extends Audit{static get meta(){return{id:"screenshot-thumbnails",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:"Screenshot Thumbnails",description:"This is what the load of your site looked like.",requiredArtifacts:["traces","GatherContext"]}}static scaleImageToThumbnail(e,t){const n=e.width/t,a=Math.floor(e.height/n),r=new Uint8Array(t*a*4);for(let o=0;o<t;o++)for(let i=0;i<a;i++){const a=Math.floor(o*n),s=4*(Math.floor(i*n)*e.width+a),c=4*(i*t+o);r[c]=e.data[s],r[c+1]=e.data[s+1],r[c+2]=e.data[s+2],r[c+3]=e.data[s+3]}return{width:t,height:a,data:r}}static async _audit(e,t){
-const n=e.traces[Audit.DEFAULT_PASS],a=new Map,r=await ty.request(n,t),o=t.options.minimumTimelineDuration||3e3,i=t.options.numberOfThumbnails||8,s=t.options.thumbnailWidth||null,c=[],l=r.frames.filter((e=>!e.isProgressInterpolated())),u=r.complete||Math.max(...r.frames.map((e=>e.getTimeStamp()-r.beginning))),d=Math.max(u,o);if(!l.length||!Number.isFinite(d))throw new LighthouseError(LighthouseError.errors.INVALID_SPEEDLINE);for(let e=1;e<=i;e++){const t=r.beginning+d*e/i;let n,o=null;e===i?o=l[l.length-1]:l.forEach((e=>{e.getTimeStamp()<=t&&(o=e)}));const u=a.get(o);if(u)n=u;else if(null!==s){const e=o.getParsedImage(),t=ScreenshotThumbnails.scaleImageToThumbnail(e,s);n=$f.encode(t,90).data.toString("base64"),a.set(o,n)}else n=o.getImage().toString("base64"),a.set(o,n);c.push({timing:Math.round(t-r.beginning),timestamp:1e3*t,data:`data:image/jpeg;base64,${n}`})}return{score:1,details:{type:"filmstrip",scale:d,items:c}}}static async audit(e,t){try{return await this._audit(e,t)
-}catch(t){if(new Set([LighthouseError.errors.NO_SCREENSHOTS.code,LighthouseError.errors.SPEEDINDEX_OF_ZERO.code,LighthouseError.errors.NO_SPEEDLINE_FRAMES.code,LighthouseError.errors.INVALID_SPEEDLINE.code]).has(t.code)&&"timespan"===e.GatherContext.gatherMode)return{notApplicable:!0,score:1};throw t}}}var Tb=Object.freeze({__proto__:null,default:ScreenshotThumbnails}),Cb=Object.freeze({__proto__:null,default:{meta:{id:"script-elements-test-audit",title:"ScriptElements",failureTitle:"ScriptElements",description:"Audit to force the inclusion of ScriptElements artifact",requiredArtifacts:["ScriptElements"]},audit:()=>({score:1})}});class ScriptTreemapDataAudit extends Audit{static get meta(){return{id:"script-treemap-data",scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,title:"Script Treemap Data",description:"Used for treemap app",requiredArtifacts:["traces","devtoolsLogs","SourceMaps","Scripts","JsUsage","URL"]}}static makeScriptNode(e,t,n){function newNode(e){return{name:e,
-resourceBytes:0}}const a=newNode(t);function addAllNodesInSourcePath(e,n){let r=a;a.resourceBytes+=n.resourceBytes,n.unusedBytes&&(a.unusedBytes=(a.unusedBytes||0)+n.unusedBytes);const o=e.replace(t,"").split(/\/+/);o.forEach(((e,t)=>{if(0===e.length)return;const a=t===o.length-1;let i=r.children&&r.children.find((t=>t.name===e));i||(i=newNode(e),r.children=r.children||[],r.children.push(i)),r=i,r.resourceBytes+=n.resourceBytes,n.unusedBytes&&(r.unusedBytes=(r.unusedBytes||0)+n.unusedBytes),a&&void 0!==n.duplicatedNormalizedModuleName&&(r.duplicatedNormalizedModuleName=n.duplicatedNormalizedModuleName)}))}for(const[e,t]of Object.entries(n))addAllNodesInSourcePath(e,t);if(function collapseAll(e){for(;e.children&&1===e.children.length;)e.name+="/"+e.children[0].name,e.children=e.children[0].children;if(e.children)for(const t of e.children)collapseAll(t)}(a),!a.name)return{...a,name:e,children:a.children};const r={...a};return r.name=e,r.children=[a],r}static async makeNodes(e,t){
-const n=[],a=new Map,r=await Bm.request(e,t),o=await Um.request(e,t);for(const i of e.Scripts){if("JavaScript"!==i.scriptLanguage)continue;const s=i.url,c=r.find((e=>i.scriptId===e.script.scriptId)),l=e.JsUsage[i.scriptId],u=l?await Cp.request({scriptId:i.scriptId,scriptCoverage:l,bundle:c},t):void 0;let d;if(c&&!("errorMessage"in c.sizes)){const e={};for(const t of Object.keys(c.sizes.files)){const n={resourceBytes:c.sizes.files[t]};u?.sourcesWastedBytes&&(n.unusedBytes=u.sourcesWastedBytes[t]);let a=t;c.rawMap.sourceRoot&&t.startsWith(c.rawMap.sourceRoot)&&(a=t.replace(c.rawMap.sourceRoot,""));const r=Um.normalizeSource(a);o.has(r)&&(n.duplicatedNormalizedModuleName=r),e[t]=n}if(c.sizes.unmappedBytes){const t={resourceBytes:c.sizes.unmappedBytes};u?.sourcesWastedBytes&&(t.unusedBytes=u.sourcesWastedBytes["(unmapped)"]),e["(unmapped)"]=t}d=this.makeScriptNode(i.url,c.rawMap.sourceRoot||"",e)}else d={name:s,resourceBytes:u?.totalBytes??i.length??0,unusedBytes:u?.wastedBytes}
-;if(isInline(i)){let e=a.get(i.executionContextAuxData.frameId);e||(e={name:s,resourceBytes:0,unusedBytes:void 0,children:[]},a.set(i.executionContextAuxData.frameId,e),n.push(e)),e.resourceBytes+=d.resourceBytes,d.unusedBytes&&(e.unusedBytes=(e.unusedBytes||0)+d.unusedBytes),d.name=i.content?"(inline) "+i.content.trimStart().substring(0,15)+"…":"(inline)",e.children?.push(d)}else n.push(d)}return n}static async audit(e,t){return{score:1,details:{type:"treemap-data",nodes:await ScriptTreemapDataAudit.makeNodes(e,t)}}}}var Sb=Object.freeze({__proto__:null,default:ScriptTreemapDataAudit});const _b={title:"Document has a valid `rel=canonical`",failureTitle:"Document does not have a valid `rel=canonical`",description:"Canonical links suggest which URL to show in search results. [Learn more about canonical links](https://developer.chrome.com/docs/lighthouse/seo/canonical/).",explanationConflict:"Multiple conflicting URLs ({urlList})",explanationInvalid:"Invalid URL ({url})",
-explanationRelative:"Is not an absolute URL ({url})",explanationPointsElsewhere:"Points to another `hreflang` location ({url})",explanationRoot:"Points to the domain's root URL (the homepage), instead of an equivalent page of content"},Ab=createIcuMessageFn("core/audits/seo/canonical.js",_b);class Canonical extends Audit{static get meta(){return{id:"canonical",title:Ab(_b.title),failureTitle:Ab(_b.failureTitle),description:Ab(_b.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL","devtoolsLogs"]}}static collectCanonicalURLs(e){const t=new Set,n=new Set;let a,r;for(const o of e)if("body"!==o.source)if("canonical"===o.rel){if(!o.hrefRaw)continue;o.href?UrlUtils.isValid(o.hrefRaw)?t.add(o.href):r=o:a=o}else"alternate"===o.rel&&o.href&&o.hreflang&&n.add(o.href);return{uniqueCanonicalURLs:t,hreflangURLs:n,invalidCanonicalLink:a,relativeCanonicallink:r}}static findInvalidCanonicalURLReason(e){
-const{uniqueCanonicalURLs:t,invalidCanonicalLink:n,relativeCanonicallink:a}=e;if(n)return{score:0,explanation:Ab(_b.explanationInvalid,{url:n.hrefRaw})};if(a)return{score:0,explanation:Ab(_b.explanationRelative,{url:a.hrefRaw})};const r=Array.from(t);return 0===r.length?{score:1,notApplicable:!0}:r.length>1?{score:0,explanation:Ab(_b.explanationConflict,{urlList:r.join(", ")})}:void 0}static findCommonCanonicalURLMistakes(e,t,n){const{hreflangURLs:a}=e;return a.has(n.href)&&a.has(t.href)&&n.href!==t.href?{score:0,explanation:Ab(_b.explanationPointsElsewhere,{url:n.href})}:t.origin===n.origin&&"/"===t.pathname&&"/"!==n.pathname?{score:0,explanation:Ab(_b.explanationRoot)}:void 0}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await mc.request({devtoolsLog:n,URL:e.URL},t),r=new URL(a.url),o=Canonical.collectCanonicalURLs(e.LinkElements),i=Canonical.findInvalidCanonicalURLReason(o);if(i)return i
-;const s=new URL([...o.uniqueCanonicalURLs][0]),c=Canonical.findCommonCanonicalURLMistakes(o,s,r);return c||{score:1}}}var kb=Object.freeze({__proto__:null,default:Canonical,UIStrings:_b});const xb={title:"Links are crawlable",failureTitle:"Links are not crawlable",description:"Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn how to make links crawlable](https://support.google.com/webmasters/answer/9112205)",columnFailingLink:"Uncrawlable Link"},Fb=createIcuMessageFn("core/audits/seo/crawlable-anchors.js",xb);var Rb=Object.freeze({__proto__:null,default:class CrawlableAnchors extends Audit{static get meta(){return{id:"crawlable-anchors",title:Fb(xb.title),failureTitle:Fb(xb.failureTitle),description:Fb(xb.description),requiredArtifacts:["AnchorElements","URL"]}}static audit({AnchorElements:e,URL:t}){
-const n=e.filter((({rawHref:e,name:n="",role:a="",id:r})=>{if(e=e.replace(/\s/g,""),n=n.trim(),(a=a.trim()).length>0)return;if(e.startsWith("mailto:"))return;if(""===e&&r)return;if(e.startsWith("file:"))return!0;if(!(n.length>0)){if(""===e)return!0;if(/javascript:void(\(|)0(\)|)/.test(e))return!0;try{new URL(e,t.finalDisplayedUrl)}catch(e){return!0}}})),a=[{key:"node",valueType:"node",label:Fb(xb.columnFailingLink)}],r=n.map((e=>({node:Audit.makeNodeItem(e.node)})));return{score:Number(0===n.length),details:Audit.makeTableDetails(a,r)}}},UIStrings:xb}),Ib={};!function(e){function min(e,t){return null===e?t:null===t?e:Math.min(e,t)}function max(e,t){return null===e?t:null===t?e:Math.max(e,t)}function translateLengthProperty(e,t,n){return"number"==typeof e?e>=0?clamp(e,1,1e4):void 0:"device-width"===e?100*t:"device-height"===e?100*n:1}function translateZoomProperty(e){
-return"number"==typeof e?e>=0?clamp(e,.1,10):void 0:"yes"===e?1:"device-width"===e||"device-height"===e?10:"no"===e||null===e?.1:void 0}function clamp(e,t,n){return max(min(e,n),t)}e.getRenderingDataFromViewport=function(e,t,n,a,r){var o=t/100,i=n/100,s=null,c=null,l=null,u=null,d=null,m=null,p=null,h=null,f=null,y=t,b=n,v="zoom",w="resizes-visual";if(void 0!==e["maximum-scale"]&&(s=translateZoomProperty(e["maximum-scale"])),void 0!==e["minimum-scale"]&&(c=translateZoomProperty(e["minimum-scale"])),void 0!==e["initial-scale"]&&(l=translateZoomProperty(e["initial-scale"])),null!==c&&null===s&&(c=min(a,translateZoomProperty(e["minimum-scale"]))),void 0!==e.width&&(u="extend-to-zoom",m=translateLengthProperty(e.width,o,i)),void 0!==e.height&&(d="extend-to-zoom",p=translateLengthProperty(e.height,o,i)),void 0!==e["user-scalable"])if("number"==typeof(v=e["user-scalable"]))v=v>=1||v<=-1?"zoom":"fixed";else switch(v){case"yes":case"device-width":case"device-height":v="zoom";break;case"no":
-default:v="fixed"}if(void 0!==e["interactive-widget"])switch(e["interactive-widget"]){case"overlays-content":case"resizes-content":case"resizes-visual":w=e["interactive-widget"];break;default:w="resizes-visual"}null===l||void 0!==e.width&&void 0!==h||(void 0!==e.height?(u=null,m=null):(u="extend-to-zoom",m="extend-to-zoom")),null!==c&&null!==s&&(s=max(c,s)),null!==l&&(l=clamp(l,c,s));var D,E,T=null===l&&null===s?null:min(l,s);return null===T?("extend-to-zoom"===m&&(m=null),"extend-to-zoom"===p&&(p=null),"extend-to-zoom"===u&&(u=m),"extend-to-zoom"===d&&(d=p)):(D=y/T,E=b/T,"extend-to-zoom"===m&&(m=D),"extend-to-zoom"===p&&(p=E),"extend-to-zoom"===u&&(u=max(D,m)),"extend-to-zoom"===d&&(d=max(E,p))),null===u&&null===m||(h=max(u,min(m,y))),null===d&&null===p||(f=max(d,min(p,b))),null===h&&(h=null===f?y:0!==b?Math.round(f*(y/b)):y),null===f&&(f=0!==y?Math.round(h*(b/y)):b),{zoom:l,width:h,height:f,userZoom:v,interactiveWidget:w}},e.parseMetaViewPortContent=function(e){for(var t={
-validProperties:{},unknownProperties:{},invalidValues:{}},n=1;n<=e.length;){for(;n<=e.length&&RegExp(" |\n|\t|\0d|,|;|=").test(e[n-1]);)n++;n<=e.length&&(n=parseProperty(t,e,n))}return t};var t=["width","height","initial-scale","minimum-scale","maximum-scale","user-scalable","shrink-to-fit","viewport-fit","interactive-widget"];function parseProperty(n,a,r){for(var o=r;r<=a.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(a[r-1]);)r++;if(r>a.length||RegExp(",|;").test(a[r-1]))return r;for(var i=a.slice(o-1,r-1);r<=a.length&&!RegExp(",|;|=").test(a[r-1]);)r++;if(r>a.length||RegExp(",|;").test(a[r-1]))return r;for(;r<=a.length&&RegExp(" |\n|\t|\0d|=").test(a[r-1]);)r++;if(r>a.length||RegExp(",|;").test(a[r-1]))return r;for(o=r;r<=a.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(a[r-1]);)r++;return function setProperty(n,a,r){if(t.indexOf(a)>=0){var o=parseFloat(r);if(!isNaN(o))return void(n.validProperties[a]=o);var i=r.toLowerCase()
-;if("yes"===i||"no"===i||"device-width"===i||"device-height"===i||"viewport-fit"===a.toLowerCase()&&("auto"===i||"cover"===i)||"interactive-widget"===a.toLowerCase()&&e.expectedValues["interactive-widget"].includes(i))return void(n.validProperties[a]=i);n.validProperties[a]=null,n.invalidValues[a]=r}else n.unknownProperties[a]=r}(n,i,a.slice(o-1,r-1)),r}e.expectedValues={width:["device-width","device-height","a positive number"],height:["device-width","device-height","a positive number"],"initial-scale":["a positive number"],"minimum-scale":["a positive number"],"maximum-scale":["a positive number"],"user-scalable":["yes","no","0","1"],"shrink-to-fit":["yes","no"],"viewport-fit":["auto","cover"],"interactive-widget":["overlays-content","resizes-content","resizes-visual"]}}(Ib);const Mb=makeComputedArtifact(class ViewportMeta{static async compute_(e){const t=e.find((e=>"viewport"===e.name));if(!t)return{hasViewportTag:!1,isMobileOptimized:!1,parserWarnings:[]}
-;const n=[],a=Ib.parseMetaViewPortContent(t.content||"");Object.keys(a.unknownProperties).length&&n.push(`Invalid properties found: ${JSON.stringify(a.unknownProperties)}`),Object.keys(a.invalidValues).length&&n.push(`Invalid values found: ${JSON.stringify(a.invalidValues)}`);const r=a.validProperties;return{hasViewportTag:!0,isMobileOptimized:Boolean(r.width||r["initial-scale"]),parserWarnings:n}}},null),Lb={title:"Document uses legible font sizes",failureTitle:"Document doesn't use legible font sizes",description:"Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. [Learn more about legible font sizes](https://developer.chrome.com/docs/lighthouse/seo/font-size/).",displayValue:"{decimalProportion, number, extendedPercent} legible text",explanationViewport:"Text is illegible because there's no viewport meta tag optimized for mobile screens.",
-additionalIllegibleText:"Add'l illegible text",legibleText:"Legible text",columnSelector:"Selector",columnPercentPageText:"% of Page Text",columnFontSize:"Font Size"},Nb=createIcuMessageFn("core/audits/seo/font-size.js",Lb);function getSelector(e){const t=function getAttributeMap(e=[]){const t=new Map;for(let n=0;n<e.length;n+=2){const a=e[n],r=e[n+1];if(!a||!r)continue;const o=r.trim();o&&t.set(a.toLowerCase(),o)}return t}(e.attributes);if(t.has("id"))return"#"+t.get("id");{const e=t.get("class");if(e)return"."+e.split(/\s+/).join(".")}return e.nodeName.toLowerCase()}function nodeToTableNode(e){const t=(e.attributes||[]).map(((e,t)=>t%2==0?` ${e}`:`="${e}"`)).join("");return{type:"node",selector:e.parentNode?getSelector(e.parentNode):"",snippet:`<${e.nodeName.toLowerCase()}${t}>`}}var Pb=Object.freeze({__proto__:null,default:class FontSize extends Audit{static get meta(){return{id:"font-size",title:Nb(Lb.title),failureTitle:Nb(Lb.failureTitle),description:Nb(Lb.description),
-requiredArtifacts:["FontSize","URL","MetaElements"]}}static async audit(e,t){if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};if(!(await Mb.request(e.MetaElements,t)).isMobileOptimized)return{score:0,explanation:Nb(Lb.explanationViewport)};const{analyzedFailingNodesData:n,analyzedFailingTextLength:a,failingTextLength:r,totalTextLength:o}=e.FontSize;if(0===o)return{score:1};const i=function getUniqueFailingRules(e){const t=new Map;return e.forEach((e=>{const{nodeId:n,cssRule:a,fontSize:r,textLength:o,parentNode:i}=e,s=function getFontArtifactId(e,t){if(e&&"Regular"===e.type){const t=e.range?e.range.startLine:0,n=e.range?e.range.startColumn:0;return`${e.styleSheetId}@${t}:${n}`}return`node_${t}`}(a,n),c=t.get(s);c?c.textLength+=o:t.set(s,{nodeId:n,parentNode:i,cssRule:a,fontSize:r,textLength:o})})),[...t.values()]}(n),s=(o-r)/o*100,c=e.URL.finalDisplayedUrl,l=[{key:"source",valueType:"source-location",label:Nb(Ar.columnSource)},{key:"selector",valueType:"code",
-label:Nb(Lb.columnSelector)},{key:"coverage",valueType:"text",label:Nb(Lb.columnPercentPageText)},{key:"fontSize",valueType:"text",label:Nb(Lb.columnFontSize)}],u=i.sort(((e,t)=>t.textLength-e.textLength)).map((({cssRule:e,textLength:t,fontSize:n,parentNode:a})=>{const r=t/o*100,i=function findStyleRuleSource(e,t,n){if(!t||"Attributes"===t.type||"Inline"===t.type)return{source:{type:"url",value:e},selector:nodeToTableNode(n)};if(t.parentRule&&"user-agent"===t.parentRule.origin)return{source:{type:"code",value:"User Agent Stylesheet"},selector:t.parentRule.selectors.map((e=>e.text)).join(", ")};let a="";t.parentRule&&(a=t.parentRule.selectors.map((e=>e.text)).join(", "));if(t.stylesheet&&!t.stylesheet.sourceURL)return{source:{type:"code",value:"dynamic"},selector:a};if(t.stylesheet&&t.range){const{range:e,stylesheet:n}=t,r=n.hasSourceURL?"comment":"network";let o=e.startLine,i=e.startColumn;n.isInline&&"comment"!==r&&(o+=n.startLine,0===e.startLine&&(i+=n.startColumn))
-;const s=Audit.makeSourceLocation(n.sourceURL,o,i);return s.urlProvider=r,{source:s,selector:a}}return{selector:a,source:{type:"code",value:"Unknown"}}}(c,e,a);return{source:i.source,selector:i.selector,coverage:`${r.toFixed(2)}%`,fontSize:`${n}px`}}));if(a<r){const e=(r-a)/o*100;u.push({source:{type:"code",value:Nb(Lb.additionalIllegibleText)},selector:"",coverage:`${e.toFixed(2)}%`,fontSize:"< 12px"})}s>0&&u.push({source:{type:"code",value:Nb(Lb.legibleText)},selector:"",coverage:`${s.toFixed(2)}%`,fontSize:"≥ 12px"});const d=Nb(Lb.displayValue,{decimalProportion:s/100}),m=Audit.makeTableDetails(l,u);return{score:Number(s>=60),details:m,displayValue:d}}},UIStrings:Lb})
-;const Ob=[,[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,,,,,1,1,1,1,,,1,1,1,,1,,1,,1,1],[1,1,1,,1,1,,1,1,1,,1,,,1,1,1,,,1,1,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,,,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1],[,1,,,,,,1,,1,,,,,1,,1,,,,1,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,,,1,,,,,1,1,1,,1,,1,,1,,,,,,1],[1,,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,,1,,1,,,,,1,,1,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,,1,1,1,,1,,1,1,1,,,1,1,1,1,1,1,1,1],[,,1,,,1,,1,,,,1,1,1,,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1,1,1,1,1,,,1,1,1],[1,1,1,1,1,,,1,,,1,,,1,1,1,,,,,1,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1],[,1,,1,1,1,,1,1,,1,,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,,,1,1,1,,,1,1,,,,,,1,1],[1,1,1,,,,,1,,,,1,1,,1,,,,,,1,,,,,1],[,1,,,1,,,1,,,,,,1],[,1,,1,,,,1,,,,1],[1,,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,,1,,,1,1,1,1],[,1,1,1,1,1,,,1,,,1,,1,1,,1,,1,,,,,1,,1],[,1,,,,1,,,1,1,,1,,1,1,1,1,,1,1,,,1,,,1],[,1,1,,,,,,1,,,,1,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,,1,1,1,,,1,1,1,1,1,1,,1,,,,,1,1,,1,,1],[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,1,1],[,1,1,1,,,,1,1,1,,1,1,,,1,1,,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,,1,,,,,1,1,1,,,1,,1,,,1,1],[,,,,1,,,,,,,,,,,,,,,,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,,1,1,1,,1,1,,,,1,1,1,1,1,,,1,1,1,,,,,1],[1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,1,,,,,,,1],[,1,1,,1,1,,1,,,,,,,,,,,,,1],,[1,1,1,,,,,,,,,,,,,1],[,,,,,,,,1,,,1,,,1,1,,,,,1]],[,[1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,,1],[,,,1,,,,,,,,,,,,,,,1],[,1,,,1,1,,1,,1,1,,,,1,1,,,1,1,,,,1],[1,,,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,,,,1],,[,1,1,1,1,1,,1,1,1,,1,1,,1,1,,,1,1,1,1,,1,1,,1],[,1,,,1,,,1,,1,,,1,1,1,1,,,1,1,,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,,,1,1,1,1,1,1,1,,,1,,,1,,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,,,,1],[,,,,,,,1,,,,1,,1,1],[,1,1,1,1,1,1,1,,,,1,1,1,1,1,,,1,1,,1,1,1,1,1],[,1,,,1,1,,1,,1,1,1,,,1,1,,,1,,1,1,1,1,,1],[,1,1,1,,1,1,,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1],[,,,,,,,,,,,,,,,,1],,[,1,1,1,1,1,,1,1,1,,,1,,1,1,,1,1,1,1,1,,1,,1],[,,1,,,1,,,1,1,,,1,,1,1,,1],[,1,1,,1,,,,1,1,,1,,1,1,1,1,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,1,,1,,1,1],,[,1,1,,1,,,1,,1,,,,1,1,1,,,,,,1,,,,1],[1,1,,,1,1,,1,,,,,1,,1]],[,[,1],[,,,1,,,,1,,,,1,,,,1,,,1,,,1],[,,,,,,,,,,,,,,,,,,1,1,,,,,,1],,[1,,,,,1],[,1,,,,1,,,,1],[,1,,,,,,,,,,,1,,,1,,,,,,,,,1,1],[,,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,1,,1],[,1],[,1,,1,,1,,1,,1,,1,1,1,,1,1,,1,,,,,,,1],[1,,,,,1,,,1,1,,1,,1,,1,1,,,,,1,,,1],[,1,1,,,1,,1,,1,,1,,1,1,1,1,,,1,,1,,1,1,1],[1,1,1,1,1,,1,,1,,,,1,1,1,1,,1,1,,,1,1,1,1],[1,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],,[,1,,,,,,1,1,1,,1,,,,1,,,1,1,1,,,1],[1,,,,,1,,1,1,1,,1,1,1,1,1,,1,,1,,1,,,1,1],[1,,1,1,,,,,1,,,,,,1,1,,,1,1,1,1,,,1,,1],[1,,,,,,,,,,,,,,,,,1],[,,,,,1,,,1,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,,,1],[,1,,,,1]],[,[1,1,1,,1,,1,1,1,1,1,1,1,1,1,,1,,1,,1,1,,,1,1,1],[,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],,[,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1],,[1,1,,,,1,1,,,,,,1,,,,1,,1,,1,1,,1],[1],[,,,,,,,,,,,1,,,,,,,,,,,1],[,1,,,,,,,1,1,,,1,,1,,,,1,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,,1],[,,1,,,,,1,,1],[1,,,,1,,,,,1,,,,1,1,,,,1,1,,,,,1],[,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[1,,,1,1,,,,,,,1,,1,,1,1,1,1,1,1],[,,,,,1,,,,,,,1,,,,,,,1],,[,,1,1,1,1,1,,1,1,1,,,1,1,,,1,1,,1,1,1,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,,,,1],,[1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,,,1,1,1,1,,,,,,1,,1,,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,,,,1,,1,,,1,1,1,1,1],[,,,,,,,,,,,1,,,,,,,,,1,,,,1],[,1,1,,1,1,,1,,,,1,1,,1,1,,,1,,1,1,,1],[,1,,1,,1,,,1,,,1,1,,1,1,,,1,1,1],[,1,1,1,1,1,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,,,,,,,,,1,,1,,1,1,,,,1,,,1],[,1,,,1,1,,,,,,,,,1,1,1,,,,,1],[1,,,1,1,,,,1,1,1,1,1,,,1,,,1,,,1,,1,,1],[,1,1,,1,1,,1,1,,,,1,1,1,,,1,1,,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,,,,1,,,,,,,,,1],[,1,,,,,,,,1,,,,,1,,,,1,,,1],[,1,1,1,1,,,1,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1],[,,,,,1,,1,,,,,1,1,1,1,1,,,1,,,,1],[,1,,,,,,,,1,,,,,,,,,,,,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,1,,,,1,,1,1,1,1,1,,1,1,,,,,,1],[,1,1,1,1,1,1,1,,1,1,,,1,1,,,,1,,1,1,,1,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,1,1,,1,,,1,1,1,1,,,1,,,,,,,1],[,1,,,,,,,,1,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1],[,1,1,,,,,,,,,,,,1,1,,,,,,1],[,1,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,,,,,1],[1,1,,,1,,,1,1,1,,,,1],,[,,,,,,,,,,,,,1,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,1,,,,,,,1],[1,1,1,,1,,1,1,1,1,1,1,1,1,,1,,,1,,1,,,1,1],[,,,,,,,,,1],[,1,,,,1,,,,,,1,,,1,,,,,1],[,1,1,,1,1,,,,,,,,,,,,,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,1,1,1,,,,1,1,,,,1,,1],[1,1,1,1,1,1,,,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,,1,1],[,,,,,,,,,,,,,,,1,,,,1],,[1,1,,1,,1,,,,,,1,,1,,1,1,,1,,1,1,,1,1,,1],[,,1,,,,,,1,,,,1,,1,,,,,1],[1,,,,,,,,,1,,,,,,1,,,,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,,1,,,,,,1,,,1,,,,,,,,1],[,1,,1,,,,,,,,,,,,1],,[1,1,,,,,,,,,,,,,,,,,,,,,,1,1],[1]],[,[1,,,,,,,,,1,,,,,1,,1,,1],[,1,1,,1,1,,1,1,1,,,1,1,1,,,,1,,,1,,,,1],[,1,,,,,,,1,,,,1,,,,,,1],[1,1,1,1,1,1,,,,1,,,,,,,,,1,1,1,1],[1],[,1,1,,,1,1,,,,,1,,1,,,,,,,,1,,,,1],[1,,1,,,1,,1,,,,,1,1,1,1,,,,1,,,,1],[,,1,,,,,,,1,,,,,,,1,,,,,,,1],[1,,,,,,,,,,,,,,1,,,,1],[,,,1,,1,,,,,1,,,,1,1,,,,1],[1,,,,,1,,,,1,,1,1,,,1,1,,1,1,1,,1,1,1,,1],[,1,1,,,,,1,,1,,1,1,1,,1,1,,,1,,1,1,1],[,1,,,,1,,,,1,,,1,,1,1,,,1,1,,,,,,1],[1,,1,1,,1,,1,1,,1,,1,1,1,1,1,,,1,1,,,,,,1],[1,,,,,,,,,,,,,,,,,,1,,,1,,1],[,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,,1,,1],[,1,,,,1,,,1,1,,1,,,1,1,,,1,,,1,,,1,1],[1,1,,1,1,1,,1,1,1,,1,,1,1,1,,,1,,1,1],[1,,1,1,1,1,,,,1,,1,1,1,,1,,,1,1,1,,1,1,1,1,1],[1,,,,,,,,,,,,,1],[,,1,,,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,,,1,,1,,1,,,,1],[,,,1,,,,,,,,,1],[,1,,,,,,,,,,,,,,1,,,,,,,,,1],[,,,,,,,,1,1,,,,,,,,,1,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,,,1,1,1],[,,,,,1,,,,1,1,1,,,1,1,,,1,,1,1,,1],[,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,1,,,,,,,,,,,,,1],[,,1,,,1,,1,1,1,,1,1,,1,,,,1,,1,1],,[,,1,,,1,,,,,,1,,,,1],[,,,,,,,,,1,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,,1,1,,1,,1,,,1,1,1,,,1],[,,,,,1,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,1,,1,1,,1,,,1],[,,,,,1,,,,,,,,,,,,,,1],[,1,1,1,1,,,,,1,,,1,,1,,,,1,1,,,,1,1],[,1,,,1,,,1,,1,1,,1,,,,,,,1],[,,1,,1,,,1,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,,,,,,,,,,1,,1,1],[,,,,,,,,,,,,1],,[,1,1,1,1,,,,1,1,,1,1,1,1,1,1,,1,1,1,1,,1,,1],[1,,,,1,,,,,,,,,,1],[1,,,,,,,,,1],,[,1,,,,1,,,,,,,,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,,1,,,,1,1,,,1,1,,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,1],[1,1,1,,,,,1,1,1,,1,1,1,1,,,1,1,,1,1,,,,,1],[,1,,,,,,,1,1,,,1,1,1,,1,,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,,,1,,,,1,,,1,,,,1,,,,,,,1,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1],[1,1,1,,1,,,1,1,1,1,,1,1,1,1,,,,1,,1,,1,,,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,,1,1,,,,,,,,,1],,[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,,1,,1,,,,1],[,1,,,1,1,,1,1,1,,,1,1,1,1,1,,1,1,1,,1,,,1],[1,,,1,,,,1,1,1,,,,,1,1,,,,1,,1],[1,1,,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,,1,,1,,,,,,,,1,,1],[,1,,,,1,,1,1,,,,1,1,,1,,,,1,1,1,,1],,[,1,,,,,,1,,,,,,,1],[,,,,,,,,1,,,,1,,1,,,,,,,,,,,,1]],[,[,1,1,,1,1,1,1,,1,1,1,,1,1,,1,1,,1,1,1,1,1,1,,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,,,1,,,,,,,,1,,,,,,1,,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,,1,,1,1,1,1,1,1,1,,1,1,,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1],[,1,1,,,,,1,1,1,,,1,,1,1,,,,1,,1,,,1,1],[,,,,,,,1,,,,1,1,1,1,1,,1,,,,,,,,1],[1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,,1,,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,1,1,,1,,1,1,1,,1,,1,1,,1,1,,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,,1,,,,,1,,1],[,1,1,1,,1,,1,,1,,,,1,,1,,,1,,,,,,1,1],[,1,,,1,1,,1,,1,,1,1,1,1,1,,1,1,,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,,1,,1,,1,,,,,,1,,1,,,,1,1]],[,[,1,,1,,,,,,,,,,,,,,,1,,,,1],[,,,,,,,,,1,,1,1,1,,1,,,1,,1,1],[1,1,,,,,,,1,,,,,,,1,,,,,,1],[,1,,,,,,,,,,1,,,,,,,,,1,1],,[,,,,,,,,,,,,,,,1,,,,1,,1],[,,1,1,,1,,1,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,,,,,,,,1],[1,,1,1,,,,1,,,,,,,,,1,,,1,,,1,1],[,1,1,,1,1,,1,1,1,1,1,1,1,1,1,,,1,1,,1,1,,1],[,1,,,1,1,,,,,,1,,1,,1,,,1,,1,1],[1,1,1,1,,1,,1,,1,,1,1,,1,1,1,1,1,,1,1,1,1,1],[,1,1,,,1,,1,,1,1,1,,,1,1,1,,1,1,1,1,,1,1],[,,,,1,,,1,,,,,,,1,,,,1,1],[,1,,,,,,,,,,1,,1,,1,,,,,1,,,,,1],,[1,1,,1,,1,,1,1,,,,,,1,1,,,1,1,1,1,1,1,1,1,1],[1,1,,1,,,,,,1,,,,,,1,1,,,,1,1,,,1],[,1,1,,1,1,,,,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,,,1,,,,1,,,,1,1],[,,,,1],[,,,,,,,,,1,,,1],,[,,1,,1,,,,,,,,,1,,,,,,,,,,,,1],[,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,,,1],[,1,,1,,,,,,1,,,,,1,1,,,,,1,1],[,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,,,1,,1,1,1],[,1,,,,1,,,,,,,1],[,1,,,1,,,1,,1,,1,1,,1,,,,,1,,1,,,,1,1],[,1,,,1,,,1,1,1,,1,1,1,1,1,,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,1,1,,,,1,1,,,,,,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,,1,1,,1,1,1,1,1],[,1,,,,1,,,,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,1,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,,1,1,1,,1,1,1,,,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,,,,,,,1,1,,,,,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,1,,1,1,1,1],,[,1,1,,,,,1,,1,,,,1,1,1,,,1,,,,,1],[,,,,,,,,,,,,,1],[,,,,,1,,,,,,,,1,1,,,,,1,,1,,,1,1],[,,,,,,,,,,,,,,1]],[,[,1],,,,,,,,,,,,,,,,,,,,[1,1,1,1,1,,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,1,1,1,1],[,1,,1,,1,,,1,1,1,,1,1,1,1,1,,,1,,,,1,,1,1],[,1,,1,,1,,,1,,,,,1,,,,,,1,1],[,1,,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1],[,1,,,,,,,,,,,,,,,1]],[,[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,,,,,,,,,1,1,,,,1],[,,,,,,1],[,,1],[,1,1,,,1,,1,,1,1,,1,1,1,,,,1,1,1,,,,,1],,[,1,,,,1,,,,,,1,,,1,,,,1,1,,1],[,,,,,,,1,,,,,,,,,1],[,1,,,,1,1,,,,,,1,1,1,,,,1,,1,1],[,,,,,,,1,,1,,,,,,,,,,1],[,1,1,,,,,,1,1,,,,1,,,,,,,1,,,1],,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,,1,,,1,,,,,1,,1,,1,,1,,,,,1],[1,1,1,1,1,1,1,1,,,,,1,1,,1,1,,1,,,1,,1],[,,,,,,,,,,,,,,1,,,,,,1],,[,,,,,,,,,1,,,,,,1,,,,,1],[,,1,,,,,,,1,,,1,1],[,,,1,,,,,1,,,,,1,,,,,,1,,,,1],[1,,1,1,,1,1,1,1,1,,1,,,,1,1,1,,,1,1,,,,1,1],,[1,1,,,,,,,,,,1,,1,,1,,,1],[,,,,1,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,1],[,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,,1,,,1,,,,,,,,1,,,,,,1,,,,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,1,,,,1,1,1,1,1,1,,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,1,,1,1,,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,,1,,1,,1,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,,,,,,1,,1,,,,,1,1,,,,,1],[1,,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,,1,,,,1,1,1,1,1,,,1,1,,1,,1],[,1,1,1,1,,,,,1,,1,1,1,1,1,,,1,1,,,,1,1,1],[,1,1,1,1,1,,1,,,,,1,,1,,1,,,1,,,1,1,,1]],[,[1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,,,,,1,,,,,1,1,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,,,,1,,1,1,,1,1,1,1,1,,,1,,1,,1],[1,1,1,,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,,1,,,,,,,,,,1,1,1,1,1,1,1,,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,1,1,,,,,,1,1,1,1,1,,,,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,,1,1,1],[,1,1,1,,1,,1,1,1,1,,,1,1,1,,1,1,1,1,1,,,1,1],[1,1,,,,1,,,1,1,1,,1,,1,,1,,1,1,1,1,1,,1,,1],[,1,,,,,,,1,,1,,1,1,1,1,,,,,,,,,1]],[,[,,,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,1,,,1,,,,,,1,,,1,,,,1],,[,1,,,,1,,1,,1,1,,1,1,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],[1,1,1,,,1,,,,,,,,,1,1,,,,,,,,,,1],[,1,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1,,,1],[,,,,,,,,,1],[1,1,,,,,,1,1,1,,1,1,,,,1,1,,1,,1,1,1,,1],[,1,1,1,,1,1,,,1,,1,1,1,1,,,,,,,1,,1],[,1,1,1,1,,,1,,1,,,,1,1,1,1,,1,1,,1],[,1,,,1,1,,1,,,,1,,1,1,,1,,1,,,1,,,1,,1],[,,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,,,,,1],,[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1],[,1,,,,,,,1,1,,1,,,,,1,,,1,,1],[,1,,,,1,,,1,,,,,,,,1,,1,,,1],[,,,,,,,,,,,,,1,1,,,,1,,,1],[,,,,,1,,,1,,,,1],[,1],,[,1],[1,,,,,,,,,,,,,,1,,,,,1]],[,[,1,,,,1,1,1,1,1,1,,1,1,1,1,1,,1,1,,1,1,,,1],[,,1,,,,,,,,,1],,,[1,,,1,1,,,,,,,,1,1,,1,1,,1],,[,,,,,,,,,,,,,,,,,,1,,1],,[1,,,1,1,,1,1,,,,,1,,1,,,,,1,1,,1],,[,1,,,,,,,,1,1,1,1,1,,1,1,,,,1,1],[,,,,,,,,,,,,,,,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,1,1,1,1],[,,,,,,,,,,,1,,1,,,1],[1,,,,,,,,,,,,,,,,,,1,,1],,,[,1,,,,,,,,,,,,,,1,,,,1,1],[,,,,,,,,,1,,,1,,,,,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,1,1,,,,,,1],,[,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,1,1,,1,1,1,1,1,1,,,1,1,1,1,1,,1,1],[,1,,,,,,,,1],[,,,,1,,,1,,,1,1,,,,,,,,,,1,,,,1],[,1,,1,1,,,1,1,1,,,,1,1,1,1,,1,1,1,1,,1],[,,,,,,,1],[,1,1,,,,,1,,1,,,,,,1,,,,,,1,,1,,1],[,1,,,,,,1,,,,1,,,,,,,,,,1],[,,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1,1,1,1,,1],[,1,,,,,,,,1],[,1,1,,1,,,,,,,,1,,,,,,1,,,1,,1,,1],[,1,,1,,1,,1,1,1,,1,1,1,,1,,,1,1,,1,1,1,1,1],[,1,1,1,1,1,,,1,1,,,,1,1,1,,,,1,1,,,1,1],[,,1,1,1,1,,1,,1,,1,,1,1,1,1,,,,,1,,1,,1],[1,1,1,1,1,1,1,1,,1,,1,,1,1,1,,,1,1,,,,1,,1],[,,,1],,[,1,1,,1,,,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1],[,1,,,,,,1,,1,,1,,,,,,,1,1,,1,1],[,,,,,,1,,1,1,,1,,1,,,,,,,,,,1],[,1,1,,1,,,,1,,,,1,1,1,,,,1,,1,1,1,,1,1],,[,1,1,,,,,,,,,,,,,1,,,1,,,,,1],[,1,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,1,,,,1,,,,,1,,,,,,,1]],[,[,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[,1,1,1,1,1,,1,,1,1,,,1,1,1,1,,1,,,,,1,1,1],[,,1,1,,1,,1,1,,,,1,1,1,1,,,1,,1,1,1,1,,1],[,1,,1,,,,,,,,1,,1,,1,,,,,,,,,,1],[,,1,,1,,,1,,,,,1,1,,,1,,1,1,1,1],[,1],[,1,1,,1,,1,1,,1,,,1,1,1,,,,1,,,1,,1],[1,1,,1,1,1,,,,,,,,,,,,,1,,1,1,1],[,1,1,,,,,,,1,,,1,,1,,1,,1,1,,,1,,,1],[,,1,,,,,,,,,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,,1,,,,,1,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,1,1,1,,,,1,1],[,,,1,1,,,1,,1,,1,,1,1,1,1,,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,,1,,1,,,,1,1,,,1,1,,1,1,,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1,,1,1,,,1],[,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,,1,,,1,,,1,,1,1,1,1,1,,1,,1,1],[,,,,,1,,,,1,,,,,1,1,,,,1],[,1,,1,1,1,,1,,,1,1,1,,,1,,,1,,1,,,1],[,,1,,,,,,,,,1,,1,,,,,1,,1],[,1,1,,,,,,,,1,1,1,,,,,,,,1,,,,,1],[,,,,,,,,1,,,,,1,,,1]],[,[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,,1,1,1,1,1,1,1,1,,,,,,,,,1,1],[,,,,,,,,1,,,,1,,1,,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,1,,1,,1,,,,1,1,,1,,1,,,,1,1,1,1,1,,,1],,[,1,,,,,,,,1,,,1,1,,,1,,1,1,,1,,1],[,1,,,1,,,,,,,,1,,,,,,,1],[1,1,,,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1],,[,1,,,,,,1,,1,,1,1,1,1,1,,,1,,1,1,,,,1],[,1,1,,,1,,1,,1,,,1,1,1,1,,,1,,,1,,,,1],[,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1],[,1,,,1,1,,1,1,,,1,1,,1,1,,1,,1,,1],[1,,1,,,,,1,,1,,1,1,1,1,,,,,1,1,,,,1,1],[,1,1,,,,,1,1,,,1,,1,1,1,1,,,,,,,,,,1],,[,1,1,,,1,,,,1,,1,1,1,1,1,,,,1,,,,1,,1],[,,,1,1,,,1,,,,,1,,1,1,1,,1,1,,,,,,1],[,1,,,,,,,,,,,1,,,,1,,,,,,,1,,1],[,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,1,,,,,1,,1,,,1,1,,1,1,,1],[,1,,,,,,1,,,,,1,1,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1,,,1,,,,,1],[,,,,,,,1,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,,1,,,,,,,1,,,,,,,,1,,,1],[,1,,,,,,,1],[,,,,,,,,,,1],[,1,,,,,,1,1,,,,,,1],,[,1,1,,,,,,1,,,,,1,1,,,,1],[1,,1,,1,,,,,1,,,,,1,,,,,,,,,1,1],[,1,1,,,,,,,,,1,1,1,1,,,,1,,,,,1,,,1],,[,1,1,,1,,,1,1,,,1,,,1,1,1,,1,,1,1,1,,,,1],[,,,,,1,,,,,1,,,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,,,1,,,,,1,,,,,1,,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,1],[,1,,,,,,1,,,,,,,1,1,1,,,1],[,1,,,,,,,,,,1,1,1,,,,,1,,,1],[,,,,,1,,1,,,,,1,1,1,,1,1,,1,1,1,,,1,1],[1,1,,,,,,,1,,,,,1,1,,,,,,,,,,,1],,[,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,,1,,,,,1,,,1,,,,1,,1],[,1,,,,,,,,,1]]]
-;const Bb={title:"Document has a valid `hreflang`",failureTitle:"Document doesn't have a valid `hreflang`",description:"hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more about `hreflang`](https://developer.chrome.com/docs/lighthouse/seo/hreflang/).",unexpectedLanguage:"Unexpected language code",notFullyQualified:"Relative href value"},Ub=createIcuMessageFn("core/audits/seo/hreflang.js",Bb);function isExpectedLanguageCode(e){if("x-default"===e.toLowerCase())return!0;const[t]=e.split("-");return function isValidLang(e){let t=Ob;for(;e.length<3;)e+="`";for(let n=0;n<=e.length-1;n++)if(t=t[e.charCodeAt(n)-96],!t)return!1;return!0}(t.toLowerCase())}var jb=Object.freeze({__proto__:null,default:class Hreflang extends Audit{static get meta(){return{id:"hreflang",title:Ub(Bb.title),failureTitle:Ub(Bb.failureTitle),description:Ub(Bb.description),supportedModes:["navigation"],
-requiredArtifacts:["LinkElements","URL"]}}static audit({LinkElements:e}){const t=[],n=e.filter((e=>{const t="alternate"===e.rel,n=e.hreflang,a="body"===e.source;return t&&n&&!a}));for(const e of n){const n=[];let r;isExpectedLanguageCode(e.hreflang)||n.push(Ub(Bb.unexpectedLanguage)),(a=e.hrefRaw.toLowerCase()).startsWith("http:")||a.startsWith("https:")||n.push(Ub(Bb.notFullyQualified)),"head"===e.source?r=e.node?{...Audit.makeNodeItem(e.node),snippet:`<link rel="alternate" hreflang="${e.hreflang}" href="${e.hrefRaw}" />`}:{type:"node",snippet:`<link rel="alternate" hreflang="${e.hreflang}" href="${e.hrefRaw}" />`}:"headers"===e.source&&(r=`Link: <${e.hrefRaw}>; rel="alternate"; hreflang="${e.hreflang}"`),r&&n.length&&t.push({source:r,subItems:{type:"subitems",items:n.map((e=>({reason:e})))}})}var a;const r=Audit.makeTableDetails([{key:"source",valueType:"code",subItemsHeading:{key:"reason",valueType:"text"},label:""}],t);return{score:Number(0===t.length),details:r}}},UIStrings:Bb})
-;const zb={title:"Page has successful HTTP status code",failureTitle:"Page has unsuccessful HTTP status code",description:"Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more about HTTP status codes](https://developer.chrome.com/docs/lighthouse/seo/http-status-code/)."},qb=createIcuMessageFn("core/audits/seo/http-status-code.js",zb);var Wb=Object.freeze({__proto__:null,default:class HTTPStatusCode extends Audit{static get meta(){return{id:"http-status-code",title:qb(zb.title),failureTitle:qb(zb.failureTitle),description:qb(zb.description),requiredArtifacts:["devtoolsLogs","URL","GatherContext"],supportedModes:["navigation"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=e.URL,r=(await mc.request({devtoolsLog:n,URL:a},t)).statusCode;return r>=400&&r<=599?{score:0,displayValue:`${r}`}:{score:1}}},UIStrings:zb});function trimLine(e){return e?Array.isArray(e)?e.map(trimLine):String(e).trim():null}function removeComments(e){
-var t=e.indexOf("#");return t>-1?e.substr(0,t):e}function splitLine(e){var t=String(e).indexOf(":");return!e||t<0?null:[e.slice(0,t),e.slice(t+1)]}function formatUserAgent(e){var t=e.toLowerCase(),n=t.indexOf("/");return n>-1&&(t=t.substr(0,n)),t.trim()}function normaliseEncoding(e){try{return urlEncodeToUpper(encodeURI(e).replace(/%25/g,"%"))}catch(t){return e}}function urlEncodeToUpper(e){return e.replace(/%[0-9a-fA-F]{2}/g,(function(e){return e.toUpperCase()}))}function matches(e,t){var n=new Array(t.length+1),a=1;n[0]=0;for(var r=0;r<e.length;r++){if("$"===e[r]&&r+1===e.length)return n[a-1]===t.length;if("*"==e[r]){a=t.length-n[0]+1;for(var o=1;o<a;o++)n[o]=n[o-1]+1}else{var i=0;for(o=0;o<a;o++)n[o]<t.length&&t[n[o]]===e[r]&&(n[i++]=n[o]+1);if(0==i)return!1;a=i}}return!0}function parseUrl(e){try{return new URL(e,"http://robots-relative.samclarke.com/")}catch(e){return null}}function Robots$1(e,t){this._url=parseUrl(e)||{},this._url.port=this._url.port||80,
-this._rules=Object.create(null),this._sitemaps=[],this._preferredHost=null,function parseRobots(e,t){for(var n=e.split(/\r\n|\r|\n/).map(removeComments).map(splitLine).map(trimLine),a=[],r=!0,o=0;o<n.length;o++){var i=n[o];if(i&&i[0]){switch(i[0].toLowerCase()){case"user-agent":r&&(a.length=0),i[1]&&a.push(formatUserAgent(i[1]));break;case"disallow":t.addRule(a,i[1],!1,o+1);break;case"allow":t.addRule(a,i[1],!0,o+1);break;case"crawl-delay":t.setCrawlDelay(a,i[1]);break;case"sitemap":i[1]&&t.addSitemap(i[1]);break;case"host":i[1]&&t.setPreferredHost(i[1].toLowerCase())}r="user-agent"!==i[0].toLowerCase()}}}(t||"",this)}Robots$1.prototype.addRule=function(e,t,n,a){var r=this._rules;e.forEach((function(e){r[e]=r[e]||[],t&&r[e].push({pattern:normaliseEncoding(t),allow:n,lineNumber:a})}))},Robots$1.prototype.setCrawlDelay=function(e,t){var n=this._rules,a=Number(t);e.forEach((function(e){n[e]=n[e]||[],isNaN(a)||(n[e].crawlDelay=a)}))},Robots$1.prototype.addSitemap=function(e){
-this._sitemaps.push(e)},Robots$1.prototype.setPreferredHost=function(e){this._preferredHost=e},Robots$1.prototype._getRule=function(e,t){var n=parseUrl(e)||{},a=formatUserAgent(t||"*");if(n.port=n.port||80,n.protocol===this._url.protocol&&n.hostname===this._url.hostname&&n.port===this._url.port){var r=this._rules[a]||this._rules["*"]||[];return function findRule(e,t){for(var n=null,a=0;a<t.length;a++){var r=t[a];matches(r.pattern,e)&&(!n||r.pattern.length>n.pattern.length||r.pattern.length==n.pattern.length&&r.allow&&!n.allow)&&(n=r)}return n}(urlEncodeToUpper(n.pathname+n.search),r)}},Robots$1.prototype.isAllowed=function(e,t){var n=this._getRule(e,t);if(void 0!==n)return!n||n.allow},Robots$1.prototype.getMatchingLineNumber=function(e,t){var n=this._getRule(e,t);return n?n.lineNumber:-1},Robots$1.prototype.isDisallowed=function(e,t){return!this.isAllowed(e,t)},Robots$1.prototype.getCrawlDelay=function(e){var t=formatUserAgent(e||"*")
-;return(this._rules[t]||this._rules["*"]||{}).crawlDelay},Robots$1.prototype.getPreferredHost=function(){return this._preferredHost},Robots$1.prototype.getSitemaps=function(){return this._sitemaps.slice(0)};var $b=Robots$1;const Vb=new Set([void 0,"Googlebot","bingbot","DuckDuckBot","archive.org_bot"]),Hb=new Set(["noindex","none"]),Gb="unavailable_after",Yb={title:"Page isn’t blocked from indexing",failureTitle:"Page is blocked from indexing",description:"Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more about crawler directives](https://developer.chrome.com/docs/lighthouse/seo/is-crawlable/)."},Kb=createIcuMessageFn("core/audits/seo/is-crawlable.js",Yb);function hasBlockingDirective(e){return e.split(",").map((e=>e.toLowerCase().trim())).some((e=>Hb.has(e)||function isUnavailable(e){const t=e.split(":");if(t.length<=1||t[0]!==Gb)return!1;const n=Date.parse(t.slice(1).join(":"));return!isNaN(n)&&n<Date.now()
-}(e)))}function getUserAgentFromHeaderDirectives(e){const t=e.match(/^([^,:]+):/);if(t&&t[1].toLowerCase()!==Gb)return t[1]}class IsCrawlable extends Audit{static get meta(){return{id:"is-crawlable",title:Kb(Yb.title),failureTitle:Kb(Yb.failureTitle),description:Kb(Yb.description),supportedModes:["navigation"],requiredArtifacts:["MetaElements","RobotsTxt","URL","devtoolsLogs"]}}static handleMetaElement(e){const t=e.content||"";if(hasBlockingDirective(t))return{source:{...Audit.makeNodeItem(e.node),snippet:`<meta name="${e.name}" content="${t}" />`}}}static determineIfCrawlableForUserAgent(e,t,n,a,r){const o=[];let i;if(e&&(i=n.find((t=>t.name===e.toLowerCase()))),i||(i=n.find((e=>"robots"===e.name))),i){const e=IsCrawlable.handleMetaElement(i);e&&o.push(e)}for(const n of t.responseHeaders||[]){if("x-robots-tag"!==n.name.toLowerCase())continue;const t=getUserAgentFromHeaderDirectives(n.value);if(t!==e&&void 0!==t)continue;let a=n.value.trim()
-;e&&n.value.startsWith(`${e}:`)&&(a=n.value.replace(`${e}:`,"")),hasBlockingDirective(a)&&o.push({source:`${n.name}: ${n.value}`})}if(a&&!a.isAllowed(t.url,e)){const e=a.getMatchingLineNumber(t.url)||1;o.push({source:{type:"source-location",url:r.href,urlProvider:"network",line:e-1,column:0}})}return o}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await mc.request({devtoolsLog:n,URL:e.URL},t),r=new URL("/robots.txt",a.url),o=e.RobotsTxt.content?function(e,t){return new $b(e,t)}(r.href,e.RobotsTxt.content):void 0,i=[],s=[];for(const t of Vb){const n=IsCrawlable.determineIfCrawlableForUserAgent(t,a,e.MetaElements,o,r);n.length>0&&i.push(t),void 0===t&&s.push(...n)}const c=i.length===Vb.size?0:1,l=[];if(c&&i.length>0){const e=i.filter(Boolean).join(", ");l.push(`The following bot user agents are blocked from crawling: ${e}. The audit is otherwise passing, because at least one bot was explicitly allowed.`)}return{score:c,details:Audit.makeTableDetails([{key:"source",
-valueType:"code",label:"Blocking Directive Source"}],0===c?s:[]),warnings:l}}}var Jb=Object.freeze({__proto__:null,default:IsCrawlable,UIStrings:Yb});const Xb=new Set(["click here","click this","go","here","information","learn more","more","more info","more information","right here","read more","see more","start","this","ここをクリック","こちらをクリック","リンク","続きを読む","続く","全文表示","click aquí","click aqui","clicka aquí","clicka aqui","pincha aquí","pincha aqui","aquí","aqui","más","mas","más información","más informacion","mas información","mas informacion","este","enlace","este enlace","empezar","clique aqui","ir","mais informação","mais informações","mais","veja mais","여기","여기를 클릭","클릭","링크","자세히","자세히 보기","계속","이동","전체 보기","här","klicka här","läs mer","mer","mer info","mer information","அடுத்த பக்கம்","மறுபக்கம்","முந்தைய பக்கம்","முன்பக்கம்","மேலும் அறிக","மேலும் தகவலுக்கு","மேலும் தரவுகளுக்கு","தயவுசெய்து இங்கே அழுத்தவும்","இங்கே கிளிக் செய்யவும்"]),Zb={title:"Links have descriptive text",
-failureTitle:"Links do not have descriptive text",description:"Descriptive link text helps search engines understand your content. [Learn how to make links more accessible](https://developer.chrome.com/docs/lighthouse/seo/link-text/).",displayValue:"{itemCount, plural,\n    =1 {1 link found}\n    other {# links found}\n    }"},Qb=createIcuMessageFn("core/audits/seo/link-text.js",Zb);var ev=Object.freeze({__proto__:null,default:class LinkText extends Audit{static get meta(){return{id:"link-text",title:Qb(Zb.title),failureTitle:Qb(Zb.failureTitle),description:Qb(Zb.description),requiredArtifacts:["URL","AnchorElements"]}}static audit(e){const t=e.AnchorElements.filter((e=>e.href&&!e.rel.includes("nofollow"))).filter((t=>{const n=t.href.toLowerCase();return!(n.startsWith("javascript:")||n.startsWith("mailto:")||UrlUtils.equalWithExcludedFragments(t.href,e.URL.finalDisplayedUrl))&&Xb.has(t.text.trim().toLowerCase())})).map((e=>({href:e.href,text:e.text.trim()
-}))),n=Audit.makeTableDetails([{key:"href",valueType:"url",label:"Link destination"},{key:"text",valueType:"text",label:"Link Text"}],t);let a;return t.length&&(a=Qb(Zb.displayValue,{itemCount:t.length})),{score:Number(0===t.length),details:n,displayValue:a}}},UIStrings:Zb});const tv={description:"Run the [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool/) and the [Structured Data Linter](http://linter.structured-data.org/) to validate structured data. [Learn more about Structured Data](https://developer.chrome.com/docs/lighthouse/seo/structured-data/).",title:"Structured data is valid"},nv=createIcuMessageFn("core/audits/seo/manual/structured-data.js",tv);var av=Object.freeze({__proto__:null,default:class StructuredData extends ManualAudit{static get meta(){return Object.assign({id:"structured-data",description:nv(tv.description),title:nv(tv.title)},super.partialMeta)}},UIStrings:tv});const rv={title:"Document has a meta description",
-failureTitle:"Document does not have a meta description",description:"Meta descriptions may be included in search results to concisely summarize page content. [Learn more about the meta description](https://developer.chrome.com/docs/lighthouse/seo/meta-description/).",explanation:"Description text is empty."},ov=createIcuMessageFn("core/audits/seo/meta-description.js",rv);var iv=Object.freeze({__proto__:null,default:class Description extends Audit{static get meta(){return{id:"meta-description",title:ov(rv.title),failureTitle:ov(rv.failureTitle),description:ov(rv.description),requiredArtifacts:["MetaElements"]}}static audit(e){const t=e.MetaElements.find((e=>"description"===e.name));if(!t)return{score:0};return 0===(t.content||"").trim().length?{score:0,explanation:ov(rv.explanation)}:{score:1}}},UIStrings:rv})
-;const sv="application/x-java-applet",cv="application/x-java-bean",lv=new Set(["application/x-shockwave-flash",sv,cv,"application/x-silverlight","application/x-silverlight-2"]),uv=new Set(["swf","flv","class","xap"]),dv=new Set(["code","movie","source","src"]),mv={title:"Document avoids plugins",failureTitle:"Document uses plugins",description:"Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more about avoiding plugins](https://developer.chrome.com/docs/lighthouse/seo/plugins/)."},pv=createIcuMessageFn("core/audits/seo/plugins.js",mv);function isPluginURL(e){try{const t=new URL(e,"http://example.com").pathname.split(".");if(t.length<2)return!1;const n=t[t.length-1];return uv.has(n.trim().toLowerCase())}catch(e){return!1}}var gv=Object.freeze({__proto__:null,default:class Plugins extends Audit{static get meta(){return{id:"plugins",title:pv(mv.title),failureTitle:pv(mv.failureTitle),description:pv(mv.description),
-requiredArtifacts:["EmbeddedContent"]}}static audit(e){const t=e.EmbeddedContent.filter((e=>{if("APPLET"===e.tagName)return!0;if(("EMBED"===e.tagName||"OBJECT"===e.tagName)&&e.type&&function isPluginType(e){return e=e.trim().toLowerCase(),lv.has(e)||e.startsWith(sv)||e.startsWith(cv)}(e.type))return!0;const t=e.src||e.code;if("EMBED"===e.tagName&&t&&isPluginURL(t))return!0;if("OBJECT"===e.tagName&&e.data&&isPluginURL(e.data))return!0;return e.params.filter((e=>dv.has(e.name.trim().toLowerCase())&&isPluginURL(e.value))).length>0})).map((e=>({source:Audit.makeNodeItem(e.node)}))),n=Audit.makeTableDetails([{key:"source",valueType:"code",label:"Element source"}],t);return{score:Number(0===t.length),details:n}}},UIStrings:mv});const hv="sitemap",fv="user-agent",yv="allow",bv="disallow",vv=new Set([yv,bv]),wv=new Set([fv,bv,yv,hv,"crawl-delay","clean-param","host","request-rate","visit-time","noindex"]),Dv=new Set(["https:","http:","ftp:"]),Ev={title:"robots.txt is valid",
-failureTitle:"robots.txt is not valid",description:"If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more about robots.txt](https://developer.chrome.com/docs/lighthouse/seo/invalid-robots-txt/).",displayValueHttpBadCode:"Request for robots.txt returned HTTP status: {statusCode}",displayValueValidationError:"{itemCount, plural,\n    =1 {1 error found}\n    other {# errors found}\n    }",explanation:"Lighthouse was unable to download a robots.txt file"},Tv=createIcuMessageFn("core/audits/seo/robots-txt.js",Ev);function parseLine(e){const t=e.indexOf("#");if(-1!==t&&(e=e.substr(0,t)),0===(e=e.trim()).length)return null;const n=e.indexOf(":");if(-1===n)throw new Error("Syntax not understood");const a=e.slice(0,n).trim().toLowerCase(),r=e.slice(n+1).trim();return function verifyDirective(e,t){if(!wv.has(e))throw new Error("Unknown directive");if(e===hv){let e;try{e=new URL(t)}catch(e){
-throw new Error("Invalid sitemap URL")}if(!Dv.has(e.protocol))throw new Error("Invalid sitemap URL protocol")}if(e===fv&&!t)throw new Error("No user-agent specified");if(e===yv||e===bv){if(""!==t&&"/"!==t[0]&&"*"!==t[0])throw new Error('Pattern should either be empty, start with "/" or "*"');const e=t.indexOf("$");if(-1!==e&&e!==t.length-1)throw new Error('"$" should only be used at the end of the pattern')}}(a,r),{directive:a,value:r}}var Cv=Object.freeze({__proto__:null,default:class RobotsTxt extends Audit{static get meta(){return{id:"robots-txt",title:Tv(Ev.title),failureTitle:Tv(Ev.failureTitle),description:Tv(Ev.description),requiredArtifacts:["RobotsTxt"]}}static audit(e){const{status:t,content:n}=e.RobotsTxt;if(!t)return{score:0,explanation:Tv(Ev.explanation)};if(t>=500)return{score:0,displayValue:Tv(Ev.displayValueHttpBadCode,{statusCode:t})};if(t>=400||""===n)return{score:1,notApplicable:!0};if(null===n)throw new Error(`Status ${t} was valid, but content was null`)
-;const a=function validateRobots(e){const t=[];let n=!1;return e.split(/\r\n|\r|\n/).forEach(((e,a)=>{let r;try{r=parseLine(e)}catch(n){t.push({index:(a+1).toString(),line:e,message:n.message.toString()})}r&&(r.directive===fv?n=!0:!n&&vv.has(r.directive)&&t.push({index:(a+1).toString(),line:e,message:"No user-agent specified"}))})),t}(n),r=Audit.makeTableDetails([{key:"index",valueType:"text",label:"Line #"},{key:"line",valueType:"code",label:"Content"},{key:"message",valueType:"code",label:"Error"}],a);let o;return a.length&&(o=Tv(Ev.displayValueValidationError,{itemCount:a.length})),{score:Number(0===a.length),details:r,displayValue:o}}},UIStrings:Ev});function getTappableRectsFromClientRects(e){return e=mergeTouchingClientRects(e=function filterOutRectsContainedByOthers(e){const t=new Set(e);for(const n of e)for(const a of e)if(n!==a&&t.has(a)&&rectContains(a,n)){t.delete(n);break}return Array.from(t)}(e=function filterOutTinyRects(e){return e.filter((e=>e.width>1&&e.height>1))
-}(e)))}function almostEqual(e,t){return Math.abs(e-t)<=10}function mergeTouchingClientRects(e){for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++){const a=e[t],r=e[n],o=almostEqual(a.top,r.top)||almostEqual(a.bottom,r.bottom),i=almostEqual(a.left,r.left)||almostEqual(a.right,r.right);if(rectsTouchOrOverlap(a,r)&&(o||i)){const t=getBoundingRectWithPadding([a,r],0),n=getRectCenterPoint(t);if(!rectContainsPoint(a,n)&&!rectContainsPoint(r,n))continue;return(e=e.filter((e=>e!==a&&e!==r))).push(t),mergeTouchingClientRects(e)}}return e}const Sv={title:"Tap targets are sized appropriately",failureTitle:"Tap targets are not sized appropriately",description:"Interactive elements like buttons and links should be large enough (48x48px), or have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more about tap targets](https://developer.chrome.com/docs/lighthouse/seo/tap-targets/).",tapTargetHeader:"Tap Target",
-overlappingTargetHeader:"Overlapping Target",explanationViewportMetaNotOptimized:"Tap targets are too small because there's no viewport meta tag optimized for mobile screens",displayValue:"{decimalProportion, number, percent} appropriately sized tap targets"},_v=createIcuMessageFn("core/audits/seo/tap-targets.js",Sv);function clientRectBelowMinimumSize(e){return e.width<48||e.height<48}function getOverlapFailureForTargetPair(e,t){let n=null;for(const o of e){const e=(r=48,function addRectWidthAndHeight({left:e,top:t,right:n,bottom:a}){return{left:e,top:t,right:n,bottom:a,width:n-e,height:a-t}}({left:(a=o).left+a.width/2-r/2,top:a.top+a.height/2-r/2,right:a.right-a.width/2+r/2,bottom:a.bottom-a.height/2+r/2})),i=getRectOverlapArea(e,o);for(const a of t){const t=getRectOverlapArea(e,a),r=t/i;r<.25||(!n||r>n.overlapScoreRatio)&&(n={overlapScoreRatio:r,tapTargetScore:i,overlappingTargetScore:t})}}var a,r;return n}function getTableItems(e){const t=e.map((e=>{
-const t=function getLargestRect(e){let t=e[0];for(const n of e)getRectArea(n)>getRectArea(t)&&(t=n);return t}(e.tapTarget.clientRects),n=Math.floor(t.width),a=Math.floor(t.height),r=n+"x"+a;return{tapTarget:Audit.makeNodeItem(e.tapTarget.node),overlappingTarget:Audit.makeNodeItem(e.overlappingTarget.node),tapTargetScore:e.tapTargetScore,overlappingTargetScore:e.overlappingTargetScore,overlapScoreRatio:e.overlapScoreRatio,size:r,width:n,height:a}}));return t.sort(((e,t)=>t.overlapScoreRatio-e.overlapScoreRatio)),t}class TapTargets extends Audit{static get meta(){return{id:"tap-targets",title:_v(Sv.title),failureTitle:_v(Sv.failureTitle),description:_v(Sv.description),requiredArtifacts:["MetaElements","TapTargets"]}}static async audit(e,t){if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};if(!(await Mb.request(e.MetaElements,t)).isMobileOptimized)return{score:0,explanation:_v(Sv.explanationViewportMetaNotOptimized)};const n=function getBoundedTapTargets(e){
-return e.map((e=>({tapTarget:e,paddedBoundsRect:getBoundingRectWithPadding(e.clientRects,48)})))}(e.TapTargets),a=function getAllOverlapFailures(e,t){const n=[];return e.forEach((e=>{const a=getTappableRectsFromClientRects(e.tapTarget.clientRects);for(const r of t){if(r===e)continue;if(!rectsTouchOrOverlap(e.paddedBoundsRect,r.paddedBoundsRect))continue;if(e.tapTarget.href===r.tapTarget.href&&/https?:\/\//.test(e.tapTarget.href))continue;const t=r.tapTarget.clientRects;if(allRectsContainedWithinEachOther(a,t))continue;const o=getOverlapFailureForTargetPair(a,t);o&&n.push({...o,tapTarget:e.tapTarget,overlappingTarget:r.tapTarget})}})),n}(function getTooSmallTargets(e){return e.filter((e=>e.tapTarget.clientRects.every(clientRectBelowMinimumSize)))}(n),n),r=getTableItems(function mergeSymmetricFailures(e){const t=[];return e.forEach(((n,a)=>{const r=e.find((e=>e.tapTarget===n.overlappingTarget&&e.overlappingTarget===n.tapTarget));if(!r)return void t.push(n)
-;const{overlapScoreRatio:o}=n,{overlapScoreRatio:i}=r;(o>i||o===i&&a<e.indexOf(r))&&t.push(n)})),t}(a)),o=[{key:"tapTarget",valueType:"node",label:_v(Sv.tapTargetHeader)},{key:"size",valueType:"text",label:_v(Ar.columnSize)},{key:"overlappingTarget",valueType:"node",label:_v(Sv.overlappingTargetHeader)}],i=Audit.makeTableDetails(o,r),s=e.TapTargets.length,c=new Set(a.map((e=>e.tapTarget))).size;let l=1,u=1;c>0&&(u=(s-c)/s,l=.89*u);return{score:l,details:i,displayValue:_v(Sv.displayValue,{decimalProportion:u})}}}TapTargets.FINGER_SIZE_PX=48;var Av=Object.freeze({__proto__:null,default:TapTargets,UIStrings:Sv});const kv={title:"Initial server response time was short",failureTitle:"Reduce initial server response time",description:"Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
-displayValue:"Root document took {timeInMs, number, milliseconds} ms"},xv=createIcuMessageFn("core/audits/server-response-time.js",kv);class ServerResponseTime extends Audit{static get meta(){return{id:"server-response-time",title:xv(kv.title),failureTitle:xv(kv.failureTitle),description:xv(kv.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static calculateResponseTime(e){return globalThis.isLightrider&&e.lrStatistics?e.lrStatistics.requestMs:e.timing?e.timing.receiveHeadersStart-e.timing.sendEnd:null}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await mc.request({devtoolsLog:n,URL:e.URL},t),r=ServerResponseTime.calculateResponseTime(a);if(null===r)throw new Error("no timing found for main resource");const o=r<600,i=xv(kv.displayValue,{timeInMs:r}),s=[{key:"url",valueType:"url",label:xv(Ar.columnURL)},{key:"responseTime",valueType:"timespanMs",label:xv(Ar.columnTimeSpent)
-}],c=Math.max(r-100,0),l=Audit.makeOpportunityDetails(s,[{url:a.url,responseTime:r}],{overallSavingsMs:c});return{numericValue:r,numericUnit:"millisecond",score:Number(o),displayValue:i,details:l,metricSavings:{FCP:c,LCP:c}}}}var Fv=Object.freeze({__proto__:null,default:ServerResponseTime,UIStrings:kv});const Rv={title:"Registers a service worker that controls page and `start_url`",failureTitle:"Does not register a service worker that controls page and `start_url`",description:"The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. [Learn more about Service Workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/).",explanationOutOfScope:"This origin has one or more service workers, however the page ({pageUrl}) is not in scope.",explanationNoManifest:"This page is controlled by a service worker, however no `start_url` was found because no manifest was fetched.",
-explanationBadManifest:"This page is controlled by a service worker, however no `start_url` was found because manifest failed to parse as valid JSON",explanationBadStartUrl:"This page is controlled by a service worker, however the `start_url` ({startUrl}) is not in the service worker's scope ({scopeUrl})"},Iv=createIcuMessageFn("core/audits/service-worker.js",Rv);class ServiceWorker extends Audit{static get meta(){return{id:"service-worker",title:Iv(Rv.title),failureTitle:Iv(Rv.failureTitle),description:Iv(Rv.description),supportedModes:["navigation"],requiredArtifacts:["URL","ServiceWorker","WebAppManifest"]}}static getVersionsForOrigin(e,t){return e.filter((e=>"activated"===e.status)).filter((e=>new URL(e.scriptURL).origin===t.origin))}static getControllingServiceWorker(e,t,n){const a=[];for(const n of e){const e=t.find((e=>e.registrationId===n.registrationId));if(e){const t=new URL(e.scopeURL).href,r=new URL(n.scriptURL).href;a.push({scopeUrl:t,scriptUrl:r})}}
-return a.filter((e=>n.href.startsWith(e.scopeUrl))).sort(((e,t)=>e.scopeUrl.length-t.scopeUrl.length)).pop()}static checkStartUrl(e,t){if(!e)return Iv(Rv.explanationNoManifest);if(!e.value)return Iv(Rv.explanationBadManifest);const n=e.value.start_url.value;return n.startsWith(t)?void 0:Iv(Rv.explanationBadStartUrl,{startUrl:n,scopeUrl:t})}static audit(e){const{mainDocumentUrl:t}=e.URL;if(!t)throw new Error("mainDocumentUrl must exist in navigation mode");const n=new URL(t),{versions:a,registrations:r}=e.ServiceWorker,o=ServiceWorker.getVersionsForOrigin(a,n);if(0===o.length)return{score:0};const i=ServiceWorker.getControllingServiceWorker(o,r,n);if(!i)return{score:0,explanation:Iv(Rv.explanationOutOfScope,{pageUrl:n.href})};const{scriptUrl:s,scopeUrl:c}=i,l={type:"debugdata",scriptUrl:s,scopeUrl:c},u=ServiceWorker.checkStartUrl(e.WebAppManifest,i.scopeUrl);return u?{score:0,details:l,explanation:u}:{score:1,details:l}}}var Mv=Object.freeze({__proto__:null,default:ServiceWorker,
-UIStrings:Rv});class MultiCheckAudit extends Audit{static async audit(e,t){const n=await this.audit_(e,t);return this.createAuditProduct(n)}static createAuditProduct(e){const t={...e,...e.manifestValues,manifestValues:void 0,allChecks:void 0};e.manifestValues?.allChecks&&e.manifestValues.allChecks.forEach((e=>{t[e.id]=e.passing}));const n={type:"debugdata",items:[t]};return e.failures.length>0?{score:0,explanation:`Failures: ${e.failures.join(",\n")}.`,details:n}:{score:1,details:n}}static audit_(e,t){throw new Error("audit_ unimplemented")}}const Lv={title:"Configured for a custom splash screen",failureTitle:"Is not configured for a custom splash screen",description:"A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more about splash screens](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."},Nv=createIcuMessageFn("core/audits/splash-screen.js",Lv);class SplashScreen extends MultiCheckAudit{
-static get meta(){return{id:"splash-screen",title:Nv(Lv.title),failureTitle:Nv(Lv.failureTitle),description:Nv(Lv.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static assessManifest(e,t){if(e.isParseFailure&&e.parseFailureReason)return void t.push(e.parseFailureReason);const n=["hasName","hasBackgroundColor","hasThemeColor","hasIconsAtLeast512px"];e.allChecks.filter((e=>n.includes(e.id))).forEach((e=>{e.passing||t.push(e.failureText)}))}static async audit_(e,t){const n=[],a=await Zh.request(e,t);return SplashScreen.assessManifest(a,n),{failures:n,manifestValues:a}}}var Pv=Object.freeze({__proto__:null,default:SplashScreen,UIStrings:Lv});const Ov={title:"Sets a theme color for the address bar.",failureTitle:"Does not set a theme color for the address bar.",
-description:"The browser address bar can be themed to match your site. [Learn more about theming the address bar](https://developer.chrome.com/docs/lighthouse/pwa/themed-omnibox/)."},Bv=createIcuMessageFn("core/audits/themed-omnibox.js",Ov);class ThemedOmnibox extends MultiCheckAudit{static get meta(){return{id:"themed-omnibox",title:Bv(Ov.title),failureTitle:Bv(Ov.failureTitle),description:Bv(Ov.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors","MetaElements"]}}static assessMetaThemecolor(e,t){e?e.content||t.push("The theme-color meta tag did not contain a content value"):t.push('No `<meta name="theme-color">` tag found')}static assessManifest(e,t){if(e.isParseFailure&&e.parseFailureReason)return void t.push(e.parseFailureReason);const n=e.allChecks.find((e=>"hasThemeColor"===e.id));n&&!n.passing&&t.push(n.failureText)}static async audit_(e,t){const n=[],a=e.MetaElements.find((e=>"theme-color"===e.name)),r=await Zh.request(e,t)
-;return ThemedOmnibox.assessManifest(r,n),ThemedOmnibox.assessMetaThemecolor(a,n),{failures:n,manifestValues:r,themeColor:a?.content||null}}}var Uv=Object.freeze({__proto__:null,default:ThemedOmnibox,UIStrings:Ov});const jv={title:"Minimize third-party usage",failureTitle:"Reduce the impact of third-party code",description:"Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. [Learn how to minimize third-party impact](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/).",columnThirdParty:"Third-Party",displayValue:"Third-party code blocked the main thread for {timeInMs, number, milliseconds} ms"},zv=createIcuMessageFn("core/audits/third-party-summary.js",jv);class ThirdPartySummary extends Audit{static get meta(){return{id:"third-party-summary",title:zv(jv.title),
-failureTitle:zv(jv.failureTitle),description:zv(jv.description),requiredArtifacts:["traces","devtoolsLogs","URL"]}}static getSummaries(e,t,n,a){const r=new Map,o=new Map,i={mainThreadTime:0,blockingTime:0,transferSize:0};for(const t of e){const e=r.get(t.url)||{...i};e.transferSize+=t.transferSize,r.set(t.url,e)}const s=getJavaScriptURLs(e);for(const e of t){const t=getAttributableURLForTask(e,s),a=r.get(t)||{...i},o=e.selfTime*n;a.mainThreadTime+=o,a.blockingTime+=Math.max(o-50,0),r.set(t,a)}const c=new Map;for(const[e,t]of r.entries()){const n=a.entityByUrl.get(e);if(!n){r.delete(e);continue}const s=o.get(n)||{...i};s.transferSize+=t.transferSize,s.mainThreadTime+=t.mainThreadTime,s.blockingTime+=t.blockingTime,o.set(n,s);const l=c.get(n)||[];l.push(e),c.set(n,l)}return{byURL:r,byEntity:o,urls:c}}static makeSubItems(e,t,n){let a=(t.urls.get(e)||[]).map((e=>({url:e,...t.byURL.get(e)
-}))).filter((e=>e.transferSize>0)).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize));const r={transferSize:0,blockingTime:0},o=Math.max(4096,n.transferSize/20),i=Math.min(5,a.length);let s=0;for(;s<i;){const e=a[s];if(0===e.blockingTime&&e.transferSize<o)break;s++,r.transferSize+=e.transferSize,r.blockingTime+=e.blockingTime}if(!r.blockingTime&&!r.transferSize)return[];a=a.slice(0,s);const c={url:zv(Ar.otherResourcesLabel),transferSize:n.transferSize-r.transferSize,blockingTime:n.blockingTime-r.blockingTime};return c.transferSize>o&&a.push(c),a}static async audit(e,t){const n=t.settings||{},a=e.traces[Audit.DEFAULT_PASS],r=e.devtoolsLogs[Audit.DEFAULT_PASS],o=await bo.request(r,t),i=await li.request({URL:e.URL,devtoolsLog:r},t),s=i.firstParty,c=await _m.request(a,t),l="simulate"===n.throttlingMethod?n.throttling.cpuSlowdownMultiplier:1,u=ThirdPartySummary.getSummaries(o,c,l,i),d={wastedBytes:0,wastedMs:0
-},m=Array.from(u.byEntity.entries()).filter((([e])=>!(s&&s===e))).map((([e,t])=>(d.wastedBytes+=t.transferSize,d.wastedMs+=t.blockingTime,{...t,entity:e.name,subItems:{type:"subitems",items:ThirdPartySummary.makeSubItems(e,u,t)}}))).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize)),p=[{key:"entity",valueType:"text",label:zv(jv.columnThirdParty),subItemsHeading:{key:"url",valueType:"url"}},{key:"transferSize",granularity:1,valueType:"bytes",label:zv(Ar.columnTransferSize),subItemsHeading:{key:"transferSize"}},{key:"blockingTime",granularity:1,valueType:"ms",label:zv(Ar.columnBlockingTime),subItemsHeading:{key:"blockingTime"}}];if(!m.length)return{score:1,notApplicable:!0};const h=Audit.makeTableDetails(p,m,{...d,isEntityGrouped:!0});return{score:Number(d.wastedMs<=250),displayValue:zv(jv.displayValue,{timeInMs:d.wastedMs}),details:h}}}var qv=Object.freeze({__proto__:null,default:ThirdPartySummary,UIStrings:jv});const Wv={
-title:"Lazy load third-party resources with facades",failureTitle:"Some third-party resources can be lazy loaded with a facade",description:"Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. [Learn how to defer third-parties with a facade](https://developer.chrome.com/docs/lighthouse/performance/third-party-facades/).",displayValue:"{itemCount, plural,\n  =1 {# facade alternative available}\n  other {# facade alternatives available}\n  }",columnProduct:"Product",categoryVideo:"{productName} (Video)",categoryCustomerSuccess:"{productName} (Customer Success)",categoryMarketing:"{productName} (Marketing)",categorySocial:"{productName} (Social)"},$v=createIcuMessageFn("core/audits/third-party-facades.js",Wv),Vv={video:Wv.categoryVideo,"customer-success":Wv.categoryCustomerSuccess,marketing:Wv.categoryMarketing,social:Wv.categorySocial};class ThirdPartyFacades extends Audit{static get meta(){return{id:"third-party-facades",
-title:$v(Wv.title),failureTitle:$v(Wv.failureTitle),description:$v(Wv.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static condenseItems(e){e.sort(((e,t)=>t.transferSize-e.transferSize));let t=e.findIndex((e=>e.transferSize<1e3))||1;if((-1===t||t>5)&&(t=5),t>=e.length-1)return;const n=e.splice(t).reduce(((e,t)=>(e.transferSize+=t.transferSize,e.blockingTime+=t.blockingTime,e)));n.transferSize<1e3||(n.url=$v(Ar.otherResourcesLabel),e.push(n))}static getProductsWithFacade(e,t){const n=new Map;for(const a of e.keys()){const e=t.entityByUrl.get(a);if(!e||t.isFirstParty(a))continue;const r=ci.getProduct(a);r&&r.facades&&r.facades.length&&(n.has(r.name)||n.set(r.name,{product:r,entity:e}))}return Array.from(n.values())}static async audit(e,t){const n=t.settings,a=e.traces[Audit.DEFAULT_PASS],r=e.devtoolsLogs[Audit.DEFAULT_PASS],o=await bo.request(r,t),i=await li.request({URL:e.URL,devtoolsLog:r
-},t),s=await _m.request(a,t),c="simulate"===n.throttlingMethod?n.throttling.cpuSlowdownMultiplier:1,l=ThirdPartySummary.getSummaries(o,s,c,i),u=ThirdPartyFacades.getProductsWithFacade(l.byURL,i),d=[];for(const{product:e,entity:t}of u){const n=Vv[e.categories[0]];let a;a=n?$v(n,{productName:e.name}):e.name;const r=l.urls.get(t),o=l.byEntity.get(t);if(!r||!o)continue;const i=Array.from(r).map((e=>({url:e,...l.byURL.get(e)})));this.condenseItems(i),d.push({product:a,transferSize:o.transferSize,blockingTime:o.blockingTime,subItems:{type:"subitems",items:i},entity:t.name})}if(!d.length)return{score:1,notApplicable:!0};const m=[{key:"product",valueType:"text",subItemsHeading:{key:"url",valueType:"url"},label:$v(Wv.columnProduct)},{key:"transferSize",valueType:"bytes",subItemsHeading:{key:"transferSize"},granularity:1,label:$v(Ar.columnTransferSize)},{key:"blockingTime",valueType:"ms",subItemsHeading:{key:"blockingTime"},granularity:1,label:$v(Ar.columnBlockingTime)}];return{score:0,
-displayValue:$v(Wv.displayValue,{itemCount:d.length}),details:Audit.makeTableDetails(m,d)}}}var Hv=Object.freeze({__proto__:null,default:ThirdPartyFacades,UIStrings:Wv});const Gv={title:"Timing budget",description:"Set a timing budget to help you keep an eye on the performance of your site. Performant sites load fast and respond to user input events quickly. [Learn more about performance budgets](https://developers.google.com/web/tools/lighthouse/audits/budgets).",columnTimingMetric:"Metric",columnMeasurement:"Measurement"},Yv=createIcuMessageFn("core/audits/timing-budget.js",Gv);var Kv=Object.freeze({__proto__:null,default:class TimingBudget extends Audit{static get meta(){return{id:"timing-budget",title:Yv(Gv.title),description:Yv(Gv.description),scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL","GatherContext"]}}static getRowLabel(e){return Yv({"first-contentful-paint":Ar.firstContentfulPaintMetric,
-interactive:Ar.interactiveMetric,"first-meaningful-paint":Ar.firstMeaningfulPaintMetric,"max-potential-fid":Ar.maxPotentialFIDMetric,"total-blocking-time":Ar.totalBlockingTimeMetric,"speed-index":Ar.speedIndexMetric,"largest-contentful-paint":Ar.largestContentfulPaintMetric,"cumulative-layout-shift":Ar.cumulativeLayoutShiftMetric}[e])}static getMeasurement(e,t){return{"first-contentful-paint":t.firstContentfulPaint,interactive:t.interactive,"first-meaningful-paint":t.firstMeaningfulPaint,"max-potential-fid":t.maxPotentialFID,"total-blocking-time":t.totalBlockingTime,"speed-index":t.speedIndex,"largest-contentful-paint":t.largestContentfulPaint,"cumulative-layout-shift":t.cumulativeLayoutShift}[e]}static tableItems(e,t){let n=[];if(!e.timings)return n;n=e.timings.map((e=>{const n=e.metric,a=this.getRowLabel(n),r=this.getMeasurement(n,t);return{metric:n,label:a,measurement:r,overBudget:r&&r>e.budget?r-e.budget:void 0}})).sort(((e,t)=>(t.overBudget||0)-(e.overBudget||0)))
-;const a=n.find((e=>"cumulative-layout-shift"===e.metric));return a&&("number"==typeof a.measurement&&(a.measurement={type:"numeric",value:Number(a.measurement),granularity:.01}),"number"==typeof a.overBudget&&(a.overBudget={type:"numeric",value:Number(a.overBudget),granularity:.01})),n}static async audit(e,t){const n=e.GatherContext,a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=e.traces[Audit.DEFAULT_PASS],o=e.URL,i=await mc.request({URL:o,devtoolsLog:a},t),s={trace:r,devtoolsLog:a,gatherContext:n,settings:t.settings,URL:o},c=(await dy.request(s,t)).metrics,l=Budget.getMatchingBudget(t.settings.budgets,i.url);if(!l)return{score:0,notApplicable:!0};const u=[{key:"label",valueType:"text",label:Yv(Gv.columnTimingMetric)},{key:"measurement",valueType:"ms",label:Yv(Gv.columnMeasurement)},{key:"overBudget",valueType:"ms",label:Yv(Ar.columnOverBudget)}];return{details:Audit.makeTableDetails(u,this.tableItems(l,c),{sortedBy:["overBudget"]}),score:1}}},UIStrings:Gv});const Jv={
-title:"Image elements have explicit `width` and `height`",failureTitle:"Image elements do not have explicit `width` and `height`",description:"Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn how to set image dimensions](https://web.dev/optimize-cls/#images-without-dimensions)"},Xv=createIcuMessageFn("core/audits/unsized-images.js",Jv);class UnsizedImages extends Audit{static get meta(){return{id:"unsized-images",title:Xv(Jv.title),failureTitle:Xv(Jv.failureTitle),description:Xv(Jv.description),requiredArtifacts:["ImageElements"]}}static doesHtmlAttrProvideExplicitSize(e){if(!e)return!1;if(e.startsWith("+"))return!1;return parseInt(e,10)>=0}static isCssPropExplicitlySet(e){return!!e&&!["auto","initial","unset","inherit"].includes(e)}static isSizedImage(e){if(void 0===e.cssEffectiveRules)return!0
-;const t=e.attributeWidth,n=e.attributeHeight,a=e.cssEffectiveRules.width,r=e.cssEffectiveRules.height,o=e.cssEffectiveRules.aspectRatio,i=UnsizedImages.doesHtmlAttrProvideExplicitSize(t),s=UnsizedImages.isCssPropExplicitlySet(a),c=UnsizedImages.doesHtmlAttrProvideExplicitSize(n),l=UnsizedImages.isCssPropExplicitlySet(r),u=UnsizedImages.isCssPropExplicitlySet(o),d=i||s,m=c||l;return d&&m||d&&u||m&&u}static isNonNetworkSvg(e){const t="image/svg+xml"===UrlUtils.guessMimeType(e.src),n=e.src.slice(0,e.src.indexOf(":")),a=UrlUtils.isNonNetworkProtocol(n);return t&&a}static async audit(e){const t=e.ImageElements.filter((e=>!e.isCss&&!e.isInShadowDOM)),n=[];for(const e of t){if("fixed"===e.computedStyles.position||"absolute"===e.computedStyles.position)continue;if(UnsizedImages.isNonNetworkSvg(e))continue;if(UnsizedImages.isSizedImage(e))continue;const t=e.node.boundingRect;0===t.width&&0===t.height||n.push({url:UrlUtils.elideDataURI(e.src),node:Audit.makeNodeItem(e.node)})}const a=[{
-key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:Xv(Ar.columnURL)}];return{score:n.length>0?0:1,notApplicable:0===t.length,details:Audit.makeTableDetails(a,n),metricSavings:{CLS:0}}}}var Zv=Object.freeze({__proto__:null,default:UnsizedImages,UIStrings:Jv});const Qv=makeComputedArtifact(class UserTimings$1{static async compute_(e,t){const n=await mo.request(e,t),a=[],r={};return n.processEvents.filter((e=>!!e.cat.includes("blink.user_timing")&&("requestStart"!==e.name&&"navigationStart"!==e.name&&"paintNonDefaultBackgroundColor"!==e.name&&void 0===e.args.frame))).forEach((e=>{"R"===e.ph||"I"===e.ph.toUpperCase()?a.push({name:e.name,isMark:!0,args:e.args,startTime:e.ts}):"b"===e.ph.toLowerCase()?r[e.name]=e.ts:"e"===e.ph.toLowerCase()&&a.push({name:e.name,isMark:!1,args:e.args,startTime:r[e.name],endTime:e.ts,duration:e.ts-r[e.name]})})),a.forEach((e=>{e.startTime=(e.startTime-n.timeOriginEvt.ts)/1e3,e.isMark||(e.endTime=(e.endTime-n.timeOriginEvt.ts)/1e3,
-e.duration=e.duration/1e3)})),a}},null),ew={title:"User Timing marks and measures",description:"Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more about User Timing marks](https://developer.chrome.com/docs/lighthouse/performance/user-timings/).",displayValue:"{itemCount, plural,\n    =1 {1 user timing}\n    other {# user timings}\n    }",columnType:"Type"},tw=createIcuMessageFn("core/audits/user-timings.js",ew);class UserTimings extends Audit{static get meta(){return{id:"user-timings",title:tw(ew.title),description:tw(ew.description),scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces"]}}static get excludedPrefixes(){return["goog_"]}static excludeEvent(e){return UserTimings.excludedPrefixes.every((t=>!e.name.startsWith(t)))}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],a=(await Qv.request(n,t)).filter(UserTimings.excludeEvent),r=a.map((e=>({name:e.name,
-startTime:e.startTime,duration:e.isMark?void 0:e.duration,timingType:e.isMark?"Mark":"Measure"}))).sort(((e,t)=>e.timingType===t.timingType?e.startTime-t.startTime:"Measure"===e.timingType?-1:1)),o=[{key:"name",valueType:"text",label:tw(Ar.columnName)},{key:"timingType",valueType:"text",label:tw(ew.columnType)},{key:"startTime",valueType:"ms",granularity:.01,label:tw(Ar.columnStartTime)},{key:"duration",valueType:"ms",granularity:.01,label:tw(Ar.columnDuration)}],i=Audit.makeTableDetails(o,r);let s;return a.length&&(s=tw(ew.displayValue,{itemCount:a.length})),{score:Number(0===a.length),notApplicable:0===a.length,displayValue:s,details:i}}}var nw=Object.freeze({__proto__:null,default:UserTimings,UIStrings:ew});const aw={title:"Preconnect to required origins",
-description:"Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",unusedWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Only use `preconnect` for important origins that the page will certainly request.',crossoriginWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.',tooManyPreconnectLinksWarning:"More than 2 `<link rel=preconnect>` connections were found. These should be used sparingly and only to the most important origins."},rw=createIcuMessageFn("core/audits/uses-rel-preconnect.js",aw);class UsesRelPreconnectAudit extends Audit{static get meta(){return{id:"uses-rel-preconnect",title:rw(aw.title),
-description:rw(aw.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL","LinkElements"],scoreDisplayMode:Audit.SCORING_MODES.NUMERIC}}static hasValidTiming(e){return!!e.timing&&e.timing.connectEnd>=0&&e.timing.connectStart>=0}static hasAlreadyConnectedToOrigin(e){return!!e.timing&&(-1===e.timing.dnsStart&&-1===e.timing.dnsEnd&&-1===e.timing.connectStart&&-1===e.timing.connectEnd||e.timing.dnsEnd-e.timing.dnsStart==0&&e.timing.connectEnd-e.timing.connectStart==0)}static socketStartTimeIsBelowThreshold(e,t){return Math.max(0,e.networkRequestTime-t.networkEndTime)<15e3}static async audit(e,t){const n=e.traces[UsesRelPreconnectAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreconnectAudit.DEFAULT_PASS],r=t.settings;let o=0;const i=[],[s,c,l,u,d]=await Promise.all([bo.request(a,t),mc.request({devtoolsLog:a,URL:e.URL},t),Go.request({devtoolsLog:a,settings:r},t),Lc.request(n,t),fo.request({trace:n,devtoolsLog:a,URL:e.URL
-},t)]),{rtt:m,additionalRttByOrigin:p}=l.getOptions(),h=await Nm.getPessimisticGraph(d,u),f=new Set;h.traverse((e=>{"network"===e.type&&f.add(e.record.url)}));const y=new Map;s.forEach((e=>{if(!UsesRelPreconnectAudit.hasValidTiming(e)||e.initiator.url===c.url||!e.parsedURL||!e.parsedURL.securityOrigin||c.parsedURL.securityOrigin===e.parsedURL.securityOrigin||!f.has(e.url)||UsesRelPreconnectAudit.hasAlreadyConnectedToOrigin(e)||!UsesRelPreconnectAudit.socketStartTimeIsBelowThreshold(e,c))return;const t=e.parsedURL.securityOrigin,n=y.get(t)||[];n.push(e),y.set(t,n)}));const b=e.LinkElements.filter((e=>"preconnect"===e.rel)),v=new Set(b.map((e=>UrlUtils.getOrigin(e.href||""))));let w=[];y.forEach((e=>{const t=e.reduce(((e,t)=>t.networkRequestTime<e.networkRequestTime?t:e));if(!t.timing)return;const n=t.parsedURL.securityOrigin,a=p.get(n)||0;let r=m+a;"https"===t.parsedURL.scheme&&(r*=2);const s=t.networkRequestTime-c.networkEndTime+t.timing.dnsStart,l=Math.min(r,s)
-;l<50||(v.has(n)?i.push(rw(aw.crossoriginWarning,{securityOrigin:n})):(o=Math.max(l,o),w.push({url:n,wastedMs:l})))})),w=w.sort(((e,t)=>t.wastedMs-e.wastedMs));for(const e of v)e&&(s.some((t=>e===t.parsedURL.securityOrigin))||i.push(rw(aw.unusedWarning,{securityOrigin:e})));if(b.length>=2)return{score:1,warnings:b.length>=3?[...i,rw(aw.tooManyPreconnectLinksWarning)]:i};const D=[{key:"url",valueType:"url",label:rw(Ar.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:rw(Ar.columnWastedMs)}],E=Audit.makeOpportunityDetails(D,w,{overallSavingsMs:o,sortedBy:["wastedMs"]});return{score:ByteEfficiencyAudit.scoreForWastedMs(o),numericValue:o,numericUnit:"millisecond",displayValue:o?rw(Ar.displayValueMsSavings,{wastedMs:o}):"",warnings:i,details:E}}}var ow=Object.freeze({__proto__:null,default:UsesRelPreconnectAudit,UIStrings:aw});const iw={title:"Preload key requests",
-description:"Consider using `<link rel=preload>` to prioritize fetching resources that are currently requested later in page load. [Learn how to preload key requests](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preload/).",crossoriginWarning:'A preload `<link>` was found for "{preloadURL}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.'},sw=createIcuMessageFn("core/audits/uses-rel-preload.js",iw);class UsesRelPreloadAudit extends Audit{static get meta(){return{id:"uses-rel-preload",title:sw(iw.title),description:sw(iw.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL"],scoreDisplayMode:Audit.SCORING_MODES.NUMERIC}}static getURLsToPreload(e,t){const n=new Set;return t.traverse(((t,a)=>{if("network"!==t.type)return;const r=a.slice(1).filter((e=>"network"===e.type));UsesRelPreloadAudit.shouldPreloadRequest(t.record,e,r)&&n.add(t.record.url)})),n}static getURLsFailedToPreload(e){
-const t=[];e.traverse((e=>"network"===e.type&&t.push(e.record)));const n=t.filter((e=>e.isLinkPreload)),a=new Map;for(const e of n){const t=a.get(e.frameId)||new Set;t.add(e.url),a.set(e.frameId,t)}const r=t.filter((e=>{const t=a.get(e.frameId);if(!t)return!1;if(!t.has(e.url))return!1;return!(e.fromDiskCache||e.fromMemoryCache||e.fromPrefetchCache)&&!e.isLinkPreload}));return new Set(r.map((e=>e.url)))}static shouldPreloadRequest(e,t,n){const a=t.redirects?t.redirects.length:0;return!e.isLinkPreload&&(!!Jp.isCritical(e,t)&&(!NetworkRequest.isNonNetworkRequest(e)&&(n.length===a+2&&(e.frameId===t.frameId&&UrlUtils.rootDomainsMatch(e.url,t.url)))))}static computeWasteWithGraph(e,t,n){if(!e.size)return{wastedMs:0,results:[]};const a=n.simulate(t,{flexibleOrdering:!0}),r=t.cloneWithRelationships(),o=[];let i=null;if(r.traverse((t=>{"network"===t.type&&(t.isMainDocument()?i=t:t.record&&e.has(t.record.url)&&o.push(t))})),!i)throw new Error("Could not find main document node")
-;for(const e of o)e.removeAllDependencies(),e.addDependency(i);const s=n.simulate(r,{flexibleOrdering:!0}),c=Array.from(a.nodeTimings.keys()).reduce(((e,t)=>e.set(t.record,t)),new Map),l=[];for(const e of o){const t=c.get(e.record),n=s.nodeTimings.get(e),r=a.nodeTimings.get(t);if(!r||!n)throw new Error("Missing preload node");const o=Math.round(r.endTime-n.endTime);o<100||l.push({url:e.record.url,wastedMs:o})}return l.length?{wastedMs:Math.max(...l.map((e=>e.wastedMs))),results:l}:{wastedMs:0,results:l}}static async audit_(e,t){const n=e.traces[UsesRelPreloadAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreloadAudit.DEFAULT_PASS],r=e.URL,o={devtoolsLog:a,settings:t.settings},[i,s,c]=await Promise.all([mc.request({devtoolsLog:a,URL:r},t),fo.request({trace:n,devtoolsLog:a,URL:r},t),Go.request(o,t)]),l=UsesRelPreloadAudit.getURLsToPreload(i,s),{results:u,wastedMs:d}=UsesRelPreloadAudit.computeWasteWithGraph(l,s,c);let m;u.sort(((e,t)=>t.wastedMs-e.wastedMs))
-;const p=UsesRelPreloadAudit.getURLsFailedToPreload(s);p.size&&(m=Array.from(p).map((e=>sw(iw.crossoriginWarning,{preloadURL:e}))));const h=[{key:"url",valueType:"url",label:sw(Ar.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:sw(Ar.columnWastedMs)}],f=Audit.makeOpportunityDetails(h,u,{overallSavingsMs:d,sortedBy:["wastedMs"]});return{score:ByteEfficiencyAudit.scoreForWastedMs(d),numericValue:d,numericUnit:"millisecond",displayValue:d?sw(Ar.displayValueMsSavings,{wastedMs:d}):"",details:f,warnings:m}}static async audit(){return{score:1,notApplicable:!0,details:Audit.makeOpportunityDetails([],[],{overallSavingsMs:0})}}}var cw=Object.freeze({__proto__:null,default:UsesRelPreloadAudit,UIStrings:iw});
-/**
-   * @license Copyright 2020 Google Inc. All Rights Reserved.
-   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-   */const lw={title:"Page has valid source maps",failureTitle:"Missing source maps for large first-party JavaScript",description:"Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more about source maps](https://developer.chrome.com/docs/devtools/javascript/source-maps/).",columnMapURL:"Map URL",missingSourceMapErrorMessage:"Large JavaScript file is missing a source map",missingSourceMapItemsWarningMesssage:"{missingItems, plural,\n    =1 {Warning: missing 1 item in `.sourcesContent`}\n    other {Warning: missing # items in `.sourcesContent`}\n    }"},uw=createIcuMessageFn("core/audits/valid-source-maps.js",lw);var dw=Object.freeze({__proto__:null,default:class ValidSourceMaps extends Audit{static get meta(){return{id:"valid-source-maps",title:uw(lw.title),failureTitle:uw(lw.failureTitle),
-description:uw(lw.description),requiredArtifacts:["Scripts","SourceMaps","URL","devtoolsLogs"]}}static isLargeFirstPartyJS(e,t){const n=e.url;if(!e.length||!n)return!1;if(!UrlUtils.isValid(n))return!1;if(!Util.createOrReturnURL(n).protocol.startsWith("http"))return!1;const a=e.length>=512e3;return t.isFirstParty(n)&&a}static async audit(e,t){const{SourceMaps:n}=e,a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=await li.request({URL:e.URL,devtoolsLog:a},t),o=new Set;let i=!1;const s=[];for(const t of e.Scripts){const e=n.find((e=>e.scriptId===t.scriptId)),a=[];if(!this.isLargeFirstPartyJS(t,r)||e&&e.map||(i=!0,o.add(t.url),a.push({error:uw(lw.missingSourceMapErrorMessage)})),e&&!e.map&&a.push({error:e.errorMessage}),e?.map){const t=e.map.sourcesContent||[];let n=0;for(let a=0;a<e.map.sources.length;a++)(t.length<a||!t[a])&&(n+=1);n>0&&a.push({error:uw(lw.missingSourceMapItemsWarningMesssage,{missingItems:n})})}(e||a.length)&&s.push({scriptUrl:t.url,sourceMapUrl:e?.sourceMapUrl,subItems:{
-type:"subitems",items:a}})}const c=[{key:"scriptUrl",valueType:"url",subItemsHeading:{key:"error"},label:uw(Ar.columnURL)},{key:"sourceMapUrl",valueType:"url",label:uw(lw.columnMapURL)}];return s.sort(((e,t)=>{const n=o.has(e.scriptUrl),a=o.has(t.scriptUrl);return n&&!a?-1:!n&&a?1:e.subItems.items.length&&!t.subItems.items.length?-1:!e.subItems.items.length&&t.subItems.items.length?1:t.scriptUrl.localeCompare(e.scriptUrl)})),{score:i?0:1,details:Audit.makeTableDetails(c,s)}}},UIStrings:lw});const mw={title:'Has a `<meta name="viewport">` tag with `width` or `initial-scale`',failureTitle:'Does not have a `<meta name="viewport">` tag with `width` or `initial-scale`',description:'A `<meta name="viewport">` not only optimizes your app for mobile screen sizes, but also prevents [a 300 millisecond delay to user input](https://developer.chrome.com/blog/300ms-tap-delay-gone-away/). [Learn more about using the viewport meta tag](https://developer.chrome.com/docs/lighthouse/pwa/viewport/).',
-explanationNoTag:'No `<meta name="viewport">` tag found'},pw=createIcuMessageFn("core/audits/viewport.js",mw);var gw=Object.freeze({__proto__:null,default:class Viewport extends Audit{static get meta(){return{id:"viewport",title:pw(mw.title),failureTitle:pw(mw.failureTitle),description:pw(mw.description),requiredArtifacts:["MetaElements"]}}static async audit(e,t){const n=await Mb.request(e.MetaElements,t);let a=300;return n.hasViewportTag?(n.isMobileOptimized&&(a=0),{score:Number(n.isMobileOptimized),metricSavings:{INP:a},warnings:n.parserWarnings}):{score:0,explanation:pw(mw.explanationNoTag),metricSavings:{INP:a}}}},UIStrings:mw});const hw={title:"Minimizes work during key interaction",failureTitle:"Minimize work during key interaction",description:"This is the thread-blocking work occurring during the Interaction to Next Paint measurement. [Learn more about the Interaction to Next Paint metric](https://web.dev/inp/).",inputDelay:"Input delay",processingTime:"Processing time",
-presentationDelay:"Presentation delay",displayValue:"{timeInMs, number, milliseconds} ms spent on event '{interactionType}'",eventTarget:"Event target"},fw=createIcuMessageFn("core/audits/work-during-interaction.js",hw);class WorkDuringInteraction extends Audit{static get meta(){return{id:"work-during-interaction",title:fw(hw.title),failureTitle:fw(hw.failureTitle),description:fw(hw.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces","devtoolsLogs","TraceElements"]}}static recursivelyClipTasks(e,t,n,a){const r=e.event.ts,o=e.endEvent?.ts??e.event.ts+Number(e.event.dur||0);e.startTime=Math.max(n,Math.min(a,r))/1e3,e.endTime=Math.max(n,Math.min(a,o))/1e3,e.duration=e.endTime-e.startTime;const i=e.children.map((t=>WorkDuringInteraction.recursivelyClipTasks(t,e,n,a))).reduce(((e,t)=>e+t),0);return e.selfTime=e.duration-i,e.duration}static clipTasksByTs(e,t,n){
-for(const a of e)a.parent||WorkDuringInteraction.recursivelyClipTasks(a,void 0,t,n)}static getPhaseTimes(e){const t=e.args.data,n=e.ts,a=n-1e3*t.timeStamp,r=a+1e3*t.processingStart,o=a+1e3*t.processingEnd;return{inputDelay:{startTs:n,endTs:r},processingTime:{startTs:r,endTs:o},presentationDelay:{startTs:o,endTs:n+1e3*t.duration}}}static getThreadBreakdownTable(e,t,n,a){const r=TraceProcessor.filteredTraceSort(t.traceEvents,(t=>t.pid===e.pid&&t.tid===e.tid)),o=r.reduce(((e,t)=>Math.max(t.ts+(t.dur||0),e)),0),{frames:i}=n,s=MainThreadTasks$2.getMainThreadTasks(r,i,o),c=WorkDuringInteraction.getPhaseTimes(e),l=[];for(const[e,t]of Object.entries(c)){WorkDuringInteraction.clipTasksByTs(s,t.startTs,t.endTs);const n=getExecutionTimingsByURL(s,a),r=[];for(const[e,t]of n){const n=Object.values(t).reduce(((e,t)=>e+t)),a=t[Cm.scriptEvaluation.id]||0,o=t[Cm.styleLayout.id]||0,i=t[Cm.paintCompositeRender.id]||0;r.push({url:e,total:n,scripting:a,layout:o,render:i})}
-const o=r.filter((e=>e.total>1)).sort(((e,t)=>t.total-e.total));l.push({phase:fw(hw[e]),total:(t.endTs-t.startTs)/1e3,subItems:{type:"subitems",items:o}})}const u=[{key:"phase",valueType:"text",subItemsHeading:{key:"url",valueType:"url"},label:"Phase"},{key:"total",valueType:"ms",subItemsHeading:{key:"total",granularity:1,valueType:"ms"},granularity:1,label:"Total time"},{key:null,valueType:"ms",subItemsHeading:{key:"scripting",granularity:1,valueType:"ms"},label:"Script evaluation"},{key:null,valueType:"ms",subItemsHeading:{key:"layout",granularity:1,valueType:"ms"},label:Cm.styleLayout.label},{key:null,valueType:"ms",subItemsHeading:{key:"render",granularity:1,valueType:"ms"},label:Cm.paintCompositeRender.label}];return{table:Audit.makeTableDetails(u,l,{sortedBy:["total"]}),phases:c}}static getTraceElementTable(e){const t=e.find((e=>"responsiveness"===e.traceEventType));if(!t)return;const n=[{key:"node",valueType:"node",label:fw(hw.eventTarget)}],a=[{node:Audit.makeNodeItem(t.node)}]
-;return Audit.makeTableDetails(n,a)}static async audit(e,t){const{settings:n}=t;if("simulate"===n.throttlingMethod)return{score:null,notApplicable:!0,metricSavings:{INP:0}};const a=e.traces[WorkDuringInteraction.DEFAULT_PASS],r={trace:a,settings:n},o=await Bc.request(r,t);if(null===o)return{score:null,notApplicable:!0,metricSavings:{INP:0}};if("FallbackTiming"===o.name)throw new LighthouseError(LighthouseError.errors.UNSUPPORTED_OLD_CHROME,{featureName:"detailed EventTiming trace events"});const i=[],s=WorkDuringInteraction.getTraceElementTable(e.TraceElements);s&&i.push(s);const c=e.devtoolsLogs[WorkDuringInteraction.DEFAULT_PASS],l=await bo.request(c,t),u=await mo.request(a,t),{table:d,phases:m}=WorkDuringInteraction.getThreadBreakdownTable(o,a,u,l);i.push(d);const p=o.args.data.type;i.push({type:"debugdata",interactionType:p,phases:m});const h=o.args.data.duration,f=fw(hw.displayValue,{timeInMs:h,interactionType:p});return{
-score:h<ExperimentalInteractionToNextPaint.defaultOptions.p10?1:0,displayValue:f,details:{type:"list",items:i},metricSavings:{INP:h}}}}var yw=Object.freeze({__proto__:null,default:WorkDuringInteraction,UIStrings:hw});const bw={GROUPS__METRICS:"Metrics",GROUPS__ADS_PERFORMANCE:"Ad Speed",GROUPS__ADS_BEST_PRACTICES:"Tag Best Practices",NOT_APPLICABLE__DEFAULT:"Audit not applicable",NOT_APPLICABLE__INVALID_TIMING:"Invalid timing task data",NOT_APPLICABLE__NO_AD_RELATED_REQ:"No ad-related requests",NOT_APPLICABLE__NO_AD_RENDERED:"No ads rendered",NOT_APPLICABLE__NO_ADS_VIEWPORT:"No ads in viewport",NOT_APPLICABLE__NO_ADS:"No ads requested",NOT_APPLICABLE__NO_BIDS:"No bids detected",NOT_APPLICABLE__NO_EVENT_MATCHING_REQ:"No event matches network records",NOT_APPLICABLE__NO_GPT:"GPT not requested",NOT_APPLICABLE__NO_RECORDS:"No successful network records",NOT_APPLICABLE__NO_VISIBLE_SLOTS:"No visible slots",NOT_APPLICABLE__NO_TAG:"No tag requested",NOT_APPLICABLE__NO_TAGS:"No tags requested",
-NOT_APPLICABLE__NO_TASKS:"No tasks to compare",NOT_APPLICABLE__NO_VALID_AD_WIDTHS:"No requested ads contain ads of valid width",NOT_APPLICABLE__NO_LAYOUT_SHIFTS:"No layout shift events found",ERRORS__AREA_LARGER_THAN_VIEWPORT:"Calculated ad area is larger than viewport",ERRORS__VIEWPORT_AREA_ZERO:"Viewport area is zero",WARNINGS__NO_ADS:"No ads were requested when fetching this page.",WARNINGS__NO_AD_RENDERED:"No ads were rendered when rendering this page.",WARNINGS__NO_TAG:"The GPT tag was not requested."},vw=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/messages/common-strings.js",bw),notApplicableObj=e=>({notApplicable:!0,score:1,displayValue:vw(e)}),ww={Default:notApplicableObj(bw.NOT_APPLICABLE__DEFAULT),InvalidTiming:notApplicableObj(bw.NOT_APPLICABLE__INVALID_TIMING),NoAdRelatedReq:notApplicableObj(bw.NOT_APPLICABLE__NO_AD_RELATED_REQ),NoAdRendered:notApplicableObj(bw.NOT_APPLICABLE__NO_AD_RENDERED),
-NoAdsViewport:notApplicableObj(bw.NOT_APPLICABLE__NO_ADS_VIEWPORT),NoAds:notApplicableObj(bw.NOT_APPLICABLE__NO_ADS),NoBids:notApplicableObj(bw.NOT_APPLICABLE__NO_BIDS),NoEventMatchingReq:notApplicableObj(bw.NOT_APPLICABLE__NO_EVENT_MATCHING_REQ),NoGpt:notApplicableObj(bw.NOT_APPLICABLE__NO_GPT),NoLayoutShifts:notApplicableObj(bw.NOT_APPLICABLE__NO_LAYOUT_SHIFTS),NoRecords:notApplicableObj(bw.NOT_APPLICABLE__NO_RECORDS),NoVisibleSlots:notApplicableObj(bw.NOT_APPLICABLE__NO_VISIBLE_SLOTS),NoTag:notApplicableObj(bw.NOT_APPLICABLE__NO_TAG),NoTags:notApplicableObj(bw.NOT_APPLICABLE__NO_TAGS),NoTasks:notApplicableObj(bw.NOT_APPLICABLE__NO_TASKS),NoValidAdWidths:notApplicableObj(bw.NOT_APPLICABLE__NO_VALID_AD_WIDTHS)},Dw={NoAds:vw(bw.WARNINGS__NO_ADS),NoAdRendered:vw(bw.WARNINGS__NO_AD_RENDERED),NoTag:vw(bw.WARNINGS__NO_TAG)},Ew={ViewportAreaZero:vw(bw.ERRORS__VIEWPORT_AREA_ZERO)},Tw={Metrics:vw(bw.GROUPS__METRICS),AdsPerformance:vw(bw.GROUPS__ADS_PERFORMANCE),
-AdsBestPractices:vw(bw.GROUPS__ADS_BEST_PRACTICES)},Cw="lighthouse-plugin-publisher-ads",Sw={categoryDescription:"A Lighthouse plugin to improve ad speed and overall quality that is targeted at sites using GPT or AdSense tag. [Learn more](https://developers.google.com/publisher-ads-audits/reference)"},_w=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/plugin.js",Sw);var Aw={audits:[{path:`${Cw}/audits/ad-blocking-tasks`},{path:`${Cw}/audits/ad-render-blocking-resources`},{path:`${Cw}/audits/ad-request-critical-path`},{path:`${Cw}/audits/bid-request-from-page-start`},{path:`${Cw}/audits/ad-request-from-page-start`},{path:`${Cw}/audits/ad-top-of-viewport`},{path:`${Cw}/audits/ads-in-viewport`},{path:`${Cw}/audits/async-ad-tags`},{path:`${Cw}/audits/blocking-load-events`},{path:`${Cw}/audits/bottleneck-requests`},{path:`${Cw}/audits/duplicate-tags`},{path:`${Cw}/audits/first-ad-render`},{path:`${Cw}/audits/full-width-slots`},{path:`${Cw}/audits/gpt-bids-parallel`},{
-path:`${Cw}/audits/loads-gpt-from-official-source`},{path:`${Cw}/audits/loads-ad-tag-over-https`},{path:`${Cw}/audits/script-injected-tags`},{path:`${Cw}/audits/serial-header-bidding`},{path:`${Cw}/audits/tag-load-time`},{path:`${Cw}/audits/viewport-ad-density`},{path:`${Cw}/audits/cumulative-ad-shift`},{path:`${Cw}/audits/deprecated-api-usage`},{path:`${Cw}/audits/gpt-errors-overall`},{path:`${Cw}/audits/total-ad-blocking-time`}],groups:{metrics:{title:Tw.Metrics},"ads-performance":{title:Tw.AdsPerformance},"ads-best-practices":{title:Tw.AdsBestPractices}},category:{title:"Publisher Ads",description:_w(Sw.categoryDescription),auditRefs:[{id:"tag-load-time",weight:5,group:"metrics"},{id:"bid-request-from-page-start",weight:5,group:"metrics"},{id:"ad-request-from-page-start",weight:25,group:"metrics"},{id:"first-ad-render",weight:10,group:"metrics"},{id:"cumulative-ad-shift",weight:5,group:"metrics"},{id:"total-ad-blocking-time",weight:2,group:"metrics"},{id:"gpt-bids-parallel",
-weight:1,group:"ads-performance"},{id:"serial-header-bidding",weight:1,group:"ads-performance"},{id:"bottleneck-requests",weight:1,group:"ads-performance"},{id:"script-injected-tags",weight:1,group:"ads-performance"},{id:"blocking-load-events",weight:1,group:"ads-performance"},{id:"ad-render-blocking-resources",weight:1,group:"ads-performance"},{id:"ad-blocking-tasks",weight:1,group:"ads-performance"},{id:"ad-request-critical-path",weight:0,group:"ads-performance"},{id:"ads-in-viewport",weight:4,group:"ads-best-practices"},{id:"async-ad-tags",weight:2,group:"ads-best-practices"},{id:"loads-ad-tag-over-https",weight:1,group:"ads-best-practices"},{id:"loads-gpt-from-official-source",weight:4,group:"ads-best-practices"},{id:"viewport-ad-density",weight:2,group:"ads-best-practices"},{id:"ad-top-of-viewport",weight:2,group:"ads-best-practices"},{id:"duplicate-tags",weight:1,group:"ads-best-practices"},{id:"deprecated-gpt-api-usage",weight:0,group:"ads-best-practices"},{
-id:"gpt-errors-overall",weight:0,group:"ads-best-practices"}]}},kw=Object.freeze({__proto__:null,default:Aw,UIStrings:Sw}),xw=[{label:"Prebid JS",patterns:["^https?://([^.]*.)?prebid[.]org/.*","^https?://acdn[.]adnxs[.]com/prebid/.*"]},{label:"33Across",patterns:["^https?://ssc[.]33across.com/api/.*"]},{label:"AppNexus",patterns:["^https?://ib[.]adnxs[.]com/.*"]},{label:"Amazon Ads",patterns:["^https?://[a-z-_.]*[.]amazon-adsystem[.]com/.*bid.*"]},{label:"AdTechus (AOL)",patterns:["^https?://([^.]*.)?adserver[.]adtechus[.]com/.*"]},{label:"Aardvark",patterns:["^https?://thor[.]rtk[.]io/.*"]},{label:"AdBlade",patterns:["^https?://rtb[.]adblade[.]com/prebidjs/bid.*"]},{label:"AdBund",patterns:["^https?://us-east-engine[.]adbund[.]xyz/prebid/ad/get.*","^https?://us-west-engine[.]adbund[.]xyz/prebid/ad/get.*"]},{label:"AdButler",patterns:["^https?://servedbyadbutler[.]com/adserve.*"]},{label:"Adequant",patterns:["^https?://rex[.]adequant[.]com/rex/c2s_prebid.*"]},{label:"AdForm",
-patterns:["^https?://adx[.]adform[.]net/adx.*"]},{label:"AdMedia",patterns:["^https?://b[.]admedia[.]com/banner/prebid/bidder.*"]},{label:"AdMixer",patterns:["^https?://inv-nets[.]admixer[.]net/prebid[.]aspx.*","^https?://inv-nets[.]admixer[.]net/videoprebid[.]aspx.*"]},{label:"AOL",patterns:["^https?://adserver-us[.]adtech[.]advertising[.]com.*","^https?://adserver-eu[.]adtech[.]advertising[.]com.*","^https?://adserver-as[.]adtech[.]advertising[.]com.*","^https?://adserver[.]adtech[.]de/pubapi/.*"]},{label:"Beachfront",patterns:["^https?://reachms[.]bfmio[.]com/bid[.]json?exchange_id=.*"]},{label:"Bidfluence",patterns:["^https?://cdn[.]bidfluence[.]com/forge[.]js.*"]},{label:"Brightcom",patterns:["^https?://hb[.]iselephant[.]com/auc/ortb.*"]},{label:"C1x",patterns:["^https?://ht-integration[.]c1exchange[.]com:9000/ht.*"]},{label:"CentroBid",patterns:["^https?://t[.]brand-server[.]com/hb.*"]},{label:"Conversant",patterns:["^https?://media[.]msg[.]dotomi[.]com/s2s/.*"]},{label:"Criteo",
-patterns:["^https?://static[.]criteo[.]net/js/ld/publishertag[.]js.*","^https?://([^.]*.)?bidder[.]criteo[.]com/cdb.*","^https?://([^.]*.)?rtax[.]criteo[.]com/delivery/rta.*","^https?://([^.]*.)?rtax[.]eu[.]criteo[.]com/delivery/rta.*"]},{label:"Datablocks",patterns:["^https?://[a-z0-9_.-]*[.]dblks[.]net/.*"]},{label:"Districtm",patterns:["^https?://prebid[.]districtm[.]ca/lib[.]js.*"]},{label:"E-Planning",patterns:["^https?://ads[.]us[.]e-planning[.]net.*"]},{label:"Essens",patterns:["^https?://bid[.]essrtb[.]com/bid/prebid_call.*"]},{label:"Facebook",patterns:["^https?://an[.]facebook[.]com/v2/placementbid[.]json.*"]},{label:"FeatureForward",patterns:["^https?://prmbdr[.]featureforward[.]com/newbidder/.*"]},{label:"Fidelity",patterns:["^https?://x[.]fidelity-media[.]com.*"]},{label:"GetIntent",patterns:["^https?://px[.]adhigh[.]net/rtb/direct_banner.*","^https?://px[.]adhigh[.]net/rtb/direct_vast.*"]},{label:"GumGum",patterns:["^https?://g2[.]gumgum[.]com/hbid/imp.*"]},{
-label:"Hiromedia",patterns:["^https?://hb-rtb[.]ktdpublishers[.]com/bid/get.*"]},{label:"Imonomy",patterns:["^https?://b[.]imonomy[.]com/openrtb/hb/.*"]},{label:"ImproveDigital",patterns:["^https?://ad[.]360yield[.]com/hb.*"]},{label:"IndexExchange",patterns:["^https?://as(-sec)?[.]casalemedia[.]com/(cygnus|headertag).*","^https?://js(-sec)?[.]indexww[.]com/ht/.*"]},{label:"InnerActive",patterns:["^https?://ad-tag[.]inner-active[.]mobi/simpleM2M/requestJsonAd.*"]},{label:"Innity",patterns:["^https?://as[.]innity[.]com/synd/.*"]},{label:"JCM",patterns:["^https?://media[.]adfrontiers[.]com/pq.*"]},{label:"JustPremium",patterns:["^https?://pre[.]ads[.]justpremium[.]com/v/.*"]},{label:"Kargo",patterns:["^https?://krk[.]kargo[.]com/api/v1/bid.*"]},{label:"Komoona",patterns:["^https?://bidder[.]komoona[.]com/v1/GetSBids.*"]},{label:"KruxLink",patterns:["^https?://link[.]krxd[.]net/hb.*"]},{label:"Kumma",patterns:["^https?://cdn[.]kumma[.]com/pb_ortb[.]js.*"]},{label:"Mantis",
-patterns:["^https?://mantodea[.]mantisadnetwork[.]com/website/prebid.*"]},{label:"MarsMedia",patterns:["^https?://bid306[.]rtbsrv[.]com:9306/bidder.*"]},{label:"Media.net",patterns:["^https?://contextual[.]media[.]net/bidexchange.*"]},{label:"MemeGlobal",patterns:["^https?://stinger[.]memeglobal[.]com/api/v1/services/prebid.*"]},{label:"MobFox",patterns:["^https?://my[.]mobfox[.]com/request[.]php.*"]},{label:"NanoInteractive",patterns:["^https?://tmp[.]audiencemanager[.]de/hb.*"]},{label:"OpenX",patterns:["^https?://([^.]*.)?d[.]openx[.]net/w/1[.]0/arj.*","^https?://([^.]*.)?servedbyopenx[.]com/.*"]},{label:"Piximedia",patterns:["^https?://static[.]adserver[.]pm/prebid.*"]},{label:"Platformio",patterns:["^https?://piohbdisp[.]hb[.]adx1[.]com.*"]},{label:"Pollux",patterns:["^https?://adn[.]plxnt[.]com/prebid.*"]},{label:"PubGears",patterns:["^https?://c[.]pubgears[.]com/tags.*"]},{label:"Pubmatic",
-patterns:["^https?://ads[.]pubmatic[.]com/AdServer/js/gshowad[.]js.*","^https?://([^.]*.)?gads.pubmatic[.]com/.*","^https?://hbopenbid.pubmatic[.]com/.*"]},{label:"Pulsepoint",patterns:["^https?://bid[.]contextweb[.]com/header/tag.*"]},{label:"Quantcast",patterns:["^https?://global[.]qc[.]rtb[.]quantserve[.]com:8080/qchb.*"]},{label:"Rhythmone",patterns:["^https?://tag[.]1rx[.]io/rmp/.*"]},{label:"Roxot",patterns:["^https?://r[.]rxthdr[.]com.*"]},{label:"Rubicon",patterns:["^https?://([^.]*.)?(fastlane|optimized-by|anvil)[.]rubiconproject[.]com/a/api.*","^https?://fastlane-adv[.]rubiconproject[.]com/v1/auction/video.*"]},{label:"Sekindo",patterns:["^https?://hb[.]sekindo[.]com/live/liveView[.]php.*"]},{label:"ShareThrough",patterns:["^https?://btlr[.]sharethrough[.]com/header-bid/.*"]},{label:"Smart AdServer",patterns:["^https?://prg[.]smartadserver[.]com/prebid.*"]},{label:"Sonobi",patterns:["^https?://apex[.]go[.]sonobi[.]com/trinity[.]js.*"]},{label:"Sovrn",
-patterns:["^https?://ap[.]lijit[.]com/rtb/bid.*"]},{label:"SpringServe",patterns:["^https?://bidder[.]springserve[.]com/display/hbid.*"]},{label:"StickyAds",patterns:["^https?://cdn[.]stickyadstv[.]com/mustang/mustang[.]min[.]js.*","^https?://cdn[.]stickyadstv[.]com/prime-time/.*"]},{label:"TapSense3",patterns:["^https?://ads04[.]tapsense[.]com/ads/headerad.*"]},{label:"ThoughtLeadr",patterns:["^https?://a[.]thoughtleadr[.]com/v4/.*"]},{label:"TremorBid",patterns:["^https?://([^.]*.)?ads[.]tremorhub[.]com/ad/tag.*"]},{label:"Trion",patterns:["^https?://in-appadvertising[.]com/api/bidRequest.*"]},{label:"TripleLift",patterns:["^https?://tlx[.]3lift[.]com/header/auction.*"]},{label:"TrustX",patterns:["^https?://sofia[.]trustx[.]org/hb.*"]},{label:"UCFunnel",patterns:["^https?://agent[.]aralego[.]com/header.*"]},{label:"Underdog Media",patterns:["^https?://udmserve[.]net/udm/img[.]fetch.*"]},{label:"UnRuly",patterns:["^https?://targeting[.]unrulymedia[.]com/prebid.*"]},{
-label:"VertaMedia",patterns:["^https?://rtb[.]vertamedia[.]com/hb/.*"]},{label:"Vertoz",patterns:["^https?://hb[.]vrtzads[.]com/vzhbidder/bid.*"]},{label:"WideOrbig",patterns:["^https?://([^.]*.)?atemda[.]com/JSAdservingMP[.]ashx.*"]},{label:"WideSpace",patterns:["^https?://engine[.]widespace[.]com/map/engine/hb/.*"]},{label:"YieldBot",patterns:["^https?://cdn[.]yldbt[.]com/js/yieldbot[.]intent[.]js.*"]},{label:"YieldMo",patterns:["^https?://ads[.]yieldmo[.]com/exchange/prebid.*"]}];const Fw=/([a-zA-Z][a-zA-Z_-]*)\s*(?:=(?:"([^"]*)"|([^ \t",;]*)))?/g,Rw="max-age",Iw="s-maxage",Mw="max-stale",Lw="min-fresh",Nw="immutable",Pw="must-revalidate",Ow="no-cache",Bw="no-store",Uw="no-transform",jw="only-if-cached",zw="private",qw="proxy-revalidate",Ww="public";function parseBooleanOnly(e){return null===e}function parseDuration(e){if(!e)return null;const t=parseInt(e,10);return!Number.isFinite(t)||t<0?null:t}class CacheControl{constructor(){this.maxAge=null,this.sharedMaxAge=null,
-this.maxStale=null,this.maxStaleDuration=null,this.minFresh=null,this.immutable=null,this.mustRevalidate=null,this.noCache=null,this.noStore=null,this.noTransform=null,this.onlyIfCached=null,this.private=null,this.proxyRevalidate=null,this.public=null}parse(e){if(!e||0===e.length)return this;const t={},n=e.match(Fw)||[];return Array.prototype.forEach.call(n,(e=>{const n=e.split("=",2),[a]=n;let r=null;n.length>1&&(r=n[1].trim()),t[a.toLowerCase()]=r})),this.maxAge=parseDuration(t[Rw]),this.sharedMaxAge=parseDuration(t[Iw]),this.maxStale=parseBooleanOnly(t[Mw]),this.maxStaleDuration=parseDuration(t[Mw]),this.maxStaleDuration&&(this.maxStale=!0),this.minFresh=parseDuration(t[Lw]),this.immutable=parseBooleanOnly(t[Nw]),this.mustRevalidate=parseBooleanOnly(t[Pw]),this.noCache=parseBooleanOnly(t[Ow]),this.noStore=parseBooleanOnly(t[Bw]),this.noTransform=parseBooleanOnly(t[Uw]),this.onlyIfCached=parseBooleanOnly(t[jw]),this.private=parseBooleanOnly(t[zw]),
-this.proxyRevalidate=parseBooleanOnly(t[qw]),this.public=parseBooleanOnly(t[Ww]),this}format(){const e=[];return"number"==typeof this.maxAge&&e.push(`${Rw}=${this.maxAge}`),"number"==typeof this.sharedMaxAge&&e.push(`${Iw}=${this.sharedMaxAge}`),this.maxStale&&("number"==typeof this.maxStaleDuration?e.push(`${Mw}=${this.maxStaleDuration}`):e.push(Mw)),"number"==typeof this.minFresh&&e.push(`${Lw}=${this.minFresh}`),this.immutable&&e.push(Nw),this.mustRevalidate&&e.push(Pw),this.noCache&&e.push(Ow),this.noStore&&e.push(Bw),this.noTransform&&e.push(Uw),this.onlyIfCached&&e.push(jw),this.private&&e.push(zw),this.proxyRevalidate&&e.push(qw),this.public&&e.push(Ww),e.join(", ")}}var $w={CacheControl,parse:function parse(e){return(new CacheControl).parse(e)},format:function format(e){return e instanceof CacheControl?e.format():CacheControl.prototype.format.call(e)}};function getHeader(e,t){const n=t.toLowerCase();return(e.responseHeaders||[]).find((e=>e.name.toLowerCase()===n))}
-function isCacheable(e){if(!CacheHeaders.isCacheableAsset(e))return!1;const t=getHeader(e,"cache-control");if(t){try{const e=$w.parse(t.value);if(e.noStore||e.noCache||0===e.maxAge)return!1}catch(e){}return!0}return!!getHeader(e,"expires")||!!getHeader(e,"last-modified")}function toURL(e){let t;try{t="string"==typeof e?new URL(e):e}catch(e){t=new URL("http://_")}return t}function isGoogleAds(e){return e=toURL(e),/(^|\.)(doubleclick.net|google(syndication|tagservices).com)$/.test(e.hostname)}function isAdSenseTag(e){const t="pagead2.googlesyndication.com"===(e=toURL(e)).host,n=["/pagead/js/adsbygoogle.js","/pagead/show_ads.js"].includes(e.pathname);return t&&n}function isAdSense(e){return isAdSenseTag(e=toURL(e))||function isAdSenseImplTag(e){const t="pagead2.googlesyndication.com"===(e=toURL(e)).host,n=/(^\/pagead\/js\/.*\/show_ads_impl.*?\.js)/.test(e.pathname);return t&&n}(e)}function isImpressionPing(e){const{host:t,pathname:n}=toURL(e)
-;return["securepubads.g.doubleclick.net","googleads4.g.doubleclick.net"].includes(t)&&["/pcs/view","/pagead/adview"].includes(n)}function isGptTag(e){const{host:t,pathname:n}=toURL(e),a=["www.googletagservices.com","pagead2.googlesyndication.com","securepubads.g.doubleclick.net"].includes(t),r=["/tag/js/gpt.js","/tag/js/gpt_mobile.js"].includes(n);return a&&r}function isAMPTag(e){const{host:t,pathname:n}=toURL(e),a=["cdn.ampproject.org"].includes(t),r=["/v0/amp-ad-0.1.js"].includes(n);return a&&r}function isGptImplTag(e){return isGoogleAds(e)&&/(^\/gpt\/pubads_impl([a-z_]*)((?<!rendering)_)\d+\.js)/.test(toURL(e).pathname)}function isAMPImplTag(e){return/^\/[a-z_]*\/\d+\/v0\/amp-ad-network-doubleclick-impl-0.1.js/.test(toURL(e).pathname)}function isGpt(e){return isGptTag(e=toURL(e))||isGptImplTag(e)}function isGptAdRequest(e){if(!e)return!1;return"/gampad/ads"===new URL(e.url).pathname&&"XHR"===e.resourceType&&isGoogleAds(e.url)}function isGptIframe(e){
-return/(^google_ads_iframe_)/.test(e.id)}function isAdTag(e){return isAdSenseTag(e)||isGptTag(e)||isAMPTag(e)}function isAdScript(e){return isAdSense(e)||isGpt(e)||function isAMP(e){return isAMPTag(e)||isAMPImplTag(e)}(e)}function isAdRequest(e){return function isAdSenseAdRequest(e){if(!e)return!1;const t=new URL(e.url);return"/pagead/ads"===t.pathname&&"googleads.g.doubleclick.net"===t.host}(e)||isGptAdRequest(e)||function isAMPAdRequest(e){if(!e)return!1;const t=new URL(e.url);return"/gampad/ads"===t.pathname&&"securepubads.g.doubleclick.net"===t.host&&"Fetch"===e.resourceType}(e)}function isAdIframe(e){return function isAdSenseIframe(e){return/(^aswift_\d+)/.test(e.id)}(e)||isGptIframe(e)}function isImplTag(e){return isAdSenseTag(e)||isGptImplTag(e)||isAMPImplTag(e)}function getHeaderBidder(e){for(const t of xw)for(const n of t.patterns)if(new RegExp(n).test(e))return t.label}function isBidRelatedRequest(e){return!!getHeaderBidder("string"==typeof e?e:e.url)}
-function isBidRequest(e){return isBidRelatedRequest(e)&&function isPossibleBidRequest(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&!isCacheable(e)}(e)}function trimUrl(e){const t=new URL(e),n=t.pathname.length>60?t.pathname.substr(0,60)+"...":t.pathname;return t.origin+n}function getNameOrTld(e){const t=getHeaderBidder(e);if(t)return t;if(isGpt(e))return"GPT";if(isAdSense(e))return"AdSense";if(isAMPTag(e))return"AMP tag";const n=ci.getEntity(e);if(n)return n.name;const{host:a}=new URL(e),[r=""]=a.match(/([^.]*(\.[a-z]{2,3}){1,2})$/)||[];return r||a}function isAdRelated(e){const t="string"==typeof e?e:e.url;if(!t)return!1;if(isAdScript(t)||getHeaderBidder(t))return!0;const n=ci.getEntity(t);return!!n&&n.categories.includes("ad")}function getFrame(e){return e.args.frame||e.args.data&&e.args.data.frame||null}function isAdTask(e){return!!function getCpuNodeUrls(e){const t=new Set;for(const{args:n}of e.childEvents)n.data&&n.data.url&&t.add(n.data.url)
-;return Array.from(t)}(e).find((e=>isBidRelatedRequest(e)||isGoogleAds(toURL(e))))}function addEdge(e,t){e===t||e.endTime>t.startTime||e.addDependent(t)}function addEdges(e){const t=[],n=[];e.traverse((e=>{e.type===BaseNode.TYPES.NETWORK&&(isGptTag(e.record.url)&&"Script"===e.record.resourceType?n.push(e):isGptAdRequest(e.record)&&t.push(e))})),e.traverse((e=>{if(e.type===BaseNode.TYPES.NETWORK){if(isGptImplTag(e.record.url)){const t=e;for(const e of n)addEdge(e,t)}if(isBidRelatedRequest(e.record)){const n=e;for(const e of t)addEdge(n,e)}if(isImpressionPing(e.record.url)){const n=e;for(const e of t){addEdge(e,n);for(const t of e.getDependents())addEdge(t,n)}}}}))}class AdLanternMetric extends LanternMetric{static get COEFFICIENTS(){return{intercept:0,optimistic:1,pessimistic:0}}static getPessimisticGraph(e){const t=e.cloneWithRelationships((e=>!0));return addEdges(t),t}static getOptimisticGraph(e){
-const t=e.record.frameId,n=AdLanternMetric.getPessimisticGraph(e),a=n.cloneWithRelationships((e=>{if(e.type===BaseNode.TYPES.CPU)return function isLongTask(e){return e.event.dur>5e4}(e)||isAdTask(e)||!!getFrame(e.event)&&getFrame(e.event)!==t;if(e.hasRenderBlockingPriority())return!0;const n=e.record.url;return isBidRelatedRequest(n)||isGoogleAds(toURL(n))}));return addEdges(n),a}static getEstimateFromSimulation(e,t){throw new Error("getEstimateFromSimulation not implemented by "+this.name)}static findTiming(e,t){let n={startTime:1/0,endTime:-1/0,duration:0};for(const[a,r]of e.entries())t(a,r)&&n.startTime>r.startTime&&(n=r);return n}static findNetworkTiming(e,t){return this.findTiming(e,(e=>e.type===BaseNode.TYPES.NETWORK&&t(e.record)))}}function getAdStartTime(e){const t=e.find(isAdRequest);return t?t.startTime:-1}function getPageStartTime(e,t=-1){const n=e.find((e=>200==e.statusCode));return n?n.startTime:t}async function getTimingsByRecord(e,t,n){
-const a=new Map,r=await bo.request(t,n);if("simulate"==n.settings.throttlingMethod){const r=await fo.request({trace:e,devtoolsLog:t},n),o=AdLanternMetric.getOptimisticGraph(r),i=await Go.request({devtoolsLog:t,settings:n.settings},n),{nodeTimings:s}=i.simulate(o,{});for(const[{record:e},t]of s.entries())e&&a.set(e,t)}else{const e=getPageStartTime(r);for(const t of r)a.set(t,{startTime:1e3*(t.startTime-e),endTime:1e3*(t.endTime-e),duration:1e3*(t.endTime-t.startTime)})}return a}function getScriptUrl(e){if(e.args.data&&["EvaluateScript","FunctionCall"].includes(e.name))return e.args.data.url?e.args.data.url:e.args.data.stackTrace?e.args.data.stackTrace[0].url:void 0}class LanternAdRequestTime extends AdLanternMetric{static getEstimateFromSimulation(e,t){const{nodeTimings:n}=e;return{timeInMs:AdLanternMetric.findNetworkTiming(n,isAdRequest).startTime,nodeTimings:n}}}LanternAdRequestTime=makeComputedArtifact(LanternAdRequestTime);class AdRequestTime extends Metric{
-static async computeSimulatedMetric(e,t){return LanternAdRequestTime.request(e,t)}static async computeObservedMetric(e){const{networkRecords:t}=e,n=getPageStartTime(t),a=1e3*(getAdStartTime(t)-n);return Promise.resolve({timing:a})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var Vw=AdRequestTime=makeComputedArtifact(AdRequestTime);function getAttributableUrl(e,t=new Set){const n=e.attributableURLs.find((e=>t.has(e))),a=e.attributableURLs[0],r=n||a;if(r)return r;let o=50,i="";for(const n of e.children){const e=getAttributableUrl(n,t);e&&n.duration>o&&(i=e,o=n.duration)}return i}class LongTasks extends Metric{static async getSimulationGraph(e,t,n){const a=await fo.request({trace:e,devtoolsLog:t},n);return AdLanternMetric.getOptimisticGraph(a)}static async computeSimulatedResult(e,t,n){const a=await this.getSimulationGraph(e,t,n),r=await Go.request({devtoolsLog:t,settings:n.settings},n),{nodeTimings:o}=r.simulate(a,{}),i=[]
-;for(const[e,t]of o.entries())e.type!==BaseNode.TYPES.CPU||t.duration<100||i.push({event:e.event,startTime:t.startTime,endTime:t.endTime,duration:t.duration,selfTime:t.duration,attributableURLs:Array.from(e.getEvaluateScriptURLs()),children:[],parent:e.parent,unbounded:e.unbounded,group:e.group});return i}static async computeObservedResult(e,t,n){const a=await _m.request(e,n),r=await bo.request(t,n),o=new Set(r.filter((e=>"Script"===e.resourceType)).map((e=>e.url)));return a.filter((e=>function isLong(e,t){if(e.duration<50)return!1;const n=getAttributableUrl(e,t);if(!n)return!1;if(e.parent)return n!=getAttributableUrl(e.parent,t);return!0}(e,o)))}static async compute_({trace:e,devtoolsLog:t},n){return"simulate"==n.settings.throttlingMethod?this.computeSimulatedResult(e,t,n):this.computeObservedResult(e,t,n)}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var Hw=LongTasks=makeComputedArtifact(LongTasks);const Gw={
-title:"No long tasks blocking ad-related network requests",failureTitle:"Avoid long tasks that block ad-related network requests",description:"Tasks blocking the main thread can delay ad requests and cause a poor user experience. Consider removing long blocking tasks or moving them off of the main thread. These tasks can be especially detrimental to performance on less powerful devices. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-blocking-tasks).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",columnScript:"Attributable URL",columnStartTime:"Start",columnDuration:"Duration"},Yw=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks.js",Gw),Kw=[{key:"script",itemType:"url",text:Yw(Gw.columnScript)},{key:"startTime",itemType:"ms",text:Yw(Gw.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:Yw(Gw.columnDuration),granularity:1}];class AdBlockingTasks extends Audit{static get meta(){
-return{id:"ad-blocking-tasks",title:Yw(Gw.title),failureTitle:Yw(Gw.failureTitle),description:Yw(Gw.description),requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const n="simulate"==t.settings.throttlingMethod?200:100,a={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],settings:t.settings};let r=[];try{r=await Hw.request(a,t)}catch(e){return ww.InvalidTiming}if(!r.length)return ww.NoTasks;const{timing:o}=await Vw.request(a,t);if(!(o>0))return ww.NoAdRelatedReq;const i=[];for(const e of r){if(e.startTime>o||e.duration<n)continue;const t=getAttributableUrl(e);if(t&&isAdScript(new URL(t)))continue;const a=t&&new URL(t),r=a&&a.origin+a.pathname||"Other";i.push({script:r,rawUrl:t,startTime:e.startTime,endTime:e.endTime,duration:e.duration,isTopLevel:!e.parent})}let s=Array.from(i);s.length>10&&(s=i.filter((e=>"Other"!==e.script&&e.isTopLevel)).sort(((e,t)=>t.duration-e.duration)).splice(0,10).sort(((e,t)=>e.startTime-t.startTime)))
-;const c=s.reduce(((e,t)=>t.isTopLevel?e+t.duration:e),0),l=s.length>0;return{score:l?0:1,numericValue:c,numericUnit:"millisecond",displayValue:l?Yw(Gw.failureDisplayValue,{timeInMs:c}):"",details:AdBlockingTasks.makeTableDetails(Kw,s)}}}var Jw=Object.freeze({__proto__:null,default:AdBlockingTasks,UIStrings:Gw});const Xw={title:"Minimal render-blocking resources found",failureTitle:"Avoid render-blocking resources",description:"Render-blocking resources slow down tag load times. Consider loading critical JS/CSS inline or loading scripts asynchronously or loading the tag earlier in the head. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources).",failureDisplayValue:"Up to {timeInMs, number, seconds} s tag load time improvement",columnUrl:"Resource",columnStartTime:"Start",columnDuration:"Duration"},Zw=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources.js",Xw),Qw=[{key:"url",itemType:"url",
-text:Zw(Xw.columnUrl)},{key:"startTime",itemType:"ms",text:Zw(Xw.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:Zw(Xw.columnDuration),granularity:1}];class AdRenderBlockingResources extends Audit{static get meta(){return{id:"ad-render-blocking-resources",title:Zw(Xw.title),failureTitle:Zw(Xw.failureTitle),scoreDisplayMode:"binary",description:Zw(Xw.description),requiredArtifacts:["LinkElements","ScriptElements","devtoolsLogs","traces"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=e.traces[Audit.DEFAULT_PASS],r=await bo.request(n,t),o=r.find((e=>isAdTag(new URL(e.url))));if(!o)return ww.NoTag;const i=await getTimingsByRecord(a,n,t),s=new Set;for(const t of e.LinkElements)t.href&&"stylesheet"==t.rel&&s.add(t.href);for(const t of e.ScriptElements)!t.src||t.defer||t.async||s.add(t.src)
-;const c=r.filter((e=>e.endTime<o.startTime)).filter((e=>e!=o.initiatorRequest)).filter((e=>e.initiator.type="parser")).filter((e=>s.has(e.url))).map((e=>Object.assign({url:e.url},i.get(e))));c.sort(((e,t)=>e.endTime-t.endTime));const l=i.get(o)||{startTime:1/0},u=c.map((e=>e.startTime)),d=c.map((e=>e.endTime)),m=Math.min(...u),p=Math.min(Math.max(...d),l.startTime)-m;let h="";c.length>0&&p>0&&(h=Zw(Xw.failureDisplayValue,{timeInMs:p}));return{score:c.length>0&&p>100?0:1,numericValue:c.length,numericUnit:"unitless",displayValue:h,details:{opportunity:p,...AdRenderBlockingResources.makeTableDetails(Qw,c)}}}}var eD=Object.freeze({__proto__:null,default:AdRenderBlockingResources,UIStrings:Xw});function assert(e){if(null==e)throw new Error("Expected not to be null");return e}function isXhrCritical(e,t,n){const a=t.xhrEdges.get(e.url);if(!a)return!1;for(const{url:e}of n)if(a.has(e))return!0;return!1}function addInitiatedRequests(e,t,n,a){
-const r=n.allRecords.filter((e=>null!=e.resourceType)).filter((e=>["Script","XHR"].includes(e.resourceType||"")&&e.endTime<t.startTime)).filter((t=>t.initiatorRequest==e||fo.getNetworkInitiators(t).includes(e.url)));for(const e of r){"XHR"==e.resourceType&&isXhrCritical(e,n,a)&&linkGraph(n,e,a)}}function getCriticalGraph(e,t,n){const a=buildNetworkSummary(e,t),r=new Set;return linkGraph(a,n,r),r}function linkGraph(e,t,n=new Set){if(!t||n.has(t))return n;n.add(t);const a=new Set;for(let r=t.initiator.stack;r;r=r.parent)for(const{url:o}of r.callFrames){if(a.has(o))continue;a.add(o);const i=e.requestsByUrl.get(o);if(i&&(linkGraph(e,i,n),"Script"==i.resourceType)){const a=r.callFrames[0].url,o=e.requestsByUrl.get(a);o&&addInitiatedRequests(o,t,e,n)}}return linkGraph(e,t.initiatorRequest||null,n),n}function buildNetworkSummary(e,t){const n=new Map;for(const t of e)n.set(t.url,t);const a=t.filter((e=>e.name.startsWith("XHR"))).filter((e=>!!(e.args.data||{}).url)),r=new Map;for(const e of a){
-const t=e.args.data||{},n=r.get(t.url)||new Set;for(const{url:e}of t.stackTrace||[])n.add(e);r.set(t.url,n)}return{requestsByUrl:n,xhrEdges:r,allRecords:e}}async function computeAdRequestWaterfall(e,t,n){const a=await bo.request(t,n),r=a.find(isAdRequest)||a.find(isBidRequest)||a.find(isAdRelated);if(null==r)return Promise.resolve([]);const o=new Set,i=assert(r),s=a.filter((e=>isGpt(e.url)||isAdSense(e.url))),c=a.filter((e=>isBidRequest(e)&&e.endTime<=i.startTime)),l=buildNetworkSummary(a,e.traceEvents);for(const e of[i,...c,...s])linkGraph(l,e,o);const u=new Set(["Script","XHR","Fetch","EventStream","Document",void 0]),d=Array.from(o).filter((e=>e.endTime<i.startTime)).filter((e=>u.has(e.resourceType))).filter((e=>"text/css"!=e.mimeType)),m=await getTimingsByRecord(e,t,n),p=function computeSummaries(e){e.sort(((e,t)=>e.nameOrTld!=t.nameOrTld?e.nameOrTld<t.nameOrTld?-1:1:e.type!=t.type?e.type<t.type?-1:1:e.startTime!=t.startTime?e.startTime<t.startTime?-1:1:e.endTime-t.endTime))
-;const t=[];for(let r=0;r<e.length;r++){const o=e[r];let i;for(;r<e.length&&(i=e[r+1],i&&(n=i,a=o,!(Math.max(n.startTime,a.startTime)>Math.min(n.endTime,a.endTime)||n.type&&a.type&&n.type!=a.type||"Script"==n.type||n.nameOrTld!=a.nameOrTld)));)o.endTime=Math.max(o.endTime,i.endTime),o.duration=o.endTime-o.startTime,r++;t.push(o)}var n,a;return t.sort(((e,t)=>e.startTime-t.startTime)),t}(d.map((e=>{const{startTime:t,endTime:n}=m.get(e)||e;return{startTime:t,endTime:n,duration:n-t,selfTime:0,url:trimUrl(e.url),nameOrTld:getNameOrTld(e.url),type:e.resourceType,record:e}})));return function computeSelfTimes(e){if(!e.length)return[];let t=assert(e[0]);t.selfTime=t.duration;let n=t.startTime;for(const a of e){if(a.endTime<n||a==t)continue;const e=Math.max(n,a.startTime),r=Math.min(t.endTime,a.endTime);e<r&&(t.selfTime-=r-e),n=Math.max(n,r),a.endTime>t.endTime&&(a.selfTime=a.endTime-e,t=a)}}(p),p}const tD={title:"Ad request waterfall",failureTitle:"Reduce critical path for ad loading",
-description:"Consider reducing the number of resources, loading multiple resources simultaneously, or loading resources earlier to improve ad speed. Requests that block ad loading can be found below. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-critical-path).",displayValue:"{serialResources, plural, =1 {1 serial resource} other {# serial resources}}",columnUrl:"Request",columnType:"Type",columnStartTime:"Start",columnEndTime:"End"},nD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-critical-path.js",tD),aD=[{key:"nameOrTld",itemType:"text",text:nD(tD.columnType)},{key:"url",itemType:"url",text:nD(tD.columnUrl)},{key:"startTime",itemType:"ms",text:nD(tD.columnStartTime),granularity:1},{key:"endTime",itemType:"ms",text:nD(tD.columnEndTime),granularity:1}];class AdRequestCriticalPath extends Audit{static get meta(){return{id:"ad-request-critical-path",title:nD(tD.title),failureTitle:nD(tD.failureTitle),
-description:nD(tD.description),scoreDisplayMode:"informative",requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=(await computeAdRequestWaterfall(n,a,t)).filter((e=>e.startTime>0&&e.startTime<e.endTime));if(!r.length)return ww.NoAds;const o=function computeDepth(e){let t=0,n=0;for(const{startTime:a,endTime:r}of e)a>=t?(++n,t=r):t=Math.min(t,r);return n}(r),i=o>3;for(const e of r)delete e.record;const s=function computeIdleTimes(e){let t=1/0;const n=[];for(let a=0;a<e.length;){const{startTime:r,endTime:o}=e[a];for(r-t>150&&n.push(r-t),t=o;++a<e.length&&e[a].startTime<t;)t=Math.max(t,e[a].endTime)}return n}(r),c=Math.max(...s),l=s.reduce(((e,t)=>e+t),0);return{numericValue:o,numericUnit:"unitless",score:i?0:1,displayValue:nD(tD.displayValue,{serialResources:o}),details:{size:r.length,depth:o,maxIdleTime:c,totalIdleTime:l,...AdRequestCriticalPath.makeTableDetails(aD,r)}}}}var rD=Object.freeze({
-__proto__:null,default:AdRequestCriticalPath,UIStrings:tD});class LanternBidRequestTime extends AdLanternMetric{static getEstimateFromSimulation(e,t){const{nodeTimings:n}=e,a=AdLanternMetric.findNetworkTiming(n,isBidRequest).startTime;return a>AdLanternMetric.findNetworkTiming(n,isAdRequest).startTime?{timeInMs:-1,nodeTimings:n}:{timeInMs:a,nodeTimings:n}}}LanternBidRequestTime=makeComputedArtifact(LanternBidRequestTime);class BidRequestTime extends Metric{static async computeSimulatedMetric(e,t){return LanternBidRequestTime.request(e,t)}static async computeObservedMetric(e){const{networkRecords:t}=e,n=getPageStartTime(t),a=function getBidStartTime(e){const t=e.find(isBidRequest);return t?t.startTime:-1}(t);if(getAdStartTime(t)<a)return{timing:-1};return{timing:1e3*(a-n)}}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var oD=BidRequestTime=makeComputedArtifact(BidRequestTime);const iD={title:"First bid request time",
-failureTitle:"Reduce time to send the first bid request",description:"This metric measures the elapsed time from the start of page load until the first bid request is made. Delayed bid requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bid-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"},sD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start.js",iD);var cD=Object.freeze({__proto__:null,default:class BidRequestFromPageStart extends Audit{static get meta(){return{id:"bid-request-from-page-start",title:sD(iD.title),failureTitle:sD(iD.failureTitle),description:sD(iD.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,t){const n={
-trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:r}=await oD.request(n,t);return r>0?{numericValue:r,numericUnit:"millisecond",score:Audit.computeLogNormalScore(a,r),displayValue:sD(iD.displayValue,{timeInMs:r})}:ww.NoBids}},UIStrings:iD});const lD={title:"First ad request time",failureTitle:"Reduce time to send the first ad request",description:"This metric measures the elapsed time from the start of page load until the first ad request is made. Delayed ad requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"},uD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start.js",lD);var dD=Object.freeze({__proto__:null,
-default:class AdRequestFromPageStart extends Audit{static get meta(){return{id:"ad-request-from-page-start",title:uD(lD.title),failureTitle:uD(lD.failureTitle),description:uD(lD.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:6500,median:1e4},provided:{p10:1900,median:3500}}}static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:r}=await Vw.request(n,t);if(!(r>0)){const e=ww.NoAds;return e.runWarnings=[Dw.NoAds],e}return{numericValue:r,numericUnit:"millisecond",score:Audit.computeLogNormalScore(a,r),displayValue:uD(lD.displayValue,{timeInMs:r})}}},UIStrings:lD});const mD={title:"No ad found at the very top of the viewport",failureTitle:"Move the top ad further down the page",
-description:"Over 10% of ads are never viewed because users scroll past them before they become viewable. By moving ad slots away from the very top of the viewport, users are more likely to see ads before scrolling away. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-top-of-viewport).",failureDisplayValue:"A scroll of {valueInPx, number} px would hide half of your topmost ad",columnSlot:"Top Slot ID"},pD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport.js",mD),gD=[{key:"slot",itemType:"text",text:pD(mD.columnSlot)}];class AdTopOfViewport extends Audit{static get meta(){return{id:"ad-top-of-viewport",title:pD(mD.title),failureTitle:pD(mD.failureTitle),description:pD(mD.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,n=e.IFrameElements.filter(isAdIframe).filter((e=>e.clientRect.width*e.clientRect.height>1&&!e.isPositionFixed)).map((e=>({
-midpoint:e.clientRect.top+e.clientRect.height/2,id:e.id})));if(!n.length)return ww.NoVisibleSlots;const a=n.reduce(((e,t)=>e.midpoint<t.midpoint?e:t)),r=a.midpoint<t.innerHeight;if(!r)return ww.NoAdsViewport;const o=r&&a.midpoint<100?0:1;return{score:o,numericValue:a.midpoint,numericUnit:"unitless",displayValue:o?"":pD(mD.failureDisplayValue,{valueInPx:a.midpoint}),details:AdTopOfViewport.makeTableDetails(gD,o?[]:[{slot:a.id}])}}}var hD=Object.freeze({__proto__:null,default:AdTopOfViewport,UIStrings:mD});function toClientRect([e,t,n,a]){return{left:e,top:t,width:n,height:a,right:e+n,bottom:t+a}}function overlaps(e,t){const n=!(e.right<t.left||t.right<e.left),a=!(e.bottom<t.top||t.bottom<e.top);return n&&a}const fD={title:"Few or no ads loaded outside viewport",failureTitle:"Avoid loading ads until they are nearly on-screen",
-description:"Too many ads loaded outside the viewport lowers viewability rates and impacts user experience. Consider loading ads below the fold lazily as the user scrolls down. Consider using GPT's [Lazy Loading API](https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_enableLazyLoad). [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ads-in-viewport).",failureDisplayValue:"{hiddenAds, plural, =1 {1 ad} other {# ads}} out of view",columnSlot:"Slots Outside Viewport"},yD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/ads-in-viewport.js",fD),bD=[{key:"slot",itemType:"text",text:yD(fD.columnSlot)}];class AdsInViewport extends Audit{static get meta(){return{id:"ads-in-viewport",title:yD(fD.title),failureTitle:yD(fD.failureTitle),description:yD(fD.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){
-const t=e.ViewportDimensions,n=e.IFrameElements.filter((e=>isGptIframe(e)&&e.clientRect.height*e.clientRect.width>1));if(!n.length)return ww.NoVisibleSlots;const a=n.filter((e=>!function isBoxInViewport(e,t){const{innerWidth:n,innerHeight:a}=t,{left:r,top:o,right:i,bottom:s}=e;return r<i&&o<s&&r<n&&o<a&&0<i&&0<s}(e.clientRect,t))).map((e=>({slot:e.id}))).sort(((e,t)=>e.slot.localeCompare(t.slot)));return{numericValue:(n.length-a.length)/n.length,numericUnit:"unitless",score:a.length>3?0:1,displayValue:a.length?yD(fD.failureDisplayValue,{hiddenAds:a.length}):"",details:AdsInViewport.makeTableDetails(bD,a)}}}var vD=Object.freeze({__proto__:null,default:AdsInViewport,UIStrings:fD});function count(e,t){let n=0;for(const a of e)t(a)&&n++;return n}const wD={title:"Ad tag is loaded asynchronously",failureTitle:"Load ad tag asynchronously",
-description:"Loading the ad tag synchronously blocks content rendering until the tag is fetched and loaded. Consider using the `async` attribute to load gpt.js and/or adsbygoogle.js asynchronously. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/async-ad-tags)."},DD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/async-ad-tags.js",wD);function isAsync(e){return"Low"==e.priority||function isStaticRequest(e){return["parser","preload","other"].includes(e.initiator.type)}(e)}var ED=Object.freeze({__proto__:null,default:class AsyncAdTags extends Audit{static get meta(){return{id:"async-ad-tags",title:DD(wD.title),failureTitle:DD(wD.failureTitle),description:DD(wD.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await bo.request(n,t),r=await mc.request({URL:e.URL,devtoolsLog:n},t),o=a.filter((e=>isAdTag(new URL(e.url)))).filter((e=>e.frameId===r.frameId))
-;if(!o.length)return ww.NoTag;const i=count(o,isAsync)-o.length;return{score:Number(0===i),numericValue:i,numericUnit:"unitless"}}},UIStrings:wD});const TD={title:"Ads not blocked by load events",failureTitle:"Avoid waiting on load events",description:"Waiting on load events increases ad latency. To speed up ads, eliminate the following load event handlers. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/blocking-load-events).",displayValue:"{timeInMs, number, seconds} s blocked",columnEvent:"Event Name",columnTime:"Event Time",columnScript:"Script",columnBlockedUrl:"Blocked URL",columnFunctionName:"Function"},CD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/blocking-load-events.js",TD),SD=[{key:"eventName",itemType:"text",text:CD(TD.columnEvent)},{key:"time",itemType:"ms",text:CD(TD.columnTime),granularity:1},{key:"url",itemType:"url",text:CD(TD.columnScript)},{key:"functionName",itemType:"text",text:CD(TD.columnFunctionName)
-}];function findOriginalCallFrame(e){const{record:t}=e;let n=t&&t.initiator&&t.initiator.stack;if(n){for(;n.parent;)n=n.parent;return n.callFrames[n.callFrames.length-1]}}function findTraceEventOfCallFrame(e,t){return t.find((t=>"FunctionCall"==t.name&&t.args.data&&t.args.data.functionName==e.functionName&&t.args.data.scriptId==e.scriptId&&t.args.data.url==e.url&&Math.abs(t.args.data.lineNumber==e.lineNumber)<2&&Math.abs(t.args.data.columnNumber==e.columnNumber)<2))}function findEventIntervals(e,t){let n={};const a=[];for(const r of t)r.name==`${e}EventStart`?n={start:r.ts,end:1/0,eventName:e}:r.name==`${e}EventEnd`&&(n.end=r.ts,a.push(n));return a}function quantifyBlockedTime(e,t,n){const a=t.find((t=>t.url==e.url)),r=t.find((t=>t.url==e.blockedUrl));if(!a||!r)return 0;const o=n.get(a),i=n.get(r);return o&&i?i.startTime-o.endTime:0}class BlockingLoadEvents extends Audit{static get meta(){return{id:"blocking-load-events",title:CD(TD.title),failureTitle:CD(TD.failureTitle),
-description:CD(TD.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=await bo.request(a,t),o=await mo.request(n,t),{timings:i}=await Lc.request(o,t),{processEvents:s}=o,c=await getTimingsByRecord(n,a,t),l=(await computeAdRequestWaterfall(n,a,t)).sort(((e,t)=>e.startTime-t.startTime));if(!l.length)return ww.NoAdRelatedReq;const u=[...findEventIntervals("domContentLoaded",s),...findEventIntervals("load",s)],d=[],m=new Set;for(const e of l){const t=findOriginalCallFrame(e);if(!t)continue;const n=JSON.stringify(t);if(m.has(n))continue;m.add(n);const a=findTraceEventOfCallFrame(t,s);if(!a)continue;const o=u.find((e=>e.start<=a.ts&&a.ts<=e.end));if(o){const n=Object.assign({eventName:o.eventName,blockedUrl:e.url,time:i[o.eventName],blockedTime:1/0},t);n.blockedTime=quantifyBlockedTime(n,r,c),d.push(n)}}const p=d.length>0;let h=0;return p&&(h=Math.min(...d.map((e=>e.blockedTime)))),{
-numericValue:d.length,numericUnit:"unitless",score:p?0:1,displayValue:p&&h?CD(TD.displayValue,{timeInMs:h}):"",details:BlockingLoadEvents.makeTableDetails(SD,d)}}}var _D=Object.freeze({__proto__:null,default:BlockingLoadEvents,UIStrings:TD});const AD={title:"No bottleneck requests found",failureTitle:"Avoid bottleneck requests",description:"Speed up, load earlier, parallelize, or eliminate the following requests and their dependencies in order to speed up ad loading. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bottleneck-requests).",displayValue:"{blockedTime, number, seconds} s spent blocked on requests",columnUrl:"Blocking Request",columnInitiatorUrl:"Initiator Request",columnStartTime:"Start",columnSelfTime:"Exclusive Time",columnDuration:"Total Time"},kD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/bottleneck-requests.js",AD),xD=[{key:"url",itemType:"url",text:kD(AD.columnUrl)},{key:"selfTime",itemType:"ms",
-text:kD(AD.columnSelfTime),granularity:1},{key:"duration",itemType:"ms",text:kD(AD.columnDuration),granularity:1}];class BottleneckRequests extends Audit{static get meta(){return{id:"bottleneck-requests",title:kD(AD.title),failureTitle:kD(AD.failureTitle),description:kD(AD.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],a=e.devtoolsLogs[Audit.DEFAULT_PASS],r=(await computeAdRequestWaterfall(n,a,t)).filter((e=>e.startTime>0));if(!r.length)return ww.NoAdRelatedReq;const cost=e=>3*e.selfTime+e.duration,o=r.filter((e=>!isAdScript(toURL(e.url))&&(e.selfTime>250||e.duration>1e3))).sort(((e,t)=>cost(t)-cost(e))).slice(0,5),i=o.reduce(((e,t)=>e+t.selfTime),0)/1e3,s=1e3*i>1e3;for(const e of o)delete e.record;return{numericValue:o.length,numericUnit:"unitless",score:s?0:1,displayValue:s?kD(AD.displayValue,{blockedTime:i}):"",details:BottleneckRequests.makeTableDetails(xD,o)}}}var FD=Object.freeze({__proto__:null,
-default:BottleneckRequests,UIStrings:AD});const RD={title:"No duplicate tags found",failureTitle:"Load tags only once",description:"Loading a tag more than once in the same page is redundant and adds overhead without benefit. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/duplicate-tags).",failureDisplayValue:"{duplicateTags, plural, =1 {1 duplicate tag} other {# duplicate tags}}",columnScript:"Script",columnNumReqs:"Duplicate Requests",columnFrameId:"Frame ID"},ID=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/duplicate-tags.js",RD),MD=["googletagservices.com/tag/js/gpt.js","securepubads.g.doubleclick.net/tag/js/gpt.js","pagead2.googlesyndication.com/pagead/js/adsbygoogle.js","pagead2.googlesyndication.com/pagead/js/show_ads.js","cdn.ampproject.org/v0/amp-ad-0.1.js"],LD=[{key:"script",itemType:"url",text:ID(RD.columnScript)},{key:"numReqs",itemType:"text",text:ID(RD.columnNumReqs)}];class DuplicateTags extends Audit{
-static get meta(){return{id:"duplicate-tags",title:ID(RD.title),failureTitle:ID(RD.failureTitle),description:ID(RD.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await bo.request(n,t),r=await mc.request({URL:e.URL,devtoolsLog:n},t),o=a.filter((e=>e.frameId===r.frameId)).filter((e=>function containsAnySubstring(e,t){return t.some((t=>e.includes(t)))}(e.url,MD))).filter((e=>e.resourceType===NetworkRequest.TYPES.Script));if(!o.length)return ww.NoTags;const i=new Map;for(const e of o){const t=new URL(e.url).pathname,n=i.get(t)||0;i.set(t,n+1)}const s=[];for(const[e,t]of i)t>1&&s.push({script:e,numReqs:t});return{numericValue:s.length,numericUnit:"unitless",score:s.length?0:1,details:DuplicateTags.makeTableDetails(LD,s),displayValue:s.length?ID(RD.failureDisplayValue,{duplicateTags:s.length}):""}}}var ND=Object.freeze({__proto__:null,default:DuplicateTags,UIStrings:RD})
-;class LanternAdRenderTime extends AdLanternMetric{static getEstimateFromSimulation(e,t){const{nodeTimings:n}=e;return{timeInMs:AdLanternMetric.findNetworkTiming(n,(e=>!!e.url&&isImpressionPing(new URL(e.url)))).startTime,nodeTimings:n}}}LanternAdRenderTime=makeComputedArtifact(LanternAdRenderTime);class AdRenderTime extends Metric{static async computeSimulatedMetric(e,t){return LanternAdRenderTime.request(e,t)}static async computeObservedMetric(e,t){const{networkRecords:n}=e,a=getPageStartTime(n),r=1e3*(function getImpressionStartTime(e){const t=e.find((e=>isImpressionPing(e.url)));return t?t.startTime:-1}(n)-a);return Promise.resolve({timing:r})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var PD=AdRenderTime=makeComputedArtifact(AdRenderTime);const OD={title:"Latency of first ad render",failureTitle:"Reduce time to render first ad",
-description:"This metric measures the time for the first ad iframe to render from page navigation. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/first-ad-render).",displayValue:"{timeInMs, number, seconds} s"},BD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/first-ad-render.js",OD);var UD=Object.freeze({__proto__:null,default:class FirstAdRender extends Audit{static get meta(){return{id:"first-ad-render",title:BD(OD.title),failureTitle:BD(OD.failureTitle),description:BD(OD.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:12900,median:22e3},provided:{p10:2750,median:3700}}}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],a={devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],trace:n,settings:t.settings},{timing:r}=await PD.request(a,t);if(!(r>0)){const e=ww.NoAdRendered;return e.runWarnings=[Dw.NoAdRendered],e}
-const o=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"];return{numericValue:r,numericUnit:"millisecond",score:Audit.computeLogNormalScore(o,r),displayValue:BD(OD.displayValue,{timeInMs:r})}}},UIStrings:OD});const jD={title:"Ad slots effectively use horizontal space",failureTitle:"Increase the width of ad slots",description:"Ad slots that utilize most of the page width generally experience increased click-through rate over smaller ad sizes. We recommend leaving no more than 25% of the viewport width unutilized on mobile devices.",failureDisplayValue:"{percentUnused, number, percent} of viewport width is underutilized"},zD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/full-width-slots.js",jD);var qD=Object.freeze({__proto__:null,default:class FullWidthSlots extends Audit{static get meta(){return{id:"full-width-slots",title:zD(jD.title),failureTitle:zD(jD.failureTitle),description:zD(jD.description),
-requiredArtifacts:["ViewportDimensions","devtoolsLogs"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await bo.request(n,t),r=e.ViewportDimensions.innerWidth,o=a.filter(isAdRequest).map((e=>new URL(e.url)));if(!o.length)return ww.NoAds;const i=o.map((e=>e.searchParams.get("prev_iu_szs")||e.searchParams.get("sz"))).join("|").split(/[|,]/).map((e=>parseInt(e.split("x")[0]))).filter((e=>e<=r&&e>1));if(!i.length)return ww.NoValidAdWidths;const s=1-Math.max(...i)/r,c=s>.25?0:1;return{score:c,numericValue:s,numericUnit:"unitless",displayValue:c?"":zD(jD.failureDisplayValue,{percentUnused:s})}}},UIStrings:jD});const WD={title:"GPT and bids loaded in parallel",failureTitle:"Load GPT and bids in parallel",
-description:"To optimize ad loading, bid requests should not wait on GPT to load. This issue can often be fixed by making sure that bid requests do not wait on `googletag.pubadsReady` or `googletag.cmd.push`. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-bids-parallel).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},$D=[{key:"bidder",itemType:"text",text:WD.columnBidder},{key:"url",itemType:"url",text:WD.columnUrl},{key:"startTime",itemType:"ms",text:WD.columnStartTime},{key:"duration",itemType:"ms",text:WD.columnDuration}];class GptBidsInParallel extends Audit{static get meta(){return{id:"gpt-bids-parallel",title:WD.title,failureTitle:WD.failureTitle,description:WD.description,requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=e.traces[Audit.DEFAULT_PASS],r=await bo.request(n,t),o=r.find((e=>isGptImplTag(e.url)));if(!o)return ww.NoGpt
-;const i=r.filter(isBidRequest).filter((e=>e.frameId==o.frameId));if(!i.length)return ww.NoBids;const s=await getTimingsByRecord(a,n,t),c=[],l=new Set;for(const e of i)if(getCriticalGraph(r,a.traceEvents,e).has(o)){const{startTime:t,endTime:n}=s.get(e)||e,a=assert(getHeaderBidder(e.url));if(l.has(a))continue;l.add(a),c.push({bidder:a,url:e.url,startTime:t,duration:n-t})}const u=c.length>0;return{numericValue:c.length,numericUnit:"unitless",score:u?0:1,details:u?GptBidsInParallel.makeTableDetails($D,c):void 0}}}var VD=Object.freeze({__proto__:null,default:GptBidsInParallel,UIStrings:WD});const HD={title:"GPT tag is loaded from an official source",failureTitle:"Load GPT from an official source",description:"Load GPT from 'securepubads.g.doubleclick.net' for standard integrations or from 'pagead2.googlesyndication.com' for limited ads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-gpt-from-official-source)."
-},GD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source.js",HD);var YD=Object.freeze({__proto__:null,default:class LoadsGptFromOfficalSource extends Audit{static get meta(){return{id:"loads-gpt-from-official-source",title:GD(HD.title),failureTitle:GD(HD.failureTitle),description:GD(HD.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=(await bo.request(n,t)).map((e=>new URL(e.url))).find(isGptTag);if(!a)return ww.NoGpt;const r=["securepubads.g.doubleclick.net","pagead2.googlesyndication.com"].includes(a.host);return{score:Number(r),numericValue:Number(!r),numericUnit:"unitless"}}},UIStrings:HD});const KD={title:"Ad tag is loaded over HTTPS",failureTitle:"Load ad tag over HTTPS",
-description:'For privacy and security, always load GPT/AdSense over HTTPS. Insecure pages should explicitly request the ad script securely. GPT Example: `<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js">` AdSense Example: `<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">`. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-ad-tag-over-https).'},JD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https.js",KD);var XD=Object.freeze({__proto__:null,default:class LoadsAdTagOverHttps extends Audit{static get meta(){return{id:"loads-ad-tag-over-https",title:JD(KD.title),failureTitle:JD(KD.failureTitle),description:JD(KD.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=await bo.request(n,t);if(!a.find((e=>200==e.statusCode)))return ww.NoRecords
-;const r=a.filter((e=>isAdTag(new URL(e.url)))),o=r.filter((e=>e.isSecure)),i={type:"debugdata",numAdTagHttpReqs:r.length-o.length,numAdTagHttpsReqs:o.length};if(!r.length){const e=ww.NoTag;return e.details=i,e}return{numericValue:i.numAdTagHttpReqs,score:i.numAdTagHttpReqs?0:1,details:i}}},UIStrings:KD});const ZD={title:"Ad scripts are loaded statically",failureTitle:"Load ad scripts statically",description:"Load the following scripts directly with `<script async src=...>` instead of injecting scripts with JavaScript. Doing so allows the browser to preload scripts sooner. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/script-injected-tags).",failureDisplayValue:"Load {tags, plural, =1 {1 script} other {# scripts}} statically",columnUrl:"Script",columnLoadTime:"Load Time"},QD=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/script-injected-tags.js",ZD),eE=[{key:"url",itemType:"url",text:QD(ZD.columnUrl)},{key:"loadTime",
-itemType:"ms",granularity:1,text:QD(ZD.columnLoadTime)}],tE=[/amazon-adsystem\.com\/aax2\/apstag.js/,/js-sec\.indexww\.com\/ht\/p\/.*\.js/,/pubads\.g\.doubleclick\.net\/tag\/js\/gpt\.js/,/static\.criteo\.net\/js\/.*\/publishertag\.js/,/www\.googletagservices\.com\/tag\/js\/gpt\.js/,/pagead2\.googlesyndication\.com\/pagead\/js\/adsbygoogle\.js/,/cdn\.ampproject\.org\/v0\/amp-ad-\d+\.\d+\.js/];function initiatedByInlineScript(e){if("script"!==e.initiator.type)return!1;const t=fo.getNetworkInitiators(e);return 1===t.length&&t[0]===e.documentURL}class StaticAdTags extends Audit{static get meta(){return{id:"script-injected-tags",title:QD(ZD.title),failureTitle:QD(ZD.failureTitle),description:QD(ZD.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const n=await async function findStaticallyLoadableTags(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=e.traces[Audit.DEFAULT_PASS],r=[],o=await computeAdRequestWaterfall(a,n,t)
-;for(const{record:e}of o)e&&"Script"===e.resourceType&&(initiatedByInlineScript(e)||tE.find((t=>e.url.match(t))))&&r.push(e);return r}(e,t);if(!n.length)return ww.NoTag;const a=new Set,r=[],o=e.devtoolsLogs[Audit.DEFAULT_PASS],i=e.traces[Audit.DEFAULT_PASS],s=await async function getScriptEvaluationTimes(e,t,n){const a=1e3*getPageStartTime(await bo.request(t,n)),r=new Map;for(const t of e.traceEvents){const e=getScriptUrl(t);if(!e)continue;const n=t.ts/1e3-a;(!r.has(e)||r.get(e)>n)&&r.set(e,n)}if("simulate"!==n.settings.throttlingMethod)return r;const o=await getTimingsByRecord(e,t,n),i=new Map;for(const[e,t]of o.entries()){const o=r.get(e.url);if(!o)continue;if(i.has(e.url))continue;const s=1e3*e.startTime-a,c=t.endTime,l=n.settings.throttling.cpuSlowdownMultiplier*(o-s);i.set(e.url,c+l)}return i}(i,o,t);for(const e of n){if(a.has(e.url))continue;a.add(e.url);if(0===count(n.filter((t=>t.url===e.url)),(e=>"parser"===e.initiator.type&&!e.isLinkPreload))){const t=s.get(e.url)||0
-;if(t<400)continue;r.push({url:e.url,loadTime:t})}}r.sort(((e,t)=>e.loadTime-t.loadTime));const c=r.length>0;return{displayValue:c?QD(ZD.failureDisplayValue,{tags:r.length}):"",score:Number(!c),numericValue:r.length,numericUnit:"unitless",details:StaticAdTags.makeTableDetails(eE,r)}}}var nE=Object.freeze({__proto__:null,default:StaticAdTags,UIStrings:ZD});const aE={title:"Header bidding is parallelized",failureTitle:"Parallelize bid requests",description:"Send header bidding requests simultaneously, rather than serially, to retrieve bids more quickly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/serial-header-bidding).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},rE=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/serial-header-bidding.js",aE),oE=[{key:"bidder",itemType:"text",text:rE(aE.columnBidder)},{key:"url",itemType:"url",text:rE(aE.columnUrl)},{key:"startTime",itemType:"ms",
-text:rE(aE.columnStartTime)},{key:"duration",itemType:"ms",text:rE(aE.columnDuration)}],iE="ad",sE="bid",cE="unknown";function checkRecordType(e){return isGoogleAds(new URL(e.url))?iE:getHeaderBidder(e.url)?sE:cE}function isPossibleBid(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&e.endTime-e.startTime>=.05&&!isCacheable(e)}function clearQueryString(e){const t=new URL(e);return t.search="",t.toString()}class SerialHeaderBidding extends Audit{static get meta(){return{id:"serial-header-bidding",title:rE(aE.title),failureTitle:rE(aE.failureTitle),description:rE(aE.description),requiredArtifacts:["devtoolsLogs","traces","URL"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS],a=e.traces[Audit.DEFAULT_PASS],r=await bo.request(n,t);if(!r.length)return ww.NoRecords;const o=await mc.request({URL:e.URL,devtoolsLog:n},t),i=function bucket(e,t){const n=new Map;for(const a of e){const e=t(a);if(null!=e){const t=n.get(e)||[];t.push(a),n.set(e,t)}}
-return n}(r.filter(isPossibleBid).filter((e=>e.frameId==o.frameId)),checkRecordType);if(!i.has(sE))return ww.NoBids;const s={trace:a,devtoolsLog:n,settings:t.settings},{timing:c}=await Vw.request(s,t),l=await getTimingsByRecord(a,n,t),u=function constructRecords(e,t,n){const a=[];for(const r of e){const e=n.get(r);e&&a.push(Object.assign({},e,{url:r.url,type:t}))}return a}(i.get(sE)||[],sE,l);let d,m=[];for(const e of u)c>0&&e.endTime>c||(e.bidder=getHeaderBidder(e.url),e.url=clearQueryString(e.url),d&&e.startTime>=d.endTime&&(m.push(d),m.push(e)),(!d||e.endTime<d.endTime||e.startTime>=d.endTime)&&(d=e));m=Array.from(new Set(m));const p=m.length>1;return{numericValue:Number(p),numericUnit:"unitless",score:p?0:1,details:p?SerialHeaderBidding.makeTableDetails(oE,m):void 0}}}var lE=Object.freeze({__proto__:null,default:SerialHeaderBidding,UIStrings:aE});class LanternTagLoadTime extends AdLanternMetric{static getEstimateFromSimulation(e,t){const{nodeTimings:n}=e;return{
-timeInMs:AdLanternMetric.findNetworkTiming(n,(e=>!!e.url&&isImplTag(new URL(e.url)))).endTime,nodeTimings:n}}}LanternTagLoadTime=makeComputedArtifact(LanternTagLoadTime);class TagLoadTime$1 extends Metric{static async computeSimulatedMetric(e,t){return LanternTagLoadTime.request(e,t)}static async computeObservedMetric(e,t){const{networkRecords:n}=e,a=getPageStartTime(n),r=1e3*(function getTagEndTime(e){const t=e.find((e=>isImplTag(new URL(e.url))));return t?t.endTime:-1}(n)-a);return Promise.resolve({timing:r})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var uE=TagLoadTime$1=makeComputedArtifact(TagLoadTime$1);const dE={title:"Tag load time",failureTitle:"Reduce tag load time",description:"This metric measures the time for the ad tag's implementation script (pubads_impl.js for GPT; adsbygoogle.js for AdSense) to load after the page loads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/tag-load-time).",
-displayValue:"{timeInMs, number, seconds} s"},mE=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/tag-load-time.js",dE);var pE=Object.freeze({__proto__:null,default:class TagLoadTime extends Audit{static get meta(){return{id:"tag-load-time",title:mE(dE.title),failureTitle:mE(dE.failureTitle),description:mE(dE.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,t){const n={trace:e.traces[Audit.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[Audit.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:r}=await uE.request(n,t);if(!(r>0)){const e=ww.NoTag;return e.runWarnings=[Dw.NoTag],e}return{numericValue:r,numericUnit:"millisecond",score:Audit.computeLogNormalScore(a,r),displayValue:mE(dE.displayValue,{timeInMs:r})}}},UIStrings:dE})
-;const gE={title:"Ads to page-height ratio is within recommended range",failureTitle:"Reduce ads to page-height ratio",description:"The ads to page-height ratio can impact user experience and ultimately user retention. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/viewport-ad-density).",displayValue:"{adDensity, number, percent} ads to page-height ratio"},hE=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/viewport-ad-density.js",gE);var fE=Object.freeze({__proto__:null,default:class ViewportAdDensity extends Audit{static get meta(){return{id:"viewport-ad-density",title:hE(gE.title),failureTitle:hE(gE.failureTitle),description:hE(gE.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,n=e.IFrameElements.filter((e=>isAdIframe(e)&&e.clientRect.width*e.clientRect.height>1));if(!n.length)return ww.NoVisibleSlots;if(t.innerHeight<=0)throw new Error(Ew.ViewportAreaZero)
-;const a=function computeAdLength(e,t){const n=new Set([...e.map((e=>e.clientRect.left)),...e.map((e=>e.clientRect.right))].map((e=>Math.min(Math.max(1,e),t.innerWidth-1))));e=e.sort(((e,t)=>e.clientRect.top!==t.clientRect.top?e.clientRect.top-t.clientRect.top:e.clientRect.bottom-t.clientRect.bottom));let a=0;for(const t of n){let n=0,r=0;for(const a of e){if(t<a.clientRect.left||t>a.clientRect.right)continue;if(a.isPositionFixed){n+=a.clientRect.height;continue}const e=a.clientRect.bottom-Math.max(r,a.clientRect.top);e>0&&(n+=e),r=Math.max(r,a.clientRect.bottom)}a=Math.max(a,n)}return a}(n,t),r=Math.max(...n.map((e=>e.clientRect.top+e.clientRect.height/2)))+t.innerHeight,o=Math.min(1,a/r);return{score:o>.3?0:1,numericValue:o,numericUnit:"unitless",displayValue:hE(gE.displayValue,{adDensity:o})}}},UIStrings:gE});const yE={title:"Cumulative ad shift",failureTitle:"Reduce ad-related layout shift",
-description:"Measures layout shifts that were caused by ads or happened near ads. Reducing cumulative ad-related layout shift will improve user experience. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/cumulative-ad-shift)."},bE=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift.js",yE);var vE=Object.freeze({__proto__:null,default:class CumulativeAdShift extends Audit{static get meta(){return{id:"cumulative-ad-shift",title:bE(yE.title),failureTitle:bE(yE.failureTitle),description:bE(yE.description),scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","IFrameElements"]}}static get defaultOptions(){return{p10:.05,median:.25}}static isAdExpansion(e,t){if(!e.args||!e.args.data)return!1;for(const n of e.args.data.impacted_nodes||[]){const e=toClientRect(n.old_rect||[]),a=toClientRect(n.new_rect||[]);if(!(e.top>a.top||e.height!==a.height))for(const n of t){const t=n.clientRect
-;if((e.top>=t.top||a.top>=t.bottom)&&overlaps(e,t))return!0}}return!1}static isAttributableToTask(e,t){if(!e.args||!e.args.data)return!1;return!!t.find((t=>t.ts<e.ts&&e.ts-t.ts<5e4))}static compute(e,t,n,a){let r=0,o=0,i=0,s=0,c=0,l=0;for(const u of e)u.args&&u.args.data&&u.args.data.is_main_frame&&(r+=u.args.data.score,o++,(this.isAdExpansion(u,n)||this.isAttributableToTask(u,t))&&(i+=u.args.data.score,s++,u.ts<a&&(c+=u.args.data.score,l++)));return{cumulativeShift:r,numShifts:o,cumulativeAdShift:i,numAdShifts:s,cumulativePreImplTagAdShift:c,numPreImplTagAdShifts:l}}static getLayoutShiftEventsByWindow(e){let t=0,n=[],a=0,r=[];for(const o of e){if("LayoutShift"!==o.name||!o.args||!o.args.data)continue;if(r.length){const e=r[0],i=r[r.length-1];(i.ts-e.ts>5e6||o.ts-i.ts>1e6)&&(a>t&&(n=r,t=a),r=[],a=0)}r.push(o);const e=o.args.data;a+=e.weighted_score_delta||e.score||0}return n.length||(n=r),n}static async audit(e,t){
-const n=e.traces[Audit.DEFAULT_PASS],a=this.getLayoutShiftEventsByWindow(n.traceEvents);if(!a.length)return ww.NoLayoutShifts;const r=n.traceEvents.filter((e=>isAdRelated(getScriptUrl(e)||""))),o=r.find((e=>isImplTag(getScriptUrl(e)||"")))||{ts:1/0},i=e.IFrameElements.filter(isAdIframe),s=this.compute(a,r,i,o.ts),c=s.cumulativeAdShift;return i.length||c?{numericValue:c,numericUnit:"unitless",score:Audit.computeLogNormalScore({p10:t.options.p10,median:t.options.median},c),displayValue:c.toLocaleString(t.settings.locale),details:s}:ww.NoAdRendered}},UIStrings:yE});const wE={title:"Deprecated GPT API Usage",failureTitle:"Avoid deprecated GPT APIs",description:"Deprecated GPT API methods should be avoided to ensure your page is tagged correctly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/deprecated-gpt-api-usage).",displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"
-},DE=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/deprecated-api-usage.js",wE);var EE=Object.freeze({__proto__:null,default:class DeprecatedApiUsage extends Audit{static get meta(){return{id:"deprecated-gpt-api-usage",title:DE(wE.title),failureTitle:DE(wE.failureTitle),description:DE(wE.description),scoreDisplayMode:"informative",requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS];if(!(await bo.request(n,t)).find((e=>isGptImplTag(e.url))))return ww.NoGpt;const a=e.ConsoleMessages.filter((e=>"warning"===e.level||"error"===e.level)).filter((e=>e.url&&isGpt(e.url))).filter((e=>e.text.toLowerCase().includes("deprecated")||e.text.toLowerCase().includes("discouraged"))).map((e=>({source:e.source,description:e.text,url:e.url,timestamp:e.timestamp}))).sort(((e,t)=>(e.timestamp||0)-(t.timestamp||0))),r=[{key:"url",itemType:"url",text:DE(Ar.columnURL)},{key:"description",itemType:"code",
-text:DE(Ar.columnDescription)}],o=Audit.makeTableDetails(r,a),i=a.length;return{score:Number(0===i),details:o,displayValue:DE(wE.displayValue,{numErrors:i})}}},UIStrings:wE});const TE={title:"GPT Errors",failureTitle:"Fix GPT errors",description:"Fix GPT errors to ensure your page is tagged as intended. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-errors-overall).",displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},CE=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/gpt-errors-overall.js",TE);var SE=Object.freeze({__proto__:null,default:class GptErrorsOverall extends Audit{static get meta(){return{id:"gpt-errors-overall",title:CE(TE.title),failureTitle:CE(TE.failureTitle),description:CE(TE.description),scoreDisplayMode:"informative",requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const n=e.devtoolsLogs[Audit.DEFAULT_PASS]
-;if(!(await bo.request(n,t)).find((e=>isGptImplTag(e.url))))return ww.NoGpt;const a=e.ConsoleMessages.filter((e=>"error"===e.level||"warning"===e.level)).filter((e=>e.url&&isGpt(e.url))).filter((e=>!e.text.toLowerCase().includes("deprecated")&&!e.text.toLowerCase().includes("discouraged"))).map((e=>({source:e.source,description:e.text,url:e.url,timestamp:e.timestamp}))).sort(((e,t)=>(e.timestamp||0)-(t.timestamp||0))),r=[{key:"url",itemType:"url",text:CE(Ar.columnURL)},{key:"description",itemType:"code",text:CE(Ar.columnDescription)}],o=Audit.makeTableDetails(r,a),i=a.length;return{score:Number(0===i),details:o,displayValue:CE(TE.displayValue,{numErrors:i})}}},UIStrings:TE});const _E={title:"Total ad JS blocking time",failureTitle:"Reduce ad JS blocking time",description:"Ad-related scripts are blocking the main thread. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/total-ad-blocking-time).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",
-columnName:"Name",columnBlockingTime:"Blocking Time"},AE=createIcuMessageFn("node_modules/lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time.js",_E),kE=[{key:"name",itemType:"text",text:AE(_E.columnName)},{key:"blockingTime",itemType:"ms",text:AE(_E.columnBlockingTime),granularity:1}];class TotalAdBlockingTime extends Audit{static get meta(){return{id:"total-ad-blocking-time",title:AE(_E.title),failureTitle:AE(_E.failureTitle),description:AE(_E.description),requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{simulate:{p10:290,median:600},provided:{p10:150,median:350}}}static async audit(e,t){const n=e.traces[Audit.DEFAULT_PASS],a=e.devtoolsLogs[Audit.DEFAULT_PASS];if(!(await bo.request(a,t)).find((e=>isAdRelated(e.url))))return ww.NoAdRelatedReq;const r={trace:n,devtoolsLog:a,settings:t.settings};let o=[];try{o=await Hw.request(r,t)}catch(e){return ww.InvalidTiming}let i=0;const s=new Map;for(const e of o){const t=getAttributableUrl(e)
-;if(!t||!isAdRelated(t))continue;if(e.parent)continue;const n=e.duration-50;i+=n;const a=getNameOrTld(t),r=s.get(a)||0;s.set(a,r+n)}const c=[];for(const[e,t]of s.entries())c.push({name:e,blockingTime:t});c.sort(((e,t)=>t.blockingTime-e.blockingTime));const l=t.options[t.settings.throttlingMethod]||t.options.provided;return{score:Audit.computeLogNormalScore(l,i),numericValue:i,numericUnit:"millisecond",displayValue:AE(_E.failureDisplayValue,{timeInMs:i}),details:TotalAdBlockingTime.makeTableDetails(kE,c)}}}var xE=Object.freeze({__proto__:null,default:TotalAdBlockingTime,UIStrings:_E}),FE=Object.freeze({__proto__:null,default:{audits:[{path:"lighthouse-plugin-soft-navigation/audits/soft-nav-fcp"},{path:"lighthouse-plugin-soft-navigation/audits/soft-nav-lcp"}],groups:{metrics:{title:"Metrics associated with a soft navigation"}},category:{title:"Soft Navigation",supportedModes:["timespan"],auditRefs:[{id:"soft-nav-fcp",weight:1,group:"metrics"},{id:"soft-nav-lcp",weight:1,group:"metrics"}]
-}}});function computeMetricTimings(e){let t,n,a,r;for(const o of e)switch(o.name){case"SoftNavigationHeuristics::UserInitiatedClick":n||(t=o);break;case"SoftNavigationHeuristics_SoftNavigationDetected":if(n)throw new Error("Multiple soft navigations detected");n=o;break;case"largestContentfulPaint::Candidate":t&&(a=o);break;case"firstContentfulPaint":t&&(r=o)}if(!t)return{};const o=t.ts,getTiming=e=>{if(e)return(e.ts-o)/1e3};return{lcpTiming:getTiming(a),fcpTiming:getTiming(r)}}var RE=Object.freeze({__proto__:null,default:class SoftNavFCP extends Audit{static get meta(){return{id:"soft-nav-fcp",title:"Soft Navigation First Contentful Paint",description:"First Contentful Paint of a soft navigation.",scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["Trace"]}}static async audit(e,t){const n=e.Trace,a=await mo.request(n,t),{fcpTiming:r}=computeMetricTimings(a.mainThreadEvents);return r?{numericValue:r,numericUnit:"millisecond",
-displayValue:`${r} ms`,score:Audit.computeLogNormalScore({p10:1800,median:3e3},r)}:{notApplicable:!0,score:1}}}});var IE=Object.freeze({__proto__:null,default:class SoftNavLCP extends Audit{static get meta(){return{id:"soft-nav-lcp",title:"Soft Navigation Largest Contentful Paint",description:"Largest Contentful Paint of a soft navigation.",scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["Trace"]}}static async audit(e,t){const n=e.Trace,a=await mo.request(n,t),{lcpTiming:r}=computeMetricTimings(a.mainThreadEvents);return r?{numericValue:r,numericUnit:"millisecond",displayValue:`${r} ms`,score:Audit.computeLogNormalScore({p10:2500,median:4e3},r)}:{notApplicable:!0,score:1}}}})}();
+   *)
+*/
diff --git a/front_end/third_party/lighthouse/locales/ar-XB.json b/front_end/third_party/lighthouse/locales/ar-XB.json
index 74f1abc..e6f107e 100644
--- a/front_end/third_party/lighthouse/locales/ar-XB.json
+++ b/front_end/third_party/lighthouse/locales/ar-XB.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` ‏‮attributes‬‏ ‏‮match‬‏ ‏‮their‬‏ ‏‮roles‬‏"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "‏‮When‬‏ ‏‮an‬‏ ‏‮element‬‏ ‏‮doesn‬‏'‏‮t‬‏ ‏‮have‬‏ ‏‮an‬‏ ‏‮accessible‬‏ ‏‮name‬‏, ‏‮screen‬‏ ‏‮readers‬‏ ‏‮announce‬‏ ‏‮it‬‏ ‏‮with‬‏ ‏‮a‬‏ ‏‮generic‬‏ ‏‮name‬‏, ‏‮making‬‏ ‏‮it‬‏ ‏‮unusable‬‏ ‏‮for‬‏ ‏‮users‬‏ ‏‮who‬‏ ‏‮rely‬‏ ‏‮on‬‏ ‏‮screen‬‏ ‏‮readers‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮make‬‏ ‏‮command‬‏ ‏‮elements‬‏ ‏‮more‬‏ ‏‮accessible‬‏](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`, `link`, ‏‮and‬‏ `menuitem` ‏‮elements‬‏ ‏‮have‬‏ ‏‮accessible‬‏ ‏‮names‬‏"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "‏‮ARIA‬‏ ‏‮dialog‬‏ ‏‮elements‬‏ ‏‮without‬‏ ‏‮accessible‬‏ ‏‮names‬‏ ‏‮may‬‏ ‏‮prevent‬‏ ‏‮screen‬‏ ‏‮readers‬‏ ‏‮users‬‏ ‏‮from‬‏ ‏‮discerning‬‏ ‏‮the‬‏ ‏‮purpose‬‏ ‏‮of‬‏ ‏‮these‬‏ ‏‮elements‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮make‬‏ ‏‮ARIA‬‏ ‏‮dialog‬‏ ‏‮elements‬‏ ‏‮more‬‏ ‏‮accessible‬‏](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "‏‮Elements‬‏ ‏‮with‬‏ `role=\"dialog\"` ‏‮or‬‏ `role=\"alertdialog\"` ‏‮do‬‏ ‏‮not‬‏ ‏‮have‬‏ ‏‮accessible‬‏ ‏‮names‬‏."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "‏‮Elements‬‏ ‏‮with‬‏ `role=\"dialog\"` ‏‮or‬‏ `role=\"alertdialog\"` ‏‮have‬‏ ‏‮accessible‬‏ ‏‮names‬‏."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "‏‮Assistive‬‏ ‏‮technologies‬‏, ‏‮like‬‏ ‏‮screen‬‏ ‏‮readers‬‏, ‏‮work‬‏ ‏‮inconsistently‬‏ ‏‮when‬‏ `aria-hidden=\"true\"` ‏‮is‬‏ ‏‮set‬‏ ‏‮on‬‏ ‏‮the‬‏ ‏‮document‬‏ `<body>`. [‏‮Learn‬‏ ‏‮how‬‏ `aria-hidden` ‏‮affects‬‏ ‏‮the‬‏ ‏‮document‬‏ ‏‮body‬‏](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` ‏‮values‬‏ ‏‮are‬‏ ‏‮valid‬‏"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "‏‮Adding‬‏ `role=text` ‏‮around‬‏ ‏‮a‬‏ ‏‮text‬‏ ‏‮node‬‏ ‏‮split‬‏ ‏‮by‬‏ ‏‮markup‬‏ ‏‮enables‬‏ ‏‮VoiceOver‬‏ ‏‮to‬‏ ‏‮treat‬‏ ‏‮it‬‏ ‏‮as‬‏ ‏‮one‬‏ ‏‮phrase‬‏, ‏‮but‬‏ ‏‮the‬‏ ‏‮element‬‏'‏‮s‬‏ ‏‮focusable‬‏ ‏‮descendents‬‏ ‏‮will‬‏ ‏‮not‬‏ ‏‮be‬‏ ‏‮announced‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ `role=text` ‏‮attribute‬‏](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "‏‮Elements‬‏ ‏‮with‬‏ ‏‮the‬‏ `role=text` ‏‮attribute‬‏ ‏‮do‬‏ ‏‮have‬‏ ‏‮focusable‬‏ ‏‮descendents‬‏."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "‏‮Elements‬‏ ‏‮with‬‏ ‏‮the‬‏ `role=text` ‏‮attribute‬‏ ‏‮do‬‏ ‏‮not‬‏ ‏‮have‬‏ ‏‮focusable‬‏ ‏‮descendents‬‏."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "‏‮When‬‏ ‏‮a‬‏ ‏‮toggle‬‏ ‏‮field‬‏ ‏‮doesn‬‏'‏‮t‬‏ ‏‮have‬‏ ‏‮an‬‏ ‏‮accessible‬‏ ‏‮name‬‏, ‏‮screen‬‏ ‏‮readers‬‏ ‏‮announce‬‏ ‏‮it‬‏ ‏‮with‬‏ ‏‮a‬‏ ‏‮generic‬‏ ‏‮name‬‏, ‏‮making‬‏ ‏‮it‬‏ ‏‮unusable‬‏ ‏‮for‬‏ ‏‮users‬‏ ‏‮who‬‏ ‏‮rely‬‏ ‏‮on‬‏ ‏‮screen‬‏ ‏‮readers‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮toggle‬‏ ‏‮fields‬‏](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "‏‮ARIA‬‏ ‏‮IDs‬‏ ‏‮are‬‏ ‏‮unique‬‏"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "‏‮A‬‏ ‏‮heading‬‏ ‏‮with‬‏ ‏‮no‬‏ ‏‮content‬‏ ‏‮or‬‏ ‏‮inaccessible‬‏ ‏‮text‬‏ ‏‮prevent‬‏ ‏‮screen‬‏ ‏‮reader‬‏ ‏‮users‬‏ ‏‮from‬‏ ‏‮accessing‬‏ ‏‮information‬‏ ‏‮on‬‏ ‏‮the‬‏ ‏‮page‬‏'‏‮s‬‏ ‏‮structure‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮headings‬‏](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "‏‮Heading‬‏ ‏‮elements‬‏ ‏‮do‬‏ ‏‮not‬‏ ‏‮contain‬‏ ‏‮content‬‏."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "‏‮All‬‏ ‏‮heading‬‏ ‏‮elements‬‏ ‏‮contain‬‏ ‏‮content‬‏."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "‏‮Form‬‏ ‏‮fields‬‏ ‏‮with‬‏ ‏‮multiple‬‏ ‏‮labels‬‏ ‏‮can‬‏ ‏‮be‬‏ ‏‮confusingly‬‏ ‏‮announced‬‏ ‏‮by‬‏ ‏‮assistive‬‏ ‏‮technologies‬‏ ‏‮like‬‏ ‏‮screen‬‏ ‏‮readers‬‏ ‏‮which‬‏ ‏‮use‬‏ ‏‮either‬‏ ‏‮the‬‏ ‏‮first‬‏, ‏‮the‬‏ ‏‮last‬‏, ‏‮or‬‏ ‏‮all‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮labels‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮use‬‏ ‏‮form‬‏ ‏‮labels‬‏](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` ‏‮element‬‏ ‏‮has‬‏ ‏‮an‬‏ `[xml:lang]` ‏‮attribute‬‏ ‏‮with‬‏ ‏‮the‬‏ ‏‮same‬‏ ‏‮base‬‏ ‏‮language‬‏ ‏‮as‬‏ ‏‮the‬‏ `[lang]` ‏‮attribute‬‏."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "‏‮Links‬‏ ‏‮with‬‏ ‏‮the‬‏ ‏‮same‬‏ ‏‮destination‬‏ ‏‮should‬‏ ‏‮have‬‏ ‏‮the‬‏ ‏‮same‬‏ ‏‮description‬‏, ‏‮to‬‏ ‏‮help‬‏ ‏‮users‬‏ ‏‮understand‬‏ ‏‮the‬‏ ‏‮link‬‏'‏‮s‬‏ ‏‮purpose‬‏ ‏‮and‬‏ ‏‮decide‬‏ ‏‮whether‬‏ ‏‮to‬‏ ‏‮follow‬‏ ‏‮it‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮identical‬‏ ‏‮links‬‏](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "‏‮Identical‬‏ ‏‮links‬‏ ‏‮do‬‏ ‏‮not‬‏ ‏‮have‬‏ ‏‮the‬‏ ‏‮same‬‏ ‏‮purpose‬‏."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "‏‮Identical‬‏ ‏‮links‬‏ ‏‮have‬‏ ‏‮the‬‏ ‏‮same‬‏ ‏‮purpose‬‏."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "‏‮Informative‬‏ ‏‮elements‬‏ ‏‮should‬‏ ‏‮aim‬‏ ‏‮for‬‏ ‏‮short‬‏, ‏‮descriptive‬‏ ‏‮alternate‬‏ ‏‮text‬‏. ‏‮Decorative‬‏ ‏‮elements‬‏ ‏‮can‬‏ ‏‮be‬‏ ‏‮ignored‬‏ ‏‮with‬‏ ‏‮an‬‏ ‏‮empty‬‏ ‏‮alt‬‏ ‏‮attribute‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ `alt` ‏‮attribute‬‏](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "‏‮Image‬‏ ‏‮elements‬‏ ‏‮have‬‏ `[alt]` ‏‮attributes‬‏"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "‏‮Adding‬‏ ‏‮discernable‬‏ ‏‮and‬‏ ‏‮accessible‬‏ ‏‮text‬‏ ‏‮to‬‏ ‏‮input‬‏ ‏‮buttons‬‏ ‏‮may‬‏ ‏‮help‬‏ ‏‮screen‬‏ ‏‮reader‬‏ ‏‮users‬‏ ‏‮understand‬‏ ‏‮the‬‏ ‏‮purpose‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮input‬‏ ‏‮button‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮input‬‏ ‏‮buttons‬‏](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` ‏‮elements‬‏ ‏‮have‬‏ `[alt]` ‏‮text‬‏"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "‏‮Labels‬‏ ‏‮ensure‬‏ ‏‮that‬‏ ‏‮form‬‏ ‏‮controls‬‏ ‏‮are‬‏ ‏‮announced‬‏ ‏‮properly‬‏ ‏‮by‬‏ ‏‮assistive‬‏ ‏‮technologies‬‏, ‏‮like‬‏ ‏‮screen‬‏ ‏‮readers‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮form‬‏ ‏‮element‬‏ ‏‮labels‬‏](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "‏‮Form‬‏ ‏‮elements‬‏ ‏‮have‬‏ ‏‮associated‬‏ ‏‮labels‬‏"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "‏‮One‬‏ ‏‮main‬‏ ‏‮landmark‬‏ ‏‮helps‬‏ ‏‮screen‬‏ ‏‮reader‬‏ ‏‮users‬‏ ‏‮navigate‬‏ ‏‮a‬‏ ‏‮web‬‏ ‏‮page‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮landmarks‬‏](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "‏‮Document‬‏ ‏‮does‬‏ ‏‮not‬‏ ‏‮have‬‏ ‏‮a‬‏ ‏‮main‬‏ ‏‮landmark‬‏."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "‏‮Document‬‏ ‏‮has‬‏ ‏‮a‬‏ ‏‮main‬‏ ‏‮landmark‬‏."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "‏‮Low‬‏-‏‮contrast‬‏ ‏‮text‬‏ ‏‮is‬‏ ‏‮difficult‬‏ ‏‮or‬‏ ‏‮impossible‬‏ ‏‮for‬‏ ‏‮many‬‏ ‏‮users‬‏ ‏‮to‬‏ ‏‮read‬‏. ‏‮Link‬‏ ‏‮text‬‏ ‏‮that‬‏ ‏‮is‬‏ ‏‮discernible‬‏ ‏‮improves‬‏ ‏‮the‬‏ ‏‮experience‬‏ ‏‮for‬‏ ‏‮users‬‏ ‏‮with‬‏ ‏‮low‬‏ ‏‮vision‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮make‬‏ ‏‮links‬‏ ‏‮distinguishable‬‏](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "‏‮Links‬‏ ‏‮rely‬‏ ‏‮on‬‏ ‏‮color‬‏ ‏‮to‬‏ ‏‮be‬‏ ‏‮distinguishable‬‏."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "‏‮Links‬‏ ‏‮are‬‏ ‏‮distinguishable‬‏ ‏‮without‬‏ ‏‮relying‬‏ ‏‮on‬‏ ‏‮color‬‏."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "‏‮Link‬‏ ‏‮text‬‏ (‏‮and‬‏ ‏‮alternate‬‏ ‏‮text‬‏ ‏‮for‬‏ ‏‮images‬‏, ‏‮when‬‏ ‏‮used‬‏ ‏‮as‬‏ ‏‮links‬‏) ‏‮that‬‏ ‏‮is‬‏ ‏‮discernible‬‏, ‏‮unique‬‏, ‏‮and‬‏ ‏‮focusable‬‏ ‏‮improves‬‏ ‏‮the‬‏ ‏‮navigation‬‏ ‏‮experience‬‏ ‏‮for‬‏ ‏‮screen‬‏ ‏‮reader‬‏ ‏‮users‬‏. [‏‮Learn‬‏ ‏‮how‬‏ ‏‮to‬‏ ‏‮make‬‏ ‏‮links‬‏ ‏‮accessible‬‏](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` ‏‮elements‬‏ ‏‮have‬‏ ‏‮alternate‬‏ ‏‮text‬‏"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "‏‮Form‬‏ ‏‮elements‬‏ ‏‮without‬‏ ‏‮effective‬‏ ‏‮labels‬‏ ‏‮can‬‏ ‏‮create‬‏ ‏‮frustrating‬‏ ‏‮experiences‬‏ ‏‮for‬‏ ‏‮screen‬‏ ‏‮reader‬‏ ‏‮users‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ `select` ‏‮element‬‏](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "‏‮Select‬‏ ‏‮elements‬‏ ‏‮do‬‏ ‏‮not‬‏ ‏‮have‬‏ ‏‮associated‬‏ ‏‮label‬‏ ‏‮elements‬‏."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "‏‮Select‬‏ ‏‮elements‬‏ ‏‮have‬‏ ‏‮associated‬‏ ‏‮label‬‏ ‏‮elements‬‏."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "‏‮A‬‏ ‏‮value‬‏ ‏‮greater‬‏ ‏‮than‬‏ 0 ‏‮implies‬‏ ‏‮an‬‏ ‏‮explicit‬‏ ‏‮navigation‬‏ ‏‮ordering‬‏. ‏‮Although‬‏ ‏‮technically‬‏ ‏‮valid‬‏, ‏‮this‬‏ ‏‮often‬‏ ‏‮creates‬‏ ‏‮frustrating‬‏ ‏‮experiences‬‏ ‏‮for‬‏ ‏‮users‬‏ ‏‮who‬‏ ‏‮rely‬‏ ‏‮on‬‏ ‏‮assistive‬‏ ‏‮technologies‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ `tabindex` ‏‮attribute‬‏](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "‏‮No‬‏ ‏‮element‬‏ ‏‮has‬‏ ‏‮a‬‏ `[tabindex]` ‏‮value‬‏ ‏‮greater‬‏ ‏‮than‬‏ 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "‏‮Screen‬‏ ‏‮readers‬‏ ‏‮have‬‏ ‏‮features‬‏ ‏‮to‬‏ ‏‮make‬‏ ‏‮navigating‬‏ ‏‮tables‬‏ ‏‮easier‬‏. ‏‮Ensuring‬‏ ‏‮that‬‏ ‏‮tables‬‏ ‏‮use‬‏ ‏‮the‬‏ ‏‮actual‬‏ ‏‮caption‬‏ ‏‮element‬‏ ‏‮instead‬‏ ‏‮of‬‏ ‏‮cells‬‏ ‏‮with‬‏ ‏‮the‬‏ `[colspan]` ‏‮attribute‬‏ ‏‮may‬‏ ‏‮improve‬‏ ‏‮the‬‏ ‏‮experience‬‏ ‏‮for‬‏ ‏‮screen‬‏ ‏‮reader‬‏ ‏‮users‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮captions‬‏](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "‏‮Tables‬‏ ‏‮use‬‏ `<caption>` ‏‮instead‬‏ ‏‮of‬‏ ‏‮cells‬‏ ‏‮with‬‏ ‏‮the‬‏ `[colspan]` ‏‮attribute‬‏ ‏‮to‬‏ ‏‮indicate‬‏ ‏‮a‬‏ ‏‮caption‬‏."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "‏‮Touch‬‏ ‏‮targets‬‏ ‏‮do‬‏ ‏‮not‬‏ ‏‮have‬‏ ‏‮sufficient‬‏ ‏‮size‬‏ ‏‮or‬‏ ‏‮spacing‬‏."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "‏‮Touch‬‏ ‏‮targets‬‏ ‏‮have‬‏ ‏‮sufficient‬‏ ‏‮size‬‏ ‏‮and‬‏ ‏‮spacing‬‏."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "‏‮Screen‬‏ ‏‮readers‬‏ ‏‮have‬‏ ‏‮features‬‏ ‏‮to‬‏ ‏‮make‬‏ ‏‮navigating‬‏ ‏‮tables‬‏ ‏‮easier‬‏. ‏‮Ensuring‬‏ ‏‮that‬‏ `<td>` ‏‮elements‬‏ ‏‮in‬‏ ‏‮a‬‏ ‏‮large‬‏ ‏‮table‬‏ (3 ‏‮or‬‏ ‏‮more‬‏ ‏‮cells‬‏ ‏‮in‬‏ ‏‮width‬‏ ‏‮and‬‏ ‏‮height‬‏) ‏‮have‬‏ ‏‮an‬‏ ‏‮associated‬‏ ‏‮table‬‏ ‏‮header‬‏ ‏‮may‬‏ ‏‮improve‬‏ ‏‮the‬‏ ‏‮experience‬‏ ‏‮for‬‏ ‏‮screen‬‏ ‏‮reader‬‏ ‏‮users‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮table‬‏ ‏‮headers‬‏](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "‏‮Page‬‏ ‏‮has‬‏ ‏‮no‬‏ ‏‮manifest‬‏ <link> ‏‮URL‬‏"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "‏‮No‬‏ ‏‮matching‬‏ ‏‮service‬‏ ‏‮worker‬‏ ‏‮detected‬‏. ‏‮You‬‏ ‏‮may‬‏ ‏‮need‬‏ ‏‮to‬‏ ‏‮reload‬‏ ‏‮the‬‏ ‏‮page‬‏, ‏‮or‬‏ ‏‮check‬‏ ‏‮that‬‏ ‏‮the‬‏ ‏‮scope‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮service‬‏ ‏‮worker‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮current‬‏ ‏‮page‬‏ ‏‮encloses‬‏ ‏‮the‬‏ ‏‮scope‬‏ ‏‮and‬‏ ‏‮start‬‏ ‏‮URL‬‏ ‏‮from‬‏ ‏‮the‬‏ ‏‮manifest‬‏."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "‏‮Could‬‏ ‏‮not‬‏ ‏‮check‬‏ ‏‮service‬‏ ‏‮worker‬‏ ‏‮without‬‏ ‏‮a‬‏ '‏‮start‬‏_‏‮url‬‏' ‏‮field‬‏ ‏‮in‬‏ ‏‮the‬‏ ‏‮manifest‬‏"
   },
@@ -969,7 +1083,7 @@
     "message": "‏‮prefer‬‏_‏‮related‬‏_‏‮applications‬‏ ‏‮is‬‏ ‏‮only‬‏ ‏‮supported‬‏ ‏‮on‬‏ ‏‮Chrome‬‏ ‏‮Beta‬‏ ‏‮and‬‏ ‏‮Stable‬‏ ‏‮channels‬‏ ‏‮on‬‏ ‏‮Android‬‏."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "‏‮Lighthouse‬‏ ‏‮could‬‏ ‏‮not‬‏ ‏‮determine‬‏ ‏‮if‬‏ ‏‮there‬‏ ‏‮was‬‏ ‏‮a‬‏ ‏‮service‬‏ ‏‮worker‬‏. ‏‮Please‬‏ ‏‮try‬‏ ‏‮with‬‏ ‏‮a‬‏ ‏‮newer‬‏ ‏‮version‬‏ ‏‮of‬‏ ‏‮Chrome‬‏."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "‏‮The‬‏ ‏‮manifest‬‏ ‏‮URL‬‏ ‏‮scheme‬‏ ({scheme}) ‏‮is‬‏ ‏‮not‬‏ ‏‮supported‬‏ ‏‮on‬‏ ‏‮Android‬‏."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "‏‮Cumulative‬‏ ‏‮Layout‬‏ ‏‮Shift‬‏ ‏‮measures‬‏ ‏‮the‬‏ ‏‮movement‬‏ ‏‮of‬‏ ‏‮visible‬‏ ‏‮elements‬‏ ‏‮within‬‏ ‏‮the‬‏ ‏‮viewport‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Cumulative‬‏ ‏‮Layout‬‏ ‏‮Shift‬‏ ‏‮metric‬‏](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮measures‬‏ ‏‮page‬‏ ‏‮responsiveness‬‏, ‏‮how‬‏ ‏‮long‬‏ ‏‮it‬‏ ‏‮takes‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮to‬‏ ‏‮visibly‬‏ ‏‮respond‬‏ ‏‮to‬‏ ‏‮user‬‏ ‏‮input‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "‏‮First‬‏ ‏‮Contentful‬‏ ‏‮Paint‬‏ ‏‮marks‬‏ ‏‮the‬‏ ‏‮time‬‏ ‏‮at‬‏ ‏‮which‬‏ ‏‮the‬‏ ‏‮first‬‏ ‏‮text‬‏ ‏‮or‬‏ ‏‮image‬‏ ‏‮is‬‏ ‏‮painted‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮First‬‏ ‏‮Contentful‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "‏‮First‬‏ ‏‮Meaningful‬‏ ‏‮Paint‬‏ ‏‮measures‬‏ ‏‮when‬‏ ‏‮the‬‏ ‏‮primary‬‏ ‏‮content‬‏ ‏‮of‬‏ ‏‮a‬‏ ‏‮page‬‏ ‏‮is‬‏ ‏‮visible‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮First‬‏ ‏‮Meaningful‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮measures‬‏ ‏‮page‬‏ ‏‮responsiveness‬‏, ‏‮how‬‏ ‏‮long‬‏ ‏‮it‬‏ ‏‮takes‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮to‬‏ ‏‮visibly‬‏ ‏‮respond‬‏ ‏‮to‬‏ ‏‮user‬‏ ‏‮input‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Interaction‬‏ ‏‮to‬‏ ‏‮Next‬‏ ‏‮Paint‬‏ ‏‮metric‬‏](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "‏‮Time‬‏ ‏‮to‬‏ ‏‮Interactive‬‏ ‏‮is‬‏ ‏‮the‬‏ ‏‮amount‬‏ ‏‮of‬‏ ‏‮time‬‏ ‏‮it‬‏ ‏‮takes‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮page‬‏ ‏‮to‬‏ ‏‮become‬‏ ‏‮fully‬‏ ‏‮interactive‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮the‬‏ ‏‮Time‬‏ ‏‮to‬‏ ‏‮Interactive‬‏ ‏‮metric‬‏](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "‏‮Avoid‬‏ ‏‮multiple‬‏ ‏‮page‬‏ ‏‮redirects‬‏"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "‏‮To‬‏ ‏‮set‬‏ ‏‮budgets‬‏ ‏‮for‬‏ ‏‮the‬‏ ‏‮quantity‬‏ ‏‮and‬‏ ‏‮size‬‏ ‏‮of‬‏ ‏‮page‬‏ ‏‮resources‬‏, ‏‮add‬‏ ‏‮a‬‏ ‏‮budget‬‏.‏‮json‬‏ ‏‮file‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮performance‬‏ ‏‮budgets‬‏](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 ‏‮request‬‏ • {byteCount, number, bytes} ‏‮KiB‬‏}zero{# ‏‮requests‬‏ • {byteCount, number, bytes} ‏‮KiB‬‏}two{# ‏‮requests‬‏ • {byteCount, number, bytes} ‏‮KiB‬‏}few{# ‏‮requests‬‏ • {byteCount, number, bytes} ‏‮KiB‬‏}many{# ‏‮requests‬‏ • {byteCount, number, bytes} ‏‮KiB‬‏}other{# ‏‮requests‬‏ • {byteCount, number, bytes} ‏‮KiB‬‏}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "‏‮Keep‬‏ ‏‮request‬‏ ‏‮counts‬‏ ‏‮low‬‏ ‏‮and‬‏ ‏‮transfer‬‏ ‏‮sizes‬‏ ‏‮small‬‏"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "‏‮Canonical‬‏ ‏‮links‬‏ ‏‮suggest‬‏ ‏‮which‬‏ ‏‮URL‬‏ ‏‮to‬‏ ‏‮show‬‏ ‏‮in‬‏ ‏‮search‬‏ ‏‮results‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮canonical‬‏ ‏‮links‬‏](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "‏‮Initial‬‏ ‏‮server‬‏ ‏‮response‬‏ ‏‮time‬‏ ‏‮was‬‏ ‏‮short‬‏"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "‏‮The‬‏ ‏‮service‬‏ ‏‮worker‬‏ ‏‮is‬‏ ‏‮the‬‏ ‏‮technology‬‏ ‏‮that‬‏ ‏‮enables‬‏ ‏‮your‬‏ ‏‮app‬‏ ‏‮to‬‏ ‏‮use‬‏ ‏‮many‬‏ ‏‮Progressive‬‏ ‏‮Web‬‏ ‏‮App‬‏ ‏‮features‬‏, ‏‮such‬‏ ‏‮as‬‏ ‏‮offline‬‏, ‏‮add‬‏ ‏‮to‬‏ ‏‮homescreen‬‏, ‏‮and‬‏ ‏‮push‬‏ ‏‮notifications‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮Service‬‏ ‏‮Workers‬‏](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "‏‮This‬‏ ‏‮page‬‏ ‏‮is‬‏ ‏‮controlled‬‏ ‏‮by‬‏ ‏‮a‬‏ ‏‮service‬‏ ‏‮worker‬‏, ‏‮however‬‏ ‏‮no‬‏ `start_url` ‏‮was‬‏ ‏‮found‬‏ ‏‮because‬‏ ‏‮manifest‬‏ ‏‮failed‬‏ ‏‮to‬‏ ‏‮parse‬‏ ‏‮as‬‏ ‏‮valid‬‏ ‏‮JSON‬‏"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "‏‮This‬‏ ‏‮page‬‏ ‏‮is‬‏ ‏‮controlled‬‏ ‏‮by‬‏ ‏‮a‬‏ ‏‮service‬‏ ‏‮worker‬‏, ‏‮however‬‏ ‏‮the‬‏ `start_url` ({startUrl}) ‏‮is‬‏ ‏‮not‬‏ ‏‮in‬‏ ‏‮the‬‏ ‏‮service‬‏ ‏‮worker‬‏'‏‮s‬‏ ‏‮scope‬‏ ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "‏‮This‬‏ ‏‮page‬‏ ‏‮is‬‏ ‏‮controlled‬‏ ‏‮by‬‏ ‏‮a‬‏ ‏‮service‬‏ ‏‮worker‬‏, ‏‮however‬‏ ‏‮no‬‏ `start_url` ‏‮was‬‏ ‏‮found‬‏ ‏‮because‬‏ ‏‮no‬‏ ‏‮manifest‬‏ ‏‮was‬‏ ‏‮fetched‬‏."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "‏‮This‬‏ ‏‮origin‬‏ ‏‮has‬‏ ‏‮one‬‏ ‏‮or‬‏ ‏‮more‬‏ ‏‮service‬‏ ‏‮workers‬‏, ‏‮however‬‏ ‏‮the‬‏ ‏‮page‬‏ ({pageUrl}) ‏‮is‬‏ ‏‮not‬‏ ‏‮in‬‏ ‏‮scope‬‏."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "‏‮Does‬‏ ‏‮not‬‏ ‏‮register‬‏ ‏‮a‬‏ ‏‮service‬‏ ‏‮worker‬‏ ‏‮that‬‏ ‏‮controls‬‏ ‏‮page‬‏ ‏‮and‬‏ `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "‏‮Registers‬‏ ‏‮a‬‏ ‏‮service‬‏ ‏‮worker‬‏ ‏‮that‬‏ ‏‮controls‬‏ ‏‮page‬‏ ‏‮and‬‏ `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "‏‮A‬‏ ‏‮themed‬‏ ‏‮splash‬‏ ‏‮screen‬‏ ‏‮ensures‬‏ ‏‮a‬‏ ‏‮high‬‏-‏‮quality‬‏ ‏‮experience‬‏ ‏‮when‬‏ ‏‮users‬‏ ‏‮launch‬‏ ‏‮your‬‏ ‏‮app‬‏ ‏‮from‬‏ ‏‮their‬‏ ‏‮homescreens‬‏. [‏‮Learn‬‏ ‏‮more‬‏ ‏‮about‬‏ ‏‮splash‬‏ ‏‮screens‬‏](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "‏‮Best‬‏ ‏‮practices‬‏"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "‏‮These‬‏ ‏‮checks‬‏ ‏‮highlight‬‏ ‏‮opportunities‬‏ ‏‮to‬‏ [‏‮improve‬‏ ‏‮the‬‏ ‏‮accessibility‬‏ ‏‮of‬‏ ‏‮your‬‏ ‏‮web‬‏ ‏‮app‬‏](https://developer.chrome.com/docs/lighthouse/accessibility/). ‏‮Only‬‏ ‏‮a‬‏ ‏‮subset‬‏ ‏‮of‬‏ ‏‮accessibility‬‏ ‏‮issues‬‏ ‏‮can‬‏ ‏‮be‬‏ ‏‮automatically‬‏ ‏‮detected‬‏ ‏‮so‬‏ ‏‮manual‬‏ ‏‮testing‬‏ ‏‮is‬‏ ‏‮also‬‏ ‏‮encouraged‬‏."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "‏‮These‬‏ ‏‮items‬‏ ‏‮address‬‏ ‏‮areas‬‏ ‏‮which‬‏ ‏‮an‬‏ ‏‮automated‬‏ ‏‮testing‬‏ ‏‮tool‬‏ ‏‮cannot‬‏ ‏‮cover‬‏. ‏‮Learn‬‏ ‏‮more‬‏ ‏‮in‬‏ ‏‮our‬‏ ‏‮guide‬‏ ‏‮on‬‏ [‏‮conducting‬‏ ‏‮an‬‏ ‏‮accessibility‬‏ ‏‮review‬‏](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "‏‮Install‬‏ [‏‮a‬‏ ‏‮Drupal‬‏ ‏‮module‬‏](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) ‏‮that‬‏ ‏‮can‬‏ ‏‮lazy‬‏ ‏‮load‬‏ ‏‮images‬‏. ‏‮Such‬‏ ‏‮modules‬‏ ‏‮provide‬‏ ‏‮the‬‏ ‏‮ability‬‏ ‏‮to‬‏ ‏‮defer‬‏ ‏‮any‬‏ ‏‮offscreen‬‏ ‏‮images‬‏ ‏‮to‬‏ ‏‮improve‬‏ ‏‮performance‬‏."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "‏‮Consider‬‏ ‏‮using‬‏ ‏‮a‬‏ ‏‮module‬‏ ‏‮to‬‏ ‏‮inline‬‏ ‏‮critical‬‏ ‏‮CSS‬‏ ‏‮and‬‏ ‏‮JavaScript‬‏, ‏‮or‬‏ ‏‮potentially‬‏ ‏‮load‬‏ ‏‮assets‬‏ ‏‮asynchronously‬‏ ‏‮via‬‏ ‏‮JavaScript‬‏ ‏‮such‬‏ ‏‮as‬‏ ‏‮the‬‏ [‏‮Advanced‬‏ ‏‮CSS‬‏/‏‮JS‬‏ ‏‮Aggregation‬‏](https://www.drupal.org/project/advagg) ‏‮module‬‏. ‏‮Beware‬‏ ‏‮that‬‏ ‏‮optimizations‬‏ ‏‮provided‬‏ ‏‮by‬‏ ‏‮this‬‏ ‏‮module‬‏ ‏‮may‬‏ ‏‮break‬‏ ‏‮your‬‏ ‏‮site‬‏, ‏‮so‬‏ ‏‮you‬‏ ‏‮will‬‏ ‏‮likely‬‏ ‏‮need‬‏ ‏‮to‬‏ ‏‮make‬‏ ‏‮code‬‏ ‏‮changes‬‏."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "‏‮Themes‬‏, ‏‮modules‬‏, ‏‮and‬‏ ‏‮server‬‏ ‏‮specifications‬‏ ‏‮all‬‏ ‏‮contribute‬‏ ‏‮to‬‏ ‏‮server‬‏ ‏‮response‬‏ ‏‮time‬‏. ‏‮Consider‬‏ ‏‮finding‬‏ ‏‮a‬‏ ‏‮more‬‏ ‏‮optimized‬‏ ‏‮theme‬‏, ‏‮carefully‬‏ ‏‮selecting‬‏ ‏‮an‬‏ ‏‮optimization‬‏ ‏‮module‬‏, ‏‮and‬‏/‏‮or‬‏ ‏‮upgrading‬‏ ‏‮your‬‏ ‏‮server‬‏. ‏‮Your‬‏ ‏‮hosting‬‏ ‏‮servers‬‏ ‏‮should‬‏ ‏‮make‬‏ ‏‮use‬‏ ‏‮of‬‏ ‏‮PHP‬‏ ‏‮opcode‬‏ ‏‮caching‬‏, ‏‮memory‬‏-‏‮caching‬‏ ‏‮to‬‏ ‏‮reduce‬‏ ‏‮database‬‏ ‏‮query‬‏ ‏‮times‬‏ ‏‮such‬‏ ‏‮as‬‏ ‏‮Redis‬‏ ‏‮or‬‏ ‏‮Memcached‬‏, ‏‮as‬‏ ‏‮well‬‏ ‏‮as‬‏ ‏‮optimized‬‏ ‏‮application‬‏ ‏‮logic‬‏ ‏‮to‬‏ ‏‮prepare‬‏ ‏‮pages‬‏ ‏‮faster‬‏."
@@ -2778,10 +2862,10 @@
     "message": "‏‮Consider‬‏ ‏‮using‬‏ [‏‮Responsive‬‏ ‏‮Image‬‏ ‏‮Styles‬‏](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) ‏‮to‬‏ ‏‮reduce‬‏ ‏‮the‬‏ ‏‮size‬‏ ‏‮of‬‏ ‏‮images‬‏ ‏‮loaded‬‏ ‏‮on‬‏ ‏‮your‬‏ ‏‮page‬‏. ‏‮If‬‏ ‏‮you‬‏ ‏‮are‬‏ ‏‮using‬‏ ‏‮Views‬‏ ‏‮to‬‏ ‏‮show‬‏ ‏‮multiple‬‏ ‏‮content‬‏ ‏‮items‬‏ ‏‮on‬‏ ‏‮a‬‏ ‏‮page‬‏, ‏‮consider‬‏ ‏‮implementing‬‏ ‏‮pagination‬‏ ‏‮to‬‏ ‏‮limit‬‏ ‏‮the‬‏ ‏‮number‬‏ ‏‮of‬‏ ‏‮content‬‏ ‏‮items‬‏ ‏‮shown‬‏ ‏‮on‬‏ ‏‮a‬‏ ‏‮given‬‏ ‏‮page‬‏."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "‏‮Ensure‬‏ ‏‮you‬‏ ‏‮have‬‏ ‏‮enabled‬‏ \"‏‮Aggregate‬‏ ‏‮CSS‬‏ ‏‮files‬‏\" ‏‮in‬‏ ‏‮the‬‏ \"‏‮Administration‬‏ » ‏‮Configuration‬‏ » ‏‮Development‬‏\" ‏‮page‬‏. ‏‮You‬‏ ‏‮can‬‏ ‏‮also‬‏ ‏‮configure‬‏ ‏‮more‬‏ ‏‮advanced‬‏ ‏‮aggregation‬‏ ‏‮options‬‏ ‏‮through‬‏ [‏‮additional‬‏ ‏‮modules‬‏](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) ‏‮to‬‏ ‏‮speed‬‏ ‏‮up‬‏ ‏‮your‬‏ ‏‮site‬‏ ‏‮by‬‏ ‏‮concatenating‬‏, ‏‮minifying‬‏, ‏‮and‬‏ ‏‮compressing‬‏ ‏‮your‬‏ ‏‮CSS‬‏ ‏‮styles‬‏."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "‏‮Ensure‬‏ ‏‮you‬‏ ‏‮have‬‏ ‏‮enabled‬‏ \"‏‮Aggregate‬‏ ‏‮JavaScript‬‏ ‏‮files‬‏\" ‏‮in‬‏ ‏‮the‬‏ \"‏‮Administration‬‏ » ‏‮Configuration‬‏ » ‏‮Development‬‏\" ‏‮page‬‏. ‏‮You‬‏ ‏‮can‬‏ ‏‮also‬‏ ‏‮configure‬‏ ‏‮more‬‏ ‏‮advanced‬‏ ‏‮aggregation‬‏ ‏‮options‬‏ ‏‮through‬‏ [‏‮additional‬‏ ‏‮modules‬‏](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) ‏‮to‬‏ ‏‮speed‬‏ ‏‮up‬‏ ‏‮your‬‏ ‏‮site‬‏ ‏‮by‬‏ ‏‮concatenating‬‏, ‏‮minifying‬‏, ‏‮and‬‏ ‏‮compressing‬‏ ‏‮your‬‏ ‏‮JavaScript‬‏ ‏‮assets‬‏."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "‏‮Consider‬‏ ‏‮removing‬‏ ‏‮unused‬‏ ‏‮CSS‬‏ ‏‮rules‬‏ ‏‮and‬‏ ‏‮only‬‏ ‏‮attach‬‏ ‏‮the‬‏ ‏‮needed‬‏ ‏‮Drupal‬‏ ‏‮libraries‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮relevant‬‏ ‏‮page‬‏ ‏‮or‬‏ ‏‮component‬‏ ‏‮in‬‏ ‏‮a‬‏ ‏‮page‬‏. ‏‮See‬‏ ‏‮the‬‏ [‏‮Drupal‬‏ ‏‮documentation‬‏ ‏‮link‬‏](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) ‏‮for‬‏ ‏‮details‬‏. ‏‮To‬‏ ‏‮identify‬‏ ‏‮attached‬‏ ‏‮libraries‬‏ ‏‮that‬‏ ‏‮are‬‏ ‏‮adding‬‏ ‏‮extraneous‬‏ ‏‮CSS‬‏, ‏‮try‬‏ ‏‮running‬‏ [‏‮code‬‏ ‏‮coverage‬‏](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) ‏‮in‬‏ ‏‮Chrome‬‏ ‏‮DevTools‬‏. ‏‮You‬‏ ‏‮can‬‏ ‏‮identify‬‏ ‏‮the‬‏ ‏‮theme‬‏/‏‮module‬‏ ‏‮responsible‬‏ ‏‮from‬‏ ‏‮the‬‏ ‏‮URL‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮stylesheet‬‏ ‏‮when‬‏ ‏‮CSS‬‏ ‏‮aggregation‬‏ ‏‮is‬‏ ‏‮disabled‬‏ ‏‮in‬‏ ‏‮your‬‏ ‏‮Drupal‬‏ ‏‮site‬‏. ‏‮Look‬‏ ‏‮out‬‏ ‏‮for‬‏ ‏‮themes‬‏/‏‮modules‬‏ ‏‮that‬‏ ‏‮have‬‏ ‏‮many‬‏ ‏‮stylesheets‬‏ ‏‮in‬‏ ‏‮the‬‏ ‏‮list‬‏ ‏‮which‬‏ ‏‮have‬‏ ‏‮a‬‏ ‏‮lot‬‏ ‏‮of‬‏ ‏‮red‬‏ ‏‮in‬‏ ‏‮code‬‏ ‏‮coverage‬‏. ‏‮A‬‏ ‏‮theme‬‏/‏‮module‬‏ ‏‮should‬‏ ‏‮only‬‏ ‏‮enqueue‬‏ ‏‮a‬‏ ‏‮stylesheet‬‏ ‏‮if‬‏ ‏‮it‬‏ ‏‮is‬‏ ‏‮actually‬‏ ‏‮used‬‏ ‏‮on‬‏ ‏‮the‬‏ ‏‮page‬‏."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "‏‮Enable‬‏ ‏‮compression‬‏ ‏‮on‬‏ ‏‮your‬‏ ‏‮Next‬‏.‏‮js‬‏ ‏‮server‬‏. [‏‮Learn‬‏ ‏‮more‬‏](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "‏‮Use‬‏ ‏‮the‬‏ `nuxt/image` ‏‮component‬‏ ‏‮and‬‏ ‏‮set‬‏ `format=\"webp\"`. [‏‮Learn‬‏ ‏‮more‬‏](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "‏‮Use‬‏ ‏‮the‬‏ ‏‮React‬‏ ‏‮DevTools‬‏ ‏‮Profiler‬‏, ‏‮which‬‏ ‏‮makes‬‏ ‏‮use‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮Profiler‬‏ ‏‮API‬‏, ‏‮to‬‏ ‏‮measure‬‏ ‏‮the‬‏ ‏‮rendering‬‏ ‏‮performance‬‏ ‏‮of‬‏ ‏‮your‬‏ ‏‮components‬‏. [‏‮Learn‬‏ ‏‮more‬‏.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "‏‮Place‬‏ ‏‮videos‬‏ ‏‮inside‬‏ `VideoBoxes`, ‏‮customize‬‏ ‏‮them‬‏ ‏‮using‬‏ `Video Masks` ‏‮or‬‏ ‏‮add‬‏ `Transparent Videos`. [‏‮Learn‬‏ ‏‮more‬‏](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "‏‮Upload‬‏ ‏‮images‬‏ ‏‮using‬‏ `Wix Media Manager` ‏‮to‬‏ ‏‮ensure‬‏ ‏‮they‬‏ ‏‮are‬‏ ‏‮automatically‬‏ ‏‮served‬‏ ‏‮as‬‏ ‏‮WebP‬‏. ‏‮Find‬‏ [‏‮more‬‏ ‏‮ways‬‏ ‏‮to‬‏ ‏‮optimize‬‏](https://support.wix.com/en/article/site-performance-optimizing-your-media) ‏‮your‬‏ ‏‮site‬‏'‏‮s‬‏ ‏‮media‬‏."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "‏‮When‬‏ [‏‮adding‬‏ ‏‮third‬‏-‏‮party‬‏ ‏‮code‬‏](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) ‏‮in‬‏ ‏‮the‬‏ `Custom Code` ‏‮tab‬‏ ‏‮of‬‏ ‏‮your‬‏ ‏‮site‬‏'‏‮s‬‏ ‏‮dashboard‬‏, ‏‮make‬‏ ‏‮sure‬‏ ‏‮it‬‏'‏‮s‬‏ ‏‮deferred‬‏ ‏‮or‬‏ ‏‮loaded‬‏ ‏‮at‬‏ ‏‮the‬‏ ‏‮end‬‏ ‏‮of‬‏ ‏‮the‬‏ ‏‮code‬‏ ‏‮body‬‏. ‏‮Where‬‏ ‏‮possible‬‏, ‏‮use‬‏ ‏‮Wix‬‏’‏‮s‬‏ [‏‮integrations‬‏](https://support.wix.com/en/article/about-marketing-integrations) ‏‮to‬‏ ‏‮embed‬‏ ‏‮marketing‬‏ ‏‮tools‬‏ ‏‮on‬‏ ‏‮your‬‏ ‏‮site‬‏. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "‏‮Wix‬‏ ‏‮utilizes‬‏ ‏‮CDNs‬‏ ‏‮and‬‏ ‏‮caching‬‏ ‏‮to‬‏ ‏‮serve‬‏ ‏‮responses‬‏ ‏‮as‬‏ ‏‮fast‬‏ ‏‮as‬‏ ‏‮possible‬‏ ‏‮for‬‏ ‏‮most‬‏ ‏‮visitors‬‏. ‏‮Consider‬‏ [‏‮manually‬‏ ‏‮enabling‬‏ ‏‮caching‬‏](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) ‏‮for‬‏ ‏‮your‬‏ ‏‮site‬‏, ‏‮especially‬‏ ‏‮if‬‏ ‏‮using‬‏ `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "‏‮Review‬‏ ‏‮any‬‏ ‏‮third‬‏-‏‮party‬‏ ‏‮code‬‏ ‏‮you‬‏'‏‮ve‬‏ ‏‮added‬‏ ‏‮to‬‏ ‏‮your‬‏ ‏‮site‬‏ ‏‮in‬‏ ‏‮the‬‏ `Custom Code` ‏‮tab‬‏ ‏‮of‬‏ ‏‮your‬‏ ‏‮site‬‏'‏‮s‬‏ ‏‮dashboard‬‏ ‏‮and‬‏ ‏‮only‬‏ ‏‮keep‬‏ ‏‮the‬‏ ‏‮services‬‏ ‏‮that‬‏ ‏‮are‬‏ ‏‮necessary‬‏ ‏‮to‬‏ ‏‮your‬‏ ‏‮site‬‏. [‏‮Find‬‏ ‏‮out‬‏ ‏‮more‬‏](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "‏‮Consider‬‏ ‏‮uploading‬‏ ‏‮your‬‏ ‏‮GIF‬‏ ‏‮to‬‏ ‏‮a‬‏ ‏‮service‬‏ ‏‮which‬‏ ‏‮will‬‏ ‏‮make‬‏ ‏‮it‬‏ ‏‮available‬‏ ‏‮to‬‏ ‏‮embed‬‏ ‏‮as‬‏ ‏‮an‬‏ ‏‮HTML‬‏5 ‏‮video‬‏."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "‏‮Save‬‏ ‏‮as‬‏ ‏‮JSON‬‏"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "‏‮Open‬‏ ‏‮in‬‏ ‏‮Viewer‬‏"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "‏‮Values‬‏ ‏‮are‬‏ ‏‮estimated‬‏ ‏‮and‬‏ ‏‮may‬‏ ‏‮vary‬‏. ‏‮The‬‏ [‏‮performance‬‏ ‏‮score‬‏ ‏‮is‬‏ ‏‮calculated‬‏](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) ‏‮directly‬‏ ‏‮from‬‏ ‏‮these‬‏ ‏‮metrics‬‏."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "‏‮View‬‏ ‏‮Original‬‏ ‏‮Trace‬‏"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "‏‮View‬‏ ‏‮Trace‬‏"
   },
diff --git a/front_end/third_party/lighthouse/locales/ar.json b/front_end/third_party/lighthouse/locales/ar.json
index b1f40c8..8e80aaa 100644
--- a/front_end/third_party/lighthouse/locales/ar.json
+++ b/front_end/third_party/lighthouse/locales/ar.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "سمات `[aria-*]` هي مطابقة لأدوارها"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "عند عدم ظهور اسم أحد العناصر على واجهة المستخدم، تشير برامج قراءة الشاشة إلى هذا العنصر باستخدام اسم عام، ما يجعله غير قابل للاستخدام بالنسبة إلى المستخدمين الذين يعتمدون على برامج قراءة الشاشة. تعرَّف على [كيفية تسهيل استخدام عناصر الأوامر](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "تتوفّر لعناصر `button` و`link` و`menuitem` أسماء يمكن الوصول إليها"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "عند استخدام عناصر مربّع الحوار ARIA (dialog‏ ARIA) بدون أسماء ظاهرة على واجهة المستخدم، لن يتمكّن مستخدمو برامج قراءة الشاشة من التعرّف على الغرض من هذه العناصر. [التعرّف على كيفية إظهار عناصر مربّع الحوار ARIA (dialog‏ ARIA) على واجهة المستخدم بشكل أوضح](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "العناصر التي تتضمّن `role=\"dialog\"` أو `role=\"alertdialog\"` لا تحمل أسماء ظاهرة على واجهة المستخدم"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "العناصر التي تتضمّن `role=\"dialog\"` أو `role=\"alertdialog\"` تحمل أسماء ظاهرة على واجهة المستخدم"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "لا تعمل التكنولوجيا المساعِدة، مثل برامج قراءة الشاشة، بشكل متسق عند ضبط `aria-hidden=\"true\"` في المستند `<body>`. تعرّف على [مدى تأثير السمة `aria-hidden` في نص المستند](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "قيم `[role]` هي صالحة"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "عند إضافة `role=text` حول عُقدة نصيّة مقسَّمة بالترميز، سيتعامل برنامج VoiceOver معها كعبارة واحدة، ولكن لن تتم الإشارة إلى العناصر التابعة التي يمكن التركيز عليها في العنصر. [مزيد من المعلومات حول السمة `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "العناصر التي تتضمّن السمة `role=text` تحتوي على عناصر تابعة يمكن التركيز عليها"
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "العناصر التي تتضمّن السمة `role=text` لا تحتوي على عناصر تابعة يمكن التركيز عليها"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "عند عدم ظهور اسم أحد حقول التبديل على واجهة المستخدم، تشير برامج قراءة الشاشة إلى هذا العنصر باستخدام اسم عام، ما يجعله غير قابل للاستخدام بالنسبة إلى المستخدمين الذين يعتمدون على برامج قراءة الشاشة. [مزيد من المعلومات حول حقول التبديل](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "أرقام تعريف ARIA فريدة"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "في حال عدم اشتمال العنوان على محتوى أو نص ظاهر على واجهة المستخدم، لن يتمكّن مستخدمو برامج قراءة الشاشة من الوصول إلى المعلومات في بنية الصفحة. [مزيد من المعلومات حول العناوين](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "عناصر العنوان (heading) لا تتضمّن محتوى"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "جميع عناصر العنوان (heading) تتضمّن محتوى"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "إنّ التكنولوجيا المساعِدة، مثل برامج قراءة الشاشة التي تستخدم إمّا التصنيف الأول أو الأخير أو كل التصنيفات، قد تشير عن طريق الخطأ إلى الحقول النموذجية المتعددة التصنيف. تعرَّف على [كيفية استخدام تصنيفات النماذج](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "يحتوي العنصر `<html>` على السمة `[xml:lang]` التي تستخدم اللغة الأساسية نفسها للسمة `[lang]`"
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "يجب أن تتضمّن الروابط ذات الوجهة نفسها الوصف نفسه لمساعدة المستخدمين في معرفة الغرض من الرابط وتحديد ما إذا كانوا سينتقلون إليه. [مزيد من المعلومات حول الروابط المتطابقة](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "الروابط المتطابقة ليست لها الغرض نفسه"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "الروابط المتطابقة لها الغرض نفسه"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "يجب أن تتضمن العناصر الإعلامية نصًا بديلاً وصفيًا وقصيرًا. يمكن تجاهل العناصر غير الضرورية من خلال استخدام سمة نص بديل فارغة. [مزيد من المعلومات حول السمة `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "عناصر الصور تحتوي على سمات `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "إنّ إضافة نص واضح يمكن الوصول إليه إلى أزرار الإدخال قد تساعد مستخدمي قارئ الشاشة على فهم الغرض من زر الإدخال. [مزيد من المعلومات حول أزرار الإدخال](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "عناصر `<input type=\"image\">` تحتوي على نص `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "تضمن التصنيفات الإشارة إلى عناصر التحكّم في النموذج بشكلٍ صحيح من خلال التكنولوجيا المساعِدة، مثل برامج قراءة الشاشة. [مزيد من المعلومات حول تصنيفات عناصر النموذج](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "احتواء عناصر النموذج على التصنيفات المرتبطة"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "عند إضافة مَعلم رئيسي واحد، يمكن لمستخدمي برامج قراءة الشاشة التنقّل في صفحة الويب بسهولة. [مزيد من المعلومات حول المعالم](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "المستند لا يتضمّن مَعلمًا رئيسيًا"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "المستند يتضمّن مَعلمًا رئيسيًا"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "تستحيل أو تصعب على كثير من المستخدمين قراءة النص المنخفض التباين. يمكنك استخدام نص رابط واضح لتحسين تجربة المستخدمين الذين يعانون من ضعف في النظر. [التعرّف على كيفية تمييز الروابط](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "الروابط يمكن تمييزها بالاعتماد على الألوان"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "الروابط يمكن تمييزها بدون الاعتماد على الألوان"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "إنّ نص الرابط، (والنص البديل للصور، عند استخدامه كرابط) الذي يكون مميّزًا وفريدًا وقابلاً للتركيز عليه، يحسِّن تجربة التنقّل لمستخدمي برامج قراءة الشاشة. تعرَّف على [كيفية إتاحة الوصول إلى الروابط](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "عناصر `<object>` تحتوي على نص بديل"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "إذا لم تتم إضافة تصنيفات فعّالة إلى عناصر النموذج (form)، يمكن أن يؤدي ذلك إلى تقديم تجارب محبطة لمستخدمي برامج قراءة الشاشة. [مزيد من المعلومات حول عنصر `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "عناصر الاختيار (select) لا تتضمّن عناصر تصنيف (label) مرتبطة"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "عناصر الاختيار (select) تتضمّن عناصر تصنيف (label) مرتبطة"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "تشير القيمة الأكبر من 0 إلى تقديم طلب صريح للتنقّل. على الرغم من صحة ذلك تقنيًّا، غالبًا ما يؤدي إلى إنشاء تجارب محبطة للمستخدمين الذين يعتمدون على التكنولوجيا المساعدة. [مزيد من المعلومات حول السمة `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "لا يتوفّر عنصر له قيمة `[tabindex]` أكبر من 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "تحتوي برامج قراءة الشاشة على ميزات لتسهيل التنقّل بين الجداول. يمكن تحسين تجربة استخدام برامج قراءة الشاشة من خلال ضمان استخدام الجداول لعنصر الشرح الفعلي بدلاً من الخلايا التي تستخدم السمة `[colspan]`. [مزيد من المعلومات حول الشرح](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "تستخدم الجداول `<caption>` بدلاً من الخلايا التي تستخدم السمة `[colspan]` للإشارة إلى الشرح"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "مساحات اللمس لا تتضمّن حجمًا ومسافة كافيَين"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "مساحات اللمس تتضمّن حجمًا ومسافة كافيَين"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "تحتوي برامج قراءة الشاشة على ميزات لتسهيل التنقّل بين الجداول. يمكن تحسين تجربة استخدام برامج قراءة الشاشة من خلال ضمان توفُّر عناوين جداول لعناصر `<td>` في الجداول الكبيرة (التي تتكوَّن من 3 خلايا أو أكثر في العرض والارتفاع). [مزيد من المعلومات حول عناوين الجداول](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "لا تتضمّن الصفحة عنوان URL <link> لملف البيان."
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "لم يتم رصد مشغّل خدمات مطابق. قد تحتاج إلى إعادة تحميل الصفحة، أو التأكّد أن نطاق مشغّل الخدمات للصفحة الحالية يشتمل على النطاق وعنوان URL البداية من ملف البيان."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "تعذّر التحقّق من مشغّل الخدمات بدون توفّر حقل \"start_url\" في ملف البيان."
   },
@@ -969,7 +1083,7 @@
     "message": "لا يتوافق حقل الإدخال prefer_related_applications إلا مع الإصدار التجريبي من متصفِّح Chrome والقنوات الثابتة على Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "تعذَّر على أداة Lighthouse تحديد ما إذا كان يتوفّر مشغّل خدمات. يُرجى إعادة المحاولة باستخدام إصدار أحدث من متصفّح Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "مخطّط عنوان URL الخاص بملف البيان ({scheme}) غير متاح لنظام التشغيل Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "يحدِّد مقياس \"متغيّرات التصميم التراكمية\" مقدار حركة العناصر المرئية في إطار العرض. [مزيد من المعلومات حول مقياس \"متغيّرات التصميم التراكمية\"](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "يحدِّد مقياس \"مدة عرض الاستجابة لتفاعل المستخدم\" سرعة استجابة الصفحة والمدّة التي تستغرِقها الصفحة للاستجابة بشكل واضح للبيانات التي أدخلها المستخدم. [مزيد من المعلومات حول مقياس \"مدة عرض الاستجابة لتفاعل المستخدم\"](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "يحدِّد مقياس \"سرعة عرض المحتوى على الصفحة\" الوقت الذي يُعرَض فيه أول نص أو صورة من محتوى الصفحة. [مزيد من المعلومات حول مقياس \"سرعة عرض المحتوى على الصفحة\"](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "يوضِّح مقياس \"سرعة عرض أوّل محتوى مفيد على الصفحة\" الوقت الذي تم فيه عرض المحتوى الأساسي لإحدى الصفحات. [مزيد من المعلومات حول مقياس \"سرعة عرض أوّل محتوى مفيد على الصفحة\"](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "يحدِّد مقياس \"مدة عرض الاستجابة لتفاعل المستخدم\" سرعة استجابة الصفحة والمدّة التي تستغرِقها الصفحة للاستجابة بشكل واضح للبيانات التي أدخلها المستخدم. [مزيد من المعلومات حول مقياس \"مدة عرض الاستجابة لتفاعل المستخدم\"](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "\"وقت التفاعل\" هو مقدار الوقت المستغرَق حتى تصبح الصفحة تفاعلية بالكامل. [مزيد من المعلومات حول مقياس \"وقت التفاعل\"](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "تجنُب عمليات إعادة توجيه الصفحات المتعددة"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "لتحديد ميزانيات لكمية موارد الصفحة وحجمها، يمكنك إضافة ملف budget.json. [مزيد من المعلومات حول الميزانيات القائمة على الأداء](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{طلب واحد • {byteCount, number, bytes} كيبيبايت}zero{# طلب • {byteCount, number, bytes} كيبيبايت}two{طلبان • {byteCount, number, bytes} كيبيبايت}few{# طلبات • {byteCount, number, bytes} كيبيبايت}many{# طلبًا • {byteCount, number, bytes} كيبيبايت}other{# طلب • {byteCount, number, bytes} كيبيبايت}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "الحفاظ على انخفاض عدد الطلبات ونقل الأحجام الصغيرة"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "تقترح الروابط الأساسية عنوان URL للعرض في نتائج البحث. [مزيد من المعلومات حول الروابط الأساسية](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "وقت استجابة الخادم الأوّلي قصير"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "مشغّل الخدمات هو التكنولوجيا التي تمكّن تطبيقك من استخدام ميزات عديدة في \"تطبيق الويب التقدّمي\"، مثل الاستجابة عند عدم الاتصال بالإنترنت والإضافة إلى الشاشة الرئيسية والإشعارات الفورية. [مزيد من المعلومات حول مشغِّلات الخدمات](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "يتحكم مشغّل الخدمات في هذه الصفحة، ومع ذلك لم يتم العثور على `start_url` بسبب تعذّر تحليل البيان كملف JSON صالح"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "يتحكم مشغّل الخدمات في هذه الصفحة، ومع ذلك لا يتوفر `start_url` ({startUrl}) في نطاق مشغّل الخدمات ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "يتحكم مشغّل الخدمات في هذه الصفحة، ومع ذلك لم يتم العثور على `start_url` لأنه لم يتم جلب أي بيان."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "تحتوي نقطة الانطلاق هذه على مشغّل خدمات واحد أو أكثر، ولكن لا يوجد مشغّل يتحكم في الصفحة ({pageUrl})."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "عدم تسجيل مشغّل الخدمات الذي يتحكّم في صفحة و`start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "تسجيل مشغّل الخدمات الذي يتحكّم في صفحة و`start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "تضمن شاشة البداية المميَّزة توفير تجربة عالية الجودة عند تشغيل المستخدمين لتطبيقك من الشاشات الرئيسية. [مزيد من المعلومات حول شاشات البداية](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "أفضل الممارسات"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "تحدّد عمليات التحقق هذه الفرص التي تتيح [تحسين إمكانية الوصول إلى تطبيق الويب](https://developer.chrome.com/docs/lighthouse/accessibility/). ولا يمكن إجراء رصد تلقائي إلّا لمجموعة فرعية من مشاكل إمكانية الوصول، لذلك يُنصح أيضًا باستخدام الاختبار اليدوي."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "تعالج هذه العناصر المناطق التي يتعذر على أداة الاختبار المبرمجة تغطيتها. تعرّف على مزيد من المعلومات في دليلنا حول [مراجعة إمكانية الوصول](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "يمكنك تثبيت [وحدة Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) تتيح تحميل الصور ببطء. وتتيح هذه الوحدات إمكانية تأجيل أي صور خارج الشاشة لتحسين الأداء."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "يمكنك استخدام وحدة لتضمين لغتَيّ CSS وJavaScript المهمّتَين أو تحميل الأصول بشكلٍ غير متزامن من خلال JavaScript مثل وحدة [تجميع CSS/JS المتقدّم](https://www.drupal.org/project/advagg). يجب الانتباه إلى أنّ التحسينات التي توفّرها هذه الوحدة قد توقف موقعك الإلكتروني، لذلك من المحتمل أن تحتاج إلى إجراء تغييرات في الرمز البرمجي."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "تساهم التصاميم والوحدات ومواصفات الخادم في تحسين وقت استجابة الخادم. يمكنك البحث عن تصميم مُحسّن بدرجة أكبر و/أو اختيار وحدة تحسين بعناية و/أو ترقية الخادم. ويجب أن تستفيد خوادم الاستضافة من التخزين المؤقت لأجزاء عمليات لغة PHP والتخزين المؤقت للذاكرة لتقليل الأوقات التي تستغرقها طلبات قواعد البيانات مثل Redis أو Memcached، بالإضافة إلى منطق التطبيق المحسّن لتحضير الصفحات بشكلٍ أسرع."
@@ -2778,10 +2862,10 @@
     "message": "يمكنك استخدام [أنماط الصور السريعة الاستجابة](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) لتقليل حجم الصور المحمّلة على صفحتك. وإذا كنت تستخدم \"Views\" لعرض عناصر محتوى متعددة على صفحة، يمكنك التقسيم على صفحات بدلاً من ذلك للحدّ من عدد عناصر المحتوى المعروضة في صفحة معيّنة."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "يُرجى التأكّد من تفعيل \"تجميع ملفات CSS\" في صفحة \"الإدارة » الإعداد » التطوير\". ويمكنك إعداد خيارات تجميع أكثر تقدّمًا من خلال [وحدات إضافية](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) لزيادة سرعة موقعك الإلكتروني عن طريق ربط أنماط لغة CSS وتصغيرها وضغطها."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "يُرجى التأكّد من تفعيل \"تجميع ملفات JavaScript\" في صفحة \"الإدارة » الإعداد » التطوير\". ويمكنك إعداد خيارات تجميع أكثر تقدّمًا من خلال [وحدات إضافية](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) لزيادة سرعة موقعك الإلكتروني عن طريق ربط أصول JavaScript وتصغيرها وضغطها."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "يمكنك إزالة قواعد CSS غير المستخدمة وإرفاق مكتبات Drupal المطلوبة فقط بالصفحة ذات الصلة أو بالمكوّن ذي الصلة في الصفحة. للحصول على التفاصيل، يُرجى الاطّلاع على [رابط مستندات Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). لتحديد المكتبات المرفَقة التي تضيف لغة CSS دخيلة، يمكنك محاولة تشغيل [تغطية الرمز البرمجي](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) في Chrome DevTools. ويمكنك تحديد التصميم/الوحدة المسؤولة من عنوان URL لورقة الأنماط عندما يكون تجميع لغة CSS قيد الإيقاف في موقعك الإلكتروني على Drupal. يمكنك البحث عن التصاميم/الوحدات التي تحتوي على العديد من أوراق الأنماط في القائمة والتي تتضمن الكثير من اللون الأحمر في تغطية الرمز البرمجي. ومن المفترض أن يدرِج التصميم/الوحدة ورقة أنماط فقط في حال كانت مُستخدَمة في الصفحة."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "يمكنك تفعيل ميزة ضغط البيانات في خادم Next.js الخاص بك. [مزيد من المعلومات](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "يمكنك استخدام المكوّن `nuxt/image` وضبط `format=\"webp\"`. [مزيد من المعلومات](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "استخدِم محلِّل React DevTools الذي يتيح الاستفادة من واجهة برمجة تطبيقات المحلّل لقياس مستوى أداء العرض للمكوّنات. [مزيد من المعلومات](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "يمكنك وضع الفيديوهات في `VideoBoxes` وتخصيصها باستخدام `Video Masks` أو إضافة `Transparent Videos`. [مزيد من المعلومات](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "يمكنك تحميل الصور باستخدام الأداة `Wix Media Manager` لضمان عرض الصور تلقائيًا بتنسيق WebP. اطّلِع على [طرق إضافية لتحسين](https://support.wix.com/en/article/site-performance-optimizing-your-media) وسائط موقعك الإلكتروني."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "عند [إضافة رمز برمجي تابع لجهة خارجية](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) في علامة التبويب `Custom Code` ضمن لوحة بيانات موقعك الإلكتروني، تأكَّد من تأجيله أو تحميله في نهاية نص الرمز البرمجي. استخدِم [عمليات الدمج](https://support.wix.com/en/article/about-marketing-integrations) على Wix، إن أمكن، لتضمين أدوات التسويق على موقعك الإلكتروني. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "يستخدم Wix شبكات توصيل المحتوى (CDN) وميزة التخزين المؤقت للاستجابة بأسرع وقت ممكن لمعظم الزوّار. يمكنك [يدويًا تفعيل ميزة التخزين المؤقت](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) لموقعك الإلكتروني، خاصةً إذا كنت تستخدم `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "يُرجى مراجعة أي رمز برمجي تابع لجهة خارجية سبق لك إضافته إلى موقعك الإلكتروني في علامة التبويب `Custom Code` ضِمن لوحة البيانات الخاصة بموقعك الإلكتروني وإبقاء الخدمات اللازمة فقط لموقعك الإلكتروني. [المزيد من المعلومات](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "يمكنك تحميل ملف GIF إلى خدمة ستتيح تضمينه في شكل فيديو HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "حفظ بتنسيق JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "فتح في العارِض"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "القيم تقديرية وقابلة للتغيير. ويتم [حساب نتيجة الأداء](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) مباشرة من خلال هذه المقاييس."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "عرض سجلّ التتبّع الأصلي"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "عرض سجلّ التتبُّع"
   },
diff --git a/front_end/third_party/lighthouse/locales/bg.json b/front_end/third_party/lighthouse/locales/bg.json
index 31a082b..41d48b8 100644
--- a/front_end/third_party/lighthouse/locales/bg.json
+++ b/front_end/third_party/lighthouse/locales/bg.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Атрибутите `[aria-*]` съответстват на ролите си"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Когато даден елемент няма достъпно име, екранните четци ще произнасят за него общо име и той ще бъде неизползваем за потребителите, разчитащи на тази технология. [Научете как да направите по-достъпни елементите, свързани с команди](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Елементите `button`, `link` и `menuitem` имат достъпни имена"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Елементите ARIA в диалоговите прозорци без достъпни имена може да попречат на потребителите на екранни четци да разберат целта на тези елементи. [Научете как да направите по-достъпни елементите ARIA в диалоговите прозорци](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Елементите с `role=\"dialog\"` или `role=\"alertdialog\"` нямат достъпни имена."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Елементите с `role=\"dialog\"` или `role=\"alertdialog\"` имат достъпни имена."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Помощните технологии, например екранни четци, работят непоследователно, когато за `<body>` за документа е зададено `aria-hidden=\"true\"`. [Научете как `aria-hidden` влияе върху основния текст на документа](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Стойностите на `[role]` са валидни"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Добавянето на `role=text` около текстов възел, разделен с маркиране, дава възможност на VoiceOver да го третира като една фраза, но дъщерните елементи, които могат да се откроят, няма да бъдат съобщени. [Научете повече за атрибута `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Елементите с атрибута `role=text` имат дъщерни елементи, които могат да се откроят."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Елементите с атрибута `role=text` нямат дъщерни елементи, които могат да се откроят."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Когато дадено поле за превключване няма достъпно име, екранните четци ще произнасят за него общо име и то ще бъде неизползваемо за потребителите, разчитащи на тази технология. [Научете повече за полетата за превключване](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Идентификаторите за ARIA са уникални"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Заглавие без съдържание или недостъпен текст не позволяват на потребителите на екранни четци да стигнат до информация за структурата на страницата. [Научете повече за заглавията](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Заглавните елементи нямат съдържание."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Всички елементи heading имат съдържание."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Когато полетата във формуляри имат няколко етикета, е възможно да бъдат произнесени объркващо от помощните технологии, например екранни четци, които използват първия, последния или всички етикети. [Научете как да използвате етикети за формуляри](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Елементът `<html>` има атрибут `[xml:lang]` със същия основен език като атрибута `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Връзките с една и съща дестинация трябва да имат едно и също описание, за да могат потребителите да разберат целта на връзката и да решат дали да я отворят. [Научете повече за идентичните връзки](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Идентичните връзки нямат една и съща цел."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Идентичните връзки имат една и съща цел."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Информативните елементи трябва да имат кратък, описателен алтернативен текст. При декоративните елементи атрибутът alt може да бъде оставен без стойност. [Научете повече за атрибута `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Графичните елементи имат атрибути `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Добавянето на забележим и достъпен текст към бутоните за въвеждане може да помогне на потребителите на екранни четци да разберат за какво служи съответният бутон. [Научете повече за бутоните за въвеждане](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Елементите `<input type=\"image\">` имат алтернативен текст (`[alt]`)"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Етикетите дават възможност на помощните технологии, като например екранни четци, да четат правилно контролите във формуляри. [Научете повече за етикетите на елементи във формуляри](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Елементите на формуляра имат свързани етикети"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Един главен участък помага на потребителите на екранни четци да навигират в дадена уеб страница. [Научете повече за участъците](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Документът няма главен участък."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Документът има главен участък."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Четенето на текст с нисък контраст е трудно или невъзможно за много потребители. Текстът на връзките, който се отличава, подобрява практическата работа за потребителите със слабо зрение. [Научете как да направите връзките да се отличават от текста](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Връзките разчитат на цвят, за да се отличават от текста."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Връзките се отличават от текста, без да разчитат на цвета."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Текстът на връзките (и алтернативният текст за изображения, когато се използват за връзки), който е различим, уникален и дава възможност фокусът да бъде поставен върху него, подобрява навигирането за потребителите на екранни четци. [Научете как да направите връзките достъпни](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` елемента имат алтернативен текст"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Елементите на формуляра без ефективни етикети могат да влошат практическата работа на потребителите на екранни четци. [Научете повече за елемента `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "С елементите select не са свързани елементи label."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "С елементите select са свързани елементи label."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Ако стойността е по-голяма от 0, значи се използва изричен ред на навигиране. Въпреки че е технически валидно, това често създава неудобства за потребителите, които разчитат на помощни технологии. [Научете повече за атрибута `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Никой от елементите няма атрибут `[tabindex]` със стойност, по-голяма от 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Екранните четци имат функции за улесняване на навигирането в таблици. Когато в таблиците се използва елементът caption вместо клетки с атрибута `[colspan]`, това може да подобри практическата работа за потребителите на екранни четци. [Научете повече за надписите](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "В таблиците се използва `<caption>` вместо клетки с атрибута `[colspan]`, за да се посочи надпис."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Целите за докосване не са достатъчно големи или разстоянието помежду им не е достатъчно."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Целите за докосване са с достатъчна големина и разстояние помежду им."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Екранните четци имат функции за улесняване на навигирането в таблици. Когато елементите `<td>` в голяма таблица (с повече от 3 колони или реда) имат свързана заглавка на таблицата, това може да подобри практическата работа за потребителите на екранни четци. [Научете повече за заглавките на таблиците](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "В страницата не е зададен URL адрес на манифеста чрез маркера <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Не бе открит съответстващ файл service worker. Може да се наложи да презаредите страницата или да се уверите, че зададените в манифеста обхват и URL адрес за стартиране попадат в обхвата на service worker за текущата страница."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Файлът service worker не бе проверен, тъй като за него липсваше поле start_url в манифеста"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications се поддържа само в бета- и стабилния канал на Chrome за Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse не успя да установи дали е налице service worker. Опитайте с по-нова версия на Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Схемата ({scheme}) на URL адреса на манифеста не се поддържа под Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Показателят „Кумулативни структурни промени (CLS)“ измерва движението на видимите елементи в прозоречния изглед. [Научете повече за този показател](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Показателят „Изобразяване след взаимодействие“ измерва колко време е необходимо на страницата, за да реагира визуално след входящи данни от действие на потребител. [Научете повече за този показател](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Показателят „Първо изобразяване на съдържание (FCP)“ указва след колко време се изобразява първият текстов или графичен елемент. [Научете повече за този показател](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Показателят „Първо значимо изобразяване“ измерва времето, за което основното съдържание на страницата става видимо. [Научете повече за този показател](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Показателят „Изобразяване след взаимодействие“ измерва колко време е необходимо на страницата, за да реагира визуално след входящи данни от действие на потребител. [Научете повече за този показател](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Времето до интерактивност показва след колко време страницата става напълно интерактивна. [Научете повече за този показател](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Не използвайте пренасочвания през няколко страници"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "За да определите лимити за количеството и размера на ресурсите на страницата, добавете файл budget.json. [Научете повече за лимитите за показатели с въздействие върху ефективността](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 заявка • {byteCount, number, bytes} KiB}other{# заявки • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Поддържайте малък брой заявки и неголям обем на прехвърляните данни"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Каноничните връзки указват кой URL адрес да се показва в резултатите от търсенето. [Научете повече за каноничните връзки](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Началното време за реакция на сървъра бе кратко"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service worker е технологията, която дава възможност на приложението ви да използва много от функциите на прогресивните уеб приложения (PWA), като например работа офлайн, добавяне към началния екран и насочени известия. [Научете повече за service worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Тази страница е контролирана от service worker, но не бе намерен параметър `start_url`, тъй като при синтактичния анализ бе установено, че манифестът не е във валиден формат JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Тази страница се контролира от файл service worker, но `start_url` ({startUrl}) не е в обхвата му ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Тази страница се контролира от service worker, но не бе намерен параметър `start_url`, тъй като не бе извлечен манифест."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Този източник има един или повече файлове service worker, но страницата ({pageUrl}) не е в обхвата им."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Няма регистриран service worker, който контролира страницата и `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Регистриран е service worker, който контролира страницата и `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Тематичният първоначален екран гарантира висококачествена практическа работа, когато потребителите стартират приложението ви от началния екран. [Научете повече за първоначалните екрани](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Най-добри практики"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Тези проверки открояват възможности за [подобряване на достъпността на уеб приложението ви](https://developer.chrome.com/docs/lighthouse/accessibility/). Само определени проблеми с достъпността могат да бъдат открити автоматично. Затова ръчното тестване също е препоръчително."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Тези проверки покриват области, които са извън обхвата на автоматичните инструменти за тестване. Научете повече в ръководството ни за [извършване на преглед на достъпността](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Инсталирайте [модул на Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), който поддържа забавено зареждане на изображенията. Тези модули дават възможност за отлагане на зареждането на изображенията извън видимата част на екрана, за да се подобри ефективността."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Добре е да използвате модул за вграждане на важния CSS и JavaScript код или за потенциално асинхронно зареждане на активите чрез JavaScript, като например модула [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Имайте предвид, че оптимизациите, които той извършва, може да възпрепятстват работата на сайта ви, така че вероятно ще се наложи да промените кода."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Времето за реакция на сървъра зависи от спецификациите му, темите и модулите. Добре е да намерите по-оптимизирана тема, внимателно да изберете модул за оптимизиране и/или да надстроите сървъра си. Сървърите ви за хостинг трябва да използват функциите на PHP за кеширане на операционните кодове и кеширане в паметта чрез услуги като Redis или Memcached, за да се намали времето за подаване на заявки към базата от данни, както и оптимизирана логика за приложенията, така че страниците да се подготвят по-бързо."
@@ -2778,10 +2862,10 @@
     "message": "Бихте могли да използвате [стилове за адаптивни изображения](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8), за да намалите размера на графичните файлове, зареждани на страницата ви. Ако си служите с изгледи, за да показвате няколко елемента със съдържание на една страница, можете да внедрите функция за страниране, за да ограничите броя елементи, които да се извеждат на страница."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Трябва да активирате опцията Aggregate CSS files на страницата Administration » Configuration » Development. Можете също да конфигурирате по-разширени опции за агрегиране чрез [допълнителни модули](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), за да подобрите скоростта на сайта си чрез обединяване, минимизиране и компресиране на CSS стиловете."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Трябва да активирате опцията Aggregate JavaScript files на страницата Administration » Configuration » Development. Можете също да конфигурирате по-разширени опции за агрегиране чрез [допълнителни модули](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), за да подобрите скоростта на сайта си чрез обединяване, минимизиране и компресиране на JavaScript активите."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Бихте могли да премахнете неизползваните правила на CSS и да добавите само необходимите библиотеки на Drupal към съответната страница или компонент в нея. За подробности отворете връзката към [документацията на Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). За да откриете включените библиотеки, които добавят ненужен CSS код, стартирайте инструмента за [покритие на кода](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) в Chrome DevTools. Можете да намерите проблемните тема/модул в URL адреса на листа със стилове, когато агрегирането на CSS е деактивирано в сайта ви на Drupal. Търсете теми/модули с много листове със стилове в списъка, за които преобладава червеният цвят в диаграмата на инструмента. Даден лист със стилове трябва да бъде поставен в опашката на тема/модул само ако действително се използва в страницата."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Активирайте компресирането в Next.js сървъра си. [Научете повече](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Използвайте компонента `nuxt/image` и задайте `format=\"webp\"`. [Научете повече](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Използвайте инструмента за анализ в React DevTools, който използва съответното API, за да измерите ефективността на компонентите си при рендериране. [Научете повече](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)."
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Поставете видеоклиповете във `VideoBoxes`, персонализирайте ги чрез `Video Masks` или добавете `Transparent Videos`. [Научете повече](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Качете изображения чрез `Wix Media Manager`, за да се показват автоматично като WebP. Намерете [още начини за оптимизиране](https://support.wix.com/en/article/site-performance-optimizing-your-media) на мултимедийното съдържание на сайта си."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Когато [добавяте код на трета страна](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) в раздела „`Custom Code`“ на таблото за управление на сайта си, постарайте се зареждането му да бъде отложено или той да се зарежда в края на основния код. Където е възможно, използвайте [интеграциите](https://support.wix.com/en/article/about-marketing-integrations) на Wix, за да вградите маркетингови инструменти в сайта си. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix използва CDN и кеширане, за да изпраща отговори възможно най-бързо за повечето посетители. Помислете дали да не [активирате ръчно кеширането](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) на сайта си, особено ако използвате `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "В раздела „`Custom Code`“ на таблото за управление прегледайте кода на трети страни, който сте добавили към сайта, и запазете само услугите, които са необходими за сайта. [Научете повече](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Добре е да качите GIF файла си в услуга, която ще даде възможност да бъде вграден като видеоклип с HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Запазване като JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Отваряне във визуализатора"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Стойностите са приблизителни и може да варират. [Рейтингът за ефективността се изчислява](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) директно от тези показатели."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Преглед на първоначалното трасиране"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Преглед на трасирането"
   },
diff --git a/front_end/third_party/lighthouse/locales/ca.json b/front_end/third_party/lighthouse/locales/ca.json
index 840d1d8..868642b 100644
--- a/front_end/third_party/lighthouse/locales/ca.json
+++ b/front_end/third_party/lighthouse/locales/ca.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Els atributs `[aria-*]` coincideixen amb les seves funcions"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Si un element no té un nom accessible, els lectors de pantalla l'enuncien amb un nom genèric, de manera que queda inservible per als usuaris que depenen d'aquesta tecnologia. [Obtén informació sobre com pots fer que els elements de les ordres siguin més accessibles](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Els elements `button`, `link` i `menuitem` tenen noms accessibles"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Els elements del quadre de diàleg d'ARIA que no tenen noms accessibles poden impedir que els usuaris de lectors de pantalla puguin discernir la finalitat d'aquests elements. [Obtén informació sobre com pots fer que els elements del quadre de diàleg d'ARIA siguin més accessibles](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Els elements amb `role=\"dialog\"` o `role=\"alertdialog\"` no tenen noms accessibles."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Els elements amb `role=\"dialog\"` o `role=\"alertdialog\"` tenen noms accessibles."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Les tecnologies assistencials, com ara els lectors de pantalla, funcionen de manera incongruent quan s'estableix `aria-hidden=\"true\"` en el document `<body>`. [Obtén informació sobre com `aria-hidden` afecta el cos del document](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Els valors de l'atribut `[role]` són vàlids"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Si s'afegeix `role=text` al voltant d'un node de text dividit per etiquetatge, VoiceOver pot tractar l'element com una frase, però els seus descendents enfocables no s'enunciaran. [Obtén més informació sobre l'atribut `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Els elements amb l'atribut `role=text` sí que tenen descendents enfocables."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Els elements amb l'atribut `role=text` no tenen descendents enfocables."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Si un camp de commutació no té un nom accessible, els lectors de pantalla l'enuncien amb un nom genèric, de manera que resulta inservible per als usuaris que depenen d'aquesta tecnologia. [Obtén més informació sobre els camps de commutació](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Els identificadors ARIA són únics"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Un encapçalament sense contingut o amb text inaccessible impedeix que els usuaris de lectors de pantalla accedeixin a la informació de l'estructura de la pàgina. [Obtén més informació sobre els encapçalaments](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Els elements dels encapçalaments no inclouen contingut."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Tots els elements dels encapçalaments inclouen contingut."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Els camps de formulari amb diverses etiquetes poden fer que les tecnologies assistencials, com ara els lectors de pantalla, els enunciïn de manera confusa, ja que poden utilitzar la primera etiqueta, la darrera o totes. [Obtén informació sobre com pots utilitzar etiquetes de formulari](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -246,13 +282,13 @@
     "message": "Els elements `<frame>` o `<iframe>` tenen un títol"
   },
   "core/audits/accessibility/heading-order.js | description": {
-    "message": "Els títols ordenats adequadament sense ometre nivells transmeten l'estructura semàntica de la pàgina, la qual cosa facilita la navegació i la comprensió quan s'utilitzen tecnologies assistencials. [Obtén més informació sobre l'ordre dels títols](https://dequeuniversity.com/rules/axe/4.7/heading-order)."
+    "message": "Els encapçalaments ordenats adequadament sense ometre nivells transmeten l'estructura semàntica de la pàgina, la qual cosa facilita la navegació i la comprensió quan s'utilitzen tecnologies assistencials. [Obtén més informació sobre l'ordre dels encapçalaments](https://dequeuniversity.com/rules/axe/4.7/heading-order)."
   },
   "core/audits/accessibility/heading-order.js | failureTitle": {
-    "message": "Els elements del títol no estan en un ordre seqüencial descendent"
+    "message": "Els elements de l'encapçalament no estan en un ordre seqüencial descendent"
   },
   "core/audits/accessibility/heading-order.js | title": {
-    "message": "Els elements del títol es mostren en un ordre seqüencial descendent"
+    "message": "Els elements de l'encapçalament es mostren en un ordre seqüencial descendent"
   },
   "core/audits/accessibility/html-has-lang.js | description": {
     "message": "Si en una pàgina no s'especifica un atribut `lang`, els lectors de pantalla suposen que la pàgina està escrita en l'idioma predeterminat que l'usuari ha triat en configurar el lector de pantalla. Si està escrita en un altre idioma, és possible que el lector de pantalla no n'enunciï el text correctament. [Obtén més informació sobre l'atribut `lang`](https://dequeuniversity.com/rules/axe/4.7/html-has-lang)."
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "L'element `<html>` té un atribut `[xml:lang]` amb el mateix idioma base que l'atribut `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Els enllaços amb la mateixa destinació han de tenir la mateixa descripció per ajudar els usuaris a entendre la finalitat de l'enllaç i decidir si el volen seguir. [Obtén més informació sobre els enllaços idèntics](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Els enllaços idèntics no tenen la mateixa finalitat."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Els enllaços idèntics tenen la mateixa finalitat."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Els elements informatius han d'utilitzar text alternatiu que sigui breu i descriptiu. Els elements decoratius es poden ignorar amb un atribut alt buit. [Obtén més informació sobre l'atribut `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Els elements d'imatge tenen atributs `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Afegir text discernible i accessible als botons d'entrada pot ajudar els usuaris de lectors de pantalla a entendre la finalitat del botó d'entrada. [Obtén més informació sobre els botons d'entrada](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Els elements `<input type=\"image\">` tenen text `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Les etiquetes garanteixen que les tecnologies assistencials, com ara els lectors de pantalla, puguin enunciar correctament els controls dels formularis. [Obtén més informació sobre les etiquetes d'elements de formulari](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Els elements de formulari tenen etiquetes associades"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Tenir un sol punt de referència principal ajuda els usuaris de lectors de pantalla a navegar per una pàgina web. [Obtén més informació sobre els punts de referència](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "El document no té cap punt de referència principal."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "El document té un punt de referència principal."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "El text amb contrast baix resulta difícil o impossible de llegir per a molts usuaris. Si el text dels enllaços és discernible, millora l'experiència dels usuaris amb poca visió. [Obtén informació sobre com pots fer que els enllaços es puguin distingir](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Els enllaços depenen del color per poder-se distingir."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Els enllaços es poden distingir sense dependre del color."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Si el text dels enllaços (així com el text alternatiu per a les imatges, quan s'utilitzen com a enllaços) és discernible, únic i enfocable, millora l'experiència de navegació per als usuaris de lectors de pantalla. [Obtén informació sobre com pots fer que els enllaços siguin accessibles](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Els elements `<object>` tenen text alternatiu"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Els elements de formulari sense etiquetes eficaces poden crear experiències frustrants per als usuaris de lectors de pantalla. [Obtén més informació sobre l'element `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Els elements select no tenen elements d'etiqueta associats."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Els elements select tenen elements d'etiqueta associats."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Un valor superior a 0 implica una ordenació explícita de navegació. Tècnicament és vàlid, però sol causar experiències frustrants per als usuaris que depenen de les tecnologies assistencials. [Obtén més informació sobre l'atribut `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Cap element no té un valor `[tabindex]` superior a 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Els lectors de pantalla inclouen funcions perquè sigui més fàcil navegar per les taules. Assegura't que les taules utilitzin l'element de subtítol real en lloc de les cel·les amb l'atribut `[colspan]`. Això pot millorar l'experiència dels usuaris de lectors de pantalla. [Obtén més informació sobre els subtítols](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Les taules utilitzen `<caption>` en lloc de les cel·les amb l'atribut `[colspan]` per indicar un subtítol."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Els objectius tàctils no tenen una mida o un espaiat suficients."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Els objectius tàctils tenen una mida i un espaiat suficients."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Els lectors de pantalla inclouen funcions perquè sigui més fàcil navegar per les taules. Assegura't que els elements `<td>` d'una taula gran (3 o més cel·les d'amplada i d'alçada) tinguin una capçalera de taula associada. Això pot millorar l'experiència dels usuaris de lectors de pantalla. [Obtén més informació sobre les capçaleres de taules](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -462,7 +579,7 @@
     "message": "Revisa l'ordre dels testimonis: \"{tokens}\" a {snippet}"
   },
   "core/audits/bf-cache.js | actionableFailureType": {
-    "message": "Hi ha accions possibles"
+    "message": "Hi ha accions aplicables"
   },
   "core/audits/bf-cache.js | description": {
     "message": "Moltes navegacions es duen a terme tornant a una pàgina anterior o tornant a la pàgina següent. La memòria cau endavant/enrere (bfcache) pot accelerar aquestes navegacions de retorn. [Més informació sobre bfcache](https://developer.chrome.com/docs/lighthouse/performance/bf-cache/)"
@@ -480,7 +597,7 @@
     "message": "Tipus d'error"
   },
   "core/audits/bf-cache.js | notActionableFailureType": {
-    "message": "No hi ha cap acció possible"
+    "message": "Cap acció aplicable"
   },
   "core/audits/bf-cache.js | supportPendingFailureType": {
     "message": "Compatibilitat del navegador pendent"
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "La pàgina no té cap URL <link> del fitxer de manifest"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "No s'ha detectat cap Service Worker coincident. Pot ser que hagis de tornar a carregar la pàgina o comprovar que l'abast del Service Worker per a la pàgina actual englobi l'abast i l'URL d'inici del fitxer de manifest."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "No s'ha pogut comprovar el Service Worker perquè el fitxer de manifest no té cap camp \"start_url\""
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications només s'admet a Chrome beta i als canals estables a Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse no ha pogut determinar si hi havia un Service Worker. Prova-ho amb una versió més recent de Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "L'esquema d'URL del manifest ({scheme}) no s'admet a Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "El canvi de disseny acumulatiu mesura el moviment d'elements visibles a la finestra gràfica. [Obtén més informació sobre la mètrica Canvi de disseny acumulatiu](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "La mètrica Interacció amb la renderització següent mesura la capacitat de resposta de la pàgina; és a dir, el temps que tarda la pàgina a respondre visiblement a l'entrada de l'usuari. [Obtén més informació sobre la mètrica Interacció amb la renderització següent](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "La mètrica Primera renderització de contingut marca el moment en què es renderitza el primer text o la primera imatge. [Obtén més informació sobre la mètrica Primera renderització de contingut](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "La mètrica Primera renderització significativa mesura el moment en què el contingut principal d'una pàgina és visible. [Obtén més informació sobre la mètrica Primera renderització significativa](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "La mètrica Interacció amb la renderització següent mesura la capacitat de resposta de la pàgina; és a dir, el temps que tarda la pàgina a respondre visiblement a l'entrada de l'usuari. [Obtén més informació sobre la mètrica Interacció amb la renderització següent](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "La mètrica Temps fins que és interactiva és el que tarda la pàgina a fer-se completament interactiva. [Obtén més informació sobre la mètrica Temps fins que és interactiva](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Evita les redireccions múltiples a pàgines"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Per definir els pressupostos de la quantitat i la mida dels recursos de la pàgina, afegeix un fitxer budget.json. [Obtén més informació sobre els pressupostos de rendiment](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 sol·licitud • {byteCount, number, bytes} KiB}other{# sol·licituds • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Mantén els recomptes de les sol·licituds baixos i les mides de les transferències petites"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Els enllaços canònics suggereixen quins URL s'han de mostrar als resultats de la cerca. [Obtén més informació sobre els enllaços canònics](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "El temps inicial de resposta del servidor ha estat breu"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "El Service Worker és la tecnologia que fa possible que la teva aplicació utilitzi moltes funcions d'aplicació web progressiva, com ara funcionar sense connexió, poder afegir-se a la pantalla d'inici i mostrar notificacions automàtiques. [Obtén més informació sobre els Service Workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Tot i que un Service Worker controla aquesta pàgina, no s'ha trobat cap atribut `start_url` perquè el fitxer de manifest no s'ha pogut analitzar com a format JSON vàlid"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Tot i que un Service Worker controla aquesta pàgina, l'atribut `start_url` ({startUrl}) no és a l'abast del Service Worker ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Tot i que un Service Worker controla aquesta pàgina, no s'ha trobat cap `start_url` perquè no s'ha obtingut cap fitxer de manifest."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Aquest origen té un Service Worker o més, però la pàgina ({pageUrl}) està fora de l'abast."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "No registra cap Service Worker que controli la pàgina i l'atribut `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registra un Service Worker que controla la pàgina i l'atribut `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Utilitzar una pantalla inicial temàtica garanteix una experiència d'alta qualitat quan els usuaris inicien l'aplicació des de la pantalla d'inici. [Obtén més informació sobre les pantalles inicials](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Pràctiques recomanades"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Aquestes comprovacions destaquen les oportunitats per [millorar l'accessibilitat de l'aplicació web](https://developer.chrome.com/docs/lighthouse/accessibility/). Només poden detectar un subconjunt de problemes d'accessibilitat automàticament, de manera que et recomanem que també hi facis proves manuals."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Aquests elements tracten àrees que les eines de proves automatitzades no poden cobrir. Obtén més informació a la nostra guia sobre [com es duen a terme ressenyes d'accessibilitat](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Instal·la [un mòdul de Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) que pugui carregar les imatges de forma lenta. Aquests mòduls ofereixen la possibilitat d'ajornar les imatges fora de la pantalla per millorar el rendiment."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Pots utilitzar un mòdul per inserir fitxers JavaScript i CSS essencials o per carregar recursos de manera asíncrona mitjançant JavaScript, com el mòdul [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Tingues en compte que les optimitzacions que proporciona aquest mòdul poden afectar el teu lloc web, de manera que és probable que hagis de fer canvis al codi."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Els temes, els mòduls i les especificacions del servidor repercuteixen en el temps de resposta del servidor. Pots buscar un tema més optimitzat, seleccionar amb cura un mòdul d'optimització o actualitzar el servidor. Els servidors d'allotjament haurien d'utilitzar l'opció de desar a la memòria cau del codi d'operacions PHP, l'opció de desar a la memòria cau per reduir els temps de consulta de la base de dades, com ara Redis o Memcached, així com la lògica de l'aplicació optimitzada per preparar les pàgines més ràpidament."
@@ -2778,10 +2862,10 @@
     "message": "Pots utilitzar [estils d'imatges responsives](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) per reduir la mida de les imatges que carregues a la pàgina. Si utilitzes Views per mostrar diversos elements de contingut en una pàgina, pots implementar paginació per limitar el nombre d'elements de contingut que es mostren en una pàgina determinada."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Comprova que hagis activat Aggregate CSS files (Fitxers CSS agregats) a la pàgina Administration > Configuration > Development (Administració > Configuració > Desenvolupament). També pots configurar opcions d'agregació més avançades mitjançant [mòduls addicionals](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) per accelerar el teu lloc web. Per fer-ho, concatenen, redueixen i comprimeixen els estils de CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Comprova que hagis activat Aggregate JavaScript files (Fitxers JavaScript agregats) a la pàgina Administration > Configuration > Development (Administració > Configuració > Desenvolupament). També pots configurar opcions d'agregació més avançades mitjançant [mòduls addicionals](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) per accelerar el teu lloc web. Per fer-ho, concatenen, redueixen i comprimeixen els recursos de JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Pots suprimir les regles de CSS no utilitzades i adjuntar només les biblioteques de Drupal necessàries a la pàgina o al component rellevants d'una pàgina. Per obtenir-ne informació, segueix l'[enllaç a la documentació de Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Per identificar les biblioteques adjuntes que afegeixen fitxers CSS externs, prova d'executar la [cobertura de codi](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) a Chrome DevTools. Pots identificar el tema o el mòdul responsable a partir de l'URL del full d'estil quan l'agregació de CSS estigui desactivada al teu lloc web de Drupal. Posa atenció als temes o els mòduls que tinguin molts fulls d'estil a la llista amb molt de vermell a la cobertura de codi. Un tema o mòdul només hauria de tenir un full d'estil a la cua si es fa servir a la pàgina."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Activa la compressió al teu servidor de Next.js. [Obtén més informació](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Utilitza el component `nuxt/image` i estableix `format=\"webp\"`. [Obtén més informació](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Fes servir l'analitzador de rendiment de DevTools per a React, que utilitza l'API de l'analitzador de rendiment per mesurar el resultat de la renderització dels components. [Obtén més informació](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)."
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Col·loca els vídeos a `VideoBoxes`, personalitza'ls amb `Video Masks` o afegeix-hi `Transparent Videos`. [Obtén més informació](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Penja imatges mitjançant `Wix Media Manager` per assegurar-te que es difonen automàticament com a WebP. Troba [més maneres d'optimitzar](https://support.wix.com/en/article/site-performance-optimizing-your-media) els elements multimèdia del teu lloc web."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Quan [afegeixis codi de tercers](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) a la pestanya `Custom Code` del tauler del teu lloc web, assegura't que es difereixi o carregui a la part final del cos del codi. Sempre que sigui possible, utilitza les [integracions](https://support.wix.com/en/article/about-marketing-integrations) de Wix per inserir eines de màrqueting al teu lloc web. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix utilitza CDN i la memòria cau per difondre respostes tan ràpid com sigui possible per a la majoria de visitants. Et recomanem que [activis manualment la memòria cau](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) per al teu lloc web, sobretot si fas servir `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Revisa tot el codi de tercers que hagis afegit a la pestanya `Custom Code` del tauler del teu lloc web i conserva només els serveis que siguin necessaris per al lloc web. [Obtén més informació](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Pots penjar el GIF en un servei que permeti inserir-lo com un vídeo HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Desa com a JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Obre al visualitzador"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Els valors són estimacions i poden variar. El [resultat del rendiment es calcula](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directament a partir d'aquestes mètriques."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Mostra la traça original"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Mostra la traça"
   },
diff --git a/front_end/third_party/lighthouse/locales/cs.json b/front_end/third_party/lighthouse/locales/cs.json
index 0f34f3b..ed4a66d 100644
--- a/front_end/third_party/lighthouse/locales/cs.json
+++ b/front_end/third_party/lighthouse/locales/cs.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atributy `[aria-*]` odpovídají příslušným rolím"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Když prvek nemá přístupný název, čtečky obrazovek oznamují obecný název a pro jejich uživatele je pak tento prvek v podstatě nepoužitelný. [Jak zajistit, aby příkazové prvky byly přístupnější](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Prvky `button`, `link` a `menuitem` mají přístupné názvy"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Dialogové prvky ARIA bez přístupových názvů mohou uživatelům čteček obrazovky znemožňovat rozeznat účel těchto prvků. [Přečtěte si, jak dialogové prvky ARIA zpřístupnit](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Prvky s atributy `role=\"dialog\"` nebo `role=\"alertdialog\"` nemají přístupné názvy."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Prvky s atributy `role=\"dialog\"` nebo `role=\"alertdialog\"` mají přístupné názvy."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Když je u prvku `<body>` dokumentu nastaveno `aria-hidden=\"true\"`, asistenční technologie, jako jsou čtečky obrazovek, nefungují konzistentně. [Přečtěte si, jak `aria-hidden` ovlivňuje text dokumentu](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Hodnoty atributů `[role]` jsou platné"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Přidáním atributu `role=text` k textovému uzlu rozdělenému značkami umožníte čtečce VoiceOver, aby ho považovala za jednu frázi. Nebudou však oznámeny vybratelné podřízené prvky. [Další informace o atributu `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Prvky s atributem `role=text` mají vybratelné podřízené prvky."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Prvky s atributem `role=text` nemají vypratelné podřízené prvky."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Když přepínací pole nemá přístupný název, čtečky obrazovek oznamují obecný název a pro jejich uživatele je toto pole v podstatě nepoužitelné. [Další informace o přepínacích polích](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ID ARIA jsou unikátní"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Nadpis bez obsahu nebo nepřístupný text brání uživatelům čteček obrazovky v přístupu k informacím o struktuře stránky. [Další informace o nadpisech](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Prvky nadpisů nemají žádný obsah."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Všechny prvky nadpisů mají obsah."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Pole formuláře s několika štítky mohou asistenční technologie, jako jsou čtečky obrazovky, oznamovat matoucím způsobem, protože použijí buď první štítek, poslední štítek, nebo všechny. [Jak ve formulářích používat štítky](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Prvek `<html>` má atribut `[xml:lang]` se stejným základním jazykem, jaký je uveden v atributu `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Odkazy se stejným cílem by měly mít stejný popis, aby uživatelé věděli, k čemu slouží, a mohli se rozhodnout, zda na ně přejdou. [Další informace o identických odkazech](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identické odkazy nemají stejný účel."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Stejné odkazy mají stejný účel."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informativní prvky by měly mít krátký, popisný alternativní text. Dekorativní prvky lze ignorovat pomocí prázdného atributu alt. [Další informace o atributu `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Prvky obrázků mají atributy `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Přidání rozeznatelného a přístupného textu k tlačítkům vstupu může uživatelům čteček obrazovek pomoci pochopit účel tlačítka. [Další informace o tlačítkách vstupu](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Prvky `<input type=\"image\">` mají text `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Štítky zajišťují, aby asistenční technologie (například čtečky obrazovek) správně oznamovaly ovládací prvky formulářů. [Další informace o štítcích prvků formulářů](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "K prvkům formulářů jsou přidružené štítky"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Jeden hlavní orientační bod pomáhá uživatelům čteček obrazovky procházet webovou stránkou. [Další informace o orientačních bodech](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokument nemá hlavní orientační bod."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokument má hlavní orientační bod."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Text s nízkým kontrastem je pro mnoho uživatelů obtížně čitelný nebo nečitelný. Rozlišitelný text odkazů usnadňuje používání slabozrakým uživatelům. [Přečtěte si, jak odkazy odlišit](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Odkazy lze rozlišit pouze podle barvy."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Odkazy lze rozlišit i jinak než podle barvy."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Text odkazů (a náhradní text obrázků, když jsou použité jako odkazy), který je rozeznatelný a jedinečný a který lze vybrat, uživatelům čteček obrazovek usnadňuje procházení stránek. [Jak zajistit přístupnost odkazů](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Prvky `<object>` mají alternativní text"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Prvky formulářů bez efektivních štítků mohou být pro uživatele čteček obrazovek frustrující. [Další informace o prvku `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Prvky select nemají přidružené prvky label."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Prvky select mají přidružené prvky label."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Hodnota větší než 0 naznačuje explicitní řazení navigace. Ačkoli je platná, často vede k chování, které je pro uživatele závislé na asistenčních technologiích nepříjemné. [Další informace o atributu `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Žádný prvek nemá hodnotu `[tabindex]` větší než 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Čtečky obrazovek mají funkce, které usnadňují procházení tabulek. Pokud v tabulkách namísto buněk s atributem `[colspan]` použijete skutečné prvky popisků (caption), může to zlepšit uživatelský dojem uživatelů čteček obrazovky. [Další informace o popiscích](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "V tabulkách jsou k označení popisků použity prvky `<caption>` (namísto buněk s atributem `[colspan]`)."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Místa dotyku nejsou dostatečně velká nebo nemají dostatečné rozestupy."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Místa dotyku jsou dostatečně velká a mají dostatečné rozestupy."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Čtečky obrazovek mají funkce, které usnadňují procházení tabulek. Pokud prvky `<td>` ve velké tabulce (tři nebo více buněk na šířku a výšku) budou mít přidružené záhlaví tabulky, uživatelům čteček obrazovky to usnadní orientaci. [Další informace o záhlavích tabulek](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Stránka neobsahuje prvek <link> s adresou URL manifestu"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nebyl nalezen žádný odpovídající pracovní proces služby. Je možné, že stránku budete muset načíst znovu nebo zkontrolovat, zda rozsah (scope) skriptu pracovní proces služby pro aktuální stránku zahrnuje rozsah a počáteční URL (start_url) z manifestu."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Skript pracovní proces služby nelze zkontrolovat bez pole „start_url“ v manifestu"
   },
@@ -969,7 +1083,7 @@
     "message": "Parametr prefer_related_applications je podporován pouze v beta verzi Chromu a ve stabilních verzích v systému Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Nástroj Lighthouse nedokázal zjistit, zda byl spuštěn skript pracovní proces služby. Zkuste to s novější verzí Chromu."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Schéma adresy URL manifestu ({scheme}) není v systému Android podporováno."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Kumulativní změna rozvržení měří přesuny viditelných prvků v zobrazované oblasti. [Další informace o metrice Kumulativní změna rozvržení](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Doba od interakce k dalšímu vykreslení měří rychlost odezvy stránky, tj. za jak dlouho stránka viditelně zareaguje na uživatelský vstup. [Další informace o metrice Doba od interakce k dalšímu vykreslení](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "První vykreslení obsahu je okamžik vykreslení prvního textu nebo obrázku. [Další informace o metrice První vykreslení obsahu (FCP)](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "První smysluplné vykreslení udává, kdy začne být viditelný primární obsah stránky. [Další informace o metrice První smysluplné vykreslení](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Doba od interakce k dalšímu vykreslení měří rychlost odezvy stránky, tj. za jak dlouho stránka viditelně zareaguje na uživatelský vstup. [Další informace o metrice Doba od interakce k dalšímu vykreslení](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Doba do interaktivity udává, jak dlouho trvá, než stránka začne být plně interaktivní. [Další informace o metrice Doba do interaktivity](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Nepoužívejte několik přesměrování stránky"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Pokud chcete nastavit rozpočet pro množství a velikost zdrojů na stránce, přidejte soubor budget.json. [Další informace o rozpočtech výkonu](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 požadavek • {byteCount, number, bytes} KiB}few{# požadavky • {byteCount, number, bytes} KiB}many{# požadavku • {byteCount, number, bytes} KiB}other{# požadavků • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Používejte málo požadavků a malé velikosti přenosů"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Odkazy na kanonické verze slouží jako návrhy, které adresy URL se mají zobrazovat ve výsledcích vyhledávání. [Další informace o kanonických odkazech](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Počáteční odpověď serveru byla rychlá"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Pracovní proces služby je technologie, která aplikaci umožňuje využívat mnoho funkcí progresivní webové aplikace, jako je režim offline, přidání na plochu nebo oznámení push. [Další informace o skriptech service službě worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Tuto stránku ovládá soubor pracovní proces služby, nebyl ale nalezen atribut `start_url`, protože se manifest nepodařilo analyzovat jako platný soubor JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Tuto stránku ovládá soubor pracovní proces služby, ale atribut `start_url` ({startUrl}) pod soubor pracovní proces služby ({scopeUrl}) nespadá."
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Tuto stránku ovládá soubor pracovní proces služby, ale atribut `start_url` nebyl nalezen, protože nebyl načten žádný manifest."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Tento zdroj má jeden či více souborů pracovní proces služby, ale stránka ({pageUrl}) pod něj nespadá."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Neregistruje soubor pracovní proces služby, který ovládá stránku a `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registruje soubor pracovní proces služby, který ovládá stránku a atribut `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Stylová úvodní obrazovka zajišťuje kvalitní uživatelský dojem při spuštění aplikace z plochy. [Další informace o úvodních obrazovkách](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "Rady a tipy pro odpovídání na recenze"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Tyto kontroly odhalují příležitosti ke [zlepšení přístupnosti webové aplikace](https://developer.chrome.com/docs/lighthouse/accessibility/). Automaticky lze odhalit jen část problémů s přístupností, proto obsah doporučujeme otestovat i ručně."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Tyto položky se týkají oblastí, které v současné době automatické testování nedokáže pokrýt. Další informace najdete v průvodci [provedením kontroly přístupnosti](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Nainstalujte [modul Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), který umožňuje líné načítání obrázků. Tyto moduly umožňují odložit načítání obrázků mimo obrazovku za účelem zvýšení výkonu."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Zvažte použití modulu k vložení kritických stylů CSS a JavaScriptu, případně načítejte zdroje asynchronně pomocí JavaScriptu, což nabízí např. modul [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Upozorňujeme, že optimalizace pomocí těchto modulů může narušit funkčnost vašeho webu. V kódu proto pravděpodobně budete muset provést změny."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Na reakční dobu serveru mají vliv motivy, moduly a specifikace serverů. Zvažte vyhledání optimalizovaného motivu, pečlivý výběr optimalizačního modulu či upgradování serveru. Za účelem zrychlení odezvy databáze doporučujeme na hostujících serverech používat ukládání operačního kódu do mezipaměti pomocí PHP. Slouží k tomu nástroje jako Redis nebo Memcached, případně lze použít optimalizovanou logiku aplikace k rychlejší přípravě stránek."
@@ -2778,10 +2862,10 @@
     "message": "Zvažte použití [responzivních stylů obrázků](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) ke snížení velikosti obrázků načítaných stránkou. Pokud používáte Zobrazení k prezentování více obsahových položek na stránce, zvažte implementaci stránkování za účelem omezení počtu obsahových položek na jedné stránce."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Na stránce Administrace » Konfigurace » Vývoj aktivujte funkci Agregovat soubory CSS. Můžete také nakonfigurovat pokročilejší možnosti agregace prostřednictvím [dodatečných modulů](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search). Díky zřetězení, minifikaci a kompresi stylů CSS tak zrychlíte svůj web."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Na stránce Administrace » Konfigurace » Vývoj aktivujte funkci Agregovat javascriptové soubory. Můžete také nakonfigurovat pokročilejší možnosti agregace prostřednictvím [dodatečných modulů](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search). Díky zřetězení, minifikaci a kompresi javascriptových zdrojů tak zrychlíte svůj web."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Zvažte odstranění nepoužívaných pravidel CSS a k odpovídající stránce nebo komponentě stránky připojte pouze nezbytné knihovny Drupal. Podrobnosti naleznete v [dokumentaci Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Připojené knihovny, které přidávají nadbytečný kód CSS, můžete vyhledat pomocí funkce [„využití kódu“](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) v nástrojích pro vývojáře v Chromu. Odpovědný motiv či modul můžete identifikovat podle adresy URL šablony stylů, když je na vašem webu Drupal deaktivována agregace CSS. Hledejte motivy či moduly, které v seznamu mají mnoho šablon stylů, u nichž je při použití funkce „využití kódu“ velké množství kódu označeno červeně. Motiv či modul by měl šablonu stylů do fronty zařadit jen v případě, že se na stránce opravdu používá."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Zapněte na serveru Next.js kompresi. [Další informace](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Použijte komponentu `nuxt/image` a nastavte `format=\"webp\"`. [Další informace](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Změřte rychlost vykreslování komponent pomocí nástroje React DevTools Profiler, který využívá rozhraní Profiler API. [Další informace](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Umístěte videa do `VideoBoxes`, přizpůsobte je pomocí `Video Masks` nebo přidejte `Transparent Videos`. [Další informace](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Obrázky nahrajte pomocí nástroje `Wix Media Manager`, aby byly automaticky poskytovány ve formátu WebP. [Další způsoby optimalizace médií na webu](https://support.wix.com/en/article/site-performance-optimizing-your-media)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Při [přidávání kódu třetí strany](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) na kartě `Custom Code` na hlavním panelu webu zajistěte, aby jeho načtení bylo odloženo nebo aby se načítal na konci hlavní části kódu. Pokud je to možné, použijte k vložení marketingových nástrojů na svůj web [integrace](https://support.wix.com/en/article/about-marketing-integrations) Wix. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "K co nejrychlejšímu poskytování odpovědí většině návštěvníků využívá Wix sítě CDN a ukládání do mezipaměti. Zvažte [ruční povolení ukládání do mezipaměti](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) pro svůj web, zejména pokud používáte `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Zkontrolujte veškerý kód třetích stran, který jste na svůj web přidali na kartě `Custom Code` na hlavním panelu webu a ponechte pouze služby, které jsou pro váš web nezbytné. [Další informace](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Zvažte nahrání souboru GIF do služby, pomocí které ho bude možné vložit jako video HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Uložit jako JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Otevřít v prohlížeči"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Hodnoty jsou odhady a mohou se lišit. [Skóre výkonu se počítá](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) přímo z těchto metrik."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Zobrazit původní trasovací protokol"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Zobrazit trasovací protokol"
   },
diff --git a/front_end/third_party/lighthouse/locales/da.json b/front_end/third_party/lighthouse/locales/da.json
index a6a38b3..ea14e02 100644
--- a/front_end/third_party/lighthouse/locales/da.json
+++ b/front_end/third_party/lighthouse/locales/da.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]`-attributterne stemmer overens med deres roller"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Hvis et element ikke har et tilgængeligt navn, giver skærmlæsere feltet et generisk navn, så det ikke kan anvendes af brugere, der får læst indhold op af skærmlæsere. [Få flere oplysninger om, hvordan du gør kommandoelementer mere tilgængelige](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elementerne `button`, `link` og `menuitem` har tilgængelige navne"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA-dialogbokselementer uden tilgængelighedsnavne kan forhindre brugere med skærmlæser i at forstå formålet med disse elementer. [Se, hvordan du gør ARIA-dialogboksselementer mere brugervenlige](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementer med `role=\"dialog\"` eller `role=\"alertdialog\"` har ikke tilgængelighedsnavne."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementer med `role=\"dialog\"` eller `role=\"alertdialog\"` har tilgængelighedsnavne."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Hjælpeteknologier såsom skærmlæsere fungerer ikke optimalt, når `aria-hidden=\"true\"` er angivet for dokumentet `<body>`. [Få flere oplysninger om, hvordan `aria-hidden` påvirker dokumentets brødtekst](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]`-værdierne er gyldige"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Hvis du tilføjer `role=text` rundt om en tekstnode opdelt efter opmærkning, kan VoiceOver behandle den som én sætning, men elementets fokuserbare underelementer oplæses ikke. [Få flere oplysninger om attributten `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementer med attributten `role=text` har fokuserbare underelementer."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementer med attributten `role=text` har ikke fokuserbare underelementer."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Hvis et felt med en til/fra-kontakt ikke har et tilgængeligt navn, giver skærmlæsere feltet et generisk navn, så det ikke kan anvendes af brugere, der får læst indhold op af skærmlæsere. [Få flere oplysninger om felter med en til/fra-kontakt](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA-id'erne er unikke"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "En overskrift uden indhold eller med utilgængelig tekst forhindrer brugere med skærmlæser i at få adgang til oplysninger om sidens struktur. [Få flere oplysninger om overskrifter](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Overskriftselementerne har ikke noget indhold."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Alle overskriftselementer har indhold."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Formularfelter med flere etiketter kan blive forvekslet og læst op af hjælpeteknologier såsom skærmlæsere, der anvender den første, den sidste eller alle etiketter. [Få flere oplysninger om, hvordan du bruger formularetiketter](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>`-elementet har en `[xml:lang]`-attribut med det samme basissprog som `[lang]`-attributten."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Links med samme destination skal have den samme beskrivelse, så det er nemmere for brugerne at forstå formålet med linket og beslutte, om de vil tilgå det. [Få flere oplysninger om identiske links](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identiske links har ikke det samme formål."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identiske links har samme formål."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informative elementer bør anvende en kort, beskrivende alternativ tekst. Dekorative elementer kan ignoreres med en tom alt-attribut. [Få flere oplysninger om attributten `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Billedelementerne indeholder `[alt]`-attributter"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Tilføjelse af læsbar og tilgængelig tekst til inputknapper kan hjælpe brugere med skærmlæsere med at forstå formålet med inputknappen. [Få flere oplysninger om inputknapper](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">`-elementerne har `[alt]`-tekst"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Etiketter sikrer, at formularstyring oplæses korrekt af hjælpeteknologier som f.eks. skærmlæsere. [Få flere oplysninger om formularelementetiketter](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Formularelementerne har tilknyttede etiketter"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Et primært landmark hjælper brugere med skærmlæser med at navigere på en webside. [Få flere oplysninger om landmarks](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokumentet har ikke et primært landmark."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokumentet har et primært landmark."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Tekst med lav kontrast er for mange brugere svær eller umulig at læse. Når du gør et links tekst nemmere at læse, får brugere med stærkt nedsat syn en bedre oplevelse. [Se, hvordan du gør links nemmere at læse](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Farver er nødvendige for at kunne skelne mellem links."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Der kan skelnes mellem links uden brug af farver."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Linktekst (og alternativ tekst til billeder, når de bruges som links), der er skelnelig, unik og fokuserbar, gør det nemmere for brugere af skærmlæsere at finde rundt. [Få flere oplysninger om, hvordan du gør links tilgængelige](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>`-elementerne har alternativ tekst"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Formularelementer uden effektive etiketter kan skabe frustrerende oplevelser for brugere med skærmlæsere. [Få flere oplysninger om elementet `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Udvalgte elementer har ikke tilknyttede etiketelementer."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Udvalgte elementer har tilknyttede etiketelementer."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "En værdi over 0 antyder en utvetydig sortering af navigation. Selvom dette teknisk er gyldigt, skaber det ofte en frustrerende oplevelse for brugere, der anvender hjælpeteknologier. [Få flere oplysninger om attributten `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Ingen af elementerne har en `[tabindex]`-værdi, der overstiger 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Skærmlæsere har funktioner, der gør det nemmere at finde rundt i tabeller. Du kan give brugere med skærmlæsere en bedre oplevelse ved at sikre, at tabeller anvender det faktiske caption-elemente i stedet for celler med attributten `[colspan]`. [Få flere oplysninger om caption-elementer](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabeller anvender `<caption>` i stedet for celler med attributten `[colspan]` for at angive et caption-element."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Berøringsområdernes størrelse eller afstand er ikke tilfredsstillende."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Berøringsområdernes størrelse og afstand er tilfredsstillende."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Skærmlæsere har funktioner, der gør det nemmere at finde rundt i tabeller. Du kan give brugere med skærmlæsere en bedre oplevelse ved at sikre, at `<td>`-elementer i en stor tabel (3 eller flere celler i bredde og højde) har en tilknyttet tabeloverskrift. [Få flere oplysninger om tabeloverskrifter](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Siden har ikke nogen <link>-webadresse for manifestet"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Der blev ikke registreret nogen matchende scripttjeneste. Du skal muligvis genindlæse siden eller tjekke, at omfanget af scripttjenesten for den aktuelle side omslutter omfanget og startwebadressen fra manifestet."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Scripttjenesten kunne ikke tjekkes, da feltet \"start_url\" i manifestet ikke var angivet"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications understøttes kun i betaversionen af Chrome og stabile kanaler i Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse kunne ikke fastslå, om der var en scripttjeneste. Prøv med en nyere version af Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Manifestets webadresseskema ({scheme}) understøttes ikke i Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Akkumuleret layoutskift måler synlige elementers bevægelse i det synlige område. [Få flere oplysninger om metric'en Akkumuleret layoutskift](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaktion indtil næste visning måler sidens svartid, dvs. hvor lang tid det tager, før siden reagerer på brugerinput på en synlig måde. [Få flere oplysninger om metric'en for interaktion indtil næste visning](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Første visning af indhold markerer tidspunktet, hvor den første tekst eller det første billede vises. [Få flere oplysninger om metric'en Første visning af indhold](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Første meningsfulde visning måler, hvornår det primære indhold på en side kan ses. [Få flere oplysninger om metric'en Første meningsfulde visning](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaktion indtil næste visning måler sidens svartid, dvs. hvor lang tid det tager, før siden reagerer på brugerinput på en synlig måde. [Få flere oplysninger om metric'en for interaktion indtil næste visning](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Tid inden interaktiv tilstand er den mængde tid, det tager, før siden er helt interaktiv. [Få flere oplysninger om metric'en Tid inden interaktiv tilstand](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Undgå mange sideomdirigeringer"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Tilføj en budget.json-fil for at angive budgetter for antallet af og størrelsen på sideressourcer. [Få flere oplysninger om budgetter for ydeevne](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 anmodning • {byteCount, number, bytes} KiB}one{# anmodning • {byteCount, number, bytes} KiB}other{# anmodninger • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Sørg for, at antallet af anmodninger er lavt, og at overførslerne ikke er for store"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Kanoniske links foreslår, hvilken webadresse der skal vises i søgeresultater. [Få flere oplysninger om kanoniske links](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Den indledende serversvartid var kort"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Scripttjenesten er den teknologi, der gør det muligt for din app at bruge mange funktioner til progressive webapps, f.eks. offline, tilføjelse på startskærme og push-notifikationer. [Få flere oplysninger om scripttjenester](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Denne side styres af en scripttjeneste, men der blev ikke fundet noget `start_url`, fordi manifestet ikke kunne parse den som en gyldig JSON-fil"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Denne side styres af en scripttjeneste, men `start_url` ({startUrl}) er ikke omfattet af scripttjenesten ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Denne side styres af en scripttjeneste, men der blev ikke fundet nogen `start_url`, da der ikke blev hentet noget manifest."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Dette website har én eller flere scripttjenester, men siden ({pageUrl}) er ikke omfattet af disse."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Registrerer ikke en scripttjeneste, der styrer siden og `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registrerer en scripttjeneste, der styrer siden og `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "En splash-skærm med tema sikrer, at brugerne får en god oplevelse, når de starter din app på deres startskærm. [Få flere oplysninger om splash-skærme](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Optimale løsninger"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Disse kontroller fremhæver muligheder for at [forbedre tilgængeligheden af din webapp](https://developer.chrome.com/docs/lighthouse/accessibility/). Det er kun visse tilgængelighedsproblemer, der kan registreres automatisk, og derfor anbefales det også at teste manuelt."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Disse elementer omhandler områder, som et automatisk testværktøj ikke kan dække. Få flere oplysninger ved at læse vores vejledning i, hvordan du [udfører en gennemgang af hjælpefunktioner](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Installer [et Drupal-modul](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) til udskudt indlæsning af billeder. Denne slags moduler gør det muligt at udskyde billeder, som ikke er på skærmen, og på den måde forbedre ydeevnen."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Overvej at bruge et modul til at indlejre vigtig CSS og JavaScript eller indlæse aktiver asynkront via JavaScript som f.eks. modulet [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Vær opmærksom på, at optimeringer via dette modul kan ødelægge dit website. Du bliver derfor sandsynligvis nødt til at foretage kodeændringer."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Temaer, moduler og serverspecifikationer påvirker alle serverens svartid. Overvej at finde et mere optimeret tema, vælge et modul til optimering og/eller opgradere din server. Dine hostingservere skal bruge PHP-opkodningscachelagring, hukommelsescachelagring for at reducere forespørgselstider i databaser, f.eks. Redis eller Memcached, samt optimeret applogik for hurtigere forberedelse af sider."
@@ -2778,10 +2862,10 @@
     "message": "Overvej at bruge [responsive billedformater](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) for at reducere størrelsen på de billeder, der indlæses på din side. Hvis du bruger Visninger til at vise flere indholdselementer på en side, kan du overveje at implementere sideinddeling for at begrænse mængden af indholdselementer, der vises på en bestemt side."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Sørg for, at du har aktiveret \"Sammenlæg CSS-filer\" på siden \"Administration » Konfiguration » Udvikling\". Du kan også konfigurere flere avancerede sammenlægningsmuligheder gennem [yderligere moduler](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) for at gøre dit website hurtigere ved at sammenkæde, formindske og komprimere CSS-formater."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Sørg for, at du har aktiveret \"Sammenlæg JavaScript-filer\" på siden \"Administration » Konfiguration » Udvikling\". Du kan også konfigurere flere avancerede sammenlægningsmuligheder gennem [yderligere moduler](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) for at gøre dit website hurtigere ved at sammenkæde, formindske og komprimere JavaScript-aktiver."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Overvej at fjerne ubrugte CSS-regler og kun vedhæfte de nødvendige Drupal-samlinger til den relevante side eller komponent på en side. Du kan finde flere oplysninger via [linket til Drupal-dokumentation](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Hvis du vil identificere vedhæftede samlinger, der tilføjer irrelevant CSS, kan du prøve at køre [kodedækning](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) i Chrome DevTools. Du kan identificere det problematiske tema/modul via webadressen for typografiarket, når CSS-sammenlægning er deaktiveret på dit Drupal-website. Kig efter temaer/moduler med mange typografiark på listen, som indeholder meget rødt i kodedækningen. Et tema/modul bør kun sætte et typografiark i kø, hvis det rent faktisk anvendes på siden."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Aktivér komprimering på din Next.js-server. [Få flere oplysninger](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Brug komponenten `nuxt/image`, og angiv `format=\"webp\"`. [Få flere oplysninger](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Brug React DevTools Profiler, som anvender Profiler API til at måle effektiviteten og gengivelsen af dine komponenter. [Få flere oplysninger.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Placer videoer i `VideoBoxes`, tilpas dem ved hjælp af `Video Masks`, eller tilføj `Transparent Videos`. [Få flere oplysninger](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Upload billeder via `Wix Media Manager` for at sikre, at de vises som WebP automatisk. Find [flere måder at optimere](https://support.wix.com/en/article/site-performance-optimizing-your-media) dit websites medier på."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Når du [tilføjer tredjepartskode](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) på fanen `Custom Code` i dit websites kontrolpanel, skal du sørge for, at koden er udskudt eller indlæst i slutningen af koden. Hvor det er muligt, skal du bruge Wix' [integrationer](https://support.wix.com/en/article/about-marketing-integrations) til at integrere marketingværktøjer på dit website. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix anvender CDN'er og cachelagring til at vise svar så hurtigt som muligt for de fleste besøgende. Overvej at [ aktivere cachelagring manuelt](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) for dit website, især hvis du bruger `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Gennemgå al tredjepartskode, du har føjet til dit website, på fanen `Custom Code` i dit websites kontrolpanel, og behold kun de tjenester, der er nødvendige for dit website. [Få flere oplysninger](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Overvej at uploade din gif til en tjeneste, hvor den kan indlejres som en HTML5-video."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Gem som JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Åbn i fremviser"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Værdierne er estimater og kan variere. [Resultatet beregnes](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) direkte på baggrund af disse metrics."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Se oprindeligt spor"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Se spor"
   },
diff --git a/front_end/third_party/lighthouse/locales/de.json b/front_end/third_party/lighthouse/locales/de.json
index 4593cf9..21e5f62 100644
--- a/front_end/third_party/lighthouse/locales/de.json
+++ b/front_end/third_party/lighthouse/locales/de.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]`-Attribute entsprechen ihren Rollen"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Wenn ein Element keinen barrierefreien Namen hat, wird es von Screenreadern mit einer allgemeinen Bezeichnung angesagt. Dadurch ist es für Nutzer, die auf Screenreader angewiesen sind, unbrauchbar. [Informationen zum barrierefreieren Gestalten von Befehlselementen.](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`-, `link`- und `menuitem`-Elemente haben zugängliche Namen"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA-Dialogelemente ohne barrierefreie Namen können Nutzer von Screenreadern daran hindern, den Zweck dieser Elemente zu erkennen. [Informationen zum Verbessern der Barrierefreiheit von ARIA-Dialogelementen](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elemente mit `role=\"dialog\"` oder `role=\"alertdialog\"` haben keinen barrierefreien Namen."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elemente mit `role=\"dialog\"` oder `role=\"alertdialog\"` haben barrierefreie Namen."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Hilfstechnologien wie Screenreader funktionieren nicht richtig, wenn für den `<body>` des Dokuments `aria-hidden=\"true\"` festgelegt ist. [Informationen zu den Auswirkungen von `aria-hidden` auf den Textbereich des Dokuments.](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]`-Werte sind gültig"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Wenn du einen Textknoten, der durch Markup aufgeteilt ist, mit `role=text` auszeichnest, kann VoiceOver diesen als eine Wortgruppe behandeln. Die fokussierbaren Nachfolgerelemente des Elements werden jedoch nicht angesagt. [Weitere Informationen zum Attribut `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elemente mit dem Attribut „`role=text`“ haben fokussierbare Nachfolgerelemente."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elemente mit dem Attribut „`role=text`“ haben keine fokussierbaren Nachfolgerelemente."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Wenn eine Ein-/Aus-Schaltfläche keinen barrierefreien Namen hat, wird sie von Screenreadern mit einer allgemeinen Bezeichnung angesagt. Dadurch ist sie für Nutzer, die auf Screenreader angewiesen sind, unbrauchbar. [Weitere Informationen zu Ein-/Aus-Schaltflächen.](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA-IDs sind eindeutig"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Eine Überschrift ohne Inhalt oder nicht zugänglicher Text verhindert, dass Nutzer von Screenreadern auf Informationen in der Seitenstruktur zugreifen. [Weitere Informationen zu Überschriften](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "heading-Elemente haben keinen Inhalt."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Alle heading-Elemente haben einen Inhalt."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Formularfelder mit mehreren Labels werden von Hilfstechnologien wie Screenreadern unter Umständen missverständlich angesagt, da sie entweder das erste, das letzte oder alle Labels verwenden. [Informationen zur Verwendung von Formularlabels.](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Das `<html>`-Element hat ein `[xml:lang]`-Attribut mit derselben Basissprache wie das `[lang]`-Attribut."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Links mit demselben Ziel sollten dieselbe Beschreibung haben, damit Nutzer den Zweck des Links besser verstehen und entscheiden können, ob sie ihm folgen möchten. [Weitere Informationen zu identischen Links](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identische Links haben nicht den gleichen Zweck."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identische Links haben denselben Zweck."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Für informative Elemente sollte ein kurzer, beschreibenden alternativer Text verwendet werden. Dekorative Elemente können mit einem leeren ALT-Attribut ignoriert werden. [Weitere Informationen zum Attribut `alt`.](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Bildelemente verfügen über `[alt]`-Attribute"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Das Hinzufügen von erkennbarem, zugänglichem Text zu Eingabeschaltflächen hilft den Nutzern von Screenreadern möglicherweise, den Zweck der entsprechenden Schaltfläche zu verstehen. [Weitere Informationen zu Eingabeschaltflächen](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">`-Elemente haben `[alt]`-Text"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Durch Labels wird gewährleistet, dass Steuerelemente für Formulare von Hilfstechnologien wie Screenreadern richtig angesagt werden. [Weitere Informationen zu Labels für Formularelemente.](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Formularelemente sind mit Labels verknüpft"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Eine Hauptmarkierung hilft Nutzern von Screenreadern, Webseiten zu bedienen. [Weitere Informationen zu Markierungen](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokument hat keine Hauptmarkierung."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokument hat eine Hauptmarkierung."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Text mit geringem Kontrast ist für viele Nutzer schlecht oder gar nicht lesbar. Gut erkennbarer Linktext erhöht die Nutzerfreundlichkeit für Nutzer mit eingeschränktem Sehvermögen. [Informationen dazu, wie Links gut erkennbar gemacht werden](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Links sind durch Farbe erkennbar."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Links sind ohne Farbe erkennbar."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Linktext, der erkennbar, einzigartig und fokussierbar ist, erleichtert Screenreader-Nutzern die Verwendung. Dies gilt auch für alternativen Text für Bilder, die als Links verwendet werden. [Informationen zu barrierefreien Links.](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>`-Elemente haben alternativen Text"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "form-Elemente ohne wirkungsvolle Labels können für Nutzer von Screenreadern frustrierend sein. [Weitere Informationen zum Element „`select`“](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "select-Elemente haben keine zugehörigen label-Elemente."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "select-Elemente haben zugehörige label-Elemente."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Ein Wert größer als 0 impliziert eine explizite Navigationsanordnung. Das ist zwar technisch möglich, aber für Nutzer, die auf Hilfstechnologien angewiesen sind, häufig frustrierend. [Weitere Informationen zum Attribut `tabindex`.](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Kein Element hat einen `[tabindex]`-Wert größer als 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Screenreader bieten Funktionen, die die Navigation in Tabellen vereinfachen. Wenn du dafür sorgst, dass Tabellen das tatsächliche Untertitelelement anstelle von Zellen mit dem `[colspan]`-Attribut verwenden, kann das für Screenreader-Nutzer hilfreich sein. [Weitere Informationen zu Untertiteln.](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabellen verwenden `<caption>` anstelle von Zellen mit dem `[colspan]`-Attribut, um Untertitel anzugeben."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Berührungszielbereiche haben eine unzureichende Größe oder einen unzureichenden Abstand."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Berührungszielbereiche haben eine ausreichende Größe und ausreichend Abstand."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Screenreader bieten Funktionen, die die Navigation in Tabellen vereinfachen. Wenn du `<td>`-Elementen in einer großen Tabelle (mindestens 3 Zellen in Breite und Höhe) eine entsprechende Überschrift gibst, kann das für Screenreader-Nutzer hilfreich sein. [Weitere Informationen zu Tabellenüberschriften](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Die Seite hat keine Manifest-URL <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Es wurde kein passender Service Worker gefunden. Versuche, die Seite zu aktualisieren oder prüfe, ob der Bereich des Service Workers für die aktuelle Seite den Bereich und die Start-URL des Manifests umfasst."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Service Worker konnte ohne das Feld „start_url“ im Manifest nicht geprüft werden"
   },
@@ -969,7 +1083,7 @@
     "message": "„prefer_related_applications“ wird nur in Chrome Beta und stabilen Versionen von Android unterstützt."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse konnte nicht feststellen, ob es einen Service Worker gibt. Bitte versuche es mit einer neueren Version von Chrome noch einmal."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Das Manifest-URL-Schema ({scheme}) wird unter Android nicht unterstützt."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "„Cumulative Layout Shift“ misst die Bewegung sichtbarer Elemente innerhalb des Darstellungsbereichs. [Weitere Informationen zum Messwert „Cumulative Layout Shift“.](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "„Interaction to Next Paint“ misst die Reaktionsfähigkeit der Seite, d. h. wie lange die Seite braucht, um sichtbar auf Nutzereingaben zu reagieren. [Weitere Informationen zum Messwert „Interaction to Next Paint“.](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "„First Contentful Paint“ gibt an, wann der erste Text oder das erste Bild gerendert wird. [Weitere Informationen zum Messwert „First Contentful Paint“.](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "„Inhalte weitgehend gezeichnet“ gibt an, wann die Hauptinhalte einer Seite sichtbar sind. [Weitere Informationen zum Messwert „Inhalte weitgehend gezeichnet“.](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "„Interaction to Next Paint“ misst die Reaktionsfähigkeit der Seite, d. h. wie lange die Seite braucht, um sichtbar auf Nutzereingaben zu reagieren. [Weitere Informationen zum Messwert „Interaction to Next Paint“.](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "„Zeit bis Interaktivität“ entspricht der Zeit, die vergeht, bis die Seite vollständig interaktiv ist. [Weitere Informationen zum Messwert „Zeit bis Interaktivität“.](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Mehrere Weiterleitungen auf die Seite vermeiden"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Füge zum Einrichten von Budgets für die Anzahl und Größe von Seitenressourcen eine budget.json-Datei hinzu. [Weitere Informationen zu Leistungsbudgets.](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 Anfrage • {byteCount, number, bytes} KiB}other{# Anfragen • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Halte die Anfrageanzahl niedrig und die Übertragungsgröße gering"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Über kanonische Links wird angegeben, welche URL in den Suchergebnissen angezeigt werden soll. [Weitere Informationen zu kanonischen Links.](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Kurze Erstreaktionszeit des Servers"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Der Service Worker ermöglicht es deiner App, viele Funktionen von progressiven Web-Apps zu nutzen, beispielsweise den Offlinemodus, das Hinzufügen zum Startbildschirm und Push-Benachrichtigungen. [Weitere Informationen.](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Diese Seite wird von einem Service Worker kontrolliert. Es wurde jedoch keine `start_url` gefunden, weil das Manifest nicht als gültige JSON-Datei geparst werden konnte."
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Diese Seite wird zwar von einem Service Worker kontrolliert, die `start_url` ({startUrl}) liegt jedoch nicht in dessen Zuständigkeitsbereich ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Diese Seite wird zwar von einem Service Worker kontrolliert, es wurde jedoch keine `start_url` gefunden, da kein Manifest abgerufen wurde."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Dieser Ursprung verfügt über mindestens einen Service Worker. Die Seite ({pageUrl}) liegt jedoch nicht in dessen Zuständigkeitsbereich."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Es wurde kein Service Worker erkannt, der die Seite und `start_url` kontrolliert"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Es wurde ein Service Worker erkannt, der die Seite und `start_url` kontrolliert."
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Wenn du deinen Startbildschirm passend zum Design deiner App gestaltest, vermittelst du den Nutzern schon beim Ladevorgang einen hochwertigen Eindruck. [Weitere Informationen zu Startbildschirmen.](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "Best Practices"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Mit diesen Prüfungen erfährst du, [wie du die Barrierefreiheit deiner Web-App verbesserst](https://developer.chrome.com/docs/lighthouse/accessibility/). Nur bestimmte Probleme mit der Barrierefreiheit können durch automatisierte Tests erkannt werden. Deshalb ist es empfehlenswert, zusätzlich manuelle Tests durchzuführen."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Diese Prüfungen sind für Bereiche vorgesehen, für die automatische Testtools nicht geeignet sind. Weitere Informationen findest du in unserem Leitfaden zur [Durchführung einer Prüfung auf Barrierefreiheit](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Du kannst ein [Drupal-Modul](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) installieren, das das Lazy Loading von Bildern erlaubt. Solche Module bieten die Möglichkeit, nicht sichtbare Bilder aufzuschieben, um die Leistung zu verbessern."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Du hast die Möglichkeit, ein Modul zu verwenden, um wichtiges CSS und JavaScript einzubetten. Du kannst Assets auch asynchron über JavaScript laden, beispielsweise mit dem Modul [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Beachte, dass über dieses Modul bereitgestellte Optimierungen dazu führen können, dass deine Website nicht funktioniert. Daher musst du wahrscheinlich Änderungen am Code vornehmen."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Sowohl Designs, Module als auch Serverspezifikationen tragen zur Serverantwortzeit bei. Versuche, ein noch weiter optimiertes Design zu finden, wähle ein geeignetes Optimierungsmodul aus und/oder upgrade deinen Server. Deine Hosting-Server sollten PHP-Opcode-Caching und Memory-Caching wie Redis oder Memcached zur Verkürzung der Datenbankabfragezeiten sowie optimierte Anwendungslogik zur schnelleren Bereitstellung von Seiten nutzen."
@@ -2778,10 +2862,10 @@
     "message": "Du hast die Möglichkeit, [responsive Bildstile (Responsive Image Styles)](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) zu verwenden, um die Größe der auf deiner Seite geladenen Bilder zu reduzieren. Wenn du Views verwendest, um mehrere Inhaltselemente auf einer Seite anzuzeigen, kannst du mithilfe von Paginierung die Anzahl der auf einer bestimmten Seite eingeblendeten Inhaltselemente begrenzen."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Achte darauf, dass die Option \"Aggregate CSS files\" (CSS-Dateien aggregieren) unter \"Administration\" (Verwalten) > \"Configuration\" (Konfiguration) > \"Development\" (Entwicklung) aktiviert ist. Durch [zusätzliche Module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) kannst du auch erweiterte Aggregierungsoptionen konfigurieren, die CSS-Stile verketten, reduzieren und komprimieren, um deine Website zu beschleunigen."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Achte darauf, dass die Option \"Aggregate JavaScript files\" (JavaScript-Dateien aggregieren) unter \"Administration\" (Verwalten) > \"Configuration\" (Konfiguration) > \"Development\" (Entwicklung) aktiviert ist. Durch [zusätzliche Module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) kannst du auch erweiterte Aggregierungsoptionen konfigurieren, die JavaScript-Assets verketten, reduzieren und komprimieren, um deine Website zu beschleunigen."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Du kannst ungenutzte CSS-Regeln entfernen und nur die benötigten Drupal-Bibliotheken zu relevanten Seiten oder Seitenkomponenten hinzufügen. Weitere Informationen findest du in der [Drupal-Dokumentation](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Wenn du die angehängten Bibliotheken ermitteln möchtest, über die irrelevantes CSS hinzugefügt wird, kannst du das Prüftool zur [Codeabdeckung](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in den Chrome-Entwicklertools verwenden. Das entsprechende Design/Modul kannst du anhand der URL des Stylesheets erkennen, wenn die CSS-Aggregation auf deiner Drupal-Website deaktiviert ist. Suche in der Liste nach Designs/Modulen mit vielen Stylesheets, bei denen im Prüftool zur Codeabdeckung viel nicht verwendeter Code (markiert in Rot) angezeigt wird. Ein Stylesheet sollte nur dann in ein Design/Modul aufgenommen werden, wenn es auch tatsächlich auf der Seite verwendet wird."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Aktiviere die Komprimierung auf deinem Next.js-Server. [Weitere Informationen](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Du kannst die Komponente „`nuxt/image`“ verwenden und „`format=\"webp\"`“ festlegen. [Weitere Informationen](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Verwende den React DevTools Profiler. Dieser greift auf die Profiler API zurück, um die Rendering-Leistung deiner Komponenten zu messen. [Weitere Informationen.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Du kannst Videos in `VideoBoxes` platzieren, mit `Video Masks` anpassen oder `Transparent Videos` hinzufügen. [Weitere Informationen](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Lade Bilder mit `Wix Media Manager` hoch, damit sie automatisch als WebP bereitgestellt werden. [Weitere Möglichkeiten zur Optimierung der Medien deiner Website](https://support.wix.com/en/article/site-performance-optimizing-your-media)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Wenn du auf dem Tab „`Custom Code`“ auf dem Dashboard deiner Website [Drittanbietercode hinzufügst](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site), muss dieser am Ende des Codeblocks zurückgestellt oder geladen werden. Verwende nach Möglichkeit die [Integrationen von Wix](https://support.wix.com/en/article/about-marketing-integrations), um Marketingtools auf deiner Website einzubetten. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "In Wix kommen CDNs und Caching zum Einsatz, um den meisten Besuchern Antworten so schnell wie möglich bereitzustellen. Du kannst [Caching für deine Website manuell aktivieren](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed), was vor allem dann ratsam ist, wenn du `Velo` verwendest."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Prüfe Drittanbieter-Code, den du deiner Website auf dem Tab „`Custom Code`“ des Dashboards hinzugefügt hast, und behalte nur die Dienste bei, die für deine Website erforderlich sind. [Weitere Informationen](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Du hast die Möglichkeit, dein GIF bei einem Dienst hochzuladen, der dafür sorgt, dass es als HTML5-Video eingebettet werden kann."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Als JSON speichern"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Im Viewer öffnen"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Die Werte sind geschätzt und können variieren. Die [Leistungsbewertung](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) wird direkt aus diesen Messwerten berechnet."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Ursprünglichen Trace anzeigen"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Trace anzeigen"
   },
diff --git a/front_end/third_party/lighthouse/locales/el.json b/front_end/third_party/lighthouse/locales/el.json
index 1a0f1dc..9c1bed8 100644
--- a/front_end/third_party/lighthouse/locales/el.json
+++ b/front_end/third_party/lighthouse/locales/el.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Τα χαρακτηριστικά `[aria-*]` αντιστοιχούν στους ρόλους τους"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Όταν ένα στοιχείο δεν έχει προσβάσιμο όνομα, οι αναγνώστες οθόνης το περιγράφουν με ένα γενικό όνομα, με αποτέλεσμα να μην μπορεί να χρησιμοποιηθεί από χρήστες που βασίζονται σε αναγνώστες οθόνης. [Μάθετε πώς μπορείτε να κάνετε πιο προσιτά τα στοιχεία εντολών](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Τα στοιχεία `button`, `link` και `menuitem` έχουν προσβάσιμα ονόματα"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Τα στοιχεία παραθύρου διαλόγου ARIA χωρίς προσβάσιμα ονόματα ενδέχεται να εμποδίζουν τους χρήστες του αναγνώστη οθόνης να διακρίνουν τον σκοπό αυτών των στοιχείων. [Μάθετε πώς μπορείτε να κάνετε τα στοιχεία διαλόγου ARIA πιο προσβάσιμα](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Τα στοιχεία με `role=\"dialog\"` ή `role=\"alertdialog\"` δεν έχουν προσβάσιμα ονόματα."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Τα στοιχεία με `role=\"dialog\"` ή `role=\"alertdialog\"` έχουν προσβάσιμα ονόματα."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Οι τεχνολογίες υποβοήθησης, όπως οι αναγνώστες οθόνης, λειτουργούν με μη συνεπή τρόπο όταν το `aria-hidden=\"true\"` έχει οριστεί στο έγγραφο `<body>`. [Μάθετε πώς το `aria-hidden` επηρεάζει το σώμα του εγγράφου](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Οι τιμές `[role]` είναι έγκυρες"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Η προσθήκη του `role=text` γύρω από έναν κόμβο κειμένου που διαχωρίζεται κατά σήμανση επιτρέπει στο VoiceOver να το μεταχειρίζεται ως φράση, αλλά τα θυγατρικά στοιχεία με δυνατότητα εστίασης δεν θα ανακοινώνονται. [Μάθετε περισσότερα σχετικά με το χαρακτηριστικό `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Τα στοιχεία με το χαρακτηριστικό `role=text` έχουν θυγατρικά στοιχεία με δυνατότητα εστίασης."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Τα στοιχεία με το χαρακτηριστικό `role=text` δεν έχουν θυγατρικά στοιχεία με δυνατότητα εστίασης."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Όταν ένα πεδίο εναλλαγής δεν έχει προσβάσιμο όνομα, οι αναγνώστες οθόνης το περιγράφουν με ένα γενικό όνομα, με αποτέλεσμα να μην μπορεί να χρησιμοποιηθεί από χρήστες που βασίζονται σε αναγνώστες οθόνης. [Μάθετε περισσότερα σχετικά με τα πεδία εναλλαγής](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Τα αναγνωριστικά ARIA είναι μοναδικά"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Μια επικεφαλίδα χωρίς περιεχόμενο ή με μη προσβάσιμο κείμενο εμποδίζει την πρόσβαση των χρηστών του αναγνώστη οθόνης σε πληροφορίες σχετικά με τη δομή της σελίδας. [Μάθετε περισσότερα σχετικά με τις κεφαλίδες](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Τα στοιχεία κεφαλίδας δεν διαθέτουν περιεχόμενο."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Όλα τα στοιχεία κεφαλίδας περιλαμβάνουν περιεχόμενο."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Τα πεδία φόρμας με πολλές ετικέτες ενδέχεται να ανακοινώνονται με τρόπο που δημιουργεί σύγχυση στους χρήστες τεχνολογιών υποβοήθησης, όπως με τους αναγνώστες οθόνης που χρησιμοποιούν είτε την πρώτη, είτε την τελευταία, είτε όλες τις ετικέτες. [Μάθετε πώς μπορείτε να χρησιμοποιήσετε ετικέτες φόρμας](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Το στοιχείο `<html>` έχει ένα χαρακτηριστικό `[xml:lang]` με την ίδια βασική γλώσσα με το χαρακτηριστικό `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Οι σύνδεσμοι με τον ίδιο προορισμό θα πρέπει να έχουν την ίδια περιγραφή, ώστε να βοηθούν τους χρήστες να κατανοήσουν τον σκοπό του συνδέσμου και να αποφασίσουν αν θα τον ακολουθήσουν. [Μάθετε περισσότερα σχετικά με τους πανομοιότυπους συνδέσμους](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Οι πανομοιότυποι σύνδεσμοι δεν έχουν τον ίδιο σκοπό."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Οι πανομοιότυποι σύνδεσμοι έχουν τον ίδιο σκοπό."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Τα πληροφοριακά στοιχεία θα πρέπει να στοχεύουν σε σύντομο και περιγραφικό εναλλακτικό κείμενο. Τα διακοσμητικά στοιχεία μπορούν να παραβλεφθούν με ένα κενό χαρακτηριστικό alt. [Μάθετε περισσότερα σχετικά με το χαρακτηριστικό `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Τα στοιχεία εικόνας έχουν χαρακτηριστικά `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Η προσθήκη ευανάγνωστου και προσβάσιμου κειμένου στα κουμπιά εισόδου μπορεί να βοηθήσει τους χρήστες του αναγνώστη οθόνης να κατανοήσουν τον σκοπό των κουμπιών. [Μάθετε περισσότερα σχετικά με τα κουμπιά εισόδου](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Τα στοιχεία `<input type=\"image\">` έχουν κείμενο `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Οι ετικέτες διασφαλίζουν ότι οι τεχνολογίες υποβοήθησης, όπως οι αναγνώστες οθόνης, εκφωνούν σωστά τα στοιχεία ελέγχου φόρμας. [Μάθετε περισσότερα σχετικά με τις ετικέτες στοιχείων φόρμας](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Τα στοιχεία φόρμας έχουν συσχετισμένες ετικέτες"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Ένα κύριο ορόσημο βοηθά τους χρήστες του αναγνώστη οθόνης να πλοηγηθούν σε μια ιστοσελίδα. [Μάθετε περισσότερα σχετικά με τα ορόσημα](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Το έγγραφο δεν διαθέτει κύριο ορόσημο."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Το έγγραφο έχει ένα κύριο ορόσημο."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Ένα κείμενο χαμηλής αντίθεσης είναι δύσκολο ή αδύνατο να αναγνωστεί. Το κείμενο συνδέσμου που είναι ευανάγνωστο βελτιώνει την εμπειρία για τους χρήστες με χαμηλή όραση. [Μάθετε πώς μπορείτε να κάνετε τους συνδέσμους διακριτούς](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Οι σύνδεσμοι βασίζονται στο χρώμα για να είναι διακριτοί."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Οι σύνδεσμοι διακρίνονται χωρίς να βασίζονται στο χρώμα."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Το κείμενο συνδέσμων (και το εναλλακτικό κείμενο για εικόνες όταν χρησιμοποιούνται ως σύνδεσμοι) που είναι διακριτό, μοναδικό και έχει δυνατότητα εστίασης βελτιώνει την εμπειρία πλοήγησης για τους χρήστες των αναγνωστών οθόνης. [Μάθετε πώς μπορείτε να κάνετε προσβάσιμους τους συνδέσμους](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Τα στοιχεία `<object>` έχουν εναλλακτικό κείμενο"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Τα στοιχεία φόρμας χωρίς αποτελεσματικές ετικέτες μπορούν να δημιουργήσουν ενοχλητικές εμπειρίες για τους χρήστες του αναγνώστη οθόνης. [Μάθετε περισσότερα σχετικά με το στοιχείο `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Κάποια στοιχεία δεν έχουν συσχετισμένα στοιχεία ετικέτας."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Ορισμένα επιλεγμένα στοιχεία έχουν συσχετισμένα στοιχεία ετικέτας."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Μια τιμή μεγαλύτερη από 0 υποδηλώνει μια ρητή σειρά πλοήγησης. Εάν και ορθό από τεχνικής άποψης, αυτό συχνά επηρεάζει αρνητικά την εμπειρία των χρηστών που βασίζονται στις τεχνολογίες υποβοήθησης. [Μάθετε περισσότερα σχετικά με το χαρακτηριστικό `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Κανένα στοιχείο δεν έχει τιμή `[tabindex]` μεγαλύτερη από 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Οι αναγνώστες οθόνης έχουν λειτουργίες που διευκολύνουν την πλοήγηση στους πίνακες. Διασφαλίζοντας ότι οι πίνακες χρησιμοποιούν το πραγματικό στοιχείο υποτίτλων αντί για κελιά με το χαρακτηριστικό `[colspan]`, ενδέχεται να βελτιωθεί η εμπειρία για τους χρήστες των αναγνωστών οθόνης. [Μάθετε περισσότερα σχετικά με τους υπότιτλους](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Οι πίνακες χρησιμοποιούν το στοιχείο `<caption>` αντί για κελιά με το χαρακτηριστικό `[colspan]`, για να υποδεικνύουν έναν υπότιτλο."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Οι στόχοι αφής δεν έχουν επαρκές μέγεθος ή απόσταση."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Οι στόχοι αφής έχουν επαρκές μέγεθος και απόσταση."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Οι αναγνώστες οθόνης έχουν λειτουργίες που διευκολύνουν την πλοήγηση στους πίνακες. Διασφαλίζοντας ότι τα στοιχεία `<td>` σε έναν μεγάλο πίνακα (3 ή περισσότερα κελιά σε πλάτος και ύψος) έχουν μια συσχετισμένη κεφαλίδα πίνακα, ενδέχεται να βελτιωθεί η εμπειρία για τους χρήστες των αναγνωστών οθόνης. [Μάθετε περισσότερα σχετικά με τις κεφαλίδες πίνακα](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Η σελίδα δεν περιέχει <link> URL μανιφέστου"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Δεν εντοπίστηκε service worker που να αντιστοιχεί. Μπορεί να χρειαστεί να επαναφορτώσετε τη σελίδα ή να ελέγξετε ότι το εύρος του service worker για την τρέχουσα σελίδα περικλείει το εύρος του URL έναρξης από το μανιφέστο."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Δεν ήταν δυνατός ο έλεγχος του service worker χωρίς πεδίο \"start_url\" στο μανιφέστο."
   },
@@ -969,7 +1083,7 @@
     "message": "Η παράμετρος prefer_related_applications υποστηρίζεται μόνο σε κανάλια Chrome Beta και κανάλια σταθερής έκδοσης σε Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Το Lighthouse δεν κατόρθωσε να ανιχνεύσει service worker. Δοκιμάστε με μια νεότερη έκδοση του Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Το URL μανιφέστου ({scheme}) δεν υποστηρίζεται στο Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Οι Συνολικές αλλαγές διάταξης μετρούν την κίνηση των ορατών στοιχείων εντός της θύρας προβολής. [Μάθετε περισσότερα σχετικά με τη μέτρηση Συνολικές αλλαγές διάταξης](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Το Interaction to Next Paint μετρά την ανταπόκριση της σελίδας και τον χρόνο που χρειάζεται η σελίδα για να ανταποκριθεί εμφανώς στην εισαγωγή στοιχείων από τους χρήστες. [Μάθετε περισσότερα σχετικά με τη μέτρηση Interaction to Next Paint](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Η Πρώτη σχεδίαση περιεχομένου (FCP) επισημαίνει πότε σχεδιάζεται το πρώτο κείμενο ή η πρώτη εικόνα. [Μάθετε περισσότερα σχετικά με τη μέτρηση Πρώτη σχεδίαση περιεχομένου (FCP)](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Η Πρώτη χρήσιμη μορφή υπολογίζει πότε καθίσταται ορατό το κύριο περιεχόμενο μιας σελίδας. [Μάθετε περισσότερα σχετικά με τη μέτρηση Πρώτη χρήσιμη μορφή](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Το Interaction to Next Paint μετρά την ανταπόκριση της σελίδας και τον χρόνο που χρειάζεται η σελίδα για να ανταποκριθεί εμφανώς στην εισαγωγή στοιχείων από τους χρήστες. [Μάθετε περισσότερα σχετικά με τη μέτρηση Interaction to Next Paint](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Ο χρόνος για Αλληλεπίδραση είναι το χρονικό διάστημα που απαιτείται προκειμένου η σελίδα να γίνει πλήρως διαδραστική. [Μάθετε περισσότερα σχετικά με τη μέτρηση Χρόνος για Αλληλεπίδραση](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Αποφυγή ανακατευθύνσεων πολλών σελίδων"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Για τον ορισμό προϋπολογισμών για την ποσότητα και το μέγεθος των πόρων σελίδας, προσθέστε ένα αρχείο budget.json. [Μάθετε περισσότερα σχετικά με τους προϋπολογισμούς απόδοσης](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 αίτημα • {byteCount, number, bytes} KiB}other{# αιτήματα • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Φροντίστε να διατηρείτε το πλήθος των αιτημάτων χαμηλό και το μέγεθος των μεταφορών μικρό"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Οι κανονικοί σύνδεσμοι προτείνουν το URL που πρέπει να εμφανιστεί στα αποτελέσματα αναζήτησης. [Μάθετε περισσότερα σχετικά με τους κανονικούς συνδέσμους](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Ο αρχικός χρόνος απόκρισης διακομιστή ήταν σύντομος"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Το service worker είναι η τεχνολογία που επιτρέπει στην εφαρμογή σας να χρησιμοποιεί πολλές λειτουργίες προηγμένων εφαρμογών ιστού, όπως είναι η λειτουργία εκτός σύνδεσης, η προσθήκη στην αρχική οθόνη και οι ειδοποιήσεις push. [Μάθετε περισσότερα σχετικά με τα service worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Αυτή η σελίδα ελέγχεται από ένα service worker, αλλά δεν βρέθηκε κανένα `start_url` επειδή το μανιφέστο απέτυχε να αναλυθεί ως έγκυρο JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Αυτή η σελίδα ελέγχεται από ένα service worker, αλλά το `start_url` ({startUrl}) δεν βρίσκεται στο εύρος του service worker ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Αυτή η σελίδα ελέγχεται από ένα service worker, αλλά δεν βρέθηκε κανένα `start_url` επειδή δεν έγινε λήψη μανιφέστου."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Αυτή η προέλευση διαθέτει ένα περισσότερα service worker, αλλά η σελίδα ({pageUrl}) βρίσκεται εκτός εύρους."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Δεν καταγράφει service worker που ελέγχει τη σελίδα και το `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Καταγράφει ένα service worker που ελέγχει μια σελίδα και το `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Μια θεματική οθόνη εκκίνησης διασφαλίζει μια εμπειρία υψηλής ποιότητας όταν οι χρήστες εκκινούν την εφαρμογή σας από την αρχική οθόνη τους. [Μάθετε περισσότερα σχετικά με τις οθόνες εκκίνησης](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Βέλτιστες πρακτικές"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Αυτοί οι έλεγχοι επισημαίνουν ευκαιρίες για τη [βελτίωση της προσβασιμότητας της εφαρμογής ιστού σας](https://developer.chrome.com/docs/lighthouse/accessibility/). Μόνο ένα μέρος των ζητημάτων προσβασιμότητας μπορεί να εντοπιστεί αυτόματα. Ως εκ τούτου, συνιστάται να προβείτε και σε μη αυτόματες δοκιμές."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Αυτά τα στοιχεία σχετίζονται με τομείς τους οποίους δεν μπορεί να καλύψει ένα εργαλείο αυτοματοποιημένων δοκιμών. Μάθετε περισσότερα στον οδηγό μας σχετικά με τη [διεξαγωγή ενός ελέγχου προσβασιμότητας](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Εγκαταστήστε [μια λειτουργική μονάδα Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) η οποία μπορεί να εκτελέσει αργή φόρτωση εικόνων. Αυτού του είδους οι λειτουργικές μονάδες παρέχουν τη δυνατότητα αναβολής φόρτωσης των εικόνων εκτός οθόνης, για τη βελτίωση της απόδοσης."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Εξετάστε το ενδεχόμενο χρήσης μιας λειτουργικής μονάδας για την ενσωμάτωση σημαντικών στοιχείων CSS και JavaScript ή ενδεχομένως για την ασύγχρονη φόρτωση στοιχείων μέσω JavaScript, όπως τη λειτουργική μονάδα [Σύνθετη συγκέντρωση CSS/JS](https://www.drupal.org/project/advagg). Λάβετε υπόψη ότι οι βελτιστοποιήσεις που παρέχονται από αυτήν τη λειτουργική μονάδα μπορεί να προκαλέσουν προβλήματα στη λειτουργία του ιστοτόπου σας. Συνεπώς, είναι πιθανό να χρειαστεί να κάνετε αλλαγές στον κώδικα."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Τα θέματα, οι ενότητες και οι προδιαγραφές διακομιστή συμβάλλουν στον χρόνο απόκρισης του διακομιστή. Αν θέλετε, μπορείτε να ψάξετε για ένα περισσότερο βελτιστοποιημένο θέμα, να επιλέξετε προσεκτικά μια ενότητα βελτιστοποίησης ή/και να αναβαθμίσετε τον διακομιστή σας. Οι διακομιστές φιλοξενίας σας θα πρέπει να χρησιμοποιούν την προσωρινή αποθήκευση κώδικα λειτουργίας (opcode) PHP, την προσωρινή αποθήκευση μνήμης για τη μείωση των χρόνων ερωτημάτων βάσης δεδομένων, όπως στα Redis και Memcached, καθώς και βελτιστοποιημένη λογική εφαρμογής για την πιο γρήγορη προετοιμασία σελίδων."
@@ -2778,10 +2862,10 @@
     "message": "Εξετάστε το ενδεχόμενο χρήσης [Στιλ αποκριτικών εικόνων](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) για να μειώσετε το μέγεθος των εικόνων που φορτώνονται στη σελίδα σας. Εάν χρησιμοποιείτε τις Προβολές για την εμφάνιση πολλαπλών στοιχείων περιεχομένου σε μια σελίδα, εξετάστε το ενδεχόμενο ενσωμάτωσης σελιδοποίησης προκειμένου να περιορίσετε τον αριθμό των στοιχειών περιεχομένου σε μια συγκεκριμένη σελίδα."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Βεβαιωθείτε ότι έχετε ενεργοποιήσετε τη Συγκέντρωση αρχείων CSS στη σελίδα Διαχείριση » Διαμόρφωση » Ανάπτυξη. Μπορείτε επίσης να διαμορφώσετε πιο σύνθετες επιλογές συγκέντρωσης μέσω [πρόσθετων ενοτήτων](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), για να αυξήσετε την ταχύτητα του ιστοτόπου σας συνενώνοντας, ελαχιστοποιώντας και συμπιέζοντας τα στιλ CSS που χρησιμοποιείτε."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Βεβαιωθείτε ότι έχετε ενεργοποιήσετε τη Συγκέντρωση αρχείων JavaScript στη σελίδα Διαχείριση » Διαμόρφωση » Ανάπτυξη. Μπορείτε επίσης να διαμορφώσετε πιο σύνθετες επιλογές συγκέντρωσης μέσω [πρόσθετων ενοτήτων](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), για να αυξήσετε την ταχύτητα του ιστοτόπου σας συνενώνοντας, ελαχιστοποιώντας και συμπιέζοντας τα στοιχεία JavaScript που χρησιμοποιείτε."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Εξετάστε το ενδεχόμενο να καταργήσετε τους κανόνες CSS που δεν χρησιμοποιούνται και να προσαρτήσετε μόνο τις αναγκαίες βιβλιοθήκες Drupal στη σχετική σελίδα ή στο σχετικό στοιχείο σε μια σελίδα. Για λεπτομέρειες, ανατρέξτε στον [σύνδεσμο τεκμηρίωσης Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Για να προσδιορίσετε τις προσαρτημένες βιβλιοθήκες που προσθέτουν περιττό κώδικα CSS, δοκιμάστε να εκτελέσετε [κάλυψη κώδικα](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) στο Chrome DevTools. Μπορείτε να προσδιορίσετε το θέμα/την ενότητα που ευθύνεται μέσω του URL του φύλλου στιλ όταν η συγκέντρωση CSS είναι απενεργοποιημένη στον ιστότοπό σας στο Drupal. Αναζητήστε θέματα/ενότητες που διαθέτουν πολλά φύλλα στιλ στη λίστα, στα οποία ένα μεγάλο μέρος της κάλυψης κώδικα έχει κόκκινο χρώμα. Ένα θέμα/μια ενότητα θα πρέπει να τοποθετεί στην ουρά ένα φύλλο στιλ, μόνο αν χρησιμοποιείται στη σελίδα."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Ενεργοποιήστε τη συμπίεση στον διακομιστή Next.js. [Μάθετε περισσότερα](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Χρησιμοποιήστε το στοιχείο `nuxt/image` και ορίστε το `format=\"webp\"`. [Μάθετε περισσότερα](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Χρησιμοποιήστε το React DevTools Profiler, το οποίο χρησιμοποιεί το API του Profiler, για να μετρήσετε τις επιδόσεις απόδοσης των στοιχείων σας. [Μάθετε περισσότερα.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Τοποθετήστε βίντεο εντός του `VideoBoxes`, προσαρμόστε τα χρησιμοποιώντας το `Video Masks` ή προσθέστε το `Transparent Videos`. [Μάθετε περισσότερα](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Ανεβάστε εικόνες χρησιμοποιώντας το `Wix Media Manager`, για να διασφαλίσετε ότι θα προβάλλονται αυτόματα ως WebP. Βρείτε [περισσότερους τρόπους βελτιστοποίησης](https://support.wix.com/en/article/site-performance-optimizing-your-media) των μέσων του ιστοτόπου σας."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Κατά την [προσθήκη κώδικα τρίτου μέρους](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) στην καρτέλα `Custom Code` του πίνακα ελέγχου του ιστοτόπου σας, βεβαιωθείτε ότι αναβάλλεται ή φορτώνεται στο τέλος του σώματος κώδικα. Όπου είναι δυνατόν, χρησιμοποιήστε τις [ενσωματώσεις](https://support.wix.com/en/article/about-marketing-integrations) του Wix, για να ενσωματώσετε εργαλεία μάρκετινγκ στον ιστότοπό σας. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Το Wix χρησιμοποιεί ΔΠΠ και αποθήκευση στην κρυφή μνήμη, για να προβάλλει απαντήσεις όσο το δυνατόν πιο γρήγορα. Σκεφτείτε το ενδεχόμενο [μη αυτόματης ενεργοποίησης της αποθήκευσης στην κρυφή μνήμη](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) για τον ιστότοπό σας, ειδικά αν χρησιμοποιείτε το `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Ελέγξτε τυχόν κώδικα τρίτου μέρους που έχετε προσθέσει στον ιστότοπό σας στην καρτέλα `Custom Code` του πίνακα ελέγχου του ιστοτόπου σας και διατηρήστε μόνο τις υπηρεσίες που είναι απαραίτητες για τον ιστότοπο. [Μάθετε περισσότερα](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Εξετάστε το ενδεχόμενο να ανεβάσετε το GIF σε μια υπηρεσία η οποία θα το διαθέσει για ενσωμάτωση ως βίντεο HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Αποθήκευση ως JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Άνοιγμα στο πρόγραμμα προβολής"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Οι τιμές εκτιμώνται και μπορεί να ποικίλουν. Η [βαθμολογία απόδοσης υπολογίζεται](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) απευθείας από αυτές τις μετρήσεις."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Προβολή αρχικού ίχνους"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Προβολή ίχνους"
   },
diff --git a/front_end/third_party/lighthouse/locales/en-GB.json b/front_end/third_party/lighthouse/locales/en-GB.json
index d694f28..4421b02 100644
--- a/front_end/third_party/lighthouse/locales/en-GB.json
+++ b/front_end/third_party/lighthouse/locales/en-GB.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` attributes match their roles"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`, `link` and `menuitem` elements have accessible names"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA dialogue elements without accessible names may prevent screen reader users from discerning the purpose of these elements. [Learn how to make ARIA dialog elements more accessible](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elements with `role=\"dialog\"` or `role=\"alertdialog\"` do not have accessible names."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elements with `role=\"dialog\"` or `role=\"alertdialog\"` have accessible names."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Assistive technologies, like screen readers, work inconsistently when `aria-hidden=\"true\"` is set on the document `<body>`. [Learn how `aria-hidden` affects the document body](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` values are valid"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Adding `role=text` around a text node split by markup enables VoiceOver to treat it as one phrase, but the element's focusable descendents will not be announced. [Learn more about the `role=text` attribute](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elements with the `role=text` attribute do have focusable descendents."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elements with the `role=text` attribute do not have focusable descendents."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about toggle fields](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA IDs are unique"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "A heading with no content or inaccessible text prevents screen reader users from accessing information on the page's structure. [Learn more about headings](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Heading elements do not contain content."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "All heading elements contain content."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Form fields with multiple labels can be confusingly announced by assistive technologies, like screen readers, which use either the first, the last or all of the labels. [Learn how to use form labels](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` element has an `[xml:lang]` attribute with the same base language as the `[lang]` attribute."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Links with the same destination should have the same description, to help users understand the link's purpose and decide whether to follow it. [Learn more about identical links](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identical links do not have the same purpose."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identical links have the same purpose."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informative elements should aim for short, descriptive alternative text. Decorative elements can be ignored with an empty alt attribute. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Image elements have `[alt]` attributes"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Adding discernable and accessible text to input buttons may help screen reader users to understand the purpose of the input button. [Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` elements have `[alt]` text"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Labels ensure that form controls are announced properly by assistive technologies, such as screen readers. [Learn more about form element labels](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Form elements have associated labels"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "One main landmark helps screen reader users navigate a web page. [Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Document does not have a main landmark."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Document has a main landmark."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Low-contrast text is difficult or impossible for many users to read. Link text that is discernible improves the experience for users with low vision. [Learn how to make links distinguishable](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Links rely on colour to be distinguishable."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Links are distinguishable without relying on colour."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Link text (and alternative text for images, when used as links) that is discernible, unique and focusable improves the navigation experience for screen reader users. [Learn how to make links accessible](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` elements have alternative text"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Form elements without effective labels can create frustrating experiences for screen reader users. [Learn more about the `select` element](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Select elements do not have associated label elements."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Select elements have associated label elements."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "No element has a `[tabindex]` value greater than 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users. [Learn more about captions](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Touch targets do not have sufficient size or spacing."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Touch targets have sufficient size and spacing."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Screen readers have features to make navigating tables easier. Ensuring that `<td>` elements in a large table (three or more cells in width and height) have an associated table header may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Page has no manifest <link> URL"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "No matching service worker detected. You may need to reload the page, or check that the scope of the service worker for the current page encloses the scope and start URL from the manifest."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Could not check service worker without a 'start_url' field in the manifest"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications is only supported on Chrome Beta and Stable channels on Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse could not determine if there was a service worker. Please try with a newer version of Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "The manifest URL scheme ({scheme}) is not supported on Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulative layout shift measures the movement of visible elements within the viewport. [Learn more about the cumulative layout shift metric](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more about the Interaction to Next Paint metric](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "First Contentful Paint marks the time at which the first text or image is painted. [Learn more about the First Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "First Meaningful Paint measures when the primary content of a page is visible. [Learn more about the First Meaningful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more about the Interaction to Next Paint metric](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Time to Interactive is the amount of time that it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Avoid multiple page redirects"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more about performance budgets](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 request • {byteCount, number, bytes} KiB}other{# requests • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Keep request counts low and transfer sizes small"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Canonical links suggest which URL to show in search results. [Learn more about canonical links](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Initial server response time was short"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "The service worker is the technology that enables your app to use many progressive web app features, such as offline, add to home screen and push notifications. [Learn more about service workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "This page is controlled by a service worker, however no `start_url` was found because manifest failed to parse as valid JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "This page is controlled by a service worker, however the `start_url` ({startUrl}) is not in the service worker's scope ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "This page is controlled by a service worker, however no `start_url` was found because no manifest was fetched."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "This origin has one or more service workers, however the page ({pageUrl}) is not in scope."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Does not register a service worker that controls page and `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registers a service worker that controls page and `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "A themed splash screen ensures a high-quality experience when users launch your app from their home screens. [Learn more about splash screens](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Best practices"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Install [a Drupal module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) that can lazy load images. Such modules provide the ability to defer any offscreen images to improve performance."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Consider using a module to inline critical CSS and JavaScript, or potentially load assets asynchronously via JavaScript such as the [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg) module. Beware that optimisations provided by this module may break your site, so you will likely need to make code changes."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Themes, modules and server specifications all contribute to server response time. Consider finding a more optimised theme, carefully selecting an optimisation module and/or upgrading your server. Your hosting servers should make use of PHP opcode caching, memory-caching to reduce database query times such as Redis or Memcached, as well as optimised application logic to prepare pages faster."
@@ -2778,10 +2862,10 @@
     "message": "Consider using [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) to reduce the size of images loaded on your page. If you are using Views to show multiple content items on a page, consider implementing pagination to limit the number of content items shown on a given page."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Ensure you have enabled 'Aggregate CSS files' in the 'Administration » Configuration » Development' page. You can also configure more advanced aggregation options through [additional modules](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) to speed up your site by concatenating, minifying and compressing your CSS styles."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Ensure that you have enabled 'Aggregate JavaScript files' in the 'Administration » Configuration » Development' page. You can also configure more advanced aggregation options through [additional modules](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) to speed up your site by concatenating, minifying and compressing your JavaScript assets."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Consider removing unused CSS rules and only attach the needed Drupal libraries to the relevant page or component in a page. See the [Drupal documentation link](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) for details. To identify attached libraries that are adding extraneous CSS, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the theme/module responsible from the URL of the stylesheet when CSS aggregation is disabled in your Drupal site. Look out for themes/modules that have many stylesheets in the list which have a lot of red in code coverage. A theme/module should only enqueue a stylesheet if it is actually used on the page."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Enable compression on your Next.js server. [Learn more](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Use the `nuxt/image` component and set `format=\"webp\"`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Use the React DevTools Profiler, which makes use of the Profiler API, to measure the rendering performance of your components. [Learn more.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Place videos inside `VideoBoxes`, customise them using `Video Masks` or add `Transparent Videos`. [Learn more](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Upload images using `Wix Media Manager` to ensure they are automatically served as WebP. Find [more ways to optimise](https://support.wix.com/en/article/site-performance-optimizing-your-media) your site's media."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "When [adding third-party code](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) in the `Custom Code` tab of your site's dashboard, make sure it's deferred or loaded at the end of the code body. Where possible, use Wix’s [integrations](https://support.wix.com/en/article/about-marketing-integrations) to embed marketing tools on your site. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix utilizes CDNs and caching to serve responses as fast as possible for most visitors. Consider [manually enabling caching](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) for your site, especially if using `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Review any third-party code you've added to your site in the `Custom Code` tab of your site's dashboard and only keep the services that are necessary to your site. [Find out more](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Consider uploading your GIF to a service that will make it available to embed as an HTML5 video."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Save as JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Open in Viewer"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "View original trace"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "View trace"
   },
diff --git a/front_end/third_party/lighthouse/locales/en-US.json b/front_end/third_party/lighthouse/locales/en-US.json
index f48649f..042ac77 100644
--- a/front_end/third_party/lighthouse/locales/en-US.json
+++ b/front_end/third_party/lighthouse/locales/en-US.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` attributes match their roles"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -326,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Image elements have `[alt]` attributes"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Adding discernable and accessible text to input buttons may help screen reader users understand the purpose of the input button. [Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -344,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` elements have `[alt]` text"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more about form element labels](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -434,6 +461,15 @@
   "core/audits/accessibility/select-name.js | title": {
     "message": "Select elements have associated label elements."
   },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -443,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "No element has a `[tabindex]` value greater than 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users. [Learn more about captions](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -453,7 +498,7 @@
     "message": "Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption."
   },
   "core/audits/accessibility/target-size.js | description": {
-    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
   },
   "core/audits/accessibility/target-size.js | failureTitle": {
     "message": "Touch targets do not have sufficient size or spacing."
@@ -1010,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Page has no manifest <link> URL"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "No matching service worker detected. You may need to reload the page, or check that the scope of the service worker for the current page encloses the scope and start URL from the manifest."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Could not check service worker without a 'start_url' field in the manifest"
   },
@@ -1041,7 +1083,7 @@
     "message": "prefer_related_applications is only supported on Chrome Beta and Stable channels on Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse could not determine if there was a service worker. Please try with a newer version of Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "The manifest URL scheme ({scheme}) is not supported on Android."
@@ -1184,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more about the Cumulative Layout Shift metric](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more about the Interaction to Next Paint metric](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "First Contentful Paint marks the time at which the first text or image is painted. [Learn more about the First Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "First Meaningful Paint measures when the primary content of a page is visible. [Learn more about the First Meaningful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more about the Interaction to Next Paint metric](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Time to Interactive is the amount of time it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1286,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Avoid multiple page redirects"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more about performance budgets](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount, plural, =1 {1 request • {byteCount, number, bytes} KiB} other {# requests • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Keep request counts low and transfer sizes small"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Canonical links suggest which URL to show in search results. [Learn more about canonical links](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1484,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Initial server response time was short"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. [Learn more about Service Workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "This page is controlled by a service worker, however no `start_url` was found because manifest failed to parse as valid JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "This page is controlled by a service worker, however the `start_url` ({startUrl}) is not in the service worker's scope ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "This page is controlled by a service worker, however no `start_url` was found because no manifest was fetched."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "This origin has one or more service workers, however the page ({pageUrl}) is not in scope."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Does not register a service worker that controls page and `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registers a service worker that controls page and `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more about splash screens](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1695,7 +1707,7 @@
     "message": "Best practices"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://web.dev/how-to-review/)."
@@ -2841,7 +2853,7 @@
     "message": "Install [a Drupal module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) that can lazy load images. Such modules provide the ability to defer any offscreen images to improve performance."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Consider using a module to inline critical CSS and JavaScript, or potentially load assets asynchronously via JavaScript such as the [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg) module. Beware that optimizations provided by this module may break your site, so you will likely need to make code changes."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Themes, modules, and server specifications all contribute to server response time. Consider finding a more optimized theme, carefully selecting an optimization module, and/or upgrading your server. Your hosting servers should make use of PHP opcode caching, memory-caching to reduce database query times such as Redis or Memcached, as well as optimized application logic to prepare pages faster."
@@ -2850,10 +2862,10 @@
     "message": "Consider using [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) to reduce the size of images loaded on your page. If you are using Views to show multiple content items on a page, consider implementing pagination to limit the number of content items shown on a given page."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page. You can also configure more advanced aggregation options through [additional modules](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) to speed up your site by concatenating, minifying, and compressing your CSS styles."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page. You can also configure more advanced aggregation options through [additional modules](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) to speed up your site by concatenating, minifying, and compressing your JavaScript assets."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Consider removing unused CSS rules and only attach the needed Drupal libraries to the relevant page or component in a page. See the [Drupal documentation link](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) for details. To identify attached libraries that are adding extraneous CSS, try running [code coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. You can identify the theme/module responsible from the URL of the stylesheet when CSS aggregation is disabled in your Drupal site. Look out for themes/modules that have many stylesheets in the list which have a lot of red in code coverage. A theme/module should only enqueue a stylesheet if it is actually used on the page."
@@ -3053,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Enable compression on your Next.js server. [Learn more](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Use the `nuxt/image` component and set `format=\"webp\"`. [Learn more](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3257,6 +3311,9 @@
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Open in Viewer"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | errorLabel": {
     "message": "Error!"
   },
@@ -3374,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "View Original Trace"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "View Trace"
   },
diff --git a/front_end/third_party/lighthouse/locales/en-XA.json b/front_end/third_party/lighthouse/locales/en-XA.json
index 327f1d7..5b70b80 100644
--- a/front_end/third_party/lighthouse/locales/en-XA.json
+++ b/front_end/third_party/lighthouse/locales/en-XA.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "[ᐅ`[aria-*]`ᐊ åţţŕîбûţéš måţçĥ ţĥéîŕ ŕöļéš one two three four five six seven]"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "[Ŵĥéñ åñ éļéméñţ ðöéšñ'ţ ĥåvé åñ åççéššîбļé ñåmé, šçŕééñ ŕéåðéŕš åññöûñçé îţ ŵîţĥ å ĝéñéŕîç ñåmé, måķîñĝ îţ ûñûšåбļé ƒöŕ ûšéŕš ŵĥö ŕéļý öñ šçŕééñ ŕéåðéŕš. ᐅ[ᐊĻéåŕñ ĥöŵ ţö måķé çömmåñð éļéméñţš möŕé åççéššîбļéᐅ](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight]"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "[ᐅ`button`ᐊ, ᐅ`link`ᐊ, åñð ᐅ`menuitem`ᐊ éļéméñţš ĥåvé åççéššîбļé ñåméš one two three four five six seven eight nine ten]"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "[ÅŔÎÅ ðîåļöĝ éļéméñţš ŵîţĥöûţ åççéššîбļé ñåméš måý þŕévéñţ šçŕééñ ŕéåðéŕš ûšéŕš ƒŕöm ðîšçéŕñîñĝ ţĥé þûŕþöšé öƒ ţĥéšé éļéméñţš. ᐅ[ᐊĻéåŕñ ĥöŵ ţö måķé ÅŔÎÅ ðîåļöĝ éļéméñţš möŕé åççéššîбļéᐅ](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix]"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "[Éļéméñţš ŵîţĥ ᐅ`role=\"dialog\"`ᐊ öŕ ᐅ`role=\"alertdialog\"`ᐊ ðö ñöţ ĥåvé åççéššîбļé ñåméš. one two three four five six seven eight nine ten eleven]"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "[Éļéméñţš ŵîţĥ ᐅ`role=\"dialog\"`ᐊ öŕ ᐅ`role=\"alertdialog\"`ᐊ ĥåvé åççéššîбļé ñåméš. one two three four five six seven eight nine ten]"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "[Åššîšţîvé ţéçĥñöļöĝîéš, ļîķé šçŕééñ ŕéåðéŕš, ŵöŕķ îñçöñšîšţéñţļý ŵĥéñ ᐅ`aria-hidden=\"true\"`ᐊ îš šéţ öñ ţĥé ðöçûméñţ ᐅ`<body>`ᐊ. ᐅ[ᐊĻéåŕñ ĥöŵ ᐅ`aria-hidden`ᐊ 僃éçţš ţĥé ðöçûméñţ бöðýᐅ](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo]"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "[ᐅ`[role]`ᐊ våļûéš åŕé våļîð one two three four five]"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "[Åððîñĝ ᐅ`role=text`ᐊ åŕöûñð å ţéxţ ñöðé šþļîţ бý måŕķûþ éñåбļéš VöîçéÖvéŕ ţö ţŕéåţ îţ åš öñé þĥŕåšé, бûţ ţĥé éļéméñţ'š ƒöçûšåбļé ðéšçéñðéñţš ŵîļļ ñöţ бé åññöûñçéð. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé ᐅ`role=text`ᐊ åţţŕîбûţéᐅ](https://dequeuniversity.com/rules/axe/4.7/aria-text)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix]"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "[Éļéméñţš ŵîţĥ ţĥé ᐅ`role=text`ᐊ åţţŕîбûţé ðö ĥåvé ƒöçûšåбļé ðéšçéñðéñţš. one two three four five six seven eight nine ten eleven twelve]"
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "[Éļéméñţš ŵîţĥ ţĥé ᐅ`role=text`ᐊ åţţŕîбûţé ðö ñöţ ĥåvé ƒöçûšåбļé ðéšçéñðéñţš. one two three four five six seven eight nine ten eleven twelve thirteen]"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "[Ŵĥéñ å ţöĝĝļé ƒîéļð ðöéšñ'ţ ĥåvé åñ åççéššîбļé ñåmé, šçŕééñ ŕéåðéŕš åññöûñçé îţ ŵîţĥ å ĝéñéŕîç ñåmé, måķîñĝ îţ ûñûšåбļé ƒöŕ ûšéŕš ŵĥö ŕéļý öñ šçŕééñ ŕéåðéŕš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţöĝĝļé ƒîéļðšᐅ](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix]"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "[ÅŔÎÅ ÎК åŕé ûñîqûé one two three four]"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "[Å ĥéåðîñĝ ŵîţĥ ñö çöñţéñţ öŕ îñåççéššîбļé ţéxţ þŕévéñţ šçŕééñ ŕéåðéŕ ûšéŕš ƒŕöm åççéššîñĝ îñƒöŕmåţîöñ öñ ţĥé þåĝé'š šţŕûçţûŕé. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ĥéåðîñĝšᐅ](https://dequeuniversity.com/rules/axe/4.7/empty-heading)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree]"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "[Ĥéåðîñĝ éļéméñţš ðö ñöţ çöñţåîñ çöñţéñţ. one two three four five six seven eight]"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "[Åļļ ĥéåðîñĝ éļéméñţš çöñţåîñ çöñţéñţ. one two three four five six seven eight]"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "[Föŕm ƒîéļðš ŵîţĥ mûļţîþļé ļåбéļš çåñ бé çöñƒûšîñĝļý åññöûñçéð бý åššîšţîvé ţéçĥñöļöĝîéš ļîķé šçŕééñ ŕéåðéŕš ŵĥîçĥ ûšé éîţĥéŕ ţĥé ƒîŕšţ, ţĥé ļåšţ, öŕ åļļ öƒ ţĥé ļåбéļš. ᐅ[ᐊĻéåŕñ ĥöŵ ţö ûšé ƒöŕm ļåбéļšᐅ](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven]"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "[ᐅ`<html>`ᐊ éļéméñţ ĥåš åñ ᐅ`[xml:lang]`ᐊ åţţŕîбûţé ŵîţĥ ţĥé šåmé бåšé ļåñĝûåĝé åš ţĥé ᐅ`[lang]`ᐊ åţţŕîбûţé. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen]"
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "[Ļîñķš ŵîţĥ ţĥé šåmé ðéšţîñåţîöñ šĥöûļð ĥåvé ţĥé šåmé ðéšçŕîþţîöñ, ţö ĥéļþ ûšéŕš ûñðéŕšţåñð ţĥé ļîñķ'š þûŕþöšé åñð ðéçîðé ŵĥéţĥéŕ ţö ƒöļļöŵ îţ. ᐅ[ᐊĻéåŕñ möŕé åбöûţ îðéñţîçåļ ļîñķšᐅ](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive]"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "[Îðéñţîçåļ ļîñķš ðö ñöţ ĥåvé ţĥé šåmé þûŕþöšé. one two three four five six seven eight nine]"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "[Îðéñţîçåļ ļîñķš ĥåvé ţĥé šåmé þûŕþöšé. one two three four five six seven eight]"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "[Îñƒöŕmåţîvé éļéméñţš šĥöûļð åîm ƒöŕ šĥöŕţ, ðéšçŕîþţîvé åļţéŕñåţé ţéxţ. Ðéçöŕåţîvé éļéméñţš çåñ бé îĝñöŕéð ŵîţĥ åñ émþţý åļţ åţţŕîбûţé. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé ᐅ`alt`ᐊ åţţŕîбûţéᐅ](https://dequeuniversity.com/rules/axe/4.7/image-alt)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive]"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "[Îmåĝé éļéméñţš ĥåvé ᐅ`[alt]`ᐊ åţţŕîбûţéš one two three four five six seven]"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "[Åððîñĝ ðîšçéŕñåбļé åñð åççéššîбļé ţéxţ ţö îñþûţ бûţţöñš måý ĥéļþ šçŕééñ ŕéåðéŕ ûšéŕš ûñðéŕšţåñð ţĥé þûŕþöšé öƒ ţĥé îñþûţ бûţţöñ. ᐅ[ᐊĻéåŕñ möŕé åбöûţ îñþûţ бûţţöñšᐅ](https://dequeuniversity.com/rules/axe/4.7/input-button-name)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour]"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "[ᐅ`<input type=\"image\">`ᐊ éļéméñţš ĥåvé ᐅ`[alt]`ᐊ ţéxţ one two three four five six]"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "[Ļåбéļš éñšûŕé ţĥåţ ƒöŕm çöñţŕöļš åŕé åññöûñçéð þŕöþéŕļý бý åššîšţîvé ţéçĥñöļöĝîéš, ļîķé šçŕééñ ŕéåðéŕš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ƒöŕm éļéméñţ ļåбéļšᐅ](https://dequeuniversity.com/rules/axe/4.7/label)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo]"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "[Föŕm éļéméñţš ĥåvé åššöçîåţéð ļåбéļš one two three four five six seven eight]"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "[Öñé måîñ ļåñðmåŕķ ĥéļþš šçŕééñ ŕéåðéŕ ûšéŕš ñåvîĝåţé å ŵéб þåĝé. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ļåñðmåŕķšᐅ](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen]"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "[Ðöçûméñţ ðöéš ñöţ ĥåvé å måîñ ļåñðmåŕķ. one two three four five six seven eight]"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "[Ðöçûméñţ ĥåš å måîñ ļåñðmåŕķ. one two three four five six seven]"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "[Ļöŵ-çöñţŕåšţ ţéxţ îš ðîçûļţ öŕ îmþöššîбļé ƒöŕ måñý ûšéŕš ţö ŕéåð. Ļîñķ ţéxţ ţĥåţ îš ðîšçéŕñîбļé îmþŕövéš ţĥé éxþéŕîéñçé ƒöŕ ûšéŕš ŵîţĥ ļöŵ vîšîöñ. ᐅ[ᐊĻéåŕñ ĥöŵ ţö måķé ļîñķš ðîšţîñĝûîšĥåбļéᐅ](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix]"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "[Ļîñķš ŕéļý öñ çöļöŕ ţö бé ðîšţîñĝûîšĥåбļé. one two three four five six seven eight nine]"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "[Ļîñķš åŕé ðîšţîñĝûîšĥåбļé ŵîţĥöûţ ŕéļýîñĝ öñ çöļöŕ. one two three four five six seven eight nine ten eleven]"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "[Ļîñķ ţéxţ (åñð åļţéŕñåţé ţéxţ ƒöŕ îmåĝéš, ŵĥéñ ûšéð åš ļîñķš) ţĥåţ îš ðîšçéŕñîбļé, ûñîqûé, åñð ƒöçûšåбļé îmþŕövéš ţĥé ñåvîĝåţîöñ éxþéŕîéñçé ƒöŕ šçŕééñ ŕéåðéŕ ûšéŕš. ᐅ[ᐊĻéåŕñ ĥöŵ ţö måķé ļîñķš åççéššîбļéᐅ](https://dequeuniversity.com/rules/axe/4.7/link-name)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven]"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "[ᐅ`<object>`ᐊ éļéméñţš ĥåvé åļţéŕñåţé ţéxţ one two three four five six seven]"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "[Föŕm éļéméñţš ŵîţĥöûţ 郃éçţîvé ļåбéļš çåñ çŕéåţé ƒŕûšţŕåţîñĝ éxþéŕîéñçéš ƒöŕ šçŕééñ ŕéåðéŕ ûšéŕš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé ᐅ`select`ᐊ éļéméñţᐅ](https://dequeuniversity.com/rules/axe/4.7/select-name)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone]"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "[Šéļéçţ éļéméñţš ðö ñöţ ĥåvé åššöçîåţéð ļåбéļ éļéméñţš. one two three four five six seven eight nine ten eleven]"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "[Šéļéçţ éļéméñţš ĥåvé åššöçîåţéð ļåбéļ éļéméñţš. one two three four five six seven eight nine ten]"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "[Å våļûé ĝŕéåţéŕ ţĥåñ 0 îmþļîéš åñ éxþļîçîţ ñåvîĝåţîöñ öŕðéŕîñĝ. Åļţĥöûĝĥ ţéçĥñîçåļļý våļîð, ţĥîš öƒţéñ çŕéåţéš ƒŕûšţŕåţîñĝ éxþéŕîéñçéš ƒöŕ ûšéŕš ŵĥö ŕéļý öñ åššîšţîvé ţéçĥñöļöĝîéš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé ᐅ`tabindex`ᐊ åţţŕîбûţéᐅ](https://dequeuniversity.com/rules/axe/4.7/tabindex)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine]"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "[Ñö éļéméñţ ĥåš å ᐅ`[tabindex]`ᐊ våļûé ĝŕéåţéŕ ţĥåñ 0 one two three four five six seven eight nine]"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "[Šçŕééñ ŕéåðéŕš ĥåvé ƒéåţûŕéš ţö måķé ñåvîĝåţîñĝ ţåбļéš éåšîéŕ. Éñšûŕîñĝ ţĥåţ ţåбļéš ûšé ţĥé åçţûåļ çåþţîöñ éļéméñţ îñšţéåð öƒ çéļļš ŵîţĥ ţĥé ᐅ`[colspan]`ᐊ åţţŕîбûţé måý îmþŕövé ţĥé éxþéŕîéñçé ƒöŕ šçŕééñ ŕéåðéŕ ûšéŕš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ çåþţîöñšᐅ](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone]"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "[Ţåбļéš ûšé ᐅ`<caption>`ᐊ îñšţéåð öƒ çéļļš ŵîţĥ ţĥé ᐅ`[colspan]`ᐊ åţţŕîбûţé ţö îñðîçåţé å çåþţîöñ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen]"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "[Ţöûçĥ ţåŕĝéţš ðö ñöţ ĥåvé šûƒƒîçîéñţ šîžé öŕ šþåçîñĝ. one two three four five six seven eight nine ten eleven]"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "[Ţöûçĥ ţåŕĝéţš ĥåvé šûƒƒîçîéñţ šîžé åñð šþåçîñĝ. one two three four five six seven eight nine ten]"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "[Šçŕééñ ŕéåðéŕš ĥåvé ƒéåţûŕéš ţö måķé ñåvîĝåţîñĝ ţåбļéš éåšîéŕ. Éñšûŕîñĝ ţĥåţ ᐅ`<td>`ᐊ éļéméñţš îñ å ļåŕĝé ţåбļé (3 öŕ möŕé çéļļš îñ ŵîðţĥ åñð ĥéîĝĥţ) ĥåvé åñ åššöçîåţéð ţåбļé ĥéåðéŕ måý îmþŕövé ţĥé éxþéŕîéñçé ƒöŕ šçŕééñ ŕéåðéŕ ûšéŕš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţåбļé ĥéåðéŕšᐅ](https://dequeuniversity.com/rules/axe/4.7/td-has-header)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree]"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "[Þåĝé ĥåš ñö måñîƒéšţ <link> ÛŔĻ one two three four five six]"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "[Ñö måţçĥîñĝ šéŕvîçé ŵöŕķéŕ ðéţéçţéð. Ýöû måý ñééð ţö ŕéļöåð ţĥé þåĝé, öŕ çĥéçķ ţĥåţ ţĥé šçöþé öƒ ţĥé šéŕvîçé ŵöŕķéŕ ƒöŕ ţĥé çûŕŕéñţ þåĝé éñçļöšéš ţĥé šçöþé åñð šţåŕţ ÛŔĻ ƒŕöm ţĥé måñîƒéšţ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix]"
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "[Çöûļð ñöţ çĥéçķ šéŕvîçé ŵöŕķéŕ ŵîţĥöûţ å 'šţåŕţ_ûŕļ' ƒîéļð îñ ţĥé måñîƒéšţ one two three four five six seven eight nine ten eleven twelve thirteen fourteen]"
   },
@@ -969,7 +1083,7 @@
     "message": "[þŕéƒéŕ_ŕéļåţéð_åþþļîçåţîöñš îš öñļý šûþþöŕţéð öñ Çĥŕömé Бéţå åñð Šţåбļé çĥåññéļš öñ Åñðŕöîð. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen]"
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "[Ļîĝĥţĥöûšé çöûļð ñöţ ðéţéŕmîñé îƒ ţĥéŕé ŵåš å šéŕvîçé ŵöŕķéŕ. Þļéåšé ţŕý ŵîţĥ å ñéŵéŕ véŕšîöñ öƒ Çĥŕömé. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen]"
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "[Ţĥé måñîƒéšţ ÛŔĻ šçĥémé (ᐅ{scheme}ᐊ) îš ñöţ šûþþöŕţéð öñ Åñðŕöîð. one two three four five six seven eight nine ten eleven twelve]"
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "[Çûmûļåţîvé Ļåýöûţ Šĥîƒţ méåšûŕéš ţĥé mövéméñţ öƒ vîšîбļé éļéméñţš ŵîţĥîñ ţĥé vîéŵþöŕţ. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé Çûmûļåţîvé Ļåýöûţ Šĥîƒţ méţŕîçᐅ](https://web.dev/cls/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo]"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "[Îñţéŕåçţîöñ ţö Ñéxţ Þåîñţ méåšûŕéš þåĝé ŕéšþöñšîvéñéšš, ĥöŵ ļöñĝ îţ ţåķéš ţĥé þåĝé ţö vîšîбļý ŕéšþöñð ţö ûšéŕ îñþûţ. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé Îñţéŕåçţîöñ ţö Ñéxţ Þåîñţ méţŕîçᐅ](https://web.dev/inp/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive]"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "[Fîŕšţ Çöñţéñţƒûļ Þåîñţ måŕķš ţĥé ţîmé åţ ŵĥîçĥ ţĥé ƒîŕšţ ţéxţ öŕ îmåĝé îš þåîñţéð. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé Fîŕšţ Çöñţéñţƒûļ Þåîñţ méţŕîçᐅ](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone]"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "[Fîŕšţ Méåñîñĝƒûļ Þåîñţ méåšûŕéš ŵĥéñ ţĥé þŕîmåŕý çöñţéñţ öƒ å þåĝé îš vîšîбļé. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé Fîŕšţ Méåñîñĝƒûļ Þåîñţ méţŕîçᐅ](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone]"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "[Îñţéŕåçţîöñ ţö Ñéxţ Þåîñţ méåšûŕéš þåĝé ŕéšþöñšîvéñéšš, ĥöŵ ļöñĝ îţ ţåķéš ţĥé þåĝé ţö vîšîбļý ŕéšþöñð ţö ûšéŕ îñþûţ. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé Îñţéŕåçţîöñ ţö Ñéxţ Þåîñţ méţŕîçᐅ](https://web.dev/inp/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive]"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "[Ţîmé ţö Îñţéŕåçţîvé îš ţĥé åmöûñţ öƒ ţîmé îţ ţåķéš ƒöŕ ţĥé þåĝé ţö бéçömé ƒûļļý îñţéŕåçţîvé. ᐅ[ᐊĻéåŕñ möŕé åбöûţ ţĥé Ţîmé ţö Îñţéŕåçţîvé méţŕîçᐅ](https://developer.chrome.com/docs/lighthouse/performance/interactive/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo]"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "[Åvöîð mûļţîþļé þåĝé ŕéðîŕéçţš one two three four five six seven]"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "[Ţö šéţ бûðĝéţš ƒöŕ ţĥé qûåñţîţý åñð šîžé öƒ þåĝé ŕéšöûŕçéš, åðð å бûðĝéţ.ĵšöñ ƒîļé. ᐅ[ᐊĻéåŕñ möŕé åбöûţ þéŕƒöŕmåñçé бûðĝéţšᐅ](https://web.dev/use-lighthouse-for-performance-budgets/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty]"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{[1 ŕéqûéšţ • ᐅ{byteCount, number, bytes}ᐊ ĶîБ one two three four]}other{[# ŕéqûéšţš • ᐅ{byteCount, number, bytes}ᐊ ĶîБ one two three four five]}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "[Ķééþ ŕéqûéšţ çöûñţš ļöŵ åñð ţŕåñšƒéŕ šîžéš šmåļļ one two three four five six seven eight nine ten]"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "[Çåñöñîçåļ ļîñķš šûĝĝéšţ ŵĥîçĥ ÛŔĻ ţö šĥöŵ îñ šéåŕçĥ ŕéšûļţš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ çåñöñîçåļ ļîñķšᐅ](https://developer.chrome.com/docs/lighthouse/seo/canonical/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen]"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "[Îñîţîåļ šéŕvéŕ ŕéšþöñšé ţîmé ŵåš šĥöŕţ one two three four five six seven eight]"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "[Ţĥé šéŕvîçé ŵöŕķéŕ îš ţĥé ţéçĥñöļöĝý ţĥåţ éñåбļéš ýöûŕ åþþ ţö ûšé måñý Þŕöĝŕéššîvé Ŵéб Åþþ ƒéåţûŕéš, šûçĥ åš öƒƒļîñé, åðð ţö ĥöméšçŕééñ, åñð þûšĥ ñöţîƒîçåţîöñš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ Šéŕvîçé Ŵöŕķéŕšᐅ](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven]"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "[Ţĥîš þåĝé îš çöñţŕöļļéð бý å šéŕvîçé ŵöŕķéŕ, ĥöŵévéŕ ñö ᐅ`start_url`ᐊ ŵåš ƒöûñð бéçåûšé måñîƒéšţ ƒåîļéð ţö þåŕšé åš våļîð ĴŠÖÑ one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen]"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "[Ţĥîš þåĝé îš çöñţŕöļļéð бý å šéŕvîçé ŵöŕķéŕ, ĥöŵévéŕ ţĥé ᐅ`start_url`ᐊ (ᐅ{startUrl}ᐊ) îš ñöţ îñ ţĥé šéŕvîçé ŵöŕķéŕ'š šçöþé (ᐅ{scopeUrl}ᐊ) one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen]"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "[Ţĥîš þåĝé îš çöñţŕöļļéð бý å šéŕvîçé ŵöŕķéŕ, ĥöŵévéŕ ñö ᐅ`start_url`ᐊ ŵåš ƒöûñð бéçåûšé ñö måñîƒéšţ ŵåš ƒéţçĥéð. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen]"
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "[Ţĥîš öŕîĝîñ ĥåš öñé öŕ möŕé šéŕvîçé ŵöŕķéŕš, ĥöŵévéŕ ţĥé þåĝé (ᐅ{pageUrl}ᐊ) îš ñöţ îñ šçöþé. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen]"
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "[Ðöéš ñöţ ŕéĝîšţéŕ å šéŕvîçé ŵöŕķéŕ ţĥåţ çöñţŕöļš þåĝé åñð ᐅ`start_url`ᐊ one two three four five six seven eight nine ten eleven twelve]"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "[Ŕéĝîšţéŕš å šéŕvîçé ŵöŕķéŕ ţĥåţ çöñţŕöļš þåĝé åñð ᐅ`start_url`ᐊ one two three four five six seven eight nine ten eleven]"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "[Å ţĥéméð šþļåšĥ šçŕééñ éñšûŕéš å ĥîĝĥ-qûåļîţý éxþéŕîéñçé ŵĥéñ ûšéŕš ļåûñçĥ ýöûŕ åþþ ƒŕöm ţĥéîŕ ĥöméšçŕééñš. ᐅ[ᐊĻéåŕñ möŕé åбöûţ šþļåšĥ šçŕééñšᐅ](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo]"
   },
@@ -1623,7 +1707,7 @@
     "message": "[Бéšţ þŕåçţîçéš one two]"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "[Ţĥéšé çĥéçķš ĥîĝĥļîĝĥţ öþþöŕţûñîţîéš ţö ᐅ[ᐊîmþŕövé ţĥé åççéššîбîļîţý öƒ ýöûŕ ŵéб åþþᐅ](https://developer.chrome.com/docs/lighthouse/accessibility/)ᐊ. Öñļý å šûбšéţ öƒ åççéššîбîļîţý îššûéš çåñ бé åûţömåţîçåļļý ðéţéçţéð šö måñûåļ ţéšţîñĝ îš åļšö éñçöûŕåĝéð. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix]"
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "[Ţĥéšé îţémš åððŕéšš åŕéåš ŵĥîçĥ åñ åûţömåţéð ţéšţîñĝ ţööļ çåññöţ çövéŕ. Ļéåŕñ möŕé îñ öûŕ ĝûîðé öñ ᐅ[ᐊçöñðûçţîñĝ åñ åççéššîбîļîţý ŕévîéŵᐅ](https://web.dev/how-to-review/)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone]"
@@ -2769,7 +2853,7 @@
     "message": "[Îñšţåļļ ᐅ[ᐊå Ðŕûþåļ möðûļéᐅ](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search)ᐊ ţĥåţ çåñ ļåžý ļöåð îmåĝéš. Šûçĥ möðûļéš þŕövîðé ţĥé åбîļîţý ţö ðéƒéŕ åñý öƒƒšçŕééñ îmåĝéš ţö îmþŕövé þéŕƒöŕmåñçé. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo]"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "[Çöñšîðéŕ ûšîñĝ å möðûļé ţö îñļîñé çŕîţîçåļ ÇŠŠ åñð ĴåvåŠçŕîþţ, öŕ þöţéñţîåļļý ļöåð åššéţš åšýñçĥŕöñöûšļý vîå ĴåvåŠçŕîþţ šûçĥ åš ţĥé ᐅ[ᐊÅðvåñçéð ÇŠŠ/ĴŠ Åĝĝŕéĝåţîöñᐅ](https://www.drupal.org/project/advagg)ᐊ möðûļé. Бéŵåŕé ţĥåţ öþţîmîžåţîöñš þŕövîðéð бý ţĥîš möðûļé måý бŕéåķ ýöûŕ šîţé, šö ýöû ŵîļļ ļîķéļý ñééð ţö måķé çöðé çĥåñĝéš. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour thirtyfive]"
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "[Ţĥéméš, möðûļéš, åñð šéŕvéŕ šþéçîƒîçåţîöñš åļļ çöñţŕîбûţé ţö šéŕvéŕ ŕéšþöñšé ţîmé. Çöñšîðéŕ ƒîñðîñĝ å möŕé öþţîmîžéð ţĥémé, çåŕéƒûļļý šéļéçţîñĝ åñ öþţîmîžåţîöñ möðûļé, åñð/öŕ ûþĝŕåðîñĝ ýöûŕ šéŕvéŕ. Ýöûŕ ĥöšţîñĝ šéŕvéŕš šĥöûļð måķé ûšé öƒ ÞĤÞ öþçöðé çåçĥîñĝ, mémöŕý-çåçĥîñĝ ţö ŕéðûçé ðåţåбåšé qûéŕý ţîméš šûçĥ åš Ŕéðîš öŕ Mémçåçĥéð, åš ŵéļļ åš öþţîmîžéð åþþļîçåţîöñ ļöĝîç ţö þŕéþåŕé þåĝéš ƒåšţéŕ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour thirtyfive thirtysix thirtyseven thirtyeight thirtynine forty one two three four five six seven eight nine ten eleven]"
@@ -2778,10 +2862,10 @@
     "message": "[Çöñšîðéŕ ûšîñĝ ᐅ[ᐊŔéšþöñšîvé Îmåĝé Šţýļéšᐅ](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8)ᐊ ţö ŕéðûçé ţĥé šîžé öƒ îmåĝéš ļöåðéð öñ ýöûŕ þåĝé. ΃ ýöû åŕé ûšîñĝ Vîéŵš ţö šĥöŵ mûļţîþļé çöñţéñţ îţémš öñ å þåĝé, çöñšîðéŕ îmþļéméñţîñĝ þåĝîñåţîöñ ţö ļîmîţ ţĥé ñûmбéŕ öƒ çöñţéñţ îţémš šĥöŵñ öñ å ĝîvéñ þåĝé. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo]"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "[Éñšûŕé ýöû ĥåvé éñåбļéð \"Åĝĝŕéĝåţé ÇŠŠ ƒîļéš\" îñ ţĥé \"Åðmîñîšţŕåţîöñ » Çöñƒîĝûŕåţîöñ » Ðévéļöþméñţ\" þåĝé. Ýöû çåñ åļšö çöñƒîĝûŕé möŕé åðvåñçéð åĝĝŕéĝåţîöñ öþţîöñš ţĥŕöûĝĥ ᐅ[ᐊåððîţîöñåļ möðûļéšᐅ](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search)ᐊ ţö šþééð ûþ ýöûŕ šîţé бý çöñçåţéñåţîñĝ, mîñîƒýîñĝ, åñð çömþŕéššîñĝ ýöûŕ ÇŠŠ šţýļéš. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour]"
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "[Éñšûŕé ýöû ĥåvé éñåбļéð \"Åĝĝŕéĝåţé ĴåvåŠçŕîþţ ƒîļéš\" îñ ţĥé \"Åðmîñîšţŕåţîöñ » Çöñƒîĝûŕåţîöñ » Ðévéļöþméñţ\" þåĝé. Ýöû çåñ åļšö çöñƒîĝûŕé möŕé åðvåñçéð åĝĝŕéĝåţîöñ öþţîöñš ţĥŕöûĝĥ ᐅ[ᐊåððîţîöñåļ möðûļéšᐅ](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search)ᐊ ţö šþééð ûþ ýöûŕ šîţé бý çöñçåţéñåţîñĝ, mîñîƒýîñĝ, åñð çömþŕéššîñĝ ýöûŕ ĴåvåŠçŕîþţ åššéţš. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour thirtyfive thirtysix]"
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "[Çöñšîðéŕ ŕémövîñĝ ûñûšéð ÇŠŠ ŕûļéš åñð öñļý åţţåçĥ ţĥé ñééðéð Ðŕûþåļ ļîбŕåŕîéš ţö ţĥé ŕéļévåñţ þåĝé öŕ çömþöñéñţ îñ å þåĝé. Šéé ţĥé ᐅ[ᐊÐŕûþåļ ðöçûméñţåţîöñ ļîñķᐅ](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library)ᐊ ƒöŕ ðéţåîļš. Ţö îðéñţîƒý åţţåçĥéð ļîбŕåŕîéš ţĥåţ åŕé åððîñĝ éxţŕåñéöûš ÇŠŠ, ţŕý ŕûññîñĝ ᐅ[ᐊçöðé çövéŕåĝéᐅ](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage)ᐊ îñ Çĥŕömé ÐévŢööļš. Ýöû çåñ îðéñţîƒý ţĥé ţĥémé/möðûļé ŕéšþöñšîбļé ƒŕöm ţĥé ÛŔĻ öƒ ţĥé šţýļéšĥééţ ŵĥéñ ÇŠŠ åĝĝŕéĝåţîöñ îš ðîšåбļéð îñ ýöûŕ Ðŕûþåļ šîţé. Ļööķ öûţ ƒöŕ ţĥéméš/möðûļéš ţĥåţ ĥåvé måñý šţýļéšĥééţš îñ ţĥé ļîšţ ŵĥîçĥ ĥåvé å ļöţ öƒ ŕéð îñ çöðé çövéŕåĝé. Å ţĥémé/möðûļé šĥöûļð öñļý éñqûéûé å šţýļéšĥééţ îƒ îţ îš åçţûåļļý ûšéð öñ ţĥé þåĝé. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour thirtyfive thirtysix thirtyseven thirtyeight thirtynine forty one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour]"
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "[Éñåбļé çömþŕéššîöñ öñ ýöûŕ Ñéxţ.ĵš šéŕvéŕ. ᐅ[ᐊĻéåŕñ möŕéᐅ](https://nextjs.org/docs/api-reference/next.config.js/compression)ᐊ. one two three four five six seven eight nine ten eleven twelve]"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "[Ûšé ţĥé ᐅ`nuxt/image`ᐊ çömþöñéñţ åñð šéţ ᐅ`format=\"webp\"`ᐊ. ᐅ[ᐊĻéåŕñ möŕéᐅ](https://image.nuxtjs.org/components/nuxt-img#format)ᐊ. one two three four five six seven eight nine ten eleven]"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "[Ûšé ţĥé Ŕéåçţ ÐévŢööļš Þŕöƒîļéŕ, ŵĥîçĥ måķéš ûšé öƒ ţĥé Þŕöƒîļéŕ ÅÞÎ, ţö méåšûŕé ţĥé ŕéñðéŕîñĝ þéŕƒöŕmåñçé öƒ ýöûŕ çömþöñéñţš. ᐅ[ᐊĻéåŕñ möŕé.ᐅ](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)ᐊ one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo]"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "[Þļåçé vîðéöš îñšîðé ᐅ`VideoBoxes`ᐊ, çûšţömîžé ţĥém ûšîñĝ ᐅ`Video Masks`ᐊ öŕ åðð ᐅ`Transparent Videos`ᐊ. ᐅ[ᐊĻéåŕñ möŕéᐅ](https://support.wix.com/en/article/wix-video-about-wix-video)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen]"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "[Ûþļöåð îmåĝéš ûšîñĝ ᐅ`Wix Media Manager`ᐊ ţö éñšûŕé ţĥéý åŕé åûţömåţîçåļļý šéŕvéð åš ŴéбÞ. Fîñð ᐅ[ᐊmöŕé ŵåýš ţö öþţîmîžéᐅ](https://support.wix.com/en/article/site-performance-optimizing-your-media)ᐊ ýöûŕ šîţé'š méðîå. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen]"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "[Ŵĥéñ ᐅ[ᐊåððîñĝ ţĥîŕð-þåŕţý çöðéᐅ](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site)ᐊ îñ ţĥé ᐅ`Custom Code`ᐊ ţåб öƒ ýöûŕ šîţé'š ðåšĥбöåŕð, måķé šûŕé îţ'š ðéƒéŕŕéð öŕ ļöåðéð åţ ţĥé éñð öƒ ţĥé çöðé бöðý. Ŵĥéŕé þöššîбļé, ûšé Ŵîx’š ᐅ[ᐊîñţéĝŕåţîöñšᐅ](https://support.wix.com/en/article/about-marketing-integrations)ᐊ ţö émбéð måŕķéţîñĝ ţööļš öñ ýöûŕ šîţé.  one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine]"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "[Ŵîx ûţîļîžéš ÇÐÑš åñð çåçĥîñĝ ţö šéŕvé ŕéšþöñšéš åš ƒåšţ åš þöššîбļé ƒöŕ möšţ vîšîţöŕš. Çöñšîðéŕ ᐅ[ᐊmåñûåļļý éñåбļîñĝ çåçĥîñĝᐅ](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed)ᐊ ƒöŕ ýöûŕ šîţé, éšþéçîåļļý îƒ ûšîñĝ ᐅ`Velo`ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour]"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "[Ŕévîéŵ åñý ţĥîŕð-þåŕţý çöðé ýöû'vé åððéð ţö ýöûŕ šîţé îñ ţĥé ᐅ`Custom Code`ᐊ ţåб öƒ ýöûŕ šîţé'š ðåšĥбöåŕð åñð öñļý ķééþ ţĥé šéŕvîçéš ţĥåţ åŕé ñéçéššåŕý ţö ýöûŕ šîţé. ᐅ[ᐊFîñð öûţ möŕéᐅ](https://support.wix.com/en/article/site-performance-removing-unused-javascript)ᐊ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour]"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "[Çöñšîðéŕ ûþļöåðîñĝ ýöûŕ ĜÎF ţö å šéŕvîçé ŵĥîçĥ ŵîļļ måķé îţ åvåîļåбļé ţö émбéð åš åñ ĤŢMĻ5 vîðéö. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen]"
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "[Šåvé åš ĴŠÖÑ one two]"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "[Öþéñ îñ Vîéŵéŕ one two]"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "[Våļûéš åŕé éšţîmåţéð åñð måý våŕý. Ţĥé ᐅ[ᐊþéŕƒöŕmåñçé šçöŕé îš çåļçûļåţéðᐅ](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)ᐊ ðîŕéçţļý ƒŕöm ţĥéšé méţŕîçš. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen]"
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "[Vîéŵ Öŕîĝîñåļ Ţŕåçé one two three]"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "[Vîéŵ Ţŕåçé one two]"
   },
diff --git a/front_end/third_party/lighthouse/locales/en-XL.json b/front_end/third_party/lighthouse/locales/en-XL.json
index 2ab8b2f..807f1d6 100644
--- a/front_end/third_party/lighthouse/locales/en-XL.json
+++ b/front_end/third_party/lighthouse/locales/en-XL.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` ât́t̂ŕîb́ût́êś m̂át̂ćĥ t́ĥéîŕ r̂ól̂éŝ"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ÂŔÎÁ `role`ŝ én̂áb̂ĺê áŝśîśt̂ív̂é t̂éĉh́n̂ól̂óĝíêś t̂ó k̂ńôẃ t̂h́ê ŕôĺê óf̂ éâćĥ él̂ém̂én̂t́ ôń t̂h́ê ẃêb́ p̂áĝé. Îf́ t̂h́ê `role` v́âĺûéŝ ár̂é m̂íŝśp̂él̂ĺêd́, n̂ót̂ éx̂íŝt́îńĝ ÁR̂ÍÂ `role` v́âĺûéŝ, ór̂ áb̂śt̂ŕâćt̂ ŕôĺêś, t̂h́êń t̂h́ê ṕûŕp̂óŝé ôf́ t̂h́ê él̂ém̂én̂t́ ŵíl̂ĺ n̂ót̂ b́ê ćôḿm̂ún̂íĉát̂éd̂ t́ô úŝér̂ś ôf́ âśŝíŝt́îv́ê t́êćĥńôĺôǵîéŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ ÁR̂ÍÂ ŕôĺêś](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "V̂ál̂úêś âśŝíĝńêd́ t̂ó `role=\"\"` âŕê ńôt́ v̂ál̂íd̂ ÁR̂ÍÂ ŕôĺêś."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "V̂ál̂úêś âśŝíĝńêd́ t̂ó `role=\"\"` âŕê v́âĺîd́ ÂŔÎÁ r̂ól̂éŝ."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Ŵh́êń âń êĺêḿêńt̂ d́ôéŝń't̂ h́âv́ê án̂ áĉćêśŝíb̂ĺê ńâḿê, śĉŕêén̂ ŕêád̂ér̂ś âńn̂óûńĉé ît́ ŵít̂h́ â ǵêńêŕîć n̂ám̂é, m̂ák̂ín̂ǵ ît́ ûńûśâb́l̂é f̂ór̂ úŝér̂ś ŵh́ô ŕêĺŷ ón̂ śĉŕêén̂ ŕêád̂ér̂ś. [L̂éâŕn̂ h́ôẃ t̂ó m̂ák̂é ĉóm̂ḿâńd̂ él̂ém̂én̂t́ŝ ḿôŕê áĉćêśŝíb̂ĺê](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -326,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Îḿâǵê él̂ém̂én̂t́ŝ h́âv́ê `[alt]` át̂t́r̂íb̂út̂éŝ"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Îńf̂ór̂ḿât́îv́ê él̂ém̂én̂t́ŝ śĥóûĺd̂ áîḿ f̂ór̂ śĥór̂t́, d̂éŝćr̂íp̂t́îv́ê ál̂t́êŕn̂át̂ív̂é t̂éx̂t́. Âĺt̂ér̂ńât́îv́ê t́êx́t̂ t́ĥát̂ íŝ éx̂áĉt́l̂ý t̂h́ê śâḿê áŝ t́ĥé t̂éx̂t́ âd́ĵáĉén̂t́ t̂ó t̂h́ê ĺîńk̂ ór̂ ím̂áĝé îś p̂ót̂én̂t́îál̂ĺŷ ćôńf̂úŝín̂ǵ f̂ór̂ śĉŕêén̂ ŕêád̂ér̂ úŝér̂ś, b̂éĉáûśê t́ĥé t̂éx̂t́ ŵíl̂ĺ b̂é r̂éâd́ t̂ẃîćê. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ĥé `alt` ât́t̂ŕîb́ût́ê](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Îḿâǵê él̂ém̂én̂t́ŝ h́âv́ê `[alt]` át̂t́r̂íb̂út̂éŝ t́ĥát̂ ár̂é r̂éd̂ún̂d́âńt̂ t́êx́t̂."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Îḿâǵê él̂ém̂én̂t́ŝ d́ô ńôt́ ĥáv̂é `[alt]` ât́t̂ŕîb́ût́êś t̂h́ât́ âŕê ŕêd́ûńd̂án̂t́ t̂éx̂t́."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Âd́d̂ín̂ǵ d̂íŝćêŕn̂áb̂ĺê án̂d́ âćĉéŝśîb́l̂é t̂éx̂t́ t̂ó îńp̂út̂ b́ût́t̂ón̂ś m̂áŷ h́êĺp̂ śĉŕêén̂ ŕêád̂ér̂ úŝér̂ś ûńd̂ér̂śt̂án̂d́ t̂h́ê ṕûŕp̂óŝé ôf́ t̂h́ê ín̂ṕût́ b̂út̂t́ôń. [L̂éâŕn̂ ḿôŕê áb̂óût́ îńp̂út̂ b́ût́t̂ón̂ś](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -344,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` êĺêḿêńt̂ś ĥáv̂é `[alt]` t̂éx̂t́"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "V̂íŝíb̂ĺê t́êx́t̂ ĺâb́êĺŝ t́ĥát̂ d́ô ńôt́ m̂át̂ćĥ t́ĥé âćĉéŝśîb́l̂é n̂ám̂é ĉán̂ ŕêśûĺt̂ ín̂ á ĉón̂f́ûśîńĝ éx̂ṕêŕîén̂ćê f́ôŕ ŝćr̂éêń r̂éâd́êŕ ûśêŕŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ áĉćêśŝíb̂ĺê ńâḿêś](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Êĺêḿêńt̂ś ŵít̂h́ v̂íŝíb̂ĺê t́êx́t̂ ĺâb́êĺŝ d́ô ńôt́ ĥáv̂é m̂át̂ćĥín̂ǵ âćĉéŝśîb́l̂é n̂ám̂éŝ."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Êĺêḿêńt̂ś ŵít̂h́ v̂íŝíb̂ĺê t́êx́t̂ ĺâb́êĺŝ h́âv́ê ḿât́ĉh́îńĝ áĉćêśŝíb̂ĺê ńâḿêś."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "L̂áb̂él̂ś êńŝúr̂é t̂h́ât́ f̂ór̂ḿ ĉón̂t́r̂ól̂ś âŕê án̂ńôún̂ćêd́ p̂ŕôṕêŕl̂ý b̂ý âśŝíŝt́îv́ê t́êćĥńôĺôǵîéŝ, ĺîḱê śĉŕêén̂ ŕêád̂ér̂ś. [L̂éâŕn̂ ḿôŕê áb̂óût́ f̂ór̂ḿ êĺêḿêńt̂ ĺâb́êĺŝ](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -434,6 +461,15 @@
   "core/audits/accessibility/select-name.js | title": {
     "message": "Ŝél̂éĉt́ êĺêḿêńt̂ś ĥáv̂é âśŝóĉíât́êd́ l̂áb̂él̂ él̂ém̂én̂t́ŝ."
   },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Îńĉĺûd́îńĝ á ŝḱîṕ l̂ín̂ḱ ĉán̂ h́êĺp̂ úŝér̂ś ŝḱîṕ t̂ó t̂h́ê ḿâín̂ ćôńt̂én̂t́ t̂ó ŝáv̂é t̂ím̂é. [L̂éâŕn̂ ḿôŕê áb̂óût́ ŝḱîṕ l̂ín̂ḱŝ](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Ŝḱîṕ l̂ín̂ḱŝ ár̂é n̂ót̂ f́ôćûśâb́l̂é."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Ŝḱîṕ l̂ín̂ḱŝ ár̂é f̂óĉúŝáb̂ĺê."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Â v́âĺûé ĝŕêát̂ér̂ t́ĥán̂ 0 ím̂ṕl̂íêś âń êx́p̂ĺîćît́ n̂áv̂íĝát̂íôń ôŕd̂ér̂ín̂ǵ. Âĺt̂h́ôúĝh́ t̂éĉh́n̂íĉál̂ĺŷ v́âĺîd́, t̂h́îś ôf́t̂én̂ ćr̂éât́êś f̂ŕûśt̂ŕât́îńĝ éx̂ṕêŕîén̂ćêś f̂ór̂ úŝér̂ś ŵh́ô ŕêĺŷ ón̂ áŝśîśt̂ív̂é t̂éĉh́n̂ól̂óĝíêś. [L̂éâŕn̂ ḿôŕê áb̂óût́ t̂h́ê `tabindex` át̂t́r̂íb̂út̂é](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -443,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "N̂ó êĺêḿêńt̂ h́âś â `[tabindex]` v́âĺûé ĝŕêát̂ér̂ t́ĥán̂ 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "T̂h́ê śûḿm̂ár̂ý ât́t̂ŕîb́ût́ê śĥóûĺd̂ d́êśĉŕîb́ê t́ĥé t̂áb̂ĺê śt̂ŕûćt̂úr̂é, ŵh́îĺê `<caption>` śĥóûĺd̂ h́âv́ê t́ĥé ôńŝćr̂éêń t̂ít̂ĺê. Áĉćûŕât́ê t́âb́l̂é m̂ár̂ḱ-ûṕ ĥél̂ṕŝ úŝér̂ś ôf́ ŝćr̂éêń r̂éâd́êŕŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ śûḿm̂ár̂ý âńd̂ ćâṕt̂íôń](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "T̂áb̂ĺêś ĥáv̂é t̂h́ê śâḿê ćôńt̂én̂t́ îń t̂h́ê śûḿm̂ár̂ý ât́t̂ŕîb́ût́ê án̂d́ `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "T̂áb̂ĺêś ĥáv̂é d̂íf̂f́êŕêńt̂ ćôńt̂én̂t́ îń t̂h́ê śûḿm̂ár̂ý ât́t̂ŕîb́ût́ê án̂d́ `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Ŝćr̂éêń r̂éâd́êŕŝ h́âv́ê f́êát̂úr̂éŝ t́ô ḿâḱê ńâv́îǵât́îńĝ t́âb́l̂éŝ éâśîér̂. Én̂śûŕîńĝ t́ĥát̂ t́âb́l̂éŝ úŝé t̂h́ê áĉt́ûál̂ ćâṕt̂íôń êĺêḿêńt̂ ín̂śt̂éâd́ ôf́ ĉél̂ĺŝ ẃît́ĥ t́ĥé `[colspan]` ât́t̂ŕîb́ût́ê ḿâý îḿp̂ŕôv́ê t́ĥé êx́p̂ér̂íêńĉé f̂ór̂ śĉŕêén̂ ŕêád̂ér̂ úŝér̂ś. [L̂éâŕn̂ ḿôŕê áb̂óût́ ĉáp̂t́îón̂ś](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -453,7 +498,7 @@
     "message": "T̂áb̂ĺêś ûśê `<caption>` ín̂śt̂éâd́ ôf́ ĉél̂ĺŝ ẃît́ĥ t́ĥé `[colspan]` ât́t̂ŕîb́ût́ê t́ô ín̂d́îćât́ê á ĉáp̂t́îón̂."
   },
   "core/audits/accessibility/target-size.js | description": {
-    "message": "T̂óûćĥ t́âŕĝét̂ś ŵít̂h́ ŝúf̂f́îćîén̂t́ ŝíẑé âńd̂ śp̂áĉín̂ǵ ĥél̂ṕ ûśêŕŝ ẃĥó m̂áŷ h́âv́ê d́îf́f̂íĉúl̂t́ŷ t́âŕĝét̂ín̂ǵ ŝḿâĺl̂ ćôńt̂ŕôĺŝ áĉt́îv́ât́ê t́ĥé t̂ár̂ǵêt́ŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ôúĉh́ t̂ár̂ǵêt́ŝ](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+    "message": "T̂óûćĥ t́âŕĝét̂ś ŵít̂h́ ŝúf̂f́îćîén̂t́ ŝíẑé âńd̂ śp̂áĉín̂ǵ ĥél̂ṕ ûśêŕŝ ẃĥó m̂áŷ h́âv́ê d́îf́f̂íĉúl̂t́ŷ t́âŕĝét̂ín̂ǵ ŝḿâĺl̂ ćôńt̂ŕôĺŝ t́ô áĉt́îv́ât́ê t́ĥé t̂ár̂ǵêt́ŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ôúĉh́ t̂ár̂ǵêt́ŝ](https://dequeuniversity.com/rules/axe/4.7/target-size)."
   },
   "core/audits/accessibility/target-size.js | failureTitle": {
     "message": "T̂óûćĥ t́âŕĝét̂ś d̂ó n̂ót̂ h́âv́ê śûf́f̂íĉíêńt̂ śîźê ór̂ śp̂áĉín̂ǵ."
@@ -1010,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "P̂áĝé ĥáŝ ńô ḿâńîf́êśt̂ <ĺîńk̂> ÚR̂Ĺ"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "N̂ó m̂át̂ćĥín̂ǵ ŝér̂v́îćê ẃôŕk̂ér̂ d́êt́êćt̂éd̂. Ýôú m̂áŷ ńêéd̂ t́ô ŕêĺôád̂ t́ĥé p̂áĝé, ôŕ ĉh́êćk̂ t́ĥát̂ t́ĥé ŝćôṕê óf̂ t́ĥé ŝér̂v́îćê ẃôŕk̂ér̂ f́ôŕ t̂h́ê ćûŕr̂én̂t́ p̂áĝé êńĉĺôśêś t̂h́ê śĉóp̂é âńd̂ śt̂ár̂t́ ÛŔL̂ f́r̂óm̂ t́ĥé m̂án̂íf̂éŝt́."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Ĉóûĺd̂ ńôt́ ĉh́êćk̂ śêŕv̂íĉé ŵór̂ḱêŕ ŵít̂h́ôút̂ á 'ŝt́âŕt̂_úr̂ĺ' f̂íêĺd̂ ín̂ t́ĥé m̂án̂íf̂éŝt́"
   },
@@ -1041,7 +1083,7 @@
     "message": "p̂ŕêf́êŕ_r̂él̂át̂éd̂_áp̂ṕl̂íĉát̂íôńŝ íŝ ón̂ĺŷ śûṕp̂ór̂t́êd́ ôń Ĉh́r̂óm̂é B̂ét̂á âńd̂ Śt̂áb̂ĺê ćĥán̂ńêĺŝ ón̂ Án̂d́r̂óîd́."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "L̂íĝh́t̂h́ôúŝé ĉóûĺd̂ ńôt́ d̂ét̂ér̂ḿîńê íf̂ t́ĥér̂é ŵáŝ á ŝér̂v́îćê ẃôŕk̂ér̂. Ṕl̂éâśê t́r̂ý ŵít̂h́ â ńêẃêŕ v̂ér̂śîón̂ óf̂ Ćĥŕôḿê."
+    "message": "L̂íĝh́t̂h́ôúŝé ĉóûĺd̂ ńôt́ d̂ét̂ér̂ḿîńê íf̂ t́ĥé p̂áĝé îś îńŝt́âĺl̂áb̂ĺê. Ṕl̂éâśê t́r̂ý ŵít̂h́ â ńêẃêŕ v̂ér̂śîón̂ óf̂ Ćĥŕôḿê."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "T̂h́ê ḿâńîf́êśt̂ ÚR̂Ĺ ŝćĥém̂é ({scheme}) îś n̂ót̂ śûṕp̂ór̂t́êd́ ôń Âńd̂ŕôíd̂."
@@ -1184,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Ĉúm̂úl̂át̂ív̂é L̂áŷóût́ Ŝh́îf́t̂ ḿêáŝúr̂éŝ t́ĥé m̂óv̂ém̂én̂t́ ôf́ v̂íŝíb̂ĺê él̂ém̂én̂t́ŝ ẃît́ĥín̂ t́ĥé v̂íêẃp̂ór̂t́. [L̂éâŕn̂ ḿôŕê áb̂óût́ t̂h́ê Ćûḿûĺât́îv́ê Ĺâýôút̂ Śĥíf̂t́ m̂ét̂ŕîć](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Îńt̂ér̂áĉt́îón̂ t́ô Ńêx́t̂ Ṕâín̂t́ m̂éâśûŕêś p̂áĝé r̂éŝṕôńŝív̂én̂éŝś, ĥóŵ ĺôńĝ ít̂ t́âḱêś t̂h́ê ṕâǵê t́ô v́îśîb́l̂ý r̂éŝṕôńd̂ t́ô úŝér̂ ín̂ṕût́. [L̂éâŕn̂ ḿôŕê áb̂óût́ t̂h́ê Ín̂t́êŕâćt̂íôń t̂ó N̂éx̂t́ P̂áîńt̂ ḿêt́r̂íĉ](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "F̂ír̂śt̂ Ćôńt̂én̂t́f̂úl̂ Ṕâín̂t́ m̂ár̂ḱŝ t́ĥé t̂ím̂é ât́ ŵh́îćĥ t́ĥé f̂ír̂śt̂ t́êx́t̂ ór̂ ím̂áĝé îś p̂áîńt̂éd̂. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ĥé F̂ír̂śt̂ Ćôńt̂én̂t́f̂úl̂ Ṕâín̂t́ m̂ét̂ŕîć](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "F̂ír̂śt̂ Ḿêán̂ín̂ǵf̂úl̂ Ṕâín̂t́ m̂éâśûŕêś ŵh́êń t̂h́ê ṕr̂ím̂ár̂ý ĉón̂t́êńt̂ óf̂ á p̂áĝé îś v̂íŝíb̂ĺê. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ĥé F̂ír̂śt̂ Ḿêán̂ín̂ǵf̂úl̂ Ṕâín̂t́ m̂ét̂ŕîć](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Îńt̂ér̂áĉt́îón̂ t́ô Ńêx́t̂ Ṕâín̂t́ m̂éâśûŕêś p̂áĝé r̂éŝṕôńŝív̂én̂éŝś, ĥóŵ ĺôńĝ ít̂ t́âḱêś t̂h́ê ṕâǵê t́ô v́îśîb́l̂ý r̂éŝṕôńd̂ t́ô úŝér̂ ín̂ṕût́. [L̂éâŕn̂ ḿôŕê áb̂óût́ t̂h́ê Ín̂t́êŕâćt̂íôń t̂ó N̂éx̂t́ P̂áîńt̂ ḿêt́r̂íĉ](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "T̂ím̂é t̂ó Îńt̂ér̂áĉt́îv́ê íŝ t́ĥé âḿôún̂t́ ôf́ t̂ím̂é ît́ t̂ák̂éŝ f́ôŕ t̂h́ê ṕâǵê t́ô b́êćôḿê f́ûĺl̂ý îńt̂ér̂áĉt́îv́ê. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ĥé T̂ím̂é t̂ó Îńt̂ér̂áĉt́îv́ê ḿêt́r̂íĉ](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1286,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Âv́ôíd̂ ḿûĺt̂íp̂ĺê ṕâǵê ŕêd́îŕêćt̂ś"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "T̂ó ŝét̂ b́ûd́ĝét̂ś f̂ór̂ t́ĥé q̂úâńt̂ít̂ý âńd̂ śîźê óf̂ ṕâǵê ŕêśôúr̂ćêś, âd́d̂ á b̂úd̂ǵêt́.ĵśôń f̂íl̂é. [L̂éâŕn̂ ḿôŕê áb̂óût́ p̂ér̂f́ôŕm̂án̂ćê b́ûd́ĝét̂ś](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount, plural, =1 {1 r̂éq̂úêśt̂ • {byteCount, number, bytes} ḰîB́} other {# r̂éq̂úêśt̂ś • {byteCount, number, bytes} K̂íB̂}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "K̂éêṕ r̂éq̂úêśt̂ ćôún̂t́ŝ ĺôẃ âńd̂ t́r̂án̂śf̂ér̂ śîźêś ŝḿâĺl̂"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Ĉán̂ón̂íĉál̂ ĺîńk̂ś ŝúĝǵêśt̂ ẃĥíĉh́ ÛŔL̂ t́ô śĥóŵ ín̂ śêár̂ćĥ ŕêśûĺt̂ś. [L̂éâŕn̂ ḿôŕê áb̂óût́ ĉán̂ón̂íĉál̂ ĺîńk̂ś](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1484,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Îńît́îál̂ śêŕv̂ér̂ ŕêśp̂ón̂śê t́îḿê ẃâś ŝh́ôŕt̂"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "T̂h́ê śêŕv̂íĉé ŵór̂ḱêŕ îś t̂h́ê t́êćĥńôĺôǵŷ t́ĥát̂ én̂áb̂ĺêś ŷóûŕ âṕp̂ t́ô úŝé m̂án̂ý P̂ŕôǵr̂éŝśîv́ê Ẃêb́ Âṕp̂ f́êát̂úr̂éŝ, śûćĥ áŝ óf̂f́l̂ín̂é, âd́d̂ t́ô h́ôḿêśĉŕêén̂, án̂d́ p̂úŝh́ n̂ót̂íf̂íĉát̂íôńŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ Śêŕv̂íĉé Ŵór̂ḱêŕŝ](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "T̂h́îś p̂áĝé îś ĉón̂t́r̂ól̂ĺêd́ b̂ý â śêŕv̂íĉé ŵór̂ḱêŕ, ĥóŵév̂ér̂ ńô `start_url` ẃâś f̂óûńd̂ b́êćâúŝé m̂án̂íf̂éŝt́ f̂áîĺêd́ t̂ó p̂ár̂śê áŝ v́âĺîd́ ĴŚÔŃ"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "T̂h́îś p̂áĝé îś ĉón̂t́r̂ól̂ĺêd́ b̂ý â śêŕv̂íĉé ŵór̂ḱêŕ, ĥóŵév̂ér̂ t́ĥé `start_url` ({startUrl}) îś n̂ót̂ ín̂ t́ĥé ŝér̂v́îćê ẃôŕk̂ér̂'ś ŝćôṕê ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "T̂h́îś p̂áĝé îś ĉón̂t́r̂ól̂ĺêd́ b̂ý â śêŕv̂íĉé ŵór̂ḱêŕ, ĥóŵév̂ér̂ ńô `start_url` ẃâś f̂óûńd̂ b́êćâúŝé n̂ó m̂án̂íf̂éŝt́ ŵáŝ f́êt́ĉh́êd́."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "T̂h́îś ôŕîǵîń ĥáŝ ón̂é ôŕ m̂ór̂é ŝér̂v́îćê ẃôŕk̂ér̂ś, ĥóŵév̂ér̂ t́ĥé p̂áĝé ({pageUrl}) îś n̂ót̂ ín̂ śĉóp̂é."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "D̂óêś n̂ót̂ ŕêǵîśt̂ér̂ á ŝér̂v́îćê ẃôŕk̂ér̂ t́ĥát̂ ćôńt̂ŕôĺŝ ṕâǵê án̂d́ `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "R̂éĝíŝt́êŕŝ á ŝér̂v́îćê ẃôŕk̂ér̂ t́ĥát̂ ćôńt̂ŕôĺŝ ṕâǵê án̂d́ `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Â t́ĥém̂éd̂ śp̂ĺâśĥ śĉŕêén̂ én̂śûŕêś â h́îǵĥ-q́ûál̂ít̂ý êx́p̂ér̂íêńĉé ŵh́êń ûśêŕŝ ĺâún̂ćĥ ýôúr̂ áp̂ṕ f̂ŕôḿ t̂h́êír̂ h́ôḿêśĉŕêén̂ś. [L̂éâŕn̂ ḿôŕê áb̂óût́ ŝṕl̂áŝh́ ŝćr̂éêńŝ](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1695,7 +1707,7 @@
     "message": "B̂éŝt́ p̂ŕâćt̂íĉéŝ"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "T̂h́êśê ćĥéĉḱŝ h́îǵĥĺîǵĥt́ ôṕp̂ór̂t́ûńît́îéŝ t́ô [ím̂ṕr̂óv̂é t̂h́ê áĉćêśŝíb̂íl̂ít̂ý ôf́ ŷóûŕ ŵéb̂ áp̂ṕ](https://developer.chrome.com/docs/lighthouse/accessibility/). Ôńl̂ý â śûb́ŝét̂ óf̂ áĉćêśŝíb̂íl̂ít̂ý îśŝúêś ĉán̂ b́ê áût́ôḿât́îćâĺl̂ý d̂ét̂éĉt́êd́ ŝó m̂án̂úâĺ t̂éŝt́îńĝ íŝ ál̂śô én̂ćôúr̂áĝéd̂."
+    "message": "T̂h́êśê ćĥéĉḱŝ h́îǵĥĺîǵĥt́ ôṕp̂ór̂t́ûńît́îéŝ t́ô [ím̂ṕr̂óv̂é t̂h́ê áĉćêśŝíb̂íl̂ít̂ý ôf́ ŷóûŕ ŵéb̂ áp̂ṕ](https://developer.chrome.com/docs/lighthouse/accessibility/). Âút̂óm̂át̂íĉ d́êt́êćt̂íôń ĉán̂ ón̂ĺŷ d́êt́êćt̂ á ŝúb̂śêt́ ôf́ îśŝúêś âńd̂ d́ôéŝ ńôt́ ĝúâŕâńt̂éê t́ĥé âćĉéŝśîb́îĺît́ŷ óf̂ ýôúr̂ ẃêb́ âṕp̂, śô [ḿâńûál̂ t́êśt̂ín̂ǵ](https://web.dev/how-to-review/) îś âĺŝó êńĉóûŕâǵêd́."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "T̂h́êśê ít̂ém̂ś âd́d̂ŕêśŝ ár̂éâś ŵh́îćĥ án̂ áût́ôḿât́êd́ t̂éŝt́îńĝ t́ôól̂ ćâńn̂ót̂ ćôv́êŕ. L̂éâŕn̂ ḿôŕê ín̂ óûŕ ĝúîd́ê ón̂ [ćôńd̂úĉt́îńĝ án̂ áĉćêśŝíb̂íl̂ít̂ý r̂év̂íêẃ](https://web.dev/how-to-review/)."
@@ -2841,7 +2853,7 @@
     "message": "Îńŝt́âĺl̂ [á D̂ŕûṕâĺ m̂ód̂úl̂é](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) t̂h́ât́ ĉán̂ ĺâźŷ ĺôád̂ ím̂áĝéŝ. Śûćĥ ḿôd́ûĺêś p̂ŕôv́îd́ê t́ĥé âb́îĺît́ŷ t́ô d́êf́êŕ âńŷ óf̂f́ŝćr̂éêń îḿâǵêś t̂ó îḿp̂ŕôv́ê ṕêŕf̂ór̂ḿâńĉé."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Ĉón̂śîd́êŕ ûśîńĝ á m̂ód̂úl̂é t̂ó îńl̂ín̂é ĉŕît́îćâĺ ĈŚŜ án̂d́ Ĵáv̂áŜćr̂íp̂t́, ôŕ p̂ót̂én̂t́îál̂ĺŷ ĺôád̂ áŝśêt́ŝ áŝýn̂ćĥŕôńôúŝĺŷ v́îá Ĵáv̂áŜćr̂íp̂t́ ŝúĉh́ âś t̂h́ê [Ád̂v́âńĉéd̂ ĆŜŚ/ĴŚ Âǵĝŕêǵât́îón̂](https://www.drupal.org/project/advagg) ḿôd́ûĺê. B́êẃâŕê t́ĥát̂ óp̂t́îḿîźât́îón̂ś p̂ŕôv́îd́êd́ b̂ý t̂h́îś m̂ód̂úl̂é m̂áŷ b́r̂éâḱ ŷóûŕ ŝít̂é, ŝó ŷóû ẃîĺl̂ ĺîḱêĺŷ ńêéd̂ t́ô ḿâḱê ćôd́ê ćĥán̂ǵêś."
+    "message": "Ĉón̂śîd́êŕ ûśîńĝ á m̂ód̂úl̂é t̂ó îńl̂ín̂é ĉŕît́îćâĺ ĈŚŜ án̂d́ Ĵáv̂áŜćr̂íp̂t́, âńd̂ úŝé t̂h́ê d́êf́êŕ ât́t̂ŕîb́ût́ê f́ôŕ n̂ón̂-ćr̂ít̂íĉál̂ ĆŜŚ ôŕ Ĵáv̂áŜćr̂íp̂t́."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "T̂h́êḿêś, m̂ód̂úl̂éŝ, án̂d́ ŝér̂v́êŕ ŝṕêćîf́îćât́îón̂ś âĺl̂ ćôńt̂ŕîb́ût́ê t́ô śêŕv̂ér̂ ŕêśp̂ón̂śê t́îḿê. Ćôńŝíd̂ér̂ f́îńd̂ín̂ǵ â ḿôŕê óp̂t́îḿîźêd́ t̂h́êḿê, ćâŕêf́ûĺl̂ý ŝél̂éĉt́îńĝ án̂ óp̂t́îḿîźât́îón̂ ḿôd́ûĺê, án̂d́/ôŕ ûṕĝŕâd́îńĝ ýôúr̂ śêŕv̂ér̂. Ýôúr̂ h́ôśt̂ín̂ǵ ŝér̂v́êŕŝ śĥóûĺd̂ ḿâḱê úŝé ôf́ P̂H́P̂ óp̂ćôd́ê ćâćĥín̂ǵ, m̂ém̂ór̂ý-ĉáĉh́îńĝ t́ô ŕêd́ûćê d́ât́âb́âśê q́ûér̂ý t̂ím̂éŝ śûćĥ áŝ Ŕêd́îś ôŕ M̂ém̂ćâćĥéd̂, áŝ ẃêĺl̂ áŝ óp̂t́îḿîźêd́ âṕp̂ĺîćât́îón̂ ĺôǵîć t̂ó p̂ŕêṕâŕê ṕâǵêś f̂áŝt́êŕ."
@@ -2850,10 +2862,10 @@
     "message": "Ĉón̂śîd́êŕ ûśîńĝ [Ŕêśp̂ón̂śîv́ê Ím̂áĝé Ŝt́ŷĺêś](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) t̂ó r̂éd̂úĉé t̂h́ê śîźê óf̂ ím̂áĝéŝ ĺôád̂éd̂ ón̂ ýôúr̂ ṕâǵê. Íf̂ ýôú âŕê úŝín̂ǵ V̂íêẃŝ t́ô śĥóŵ ḿûĺt̂íp̂ĺê ćôńt̂én̂t́ ît́êḿŝ ón̂ á p̂áĝé, ĉón̂śîd́êŕ îḿp̂ĺêḿêńt̂ín̂ǵ p̂áĝín̂át̂íôń t̂ó l̂ím̂ít̂ t́ĥé n̂úm̂b́êŕ ôf́ ĉón̂t́êńt̂ ít̂ém̂ś ŝh́ôẃn̂ ón̂ á ĝív̂én̂ ṕâǵê."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Êńŝúr̂é ŷóû h́âv́ê én̂áb̂ĺêd́ \"Âǵĝŕêǵât́ê ĆŜŚ f̂íl̂éŝ\" ín̂ t́ĥé \"Âd́m̂ín̂íŝt́r̂át̂íôń » Ĉón̂f́îǵûŕât́îón̂ » D́êv́êĺôṕm̂én̂t́\" p̂áĝé. Ŷóû ćâń âĺŝó ĉón̂f́îǵûŕê ḿôŕê ád̂v́âńĉéd̂ áĝǵr̂éĝát̂íôń ôṕt̂íôńŝ t́ĥŕôúĝh́ [âd́d̂ít̂íôńâĺ m̂ód̂úl̂éŝ](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) t́ô śp̂éêd́ ûṕ ŷóûŕ ŝít̂é b̂ý ĉón̂ćât́êńât́îńĝ, ḿîńîf́ŷín̂ǵ, âńd̂ ćôḿp̂ŕêśŝín̂ǵ ŷóûŕ ĈŚŜ śt̂ýl̂éŝ."
+    "message": "Êńŝúr̂é ŷóû h́âv́ê én̂áb̂ĺêd́ \"Âǵĝŕêǵât́ê ĆŜŚ f̂íl̂éŝ\" ín̂ t́ĥé \"Âd́m̂ín̂íŝt́r̂át̂íôń » Ĉón̂f́îǵûŕât́îón̂ » D́êv́êĺôṕm̂én̂t́\" p̂áĝé.  Êńŝúr̂é ŷóûŕ D̂ŕûṕâĺ ŝít̂é îś r̂ún̂ńîńĝ át̂ ĺêáŝt́ D̂ŕûṕâĺ 10.1 f̂ór̂ ím̂ṕr̂óv̂éd̂ áŝśêt́ âǵĝŕêǵât́îón̂ śûṕp̂ór̂t́."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Êńŝúr̂é ŷóû h́âv́ê én̂áb̂ĺêd́ \"Âǵĝŕêǵât́ê J́âv́âŚĉŕîṕt̂ f́îĺêś\" îń t̂h́ê \"Ád̂ḿîńîśt̂ŕât́îón̂ » Ćôńf̂íĝúr̂át̂íôń » D̂év̂él̂óp̂ḿêńt̂\" ṕâǵê. Ýôú ĉán̂ ál̂śô ćôńf̂íĝúr̂é m̂ór̂é âd́v̂án̂ćêd́ âǵĝŕêǵât́îón̂ óp̂t́îón̂ś t̂h́r̂óûǵĥ [ád̂d́ît́îón̂ál̂ ḿôd́ûĺêś](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) t̂ó ŝṕêéd̂ úp̂ ýôúr̂ śît́ê b́ŷ ćôńĉát̂én̂át̂ín̂ǵ, m̂ín̂íf̂ýîńĝ, án̂d́ ĉóm̂ṕr̂éŝśîńĝ ýôúr̂ J́âv́âŚĉŕîṕt̂ áŝśêt́ŝ."
+    "message": "Êńŝúr̂é ŷóû h́âv́ê én̂áb̂ĺêd́ \"Âǵĝŕêǵât́ê J́âv́âŚĉŕîṕt̂ f́îĺêś\" îń t̂h́ê \"Ád̂ḿîńîśt̂ŕât́îón̂ » Ćôńf̂íĝúr̂át̂íôń » D̂év̂él̂óp̂ḿêńt̂\" ṕâǵê.  Én̂śûŕê ýôúr̂ D́r̂úp̂ál̂ śît́ê íŝ ŕûńn̂ín̂ǵ ât́ l̂éâśt̂ D́r̂úp̂ál̂ 10.1 f́ôŕ îḿp̂ŕôv́êd́ âśŝét̂ áĝǵr̂éĝát̂íôń ŝúp̂ṕôŕt̂."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Ĉón̂śîd́êŕ r̂ém̂óv̂ín̂ǵ ûńûśêd́ ĈŚŜ ŕûĺêś âńd̂ ón̂ĺŷ át̂t́âćĥ t́ĥé n̂éêd́êd́ D̂ŕûṕâĺ l̂íb̂ŕâŕîéŝ t́ô t́ĥé r̂él̂év̂án̂t́ p̂áĝé ôŕ ĉóm̂ṕôńêńt̂ ín̂ á p̂áĝé. Ŝéê t́ĥé [D̂ŕûṕâĺ d̂óĉúm̂én̂t́ât́îón̂ ĺîńk̂](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) f́ôŕ d̂ét̂áîĺŝ. T́ô íd̂én̂t́îf́ŷ át̂t́âćĥéd̂ ĺîb́r̂ár̂íêś t̂h́ât́ âŕê ád̂d́îńĝ éx̂t́r̂án̂éôúŝ ĆŜŚ, t̂ŕŷ ŕûńn̂ín̂ǵ [ĉód̂é ĉóv̂ér̂áĝé](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) îń Ĉh́r̂óm̂é D̂év̂T́ôól̂ś. Ŷóû ćâń îd́êńt̂íf̂ý t̂h́ê t́ĥém̂é/m̂ód̂úl̂é r̂éŝṕôńŝíb̂ĺê f́r̂óm̂ t́ĥé ÛŔL̂ óf̂ t́ĥé ŝt́ŷĺêśĥéêt́ ŵh́êń ĈŚŜ áĝǵr̂éĝát̂íôń îś d̂íŝáb̂ĺêd́ îń ŷóûŕ D̂ŕûṕâĺ ŝít̂é. L̂óôḱ ôút̂ f́ôŕ t̂h́êḿêś/m̂ód̂úl̂éŝ t́ĥát̂ h́âv́ê ḿâńŷ śt̂ýl̂éŝh́êét̂ś îń t̂h́ê ĺîśt̂ ẃĥíĉh́ ĥáv̂é â ĺôt́ ôf́ r̂éd̂ ín̂ ćôd́ê ćôv́êŕâǵê. Á t̂h́êḿê/ḿôd́ûĺê śĥóûĺd̂ ón̂ĺŷ én̂q́ûéûé â śt̂ýl̂éŝh́êét̂ íf̂ ít̂ íŝ áĉt́ûál̂ĺŷ úŝéd̂ ón̂ t́ĥé p̂áĝé."
@@ -3053,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Êńâb́l̂é ĉóm̂ṕr̂éŝśîón̂ ón̂ ýôúr̂ Ńêx́t̂.j́ŝ śêŕv̂ér̂. [Ĺêár̂ń m̂ór̂é](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Ĉón̂t́âćt̂ ýôúr̂ áĉćôún̂t́ m̂án̂áĝér̂ t́ô én̂áb̂ĺê [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Ćôńf̂íĝúr̂ín̂ǵ ît́ ŵíl̂ĺ p̂ŕîór̂ít̂íẑé âńd̂ óp̂t́îḿîźê ýôúr̂ ṕâǵê ŕêńd̂ér̂ín̂ǵ p̂ér̂f́ôŕm̂án̂ćê."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Ûśê t́ĥé [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) ôṕt̂íôń îń N̂ít̂ŕôṔâćk̂ t́ô śêt́ â d́êśîŕêd́ v̂ál̂úê f́ôŕ t̂h́ê ĆŜŚ f̂ón̂t́-d̂íŝṕl̂áŷ ŕûĺê."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Ûśê [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) t́ô áût́ôḿât́îćâĺl̂ý ĉón̂v́êŕt̂ ýôúr̂ ím̂áĝéŝ t́ô Ẃêb́P̂."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "D̂éf̂ér̂ óf̂f́ŝćr̂éêń îḿâǵêś b̂ý êńâb́l̂ín̂ǵ [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Êńâb́l̂é [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) îń N̂ít̂ŕôṔâćk̂ f́ôŕ f̂áŝt́êŕ îńît́îál̂ ĺôád̂ t́îḿêś."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Îḿp̂ŕôv́ê śêŕv̂ér̂ ŕêśp̂ón̂śê t́îḿê án̂d́ ôṕt̂ím̂íẑé p̂ér̂ćêív̂éd̂ ṕêŕf̂ór̂ḿâńĉé b̂ý âćt̂ív̂át̂ín̂ǵ [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Êńâb́l̂é [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) îń ŷóûŕ Ĉáĉh́îńĝ śêt́t̂ín̂ǵŝ t́ô ŕêd́ûćê t́ĥé ŝíẑé ôf́ ŷóûŕ ĈŚŜ, H́T̂ḾL̂, án̂d́ Ĵáv̂áŜćr̂íp̂t́ f̂íl̂éŝ f́ôŕ f̂áŝt́êŕ l̂óâd́ t̂ím̂éŝ."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Êńâb́l̂é [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) îń ŷóûŕ Ĉáĉh́îńĝ śêt́t̂ín̂ǵŝ t́ô ŕêd́ûćê t́ĥé ŝíẑé ôf́ ŷóûŕ ĴŚ, ĤT́M̂Ĺ, âńd̂ ĆŜŚ f̂íl̂éŝ f́ôŕ f̂áŝt́êŕ l̂óâd́ t̂ím̂éŝ."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Êńâb́l̂é [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) t̂ó r̂ém̂óv̂é ĈŚŜ ŕûĺêś t̂h́ât́ âŕê ńôt́ âṕp̂ĺîćâb́l̂é t̂ó t̂h́îś p̂áĝé."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Ĉón̂f́îǵûŕê [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) ín̂ Ńît́r̂óP̂áĉḱ t̂ó d̂él̂áŷ ĺôád̂ín̂ǵ ôf́ ŝćr̂íp̂t́ŝ ún̂t́îĺ t̂h́êý âŕê ńêéd̂éd̂."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Ĝó t̂ó t̂h́ê [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) f́êát̂úr̂é îń t̂h́ê `Caching` ḿêńû án̂d́ âd́ĵúŝt́ ŷóûŕ p̂áĝé ĉáĉh́ê éx̂ṕîŕât́îón̂ t́îḿê t́ô ím̂ṕr̂óv̂é l̂óâd́îńĝ t́îḿêś âńd̂ úŝér̂ éx̂ṕêŕîén̂ćê."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Âút̂óm̂át̂íĉál̂ĺŷ ćôḿp̂ŕêśŝ, óp̂t́îḿîźê, án̂d́ ĉón̂v́êŕt̂ ýôúr̂ ím̂áĝéŝ ín̂t́ô Ẃêb́P̂ b́ŷ én̂áb̂ĺîńĝ t́ĥé [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) ŝét̂t́îńĝ."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Êńâb́l̂é [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) t̂ó p̂ŕêém̂ṕt̂ív̂él̂ý ôṕt̂ím̂íẑé ŷóûŕ îḿâǵêś âńd̂ ḿâḱê t́ĥém̂ ḿât́ĉh́ t̂h́ê d́îḿêńŝíôńŝ óf̂ t́ĥé ĉón̂t́âín̂ér̂ś t̂h́êý’r̂é d̂íŝṕl̂áŷéd̂ ín̂ áĉŕôśŝ ál̂ĺ d̂év̂íĉéŝ."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Ûśê [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) ín̂ Ńît́r̂óP̂áĉḱ t̂ó r̂éd̂úĉé t̂h́ê śîźê óf̂ t́ĥé f̂íl̂éŝ t́ĥát̂ ár̂é ŝén̂t́ t̂ó t̂h́ê b́r̂óŵśêŕ."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Ûśê t́ĥé `nuxt/image` ĉóm̂ṕôńêńt̂ án̂d́ ŝét̂ `format=\"webp\"`. [Ĺêár̂ń m̂ór̂é](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3257,6 +3311,9 @@
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Ôṕêń îń V̂íêẃêŕ"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "V̂íêẃ Ûńt̂h́r̂ót̂t́l̂éd̂ T́r̂áĉé"
+  },
   "report/renderer/report-utils.js | errorLabel": {
     "message": "Êŕr̂ór̂!"
   },
@@ -3374,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "V̂ál̂úêś âŕê éŝt́îḿât́êd́ âńd̂ ḿâý v̂ár̂ý. T̂h́ê [ṕêŕf̂ór̂ḿâńĉé ŝćôŕê íŝ ćâĺĉúl̂át̂éd̂](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) d́îŕêćt̂ĺŷ f́r̂óm̂ t́ĥéŝé m̂ét̂ŕîćŝ."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "V̂íêẃ Ôŕîǵîńâĺ T̂ŕâćê"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "V̂íêẃ T̂ŕâćê"
   },
diff --git a/front_end/third_party/lighthouse/locales/es-419.json b/front_end/third_party/lighthouse/locales/es-419.json
index 2543843..4dfb4a6 100644
--- a/front_end/third_party/lighthouse/locales/es-419.json
+++ b/front_end/third_party/lighthouse/locales/es-419.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Los atributos `[aria-*]` coinciden con sus roles"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Si un elemento no tiene un nombre de accesibilidad, los lectores de pantalla lo leerán en voz alta con un nombre genérico, por lo que resulta inservible para los usuarios que necesitan usar lectores de pantalla. [Obtén información para hacer que los elementos de comando sean más accesibles](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Los elementos `button`, `link` y `menuitem` tienen nombres aptos para la accesibilidad"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Los elementos de diálogo ARIA sin nombres de accesibilidad pueden impedir que los usuarios de lectores de pantalla distingan el propósito de estos elementos. [Obtén información para lograr que los elementos de diálogo ARIA sean más accesibles](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Los elementos con `role=\"dialog\"` o `role=\"alertdialog\"` no tienen nombres de accesibilidad."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Los elementos con `role=\"dialog\"` o `role=\"alertdialog\"` tienen nombres de accesibilidad."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Si se configura `aria-hidden=\"true\"` en el documento `<body>`, las tecnologías de accesibilidad, como los lectores de pantalla, funcionarán de forma inconsistente. [Obtén información sobre cómo `aria-hidden` afecta el cuerpo del documento](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Los valores de `[role]` son válidos"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Si agregas `role=text` alrededor de un nodo de texto dividido por marcas, VoiceOver puede tratarlo como una frase, pero no se anunciarán los objetos descendentes enfocables del elemento. [Obtén más información sobre el atributo `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Los elementos con el atributo `role=text` tienen descendientes enfocables."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Los elementos con el atributo `role=text` no tienen descendientes enfocables."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Si un campo de activación no tiene un nombre de accesibilidad, los lectores de pantalla lo leerán en voz alta con un nombre genérico, por lo que resulta inservible para los usuarios que necesitan usar lectores de pantalla. [Obtén más información sobre los campos de activación](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Los ID de ARIA son únicos"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Un encabezado sin contenido o con texto inaccesible impide que los usuarios de lectores de pantalla accedan a la información de la estructura de la página. [Obtén más información sobre los encabezados](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Los elementos de encabezado no incluyen contenido."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Todos los elementos <heading> incluyen contenido."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Las tecnologías de accesibilidad, como los lectores de pantalla, pueden tener dificultades para anunciar los campos de formulario con varias etiquetas, ya que usan la primera etiqueta, la última o todas. [Obtén más información para usar etiquetas de formularios](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "El elemento `<html>` tiene un atributo `[xml:lang]` con el mismo idioma base que el atributo `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Los vínculos con el mismo destino deben tener la misma descripción, para ayudar a los usuarios a comprender el propósito del vínculo y decidir si seguirlo o no. [Obtén más información sobre los vínculos idénticos](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Los vínculos idénticos no tienen el mismo propósito."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Los vínculos idénticos tienen el mismo propósito."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "El texto de los elementos informativos debe ser corto y descriptivo. Los elementos decorativos se pueden ignorar usando un atributo alt vacío. [Obtén más información sobre el atributo `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Los elementos de imagen tienen atributos `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Agregar texto distinguible y accesible a los botones de entrada puede ayudar a los usuarios de lectores de pantalla a comprender qué hace un botón. [Obtén más información sobre los botones de entrada](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Los elementos `<input type=\"image\">` tienen texto `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Las etiquetas garantizan que las tecnologías de accesibilidad, como los lectores de pantalla, lean los controles de los formularios de forma correcta. [Obtén más información sobre las etiquetas de elementos de formulario](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Los elementos de formulario tienen etiquetas asociadas"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Un punto de referencia principal ayuda a los usuarios de lectores de pantalla a navegar por una página web. [Obtén más información sobre los puntos de referencia](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "El documento no tiene un punto de referencia principal."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "El documento tiene un punto de referencia principal."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Los textos con poco contraste resultan difíciles o imposibles de leer para muchos usuarios. Los textos de vínculo que se pueden distinguir mejoran la experiencia de los usuarios con visión reducida. [Obtén más información para que se distingan los vínculos](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Los vínculos dependen del color para distinguirse."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Los vínculos no dependen del color para distinguirse."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Usar textos de vínculo (y textos alternativos para las imágenes, si estas se usan como vínculos) que sean reconocibles y únicos, y que se puedan enfocar mejora la experiencia de navegación de los usuarios de lectores de pantalla. [Obtén información para mejorar la accesibilidad de los vínculos](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Los elementos `<object>` tienen texto alternativo"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Los elementos del formulario sin etiquetas eficaces pueden crear experiencias frustrantes para los usuarios de lectores de pantalla. [Obtén más información sobre el elemento `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Los elementos <select> no tienen elementos <label> asociados."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Los elementos <select> tienen elementos <label> asociados."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Si el valor es superior a 0, el orden de navegación es explícito. Aunque técnicamente esta es una posibilidad válida, suele producir experiencias frustrantes para los usuarios que necesitan usar las tecnologías de accesibilidad. [Obtén más información sobre el atributo `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "No hay ningún elemento con un valor de `[tabindex]` superior a 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Los lectores de pantalla incluyen funciones para facilitar la navegación por las tablas. Garantizar que las tablas usen el elemento de leyenda en lugar de celdas con el atributo `[colspan]` puede mejorar la experiencia de los usuarios de lectores de pantalla. [Obtén más información sobre las leyendas](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Las tablas usan `<caption>` en lugar de celdas con el atributo `[colspan]` para indicar una leyenda."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Los objetivos táctiles no tienen suficiente tamaño ni separación."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Los objetivos táctiles tienen suficiente tamaño y separación."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Los lectores de pantalla incluyen funciones para facilitar la navegación por las tablas. Asegurarse de que los elementos `<td>` de una tabla grande (de 3 o más celdas de ancho y alto) tengan un encabezado de tabla asociado puede mejorar la experiencia de los usuarios de lectores de pantalla. [Obtén más información sobre los encabezados de las tablas](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "La página no tiene la URL <link> del manifiesto"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "No se detectó un service worker coincidente. Es posible que debas volver a cargar la página o revisar que el alcance del service worker de la página actual abarque el alcance y la URL de inicio del manifiesto."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "No se pudo verificar el service worker porque no se incluyó el campo \"start_url\" en el manifiesto"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications solo es compatible en Chrome Beta y en canales estables de Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse no pudo determinar si había un service worker. Prueba con una nueva versión de Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "El esquema de URL del manifiesto ({scheme}) no es compatible en Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "El Cambio de diseño acumulado mide el movimiento de los elementos visibles dentro del viewport. [Obtén más información sobre la métrica de Cambio de diseño acumulado](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "La Interacción a la siguiente pintura mide la capacidad de respuesta de la página, es decir, cuánto tarda en responder de manera visible a las entradas del usuario. [Obtén más información sobre la métrica de Interacción a la siguiente pintura](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "El primer procesamiento de imagen con contenido indica el momento en el que se visualiza en la pantalla el primer texto o imagen. [Obtén más información sobre la métrica de Primer procesamiento de imagen con contenido](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "La primera pintura significativa mide el momento en que se muestra el contenido principal de la página. [Obtén más información sobre la métrica de Primera pintura significativa](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "La Interacción a la siguiente pintura mide la capacidad de respuesta de la página, es decir, cuánto tarda en responder de manera visible a las entradas del usuario. [Obtén más información sobre la métrica de Interacción a la siguiente pintura](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "El tiempo de carga indica cuánto tarda una página en ser totalmente interactiva. [Obtén más información sobre la métrica de tiempo de carga](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Evita que haya varias redirecciones de página"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "A fin de configurar presupuestos para la cantidad y el tamaño de los recursos de la página, agrega un archivo budget.json. [Obtén más información sobre los presupuestos de rendimiento](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 solicitud • {byteCount, number, bytes} KiB}other{# solicitudes • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Asegúrate de que la cantidad de solicitudes y los tamaños de transferencia sean reducidos"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Los vínculos canónicos indican qué URL mostrar en los resultados de la búsqueda. [Obtén más información sobre los vínculos canónicos](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "El tiempo de respuesta inicial del servidor fue breve"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "El service worker es la tecnología que permite que tu app use varias funciones de app web progresiva, como el modo sin conexión, el agregado a la pantalla principal y las notificaciones push. [Obtén más información sobre los service workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Un service worker controla esta página, pero no se encontró ningún atributo `start_url` porque no se pudo analizar el archivo de manifiesto como un JSON válido"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Un service worker controla esta página, pero el atributo `start_url` ({startUrl}) está fuera del alcance del service worker ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Un service worker controla esta página, pero no se encontró el atributo `start_url` porque no se obtuvo ningún manifiesto."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Este origen tiene al menos un service worker, pero la página ({pageUrl}) no está dentro del alcance."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "No registra un service worker que controle la página y `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registra un service worker que controle la página y `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "El uso de una pantalla de presentación con un tema asegura que los usuarios tengan una experiencia de alta calidad al iniciar tu app desde sus pantallas principales. [Obtén más información sobre las pantallas de presentación](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Prácticas recomendadas"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Estas comprobaciones incluyen consejos para [mejorar la accesibilidad de tu app web](https://developer.chrome.com/docs/lighthouse/accessibility/). Solo algunos problemas de accesibilidad pueden detectarse de forma automática. Por eso, te recomendamos realizar también pruebas manuales."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Estos elementos abarcan áreas que las herramientas de prueba automáticas no contemplan. Obtén más información en nuestra guía sobre [cómo revisar los aspectos de accesibilidad](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Instala [un módulo de Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) que pueda cargar imágenes de forma diferida. Esos módulos tienen la capacidad de postergar las imágenes fuera de pantalla para mejorar el rendimiento."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Se recomienda usar un módulo para intercalar instancias críticas de CSS y JavaScript, o cargar de manera potencial los elementos de forma asíncrona a través de JavaScript, como el módulo de [Agregación avanzada de CSS/JS](https://www.drupal.org/project/advagg). Ten en cuenta que las optimizaciones que ofrece este módulo pueden generar fallas en el sitio, por lo que seguramente tengas que hacer cambios en el código."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Los temas, los módulos y las especificaciones del servidor afectan al tiempo de respuesta. Puedes buscar un tema más optimizado, seleccionar un módulo de optimización o actualizar tu servidor. Los servidores de hosting deben usar el almacenamiento en caché del código de operación PHP, el almacenamiento de memoria en caché para reducir los tiempos de búsqueda en la base de datos como Redis o Memcached y la lógica optimizada de la app para preparar páginas más rápido."
@@ -2778,10 +2862,10 @@
     "message": "Se recomienda usar [estilos de imágenes responsivas](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) para reducir el tamaño de las imágenes que se cargan en la página. Si usas Views para mostrar elementos de contenido múltiple en una página, puedes implementar la paginación para limitar el número de elementos de contenido que se muestran en una página en particular."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Asegúrate de habilitar \"Agregar archivos CSS\" en la página \"Administración » Configuración » Desarrollo\". También puedes configurar opciones más avanzadas de agregación en los [módulos adicionales](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) a fin de mejorar la velocidad del sitio. Para lograrlo, puedes concatenar, reducir y comprimir los estilos CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Asegúrate de habilitar \"Agregar archivos JavaScript\" en la página \"Administración » Configuración » Desarrollo\". También puedes configurar opciones más avanzadas de agregación en los [módulos adicionales](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) a fin de mejorar la velocidad del sitio. Para lograrlo, puedes concatenar, reducir y comprimir los elementos de JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Se recomienda quitar las reglas de CSS no utilizadas y solo adjuntar las bibliotecas de Drupal necesarias al componente o a la página pertinentes. Para obtener información, consulta el [vínculo a la documentación de Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Para identificar las bibliotecas adjuntas que agregan instancias innecesarias de CSS, prueba ejecutar la [cobertura de código](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) en DevTools de Chrome. Puedes identificar el tema o el módulo concreto en la URL de la hoja de estilo cuando está inhabilitada la agregación de CSS en tu sitio de Drupal. Presta atención a los temas o módulos que tengan varias hojas de estilo en la lista con muchos elementos en rojo en la cobertura de código. Los temas o módulos solo deberían poner en cola hojas de estilo que se usen en la página."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Habilita la compresión en tu servidor Next.js. [Obtén más información](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Utiliza el componente `nuxt/image` y establece `format=\"webp\"`. [Obtén más información](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Utiliza el generador de perfiles de las Herramientas para desarrolladores de React, que emplea la API de Profiler para medir el rendimiento de procesamiento de tus componentes. [Obtén más información](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)."
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Coloca los videos en `VideoBoxes`, personalízalos con `Video Masks` o agrega `Transparent Videos`. [Obtén más información](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Sube imágenes con `Wix Media Manager` para asegurarte de que se publiquen automáticamente como WebP. Descubre [otras formas para optimizar](https://support.wix.com/en/article/site-performance-optimizing-your-media) el contenido multimedia de tu sitio."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Cuando [agregues código de terceros](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) en la pestaña `Custom Code` del panel del sitio, asegúrate de que se aplace o se cargue al final del cuerpo del código. Cuando sea posible, usa las [integraciones](https://support.wix.com/en/article/about-marketing-integrations) de Wix para incorporar herramientas de marketing a tu sitio. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix utiliza CDN y almacenamiento en caché para entregar respuestas lo más rápido posible a la mayoría de los visitantes. Te recomendamos [habilitar manualmente el almacenamiento en caché](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) en tu sitio, sobre todo si usas `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Revisa el código de terceros que hayas agregado a tu sitio en la pestaña `Custom Code` del panel y conserva únicamente los servicios necesarios para tu sitio. [Obtén más información](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Puedes subir tu GIF a un servicio que permita insertarlo como un video HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Guardar como JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Abrir en el lector"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Los valores son estimados y pueden variar. La [medición del rendimiento se calcula](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directamente a partir de estas métricas."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Ver registro original"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Ver registro"
   },
diff --git a/front_end/third_party/lighthouse/locales/es.json b/front_end/third_party/lighthouse/locales/es.json
index 7c23bb5..22fa7e5 100644
--- a/front_end/third_party/lighthouse/locales/es.json
+++ b/front_end/third_party/lighthouse/locales/es.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Los atributos `[aria-*]` coinciden con sus funciones"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Si un elemento no tiene un nombre accesible, los lectores de pantalla lo leen diciendo un nombre genérico, lo que hace que el elemento no resulte útil a los usuarios que necesitan lectores de pantalla. [Consulta cómo hacer que los elementos de comando sean más accesibles](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Los elementos `button`, `link` y `menuitem` tienen nombres accesibles"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Los elementos del cuadro de diálogo de ARIA sin nombres accesibles pueden impedir que los usuarios de lectores de pantalla distingan la finalidad de esos elementos. [Consulta cómo hacer que los elementos del cuadro de diálogo de ARIA sean más accesibles](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Los elementos con `role=\"dialog\"` o `role=\"alertdialog\"` no tienen nombres accesibles."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Los elementos con `role=\"dialog\"` o `role=\"alertdialog\"` tienen nombres accesibles."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Las tecnologías asistenciales, como los lectores de pantalla, funcionan de forma inestable cuando se establece `aria-hidden=\"true\"` en el documento `<body>`. [Consulta cómo afecta `aria-hidden` al cuerpo del documento](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Los valores de `[role]` son válidos"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Añadir `role=text` alrededor de un nodo de texto dividido por etiquetas permite que VoiceOver lo trate como una sola frase, pero no se anunciarán los descendientes enfocables de ese elemento. [Obtén más información sobre el atributo `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Los elementos con el atributo `role=text` tienen descendientes enfocables."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Los elementos con el atributo `role=text` no tienen descendientes enfocables."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Si un campo de interruptor no tiene un nombre accesible, los lectores de pantalla lo leerán en voz alta con un nombre genérico, lo que hace que el campo no resulte útil a los usuarios que necesitan lectores de pantalla. [Más información sobre los campos de interruptores](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Los ID de ARIA son únicos"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Un <heading> sin contenido o con texto inaccesible impide que los usuarios de lectores de pantalla accedan a la información de la estructura de la página. [Obtén más información sobre los <heading>](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Los elementos <heading> no incluyen contenido."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Todos los elementos <heading> incluyen contenido."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Las tecnologías asistenciales, como los lectores de pantalla, pueden leer de forma confusa los campos de formulario que tienen varias etiquetas, ya que pueden usar la primera etiqueta, la última o todas. [Consulta cómo utilizar las etiquetas de formularios](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "El elemento `<html>` tiene un atributo `[xml:lang]` con el mismo idioma base que el atributo `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Los enlaces con el mismo destino deben tener la misma descripción para que los usuarios puedan entender su finalidad y decidir si quieren seguirlo. [Obtén más información sobre los enlaces idénticos](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Los enlaces idénticos no tienen la misma finalidad."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Los enlaces idénticos tienen la misma finalidad."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Los elementos informativos deberían incluir textos alternativos cortos y descriptivos. Los elementos decorativos se pueden omitir usando un atributo \"alt\" vacío. [Más información sobre el atributo `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Los elementos de imagen tienen atributos `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Añadir texto reconocible y accesible a los botones de entrada puede ayudar a los usuarios de lectores de pantalla a entender la finalidad de estos botones. [Más información sobre los botones de entrada](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Los elementos `<input type=\"image\">` tienen texto `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Las etiquetas facilitan que las tecnologías asistenciales, como los lectores de pantalla, puedan leer los controles de los formularios de forma correcta. [Más información sobre las etiquetas de elementos de formulario](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Los elementos de formulario tienen etiquetas asociadas"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Los puntos de referencia principal ayudan a los usuarios de lectores de pantalla a desplazarse por una página web. [Obtén más información sobre los puntos de referencia](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "El documento no tiene un punto de referencia principal."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "El documento tiene un punto de referencia principal."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Los textos con poco contraste resultan difíciles o imposibles de leer para muchos usuarios. Usar textos de enlace que sean reconocibles mejora la experiencia para los usuarios con baja visión. [Obtén más información sobre cómo crear enlaces distinguibles](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Los enlaces se distinguen por el color."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Los enlaces se distinguen sin depender del color."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Usar textos de enlace (y textos alternativos para las imágenes, si estas se usan como enlaces) que sean reconocibles, únicos y que se puedan seleccionar mejora la experiencia de navegación de los usuarios de lectores de pantalla. [Consulta cómo hacer que los enlaces sean accesibles](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Los elementos `<object>` tienen texto alternativo"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Los elementos <form> sin <label> eficaz pueden causar experiencias frustrantes para los usuarios de lectores de pantalla. [Obtén más información sobre el elemento `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Los elementos <select> no tienen elementos <label> asociados."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Los elementos <select> tienen elementos <label> asociados."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Si el valor es superior a 0, significa que el orden de navegación es explícito. Aunque técnicamente es válido, esto suele producir experiencias frustrantes para los usuarios que necesitan usar tecnologías asistenciales. [Más información sobre el atributo `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "No hay ningún elemento con un valor de `[tabindex]` superior a 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Los lectores de pantalla incluyen funciones para facilitar la navegación por las tablas. Si te aseguras de que las tablas usan el elemento de título correcto en lugar de celdas con el atributo `[colspan]`, es posible que mejore la experiencia de los usuarios de lectores de pantalla. [Más información sobre títulos](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Las tablas usan `<caption>` en lugar de celdas con el atributo `[colspan]` para indicar un título."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Las áreas táctiles no tienen un tamaño o un espaciado suficientes."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Las áreas táctiles deben tener un tamaño y un espaciado suficientes."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Los lectores de pantalla incluyen funciones para facilitar la navegación por las tablas. Si te aseguras de que los elementos `<td>` de una tabla grande (3 o más celdas de ancho y alto) tienen un encabezado de tabla asociado, es posible que mejore la experiencia de los usuarios de lectores de pantalla. [Más información sobre los encabezados de tabla](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "La página no tiene ninguna URL del archivo de manifiesto <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "No se ha detectado ningún service worker que coincida. Es posible que tengas que volver a cargar la página, o comprueba que el alcance del service worker en la página actual incluya el alcance y la URL de inicio del archivo de manifiesto."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "No se ha podido comprobar el service worker porque no hay ningún campo \"start_url\" en el archivo de manifiesto"
   },
@@ -969,7 +1083,7 @@
     "message": "\"prefer_related_applications\" solo es compatible con Chrome Beta y con canales estables de Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse no ha podido determinar si había un service worker. Inténtalo con una versión más reciente de Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "El esquema de URL del archivo de manifiesto ({scheme}) no es compatible con Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Los cambios de diseño acumulados miden el movimiento de los elementos visibles dentro del viewport. [Más información sobre la métrica Cambios de diseño acumulados](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interacción con el siguiente renderizado mide la capacidad de respuesta de la página, es decir, el tiempo que tarda la página en responder de forma visible a la entrada del usuario. [Más información sobre la métrica Interacción con el siguiente renderizado](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "El primer renderizado con contenido indica el momento en el que se renderiza el primer texto o la primera imagen. [Más información sobre la métrica Primer renderizado con contenido](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "El primer renderizado significativo mide el momento en que se muestra el contenido principal de la página. [Más información sobre la métrica Primer renderizado significativo](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interacción con el siguiente renderizado mide la capacidad de respuesta de la página, es decir, el tiempo que tarda la página en responder de forma visible a la entrada del usuario. [Más información sobre la métrica Interacción con el siguiente renderizado](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "La métrica Time to Interactive mide el tiempo que tarda una página en ser totalmente interactiva. [Más información sobre la métrica Time to Interactive](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Evita que haya varias redirecciones de página"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Para definir la cantidad y el tamaño de los recursos de la página, añade un archivo budget.json. [Más información sobre los límites de rendimiento](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 solicitud • {byteCount, number, bytes} KiB}other{# solicitudes • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Reduce el número de solicitudes y el tamaño de las transferencias"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Los enlaces canónicos sugieren qué URL se debe mostrar en los resultados de búsqueda. [Más información sobre los enlaces canónicos](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "El tiempo de respuesta inicial del servidor fue breve"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "El service worker es la tecnología que te permite usar en tu aplicación las funciones de las aplicaciones web progresivas, como el modo sin conexión, poder añadirlas a la pantalla de inicio y las notificaciones push. [Más información sobre los service workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Un service worker controla esta página, pero no se ha encontrado ninguna propiedad `start_url` porque el archivo de manifiesto no es un JSON válido"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Un service worker controla esta página, pero la propiedad `start_url` ({startUrl}) está fuera del rango del service worker ({scopeUrl})."
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Un service worker controla esta página, pero no se ha encontrado la propiedad `start_url` porque no se ha recuperado ningún archivo de manifiesto."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Este origen tiene al menos un service worker, pero la página ({pageUrl}) no está dentro del rango."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "No registra un service worker que controle la página y la propiedad `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Hay un service worker que controla la página y la propiedad `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Una pantalla de inicio personalizada asegura una experiencia de calidad cuando los usuarios ejecuten tu aplicación desde sus pantallas de inicio. [Más información sobre las pantallas de inicio](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "Prácticas recomendadas"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Estas comprobaciones incluyen consejos para [mejorar la accesibilidad de tu aplicación web](https://developer.chrome.com/docs/lighthouse/accessibility/). Solo se pueden detectar un subconjunto de problemas de accesibilidad de forma automática. Por eso, te recomendamos realizar pruebas manuales."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Estos elementos se ocupan de áreas que las herramientas de prueba automáticas no pueden analizar. Consulta más información sobre cómo [revisar la accesibilidad](https://web.dev/how-to-review/) en nuestra guía."
@@ -2769,7 +2853,7 @@
     "message": "Instala [un módulo de Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) que pueda cargar imágenes en diferido. Estos módulos proporcionan la capacidad de posponer las imágenes que no aparecen en pantalla para mejorar el rendimiento."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Considera utilizar un módulo para insertar CSS y JavaScript crítico, o cargar recursos de forma asíncrona mediante JavaScript, como el módulo [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Ten en cuenta que las optimizaciones que ofrece este módulo pueden hacer que tu sitio no funcione correctamente, por lo que es probable que tengas que hacer cambios en el código."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Los temas, los módulos y las especificaciones del servidor afectan al tiempo de respuesta. Considera buscar un tema más optimizado, seleccionar un módulo de optimización pertinente o actualizar tu servidor. Tus servidores de alojamiento deben utilizar almacenamiento en caché de opcode PHP y almacenamiento en caché de memoria para reducir los tiempos de consulta a la base de datos como Redis o Memcached, así como una lógica de aplicaciones optimizada para preparar más rápido las páginas."
@@ -2778,10 +2862,10 @@
     "message": "Considera utilizar [Estilos de imagen adaptable](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) para reducir el tamaño de las imágenes que se cargan en tu página. Si utilizas Vistas para mostrar varios elementos de contenido en una página, plantéate implementar la paginación para limitar el número de elementos de contenido que se muestran en una página determinada."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Comprueba que has habilitado \"Agregar archivos de CSS\" en la página Administración > Configuración > Desarrollo. También puedes configurar opciones más avanzadas de agregación mediante [módulos adicionales](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) que pueden concatenar, minificar y comprimir los estilos de CSS para acelerar tu sitio web."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Comprueba que has habilitado \"Agregar archivos de JavaScript\" en la página Administración > Configuración > Desarrollo. También puedes configurar opciones más avanzadas de agregación mediante [módulos adicionales](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) que pueden concatenar, minificar y comprimir los recursos de JavaScript para acelerar tu sitio web."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Considera eliminar las reglas de CSS no utilizadas y adjunta únicamente las bibliotecas de Drupal necesarias para la página o el componente relevantes de una página. Consulta el [enlace a la documentación de Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) para obtener información más detallada. Para identificar las bibliotecas adjuntas que añaden archivos CSS no pertinentes, ejecuta la [cobertura de código](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) en DevTools de Chrome. Puedes identificar el tema o módulo responsable en la URL de la hoja de estilos cuando la agregación de CSS está inhabilitada en tu sitio web de Drupal. Presta atención a los temas o módulos con varias hojas de estilo en la lista y con muchos elementos en rojo en la cobertura de código. Un tema o módulo solo debería poner en cola una hoja de estilos si esta se usa en la página."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Habilita la compresión en tu servidor Next.js. [Más información](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Usa el componente `nuxt/image` y establece `format=\"webp\"`. [Más información](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Usa DevTools Profiler de React, que utiliza la API del profiler, para medir el rendimiento de tus componentes al renderizar. [Más información](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Coloca vídeos dentro de `VideoBoxes`, personalízalos mediante `Video Masks` o añade `Transparent Videos`. [Obtén más información](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Sube imágenes mediante `Wix Media Manager` para asegurarte de que se publiquen automáticamente como WebP. Encuentra [más formas de optimizar](https://support.wix.com/en/article/site-performance-optimizing-your-media) el contenido multimedia de tu sitio."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Cuando [añadas código de terceros](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) en la pestaña `Custom Code` del panel de control de tu sitio, asegúrate de que se aplace o se cargue al final del cuerpo del código. Si es posible, usa las [integraciones](https://support.wix.com/en/article/about-marketing-integrations) de Wix para insertar herramientas de marketing en el sitio. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix usa CDNs y el almacenamiento en caché para publicar respuestas lo más rápido posible para la mayoría de los visitantes. Te recomendamos que [habilites manualmente el almacenamiento en caché](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) para tu sitio, sobre todo si usas `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Revisa el código de terceros que hayas añadido a tu sitio en la pestaña `Custom Code` del panel de control del sitio y mantén solo los servicios necesarios. [Obtén más información](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Considera subir tu GIF a un servicio que permita insertarlo como un vídeo HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Guardar como JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Abrir en el visor"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Los valores son estimaciones y pueden variar. La [puntuación del rendimiento se calcula](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directamente a partir de estas métricas."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Ver rastro original"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Ver rastro"
   },
diff --git a/front_end/third_party/lighthouse/locales/fi.json b/front_end/third_party/lighthouse/locales/fi.json
index 32b1f92..5ff781e8 100644
--- a/front_end/third_party/lighthouse/locales/fi.json
+++ b/front_end/third_party/lighthouse/locales/fi.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]`-määritteet vastaavat roolejaan"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Jos elementin nimi ei ole esteetön, näytönlukuohjelmat sanovat sen kohdalla geneerisen nimen, jolloin näytönlukuohjelmien käyttäjät eivät voi käyttää sitä. [Katso, miten voit helpottaa komentoelementtien käyttöä](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elementeillä (`button`, `link` ja `menuitem`) on esteettömät nimet"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA-valintaikkunaelementit, joissa ei ole saavutettavia nimiä, voivat estää näytönlukuohjelmien käyttäjiä havaitsemasta elementtien tarkoituksen. [Katso, miten voit helpottaa ARIA-valintaikkunan elementtien käyttöä](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementtien, joissa on `role=\"dialog\"` tai `role=\"alertdialog\"`, nimi ei ole saavutettava."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementtien, joissa on `role=\"dialog\"` tai `role=\"alertdialog\"`, nimi on saavutettava."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Näytönlukuohjelmat ja muut avustavat teknologiat toimivat arvaamattomasti, kun `aria-hidden=\"true\"` asetetaan dokumentin kohdassa `<body>`. [Katso, miten `aria-hidden` vaikuttaa dokumentin tekstiosaan](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]`-arvot ovat kelvollisia"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Kun `role=text` lisätään merkinnöillä erotetun tekstinoodin ympärille, VoiceOver käsittelee sitä yhtenä ilmauksena, mutta elementin kohdistettavia alakohtia ei ilmoiteta. [Lue lisää `role=text`‐määritteestä](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "`role=text`-määritteen sisältävillä elementeillä on kohdistettavia alakohtia."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "`role=text`-määritteen sisältävillä elementeillä ei ole kohdistettavia alakohtia."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Jos päälle/pois-kentän nimi ei ole esteetön, näytönlukuohjelmat sanovat sen kohdalla geneerisen nimen, jolloin näytönlukuohjelmien käyttäjät eivät voi käyttää sitä. [Lue lisää päälle/pois-kentistä](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA-tunnisteet ovat yksilöllisiä"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Jos otsikon tekstissä ei ole sisältöä tai teksti ei ole käytettävissä, näytönlukuohjelman käyttäjät eivät saa pääsyä tietoihin sivun rakenteessa. [Lue lisää otsikoista](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Otsikkoelementeissä ei ole sisältöä."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Kaikissa otsikkoelementeissä on sisältöä."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Jos lomakekentillä on useita tunnisteita, näytönlukuohjelmat ja muut avustavat teknologiat saattavat viitata niihin hämmentävästi käyttäen ensimmäistä, viimeistä tai jokaista tunnistetta. [Lue lisää lomaketunnisteiden käyttämisestä](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>`-elementillä on `[xml:lang]`-määrite, jolla on sama peruskieli kuin `[lang]`-määritteellä."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Samaan kohteeseen johtavilla linkeillä on oltava sama kuvaus, jotta käyttäjät ymmärtävät niiden tarkoituksen ja voivat päättää, haluavatko he seurata niitä. [Lue lisää identtisistä linkeistä](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identtisillä linkeillä ei ole samaa tarkoitusta."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identtisillä linkeillä on sama tarkoitus."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informatiivisilla elementeillä pitäisi olla lyhyt ja kuvaileva vaihtoehtoinen teksti. Koristeelliset elementit voidaan ohittaa tyhjällä Alt-määritteellä. [Lue lisää `alt`‐määritteestä](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Kuvaelementeillä on `[alt]`-määritteet"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Erottuvan ja näkyvän tekstin lisääminen syöttöpainikkeisiin voi auttaa näytönlukuohjelman käyttäjiä ymmärtämään syöttöpainikkeen tarkoituksen. [Lue lisää syöttöpainikkeista](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">`-elementeissä on `[alt]`-teksti"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Tunnisteilla varmistetaan, että avustustekniikat (kuten näytönlukuohjelmat) ilmoittavat lomakkeiden ohjaimista oikein. [Lue lisää lomake-elementtien tunnisteista](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Lomake-elementeillä on niihin liittyvät tunnisteet"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Yksi ensisijainen merkki auttaa näytönlukuohjelman käyttäjiä siirtymään verkkosivulle. [Lue lisää merkeistä](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokumentilla ei ole ensisijaista merkkiä."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokumentilla on ensisijainen merkki."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Alhaisen kontrastin teksti on monelle vaikea tai mahdoton lukea. Erotettavissa oleva linkkiteksti parantaa heikkonäköisten käyttäjien käyttökokemusta. [Katso, miten voit tehdä linkeistä helposti erottuvia](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Linkit erottuvat helposti vain, jos ne ovat värikkäitä."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Linkit erottuvat helposti ilman värejä."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Linkkiteksti (ja vaihtoehtoinen teksti kuvia varten, kun niitä käytetään linkkeinä), joka on erottuva, yksilöllinen ja tarkennettavissa, parantaa näytönlukuohjelmaa käyttävien navigointikokemusta. [Katso, miten voit mahdollistaa linkkien käytön](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>`-elementeissä on vaihtoehtoista tekstiä."
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Jos lomake-elementeillä ei ole hyödyllisiä tunnisteita, käyttökokemus voi olla turhauttava näytönlukuohjelman käyttäjille. [Lue lisää `select`-elementistä](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Tietyt elementit eivät sisällä tunniste-elementtejä."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Tietyt elementit sisältävät tunniste-elementtejä."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Navigointijärjestys on eksplisiittinen, jos arvo on suurempi kuin 0. Vaikka ratkaisu on teknisesti käypä, se tekee usein kokemuksesta turhauttavaa avustustekniikkaa tarvitseville käyttäjille. [Lue lisää `tabindex`‐määritteestä](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Yhdenkään elementin `[tabindex]`-arvo ei ole suurempi kuin 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Näytönlukuohjelmissa on ominaisuuksia, jotka tekevät taulukoissa siirtymisestä helpompaa. Voit parantaa näytönlukuohjelman käyttökokemusta varmistamalla, että taulukot käyttävät varsinaista tekstityselementtiä `[colspan]`-määritteen sisältävien solujen sijaan. [Katso lisätietoa tekstityksistä](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Taulukoissa käytetään `<caption>`-määritettä sellaisten solujen sijaan, joissa on `[colspan]`-attribuutti tekstityksen merkkinä."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Kosketusalueiden koko tai välit eivät ole riittäviä."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Kosketusalueiden koko ja välit ovat riittäviä."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Näytönlukuohjelmissa on ominaisuuksia, jotka tekevät taulukoissa siirtymisestä helpompaa. Voit parantaa näytönlukuohjelman käyttökokemusta varmistamalla, että suuren taulukon (vähintään kolme sarake- ja rivisolua) `<td>`-elementeillä on niihin liittyvä taulukon otsikko. [Lue lisää taulukoiden otsikoista](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Sivulta puuttuu manifestin <link>-URL"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Vastaavaa service workeria ei havaittu. Sinun on ehkä päivitettävä sivu ja tarkistettava, kattaako nykyisen sivun service workerin laajuus manifestin ja aloitus-URL:in."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Service workeria ei voitu tarkistaa, koska manifestistä puuttuu \"start_url\"-kenttä"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications on tuettu vain Chromen betaversioissa ja vakaissa versioissa Androidilla."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse ei havainnut service workeria. Yritä uudelleen Chromen uudemmalla versiolla."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Manifestin URL-kaava ({scheme}) ei ole Androidin tukema."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Kumulatiivinen asettelumuutos mittaa näkymässä olevien elementtien liikettä. [Lue lisää Kumulatiivinen asettelumuutos ‐mittarista](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaktiosta seuraavaan renderöintiin ‐mittari mittaa sivun responsiivisuutta eli sitä, kuinka pian sivu vastaa näkyvästi käyttäjän palautteeseen. [Lue lisää Interaktiosta seuraavaan renderöintiin ‐mittarista](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Ensimmäinen sisällön renderöinti kertoo, milloin ensimmäinen tekstikohde tai kuva renderöidään. [Lue lisää Ensimmäinen sisällön renderöinti ‐mittarista](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Ensimmäinen merkityksellinen renderöinti kertoo, milloin sivun ensisijainen sisältö tulee näkyviin. [Lue lisää Ensimmäinen merkityksellinen renderöinti ‐mittarista](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaktiosta seuraavaan renderöintiin ‐mittari mittaa sivun responsiivisuutta eli sitä, kuinka pian sivu vastaa näkyvästi käyttäjän palautteeseen. [Lue lisää Interaktiosta seuraavaan renderöintiin ‐mittarista](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Interaktiivisuutta edeltävä aika tarkoittaa aikaa, joka sivulla kestää siihen, että se on täysin interaktiivinen. [Lue lisää Interaktiivisuutta edeltävä aika ‐mittarista](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Vältä useita uudelleenohjauksia"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Jos haluat asettaa sivuresurssien määrälle ja koolle budjetin, lisää budget.json-tiedosto. [Lue lisää tehokkuusbudjeteista](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 pyyntö • {byteCount, number, bytes} KiB}other{# pyyntöä • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Pidä pyyntöjen määrät alhaisina ja siirtojen koot pieninä"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Ensisijaiset linkit ehdottavat, mitä URL-osoitteita näyttää hakutuloksissa. [Lue lisää ensisijaisista linkeistä](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Palvelimen vasteaika alussa oli lyhyt"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service worker ‑teknologia tuo sovelluksen käyttöön monia progressiivisen web-sovelluksen ominaisuuksia, kuten offline-käytön, aloitusnäytölle lisäämisen ja ilmoitukset. [Lue lisää Service Workereista](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Service worker hallitsee sivua, mutta osoitetta (`start_url`) ei löytynyt, koska luetteloa ei voitu jäsentää kelvollisena JSONina."
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Service worker hallitsee sivua, mutta `start_url` ({startUrl}) ei ole workerin toiminta-alueella ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Service worker hallitsee sivua, mutta osoitetta (`start_url`) ei löytynyt, koska luetteloa ei noudettu."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Lähteessä on ainakin yksi service worker, mutta sivu ({pageUrl}) ei kuulu sen toiminta-alueeseen."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Ei rekisteröi service workeria, jonka hallinnassa sivu ja `start_url` ovat"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Rekisteröi service workerin, jonka hallinnassa sivu ja `start_url` ovat"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Teeman sisältävä aloitussivu varmistaa laadukkaan kokemuksen, kun käyttäjä avaa sovelluksen aloitusnäytöltään. [Lue lisää aloitusnäytöistä](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Parhaat käytännöt"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Nämä tarkistukset tuovat esiin kohtia, joissa voit [parantaa verkkosovelluksesi esteettömyyttä](https://developer.chrome.com/docs/lighthouse/accessibility/). Vain pieni joukko esteettömyysongelmia voidaan havaita automaattisesti, joten myös manuaalista testaamista suositellaan."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Nämä kohteet koskevat alueita, joita automaattinen testaustyökalu ei voi testata. Lue lisää [saavutettavuustarkistuksen tekemisen](https://web.dev/how-to-review/) oppaastamme."
@@ -2769,7 +2853,7 @@
     "message": "Asenna [Drupal-moduuli](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), joka voi ladata kuvia tarveohjatusti. Tällaiset moduulit voivat parantaa toimintaa lykkäämällä näytön ulkopuolella olevien kuvien lataamista."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Sinun kannattaa ehkä käyttää moduulia, joka voi tuoda kriittistä CSS:ää tai JavaScriptiä sivun sisälle tai mahdollisesti ladata sisältöä asynkronisesti JavaScriptin avulla (esim. [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg) ‑moduuli). Huomaathan, että tämän moduulin suorittamat optimoinnit voivat rikkoa sivustosi, joten sinun on todennäköisesti muutettava koodia."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Teemat, moduulit ja palvelinasetukset vaikuttavat kaikki palvelimen vastausaikaan. Sinun kannattaa ehkä etsiä optimoidumpi teema, valita optimointimoduuli tai päivittää palvelimesi. Hosting-palvelimiesi olisi hyvä käyttää PHP-toimintokoodin ja muun sisällön tallentamista välimuistiin, mikä auttaa lyhentämään tietokantojen kyselyaikoja (esim. Redis tai Memcached). Lisäksi niiden tulee käyttää optimoitua sovelluslogiikkaa sivujen nopeampaan valmisteluun."
@@ -2778,10 +2862,10 @@
     "message": "Sinun kannattaa ehkä käyttää [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) (Responsiiviset kuvatyylit) ‑toimintoa sivullasi ladattavien kuvien pienentämiseen. Jos näytät sivulla useita kohteita Viewsin avulla, sinun kannattaa ehkä rajoittaa yhdellä sivulla näkyvien kohteiden määrää ottamalla sivunumerointi käyttöön."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Varmista, että Aggregate CSS files (Kokoa CSS-tiedostot) ‑toiminto on otettu käyttöön kohdassa Administration > Configuration > Development (Järjestelmänvalvonta > Määritys > Kehitys). Voit myös määrittää lisää koontiasetuksia käyttämällä [lisämoduuleja](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), mikä voi nopeuttaa sivustosi toimintaa ketjuttamalla, pienentämällä ja pakkaamalla CSS-tyylejä."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Varmista, että Aggregate JavaScript files (Kokoa JavaScript-tiedostot) ‑toiminto on otettu käyttöön kohdassa Administration > Configuration > Development (Järjestelmänvalvonta > Määritys > Kehitys). Voit myös määrittää lisää koontiasetuksia käyttämällä [lisämoduuleja](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), mikä voi nopeuttaa sivustosi toimintaa ketjuttamalla, pienentämällä ja pakkaamalla JavaScript-sisältöä."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Sinun kannattaa ehkä poistaa käyttämättömät CSS-säännöt ja liittää relevanttiin sivuun tai sivun osaan vain tarvittavat Drupal-kirjastot. Saat lisätietoja [Drupal-dokumentaatiosta](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Voit etsiä tarpeetonta CSS:ää lisääviä liitettyjä kirjastoja tutkimalla [koodin testikattavuutta](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) Chromen DevToolsissa. Löydät syynä olevan teeman tai moduulin tarkistamalla tyyliarkin URL-osoitteen, kun CSS-koonti on poistettuna käytöstä Drupal-sivustollasi. Etsi teemoja ja moduuleja, joilla on monia tyyliarkkeja luettelossa ja paljon punaista koodin testikattavuudessa. Teeman tai moduulin pitäisi lisätä tyyliarkki jonoon vain, jos sitä todella käytetään sivulla."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Salli pakkaus Next.js-palvelimellasi. [Lue lisää](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Käytä `nuxt/image`-komponenttia ja määritä `format=\"webp\"`. [Lue lisää](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Käytä React DevTools Profileria, joka käyttää React-sovellusliittymää, komponenttien renderöinnin mittaamiseen. [Lue lisää.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Sijoita videot tämän sisään: `VideoBoxes`. Muokkaa niitä `Video Masks` ‑sovelluksella tai lisää `Transparent Videos`. [Lue lisää](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "`Wix Media Manager` on hyödyllinen, kun lataat kuvia, sillä se syöttää ne automaattisesti WebP-muodossa. Etsi [lisää tapoja optimoida](https://support.wix.com/en/article/site-performance-optimizing-your-media) sivustosi media."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Kun [lisäät kolmannen osapuolen koodin](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) `Custom Code`-välilehdelle sivuston hallintapaneelissa, varmista, että se on lykätty tai ladattu koodinpätkän loppuun. Jos mahdollista, upota markkinointityökalut sivustollesi Wixin [integrointien](https://support.wix.com/en/article/about-marketing-integrations) avulla. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix käyttää CDN:iä ja välimuistiin tallentamista, jotta useimmat kävijät näkevät vastaukset mahdollisimman nopeasti. Harkitse [välimuistin käyttöönottoa manuaalisesti](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) sivustollasi, etenkin jos käytät tätä: `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Tarkista kaikki kolmannen osapuolen koodit, jotka olet lisännyt `Custom Code`-välilehdelle sivuston hallintapaneelissa, ja säilytä vain palvelut, jotka ovat välttämättömiä sivuston kannalta. [Lue lisää](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "GIF kannattaa ehkä ladata palveluun, jonka avulla se voidaan upottaa HTML5-videona."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Tallenna JSON-tiedostona"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Avaa katseluohjelmassa"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Arvot ovat arvioita ja voivat vaihdella. [Tehokkuusprosentti lasketaan](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) suoraan näistä mittareista."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Näytä alkuperäinen jälki"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Näytä jälki"
   },
diff --git a/front_end/third_party/lighthouse/locales/fil.json b/front_end/third_party/lighthouse/locales/fil.json
index 10f88f9..4133946 100644
--- a/front_end/third_party/lighthouse/locales/fil.json
+++ b/front_end/third_party/lighthouse/locales/fil.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Tumutugma ang mga attribute na `[aria-*]` sa mga tungkulin ng mga ito"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Kapag walang accessible na pangalan ang isang element, iaanunsyo ito ng mga screen reader gamit ang generic na pangalan, kaya hindi ito magagamit ng mga user na umaasa sa mga screen reader. [Alamin kung paano gawing mas accessible ang mga element ng command](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "May mga naa-access na pangalan ang mga element ng `button`, `link`, at `menuitem`"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Posibleng mapigilan ng mga element ng dialog ng ARIA na walang accessible na pangalan ang mga user ng screen reader na matukoy ang layunin ng mga element na ito. [Matuto kung paano gagawing mas naa-access ang mga element ng dialog ng ARIA](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Walang accessible na pangalan ang mga element na may `role=\"dialog\"` o `role=\"alertdialog\"`."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "May mga accessible na pangalan ang mga element na may `role=\"dialog\"` o `role=\"alertdialog\"`."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Ang mga pantulong na teknolohiya, tulad ng mga screen reader, ay hindi tuloy-tuloy na gumagana kapag nakatakda ang `aria-hidden=\"true\"` sa dokumentong `<body>`. [Alamin kung paano nakakaapekto ang `aria-hidden` sa nilalaman ng dokumento](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Valid ang mga value ng `[role]`"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Kapag nagdagdag ng `role=text` sa palibot ng isang text node split sa pamamagitan ng markup, mabibigyang-daan ang VoiceOver na ituring ito bilang isang parirala, pero hindi iaanunsyo ang mga nafo-focus na descendent ng element. [Matuto pa tungkol sa attribute na `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "May mga nafo-focus na descendent ang mga element na may attribute na `role=text`."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Walang nafo-focus na descendent ang mga element na may attribute na `role=text`."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Kapag walang accessible na pangalan ang isang toggle field, iaanunsyo ito ng mga screen reader gamit ang generic na pangalan, kaya hindi ito magagamit ng mga user na umaasa sa mga screen reader. [Matuto pa tungkol sa mga toggle field](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Natatangi ang mga ARIA ID"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Napipigilan ng heading na walang content o may hindi naa-access na text ang mga user ng screen reader na ma-access ang impormasyon sa structure ng page. [Matuto pa tungkol sa mga heading](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Walang lamang content ang mga element ng heading."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "May lamang content ang lahat ng element ng heading."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Ang mga field ng form na may maraming label ay puwedeng hindi sinasadyang ianunsyo ng mga pantulong na teknolohiya tulad ng mga screen reader na ginagamit ang una, huli, o lahat ng label. [Alamin kung paano gumamit ng mga label ng form](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Ang element na `<html>` ay may attribute na `[xml:lang]` na may parehong batayang wika tulad ng attribute na `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "May iisang paglalarawan dapat ang mga link na may iisang destinasyon, para matulungan ang mga user na maunawaan ang layunin ng link at magdesisyon kung susundan ito. [Matuto pa tungkol sa magkakatulad na link](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Hindi magkakapareho ang layunin ng magkakatulad na link."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Magkakapareho ang layunin ng magkakatulad na link."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Layunin dapat ng mga nagbibigay-impormasyong element na magkaroon ng maikli at naglalarawang alternatibong text. Puwedeng balewalain ang mga decorative na element sa pamamagitan ng walang lamang kahaliling attribute. [Matuto pa tungkol sa attribute na `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "May mga attribute na `[alt]` ang mga element na larawan"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Kapag nagdagdag ng natutukoy at accessible na text sa mga button ng input, posible nitong matulungan ang mga user ng screen reader na maunawaan ang layunin ng button ng input. [Matuto pa tungkol sa mga button ng input](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "May text na `[alt]` ang mga element na `<input type=\"image\">`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Tinitiyak ng mga label na maayos na inaanunsyo ang mga kontrol ng form ng mga pantulong na teknolohiya, tulad ng mga screen reader. [Matuto pa tungkol sa mga label ng element ng form](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "May mga nauugnay na label ang mga element ng form"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Nakakatulong ang isang pangunahing landmark para ma-navigate ng mga user ng screen reader ang isang web page. [Matuto pa tungkol sa mga landmark](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Walang pangunahing landmark ang dokumento."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "May pangunahing landmark ang dokumento."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Mahirap o imposibleng mabasa ng maraming user ang text na mababa ang contrast. Pinapahusay ng text ng link na nakikita ang experience para sa mga user na may malabong paningin. [Matuto kung paano gagawing natutukoy ang mga link](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Umaasa sa kulay para matukoy ang mga link."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Natutukoy ang mga link nang hindi umaasa sa kulay."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Pinapahusay ng text ng link (at alternatibong text para sa mga larawan, kapag ginamit bilang mga link) na nakikita, natatangi, at nafo-focus ang experience sa navigation para sa mga user ng screen reader. [Alamin kung paano gawing accessible ang mga link](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "May alternatibong text ang mga element na `<object>`"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Ang mga element ng form na walang epektibong label ay puwedeng magdulot ng mga nakakainis na experience para sa mga user ng screen reader. [Matuto pa tungkol sa element na `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Ang mga element ng select ay walang nauugnay na element ng label."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Ang mga element ng select ay may mga nauugnay na element ng label."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Nagpapahiwatig ng explicit na pagsasaayos ng navigation ang value na mas mataas sa 0. Bagama't kung tutuusin ay valid ito, madalas itong nagdudulot ng mga nakakainis na experience para sa mga user na umaasa sa mga pantulong na teknolohiya. [Matuto pa tungkol sa attribute na `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Walang element na may value na `[tabindex]` na mas mataas sa 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "May mga feature ang mga screen reader na mas nagpapadali ng pag-navigate sa mga talahanayan. Kapag tiniyak na ginagamit ng mga talahanayan ang mga aktwal na element ng caption sa halip na ang mga cell na may attribute na `[colspan]`, posibleng mapaganda ang experience para sa mga user ng screen reader. [Matuto pa tungkol sa mga caption](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Gumagamit ang mga talahanayan ng `<caption>` sa halip na mga cell na may attribute na `[colspan]` para magsaad ng caption."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Walang sapat na laki o puwang ang mga pipindutin."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "May sapat na laki at puwang ang mga pipindutin."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "May mga feature ang mga screen reader na mas nagpapadali ng pag-navigate sa mga talahanayan. Kapag tiniyak na may nauugnay na header ng talahanayan ang mga element na `<td>` sa isang malaking talahanayan (3 o higit pang cell sa lapad at taas), posibleng mapaganda ang experience para sa mga user ng screen reader. [Matuto pa tungkol sa mga header ng talahanayan](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Walang URL ng manifest <link> ang page"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Walang na-detect na tumutugmang service worker. Posibleng kailanganin mong i-reload ang page, o tingnan kung nakapaloob sa saklaw ng service worker para sa kasalukuyang page ang saklaw at start URL mula sa manifest."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Hindi masusuri ang service worker kapag walang field na 'start_url' sa manifest"
   },
@@ -969,7 +1083,7 @@
     "message": "Sinusuportahan lang ang prefer_related_applications sa Chrome Beta at mga Stable na channel sa Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Hindi matukoy ng Lighthouse kung nagkaroon ng service worker. Pakisubukan sa mas bagong bersyon ng Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Hindi sinusuportahan sa Android ang scheme ng URL ng manifest ({scheme})."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Sinusukat ng Cumulative Layout Shift ang paggalaw ng mga nakikitang element sa loob ng viewport. [Matuto pa tungkol sa sukatang Cumulative Layout Shift](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Sinusukat ng Interaction to Next Paint ang pagiging responsive ng page, kung gaano katagal bago makitang tumutugon ang page sa input ng user. [Matuto pa tungkol sa sukatang Interaction to Next Paint](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Minamarkahan ng First Contentful Paint ang tagal bago ma-paint ang unang text o larawan. [Matuto pa tungkol sa sukatang First Contentful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Sinusukat ng First Meaningful Paint ang bilis ng pagpapakita ng pangunahing content ng isang page. [Matuto pa tungkol sa sukatang First Meaningful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Sinusukat ng Interaction to Next Paint ang pagiging responsive ng page, kung gaano katagal bago makitang tumutugon ang page sa input ng user. [Matuto pa tungkol sa sukatang Interaction to Next Paint](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Ang Oras bago maging Interactive ay ang panahon bago maging ganap na interactive ang page. [Matuto pa tungkol sa sukatang Oras bago maging Interactive](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Iwasan ang mga pag-redirect sa maraming page"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Para magtakda ng mga badyet para sa dami at laki ng mga resource ng page, magdagdag ng budget.json na file. [Matuto pa tungkol sa mga badyet sa performance](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 kahilingan • {byteCount, number, bytes} KiB}one{# kahilingan • {byteCount, number, bytes} KiB}other{# na kahilingan • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Panatilihing mababa ang mga bilang ng kahilingan at maliit ang mga paglipat"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Iminumungkahi ng mga canonical na link kung aling URL ang ipapakita sa mga resulta ng paghahanap. [Matuto pa tungkol sa mga canonical na link](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Mabilis ang unang pagtugon ng server"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Ang service worker ang teknolohiyang nagbibigay-daan sa iyong app na gumamit ng maraming feature ng Progressive Web App, tulad ng offline, pagdaragdag sa homescreen, at mga push notification. [Matuto pa tungkol sa Mga Service Worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Kinokontrol ng service worker ang page na ito, gayunpaman, walang nakitang `start_url` dahil hindi na-parse ang manifest bilang valid na JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Kinokontrol ng service worker ang page na ito, gayunpaman, wala ang `start_url` ({startUrl}) sa saklaw ng service worker ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Kinokontrol ng service worker ang page na ito, gayunpaman, walang nakitang `start_url` dahil walang nakuhang manifest."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "May isa o higit pang service worker ang pinagmulang ito, gayunpaman, wala sa saklaw ang page ({pageUrl})."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Hindi nagrerehistro ng service worker na kumokontrol sa page at `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Nagrerehistro ng service worker na kumokontrol sa page at `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Tinitiyak ng splash screen na may tema na magkakaroon ng experience na may mataas na kalidad kapag inilulunsad ng mga user ang iyong app sa kanilang mga homescreen. [Matuto pa tungkol sa mga splash screen](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Pinakamahuhusay na kagawian"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Hina-highlight ng mga pagsusuring ito ang mga pagkakataong [gawing mas accessible ng iyong web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Isang subset lang ng mga isyu sa pagiging accessible ang awtomatikong matutukoy kaya hinihikayat din ang manual na pagsusuri."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Tinutugunan ng mga item na ito ang mga bahaging hindi masasakop ng naka-automate na tool sa pagsusuri. Matuto pa sa aming gabay sa [pagsasagawa ng pagsusuri sa pagiging accessible](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Mag-install [ng module ng Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) na puwedeng mag-lazy load ng mga larawan. Nagbibigay ang mga module na iyon ng kakayahang ipagpaliban ang anumang offscreen na larawan para mapahusay ang performance."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Pag-isipang gumamit ng module sa inline na mahalagang CSS at JavaScript, o puwedeng asynchronous na i-load ang mga asset sa pamamagitan ng JavaScript gaya ng module ng[Advanced na Pagsasama-sama ng CSS/JS](https://www.drupal.org/project/advagg). Tandaang puwedeng makasira sa iyong site ang mga pag-optimize na inihahatid ng module na ito, kaya malamang na kakailanganin mong gumawa ng mga pagbabago sa code."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Nakakaapekto ang mga tema, module, at detalye ng server sa oras ng pagtugon ng server. Pag-isipang maghanap ng mas naka-optimize na tema, maingat na pumili ng module sa pag-optimize, at/o i-upgrade ang iyong server. Dapat gamitin ng iyong mga nagho-host na server ang pag-cache ng PHP opcode at pag-cache ng memory para mabawasan ang mga oras ng query sa database gaya ng Redis o Memcached, pati na ang naka-optimize na logic ng application para mas mabilis na maihanda ang mga page."
@@ -2778,10 +2862,10 @@
     "message": "Pag-isipang gumamit ng [Mga Istilo ng Responsive na Larawan](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) para mabawasan ang laki ng mga larawang nilo-load sa iyong page. Kung gumagamit ka ng Views para magpakita ng maraming item ng content sa isang page, pag-isipang magpatupad ng pagination para limitahan ang bilang ng mga item ng content na ipinapakita sa isang page."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Tiyaking na-enable mo ang \"Pagsama-samahin ang mga file sa CSS\" sa page na \"Pangangasiwa » Configuration » Pag-develop.\" Puwede mo ring i-configure ang mga mas advanced na opsyon sa pagsasama-sama sa pamamagitan ng [mga karagdagang module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) para pabilisin ang iyong site sa pamamagitan ng pag-concatenate, pagpapaliit, at pag-compress sa mga CSS style."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Tiyaking na-enable mo ang \"Pagsama-samahin ang mga file sa JavaScript\" sa page na \"Pangangasiwa » Configuration » Pag-develop.\" Puwede mo ring i-configure ang mga mas advanced na opsyon sa pagsasama-sama sa pamamagitan ng [mga karagdagang module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) para pabilisin ang iyong site sa pamamagitan ng pag-concatenate, pagpapaliit, at pag-compress sa mga asset ng JavaScript mo."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Pag-isipang alisin ang mga hindi ginagamit na panuntunan sa CSS at i-attach lang ang mga kinakailangang library ng Drupal sa kaugnay na page o component sa isang page. Tingnan ang [link ng dokumentasyon ng Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) para sa mga detalye. Para tukuyin ang mga naka-attach na library na nagdaragdag ng hindi nauugnay na CSS, subukang patakbuhin ang [sakop ng code](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) sa Chrome DevTools. Puwede mong tukuyin ang tema/module na responsable mula sa URL ng stylesheet kapag naka-disable ang pagsasama-sama sa CSS sa iyong site ng Drupal. Abangan ang mga tema/module na maraming stylesheet sa listahang mayroong maraming pula sa sakop ng code. Dapat lang i-enqueue ng tema/module ang isang stylesheet kung talagang ginagamit ito sa page."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "I-enable ang pag-compress sa iyong Next.js server. [Matuto pa](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Gamitin ang bahaging `nuxt/image` at itakda ang `format=\"webp\"`. [Matuto pa](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Gamitin ang React DevTools Profiler, na gumagamit ng Profiler API para sukatin ang performance sa pag-render ng iyong mga bahagi. [Matuto pa.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Maglagay ng mga video sa loob ng `VideoBoxes`, i-customize ang mga ito gamit ang `Video Masks`, o magdagdag ng `Transparent Videos`. [Matuto pa](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Mag-upload ng mga larawan gamit ang `Wix Media Manager` para matiyak na awtomatikong maihahatid ang mga ito bilang WebP. Makahanap ng [higit pang paraan para i-optimize](https://support.wix.com/en/article/site-performance-optimizing-your-media) ang media ng iyong site."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Kapag [nagdaragdag ng third-party na code](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) sa tab na `Custom Code` ng dashboard ng iyong site, tiyaking naka-defer o naka-load ito sa dulo ng body ng code. Kapag posible, gamitin ang [mga pag-integrate](https://support.wix.com/en/article/about-marketing-integrations) ng Wix para mag-embed ng mga tool sa marketing sa iyong site. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Gumagamit ang Wix ng mga CDN at pag-cache para maghatid ng mga sagot nang mabilis hangga't posible para sa karamihan ng mga bisita. Pag-isipang [manual na i-enable ang pag-cache](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) para sa iyong site, lalo na kung gumagamit ng `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Suriin ang anumang third-party na code na idinagdag mo sa iyong site sa tab na `Custom Code` ng dashboard ng site mo at panatilihin lang ang mga serbisyong kailangan sa iyong site. [Alamin ang higit pa](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Pag-isipang i-upload ang iyong GIF sa isang serbisyo kung saan gagawin itong available para i-embed bilang HTML5 video."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "I-save bilang JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Buksan sa Viewer"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Tinantya at puwedeng mag-iba ang mga value. [Kinakalkula ang score ng performance](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) nang direkta mula sa mga sukatang ito."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Tingnan ang Orihinal na Trace"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Tingnan ang Trace"
   },
diff --git a/front_end/third_party/lighthouse/locales/fr.json b/front_end/third_party/lighthouse/locales/fr.json
index 1f30949..6402e9a 100644
--- a/front_end/third_party/lighthouse/locales/fr.json
+++ b/front_end/third_party/lighthouse/locales/fr.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Les attributs `[aria-*]` correspondent à leurs rôles"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Lorsqu'un élément n'a pas de nom accessible, les lecteurs d'écran l'annoncent avec un nom générique, ce qui le rend inutilisable pour les personnes qui se servent de tels outils. [Découvrez comment rendre les éléments de commande plus accessibles.](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Les éléments `button`, `link` et `menuitem` ont des noms accessibles"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Les éléments de boîte de dialogue ARIA sans nom accessible peuvent empêcher les utilisateurs de lecteurs d'écran de comprendre la fonction de ces éléments. [Découvrez comment rendre les éléments de boîte de dialogue ARIA plus accessibles.](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Les éléments comportant `role=\"dialog\"` ou `role=\"alertdialog\"` n'ont pas de nom accessible."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Les éléments comportant `role=\"dialog\"` ou `role=\"alertdialog\"` ont des noms accessibles."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Les technologies d'assistance, telles que les lecteurs d'écran, présentent un fonctionnement irrégulier lorsque `aria-hidden=\"true\"` est défini sur l'élément `<body>` du document. [Découvrez comment `aria-hidden` affecte le corps du document.](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Les valeurs `[role]` sont valides"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "L'ajout de `role=text` autour d'un nœud de texte divisé par le balisage permet à VoiceOver de le traiter comme une seule expression, mais les descendants sélectionnables de l'élément ne seront pas annoncés. [En savoir plus sur l'attribut `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Les éléments comportant l'attribut `role=text` ont des descendants sélectionnables."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Les éléments comportant l'attribut `role=text` n'ont pas de descendants sélectionnables."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Lorsqu'un champ d'activation/de désactivation n'a pas de nom accessible, les lecteurs d'écran l'annoncent avec un nom générique, ce qui le rend inutilisable pour les personnes qui se servent de tels outils. [En savoir plus sur les champs d'activation/de désactivation](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Les ID ARIA sont uniques"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Un titre sans contenu ni texte inaccessible empêche les utilisateurs de lecteurs d'écran d'accéder aux informations sur la structure de la page. [En savoir plus sur les titres](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Les éléments de titre n'ont pas de contenu"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Tous les éléments de titre ont du contenu."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Les champs de formulaire comprenant plusieurs libellés peuvent être annoncés par les technologies d'assistance comme des lecteurs d'écran utilisant le premier, le dernier ou tous les libellés, ce qui peut prêter à confusion. [Découvrez comment utiliser les libellés de formulaires.](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "L'élément `<html>` comporte un attribut `[xml:lang]` avec la même langue de base que l'attribut `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Les liens vers une même destination doivent avoir une description identique pour que les internautes comprennent la fonction du lien et décident de le suivre ou non. [En savoir plus sur les liens identiques](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Les liens identiques n'ont pas la même fonction."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Les liens identiques ont la même fonction."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Les éléments informatifs doivent contenir un texte de substitution court et descriptif. L'attribut alt peut rester vide pour les éléments décoratifs. [En savoir plus sur l'attribut `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Les éléments d'image possèdent des attributs `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Ajouter un texte visible et accessible aux boutons d'entrée peut aider les utilisateurs de lecteurs d'écran à comprendre la fonction de ces boutons d'entrée. [En savoir plus sur les boutons d'entrée](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Les éléments `<input type=\"image\">` contiennent du texte `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Les libellés permettent de s'assurer que les éléments de contrôle des formulaires sont énoncés correctement par les technologies d'assistance, comme les lecteurs d'écran. [En savoir plus sur les libellés d'éléments de formulaires](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Les éléments de formulaire sont associés à des libellés"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "L'un des repères principaux permet aux utilisateurs de lecteurs d'écran de naviguer sur une page Web. [En savoir plus sur les repères](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Le document ne contient pas de repère principal"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Le document contient un repère principal"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Un texte faiblement contrasté est difficile, voire impossible à lire pour de nombreux utilisateurs. Un texte de lien visible permet d'améliorer l'expérience des utilisateurs souffrant d'une déficience visuelle. [Découvrez comment rendre les liens identifiables.](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Les liens sont identifiables grâce à leur couleur."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Les liens sont identifiables sans se baser sur la couleur."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Rédigez du texte visible et unique pour les liens (et pour le texte de substitution des images, si vous vous en servez dans des liens), afin que les utilisateurs de lecteurs d'écran puissent facilement positionner le curseur dessus et bénéficient d'une meilleure expérience de navigation. [Découvrez comment rendre les liens accessibles.](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Les éléments `<object>` contiennent du texte de substitution"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Les éléments de formulaire sans libellé efficace peuvent créer une expérience frustrante pour les utilisateurs de lecteurs d'écran. [En savoir plus sur l'élément `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Certains éléments ne sont associés à aucun élément de libellé."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Certains éléments sont associés à des éléments de libellé."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Une valeur supérieure à 0 implique un ordre de navigation explicite. Bien que cela soit valide d'un point de vue technique, cela crée souvent une expérience frustrante pour les utilisateurs qui s'appuient sur des technologies d'assistance. [En savoir plus sur l'attribut `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Aucun élément n'a de valeur `[tabindex]` supérieure à 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Les lecteurs d'écran proposent des fonctionnalités qui permettent de naviguer plus simplement dans les tableaux. Vous pouvez améliorer l'expérience des utilisateurs de lecteurs d'écran en vous assurant que les tableaux utilisent bien l'élément de sous-titres au lieu de cellules avec l'attribut `[colspan]`. [En savoir plus sur les légendes](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Les tableaux utilisent `<caption>` au lieu de cellules avec l'attribut `[colspan]` pour indiquer une légende."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "La taille et l'espacement des zones cibles tactiles sont insuffisants."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "La taille et l'espacement des zones cibles tactiles sont suffisants."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Les lecteurs d'écran proposent des fonctionnalités qui permettent de naviguer plus simplement dans les tableaux. Vous pouvez améliorer l'expérience des utilisateurs de lecteurs d'écran en vous assurant que les éléments `<td>` d'un grand tableau (au moins trois cellules en largeur et en hauteur) sont associés à un en-tête de tableau. [En savoir plus sur les en-têtes de tableaux](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "La page n'a aucune URL <lien> de fichier manifeste"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Aucun service worker correspondant n'a été détecté. Vous devrez peut-être recharger la page ou vérifier que le champ d'application du service worker pour la page actuelle inclut le champ d'application et l'URL de démarrage du fichier manifeste."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Impossible de contrôler le service worker sans un champ \"start_url\" dans le fichier manifeste"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications est uniquement disponible dans la version bêta et les versions stables de Chrome sur Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse n'a pas pu détecter la présence d'un service worker. Veuillez réessayer avec une version plus récente de Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Le schéma d'URL du fichier manifeste ({scheme}) n'est pas compatible avec Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulative Layout Shift mesure le mouvement des éléments visibles dans la fenêtre d'affichage. [En savoir plus sur cette métrique](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "La métrique \"Interaction to Next Paint\" mesure la réactivité de la page, c'est-à-dire le temps que celle-ci met à répondre de manière visible à l'entrée utilisateur. [En savoir plus sur cette métrique](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "La métrique \"First Contentful Paint\" indique le moment où le premier texte ou la première image sont affichés. [En savoir plus sur cette métrique](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "\"First Meaningful Paint\" mesure quand le contenu principal d'une page est visible. [En savoir plus sur cette métrique](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "La métrique \"Interaction to Next Paint\" mesure la réactivité de la page, c'est-à-dire le temps que celle-ci met à répondre de manière visible à l'entrée utilisateur. [En savoir plus sur cette métrique](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "La métrique Délai avant interactivité correspond au temps nécessaire pour que la page devienne entièrement interactive. [En savoir plus sur cette métrique](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Évitez les redirections de page multiples"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Pour définir des budgets liés à la quantité et à la taille des ressources de pages, ajoutez un fichier budget.json. [En savoir plus sur les budgets de performances](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 requête • {byteCount, number, bytes} Kio}one{# requête • {byteCount, number, bytes} Kio}other{# requêtes• {byteCount, number, bytes} Kio}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Réduisez au maximum le nombre de requêtes et la taille des transferts"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Les liens canoniques suggèrent l'URL à afficher dans les résultats de recherche. [En savoir plus sur les liens canoniques](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Le temps de réponse initial du serveur était court"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Un service worker est une technologie qui permet à votre appli d'exploiter de nombreuses fonctionnalités propres aux progressive web apps, comme le fonctionnement hors connexion, l'ajout à un écran d'accueil et les notifications push. [En savoir plus sur les service workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Un service worker contrôle cette page. Toutefois, aucun attribut `start_url` n'a été trouvé en raison d'un échec lors de l'analyse du fichier manifeste (JSON non valide)"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Un service worker contrôle cette page. Toutefois, l'attribut `start_url` ({startUrl}) est situé en dehors du champ d'application du service worker ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Un service worker contrôle cette page. Toutefois, aucun attribut `start_url` n'a été trouvé, car le fichier manifeste n'a pas pu être récupéré."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Plusieurs service workers existent pour cette origine. Toutefois, la page ({pageUrl}) est située en dehors du champ d'application."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Aucun service worker de contrôle de la page et de `start_url` n'est enregistré"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Un service worker de contrôle de la page et de `start_url` est enregistré"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Avec un écran de démarrage à thème, vous garantissez une expérience de haute qualité aux utilisateurs qui lancent votre appli depuis leur écran d'accueil. [En savoir plus sur les écrans de démarrage](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "Bonnes pratiques"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Ces vérifications permettent de connaître les possibilités d'[amélioration de l'accessibilité de vos applications Web](https://developer.chrome.com/docs/lighthouse/accessibility/). Seule une partie des problèmes d'accessibilité peut être détectée automatiquement. Il est donc conseillé d'effectuer un test manuel."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Ces éléments concernent des zones qu'un outil de test automatique ne peut pas couvrir. Consultez notre guide sur la [réalisation d'un examen d'accessibilité](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Installez un [module Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) qui peut effectuer le chargement différé des images. Ce type de module offre la possibilité de différer le chargement des images hors écran pour améliorer les performances."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Vous pouvez envisager d'utiliser un module permettant d'aligner les codes CSS et JavaScript critiques, ou éventuellement de charger les éléments de manière asynchrone via JavaScript (le module [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg), par exemple). Gardez en tête qu'à cause des optimisations fournies par ce module, votre site peut cesser de fonctionner. Vous devrez donc probablement modifier le code."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Les thèmes, les modules et les spécifications du serveur sont autant d'éléments qui influent sur le temps de réponse du serveur. Vous pouvez envisager d'utiliser un module plus optimisé ou un plug-in d'optimisation plus performant, ou bien de mettre à niveau votre serveur. Vos serveurs d'hébergement doivent exploiter la mise en cache du code d'opération PHP, la mise en cache de la mémoire pour réduire les temps d'interrogation des bases de données (avec Redis ou Memcached, par exemple), ainsi qu'une logique applicative optimisée pour accélérer la préparation des pages."
@@ -2778,10 +2862,10 @@
     "message": "Vous pouvez également envisager d'utiliser [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) pour réduire la taille des images chargées sur votre page. Si vous utilisez la fonctionnalité Vues pour afficher plusieurs éléments de contenu sur une même page, pensez à définir la pagination pour limiter le nombre d'éléments de contenu affichés sur une page."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Assurez-vous que vous avez activé l'option \"Regrouper les fichiers CSS\" sur la page Administration > Configuration > Développement. Vous pouvez également effectuer une configuration plus avancée des regroupements au moyen de [modules supplémentaires](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search). Ceux-ci vous permettront d'améliorer la rapidité de votre site en concaténant, en minimisant et en compressant vos styles CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Assurez-vous que vous avez activé l'option \"Regrouper les fichiers JavaScript\" sur la page Administration > Configuration > Développement. Vous pouvez également effectuer une configuration plus avancée des regroupements au moyen de [modules supplémentaires](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search). Ceux-ci vous permettront d'améliorer la rapidité de votre site en concaténant, en minimisant et en compressant vos éléments JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Vous pouvez envisager de supprimer les règles CSS inutilisées et de n'attacher que les bibliothèques Drupal nécessaires à la page (ou au composant de page) concernés. Pour plus d'informations, consultez la [documentation Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Pour déterminer quelles bibliothèques attachées ajoutent des CSS superflus, essayez d'exécuter la [couverture de code](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) dans Chrome DevTools. Lorsque le regroupement de CSS est désactivé sur votre site Drupal, vous pouvez identifier le thème ou le module qui en est responsable à partir de l'URL de la feuille de style. Recherchez les thèmes ou les modules pour lesquels un grand nombre de feuilles de style présentent beaucoup d'éléments en rouge dans la couverture de code. Un thème ou un module ne doit mettre une feuille de style en file d'attente que si elle est effectivement utilisée sur la page."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Activez la compression sur votre serveur Next.js. [En savoir plus.](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Utilisez le composant `nuxt/image` et réglez `format=\"webp\"`. [En savoir plus](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Utilisez React DevTools Profiler, qui utilise l'API Profiler, pour mesurer les performances de rendu de vos composants. [En savoir plus](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Placez les vidéos dans des `VideoBoxes`, personnalisez-les à l'aide de `Video Masks` ou ajoutez des `Transparent Videos`. [En savoir plus](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Importez des images avec `Wix Media Manager` pour vous assurer qu'elles sont automatiquement diffusées en WebP. Découvrez [d'autres façons d'optimiser](https://support.wix.com/en/article/site-performance-optimizing-your-media) les éléments multimédias de votre site."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Lorsque [vous ajoutez du code tiers](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) dans l'onglet `Custom Code` du tableau de bord de votre site, assurez-vous qu'il est différé ou chargé à la fin du corps du code. Si possible, utilisez les [intégrations](https://support.wix.com/en/article/about-marketing-integrations) de Wix pour intégrer des outils marketing sur votre site. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix utilise des CDN et la mise en cache afin de diffuser des réponses le plus vite possible pour la plupart des visiteurs. Envisagez d'[activer manuellement la mise en cache](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) pour votre site, en particulier si vous utilisez `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Vérifiez le code tiers que vous avez ajouté à votre site dans l'onglet `Custom Code` de son tableau de bord et ne conservez que les services nécessaires à votre site. [En savoir plus](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Envisagez d'importer votre GIF dans un service qui permettra de l'intégrer en tant que vidéo HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Enregistrer au format JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Ouvrir dans la visionneuse"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Les valeurs sont estimées et peuvent varier. Le [calcul du score lié aux performances](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) repose directement sur ces statistiques."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Afficher la trace d'origine"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Afficher la trace"
   },
diff --git a/front_end/third_party/lighthouse/locales/he.json b/front_end/third_party/lighthouse/locales/he.json
index d6eb568..923a675 100644
--- a/front_end/third_party/lighthouse/locales/he.json
+++ b/front_end/third_party/lighthouse/locales/he.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "מאפייני ה-`[aria-*]`‎ תואמים לתפקידים שלהם"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "כשאין לרכיב תווית נגישות, קוראי מסך מציינים שם גנרי, ובמצב כזה הרכיב לא שימושי לאנשים שמסתמכים על קוראי מסך. [איך לשפר את הנגישות של רכיבי פקודות](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)?"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "לרכיבים `button`, `link` וגם `menuitem` יש שמות נגישים"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "רכיבים של תיבת דו-שיח מסוג ARIA שאין בהם תוויות נגישות עלולים למנוע ממשתמשים בקורא מסך להבין מה מטרת הרכיבים האלה. [כך משפרים את הנגישות ברכיבים של תיבת דו-שיח מסוג ARIA](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "לרכיבים עם `role=\"dialog\"` או `role=\"alertdialog\"` אין תוויות נגישות."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "לרכיבים עם `role=\"dialog\"` או `role=\"alertdialog\"` יש תוויות נגישות."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "טכנולוגיות מסייעות, כמו קוראי מסך, פועלות באופן לא עקבי כשמוגדר `aria-hidden=\"true\"` ב-`<body>` של המסמך. [מה ההשפעה של `aria-hidden` על גוף המסמך](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)?"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "ערכי ה-`[role]` חוקיים"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "הוספת `role=text` מסביב לפיצול טקסט לצמתים באמצעות תגי עיצוב מאפשרת ל-VoiceOver להתייחס לטקסט כביטוי יחיד, אבל לא תתבצע הקראה של צאצאי הרכיב שניתן להתמקד בהם. [מידע נוסף על המאפיין `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "ברכיבים עם המאפיין `role=text` יש צאצאים שניתן להתמקד בהם."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "ברכיבים עם המאפיין `role=text` אין צאצאים שניתן להתמקד בהם."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "כשאין לשדה החלפת מצב תווית נגישות, קוראי מסך מציינים שם גנרי, ובמצב כזה אנשים שמסתמכים על קוראי מסך יתקשו להשתמש בשדה כזה. [מידע נוסף על שדות החלפת מצב](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "מזהי ה-ARIA ייחודיים"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "כותרת ללא תוכן או טקסט לא נגיש מונעים ממשתמשים בקורא מסך לגשת למידע שבמבנה הדף. [מידע נוסף על כותרות](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "אין תוכן ברכיבי הכותרת."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "יש תוכן בכל רכיבי הכותרת."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "טכנולוגיות מסייעות עלולות להקריא באופן מבלבל שדות טופס עם תוויות מרובות. קוראי מסך, למשל, מקריאים את התווית הראשונה, האחרונה או את כולן. [כאן מוסבר איך משתמשים בתוויות של טפסים](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "לרכיב `<html>` יש מאפיין `[xml:lang]` ששפת הבסיס שלו זהה לשפה במאפיין `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "לקישורים עם אותו יעד צריך להיות תיאור זהה, כדי לעזור למשתמשים להבין מה מטרת הקישור ולהחליט אם לנווט אליו. [מידע נוסף על קישורים זהים](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "לקישורים זהים אין מטרה זהה."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "לקישורים זהים יש מטרה זהה."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "רכיבים אינפורמטיביים צריכים לכלול טקסט חלופי קצר ותיאורי. אפשר להתעלם מרכיבי עיצוב עם מאפיין alt ריק. [מידע נוסף על המאפיין `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "לרכיבי תמונה יש מאפייני `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "הוספה של טקסט נגיש וברור ללחצני קלט עשויה לעזור למשתמשים בקורא מסך להבין את המטרה של לחצן הקלט. [מידע נוסף על לחצני קלט](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "לרכיבים מסוג `<input type=\"image\">` יש טקסט `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "בעזרת תוויות אפשר לוודא ששמות של פקדי טפסים מוקראים באופן תקין על-ידי טכנולוגיות מסייעות, כמו קוראי מסך. [מידע נוסף על תוויות של רכיבי טפסים](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "לרכיבי טופס יש תוויות המשויכות אליהם"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "מאפיין עיקרי אחד של ARIA עוזר למשתמשים בקורא מסך לנווט בדף אינטרנט. [מידע נוסף על מאפיינים של ARIA](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "אין במסמך מאפיין עיקרי של ARIA."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "המסמך הוא מאפיין עיקרי של ARIA."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "למשתמשים רבים קשה או בלתי אפשרי לקרוא טקסט עם ניגודיות נמוכה. כשקל להבדיל בין טקסט רגיל לבין טקסט של קישור, זה משפר את החוויה של משתמשים עם ליקויי ראייה. [כך מגדירים קישורים שניתן להבדיל ביניהם](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "לקישורים יש צבעים שונים כדי שניתן יהיה להבדיל ביניהם."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "ניתן להבדיל בין קישורים בלי להסתמך על צבע."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "כשהטקסט של הקישור מובן וייחודי וניתן למיקוד, משתמשים שנעזרים בקורא מסך נהנים מחוויית ניווט משופרת. המצב הזה נכון גם לגבי טקסט חלופי של תמונות כשנעשה בהן שימוש כקישורים. [כך מגדירים קישורים נגישים](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "לרכיבי `<object>` יש טקסט חלופי"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "רכיבי טופס שאין בהם תוויות מועילות יכולים לגרום לתסכול בחוויות של משתמשים בקורא מסך. [מידע נוסף על רכיבים מסוג `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "לרכיבים נבחרים אין רכיבי תווית משויכים."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "לרכיבים נבחרים יש רכיבי תווית משויכים."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "ערך גדול מ-0 מציין סדר ניווט מפורש. למרות שאפשרות זו תקינה מבחינה טכנית, במקרים רבים היא מובילה לחוויה מתסכלת בקרב משתמשים שמסתמכים על טכנולוגיות מסייעות. [מידע נוסף על המאפיין `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "לאף רכיב אין ערך `[tabindex]` גדול מ-0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "קוראי מסך כוללים תכונות שעוזרות לנווט בטבלאות. כדאי לוודא שבטבלאות יש שימוש ברכיב הכיתוב בפועל במקום בתאים עם המאפיין `[colspan]`, כדי לשפר את החוויה של המשתמשים בקורא מסך. [מידע נוסף על רכיבי כיתוב](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "יש שימוש במאפיין `<caption>` במקום בתאים עם המאפיין `[colspan]` כדי לציין כיתוב בטבלאות."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "משטחי המגע לא גדולים ומרווחים מספיק."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "משטחי המגע גדולים ומרווחים מספיק."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "קוראי מסך כוללים תכונות שעוזרות לנווט בטבלאות. בטבלאות גדולות (3 תאים לפחות ברוחב ובגובה), כדאי להקפיד לשייך לרכיבי `<td>` כותרת טבלה כדי לשפר את החוויה של המשתמשים בקורא מסך. [מידע נוסף על כותרות של טבלאות](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "אין לדף כתובת URL של מניפסט <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "לא נמצא קובץ שירות (service worker) תואם. ייתכן שצריך לטעון מחדש את הדף, או לבדוק אם ההיקף של קובץ השירות (service worker) של הדף הנוכחי כולל את ההיקף ואת כתובת ה-URL להתחלה של קובץ המניפסט."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "לא ניתן לבדוק את קובץ השירות (service worker) ללא השדה 'כתובת url להתחלה'"
   },
@@ -969,7 +1083,7 @@
     "message": "התכונה prefer_related_applications נתמכת רק בגרסת הבטא של Chrome ובערוצים יציבים ב-Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "במסגרת Lighthouse לא ניתן לקבוע אם היה קובץ שירות (service worker). צריך לנסות שוב בגרסה חדשה יותר של Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "הסכימה של כתובת ה-URL של המניפסט ({scheme}) אינה נתמכת ב-Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "המדד Cumulative Layout Shift ‏(CLS) מודד את התנועה של הרכיבים הגלויים בתוך אזור התצוגה. [מידע נוסף על המדד Cumulative Layout Shift ‏(CLS)](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "המדד 'מאינטראקציה ועד הצגת התגובה' מודד את רמת הרספונסיביות של הדף – כמה זמן נדרש עד להצגת תגובה בדף לקלט של משתמש. [מידע נוסף על המדד 'מאינטראקציה ועד הצגת התגובה'](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "המדד 'הצגת תוכן ראשוני (FCP)' מציין את הזמן שבו הטקסט או התמונה הראשונים מוצגים. [מידע נוסף על המדד 'הצגת תוכן ראשוני (FCP)'](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "המדד 'הצגת התוכן העיקרי (FMP)' מציין מתי מוצג התוכן העיקרי של הדף. [מידע נוסף על המדד 'הצגת התוכן העיקרי (FMP)'](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "המדד 'מאינטראקציה ועד הצגת התגובה' מודד את רמת הרספונסיביות של הדף – כמה זמן נדרש עד להצגת תגובה בדף לקלט של משתמש. [מידע נוסף על המדד 'מאינטראקציה ועד הצגת התגובה'](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "ה'זמן עד לפעילות מלאה' הוא משך הזמן שחולף עד שהדף מאפשר אינטראקציה מלאה. [מידע נוסף על הערך 'הזמן עד לפעילות מלאה'](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "יש להימנע מהפניות אוטומטיות מרובות"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "כדי להגדיר תקציבים עבור הכמות והגודל של משאבי הדף, יש להוסיף קובץ budget.json. [מידע נוסף על תקציבי ביצועים](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{בקשה אחת • ‎{byteCount, number, bytes} KiB}one{# בקשות • ‎{byteCount, number, bytes} KiB}two{# בקשות • ‎{byteCount, number, bytes} KiB}other{# בקשות • ‎{byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "יש לצמצם ככל האפשר את מספר הבקשות ואת גודל ההעברות"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "קישורים קנוניים מציעים את כתובת ה-URL שיש להציג בתוצאות החיפוש. [מידע נוסף על קישורים קנוניים](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "זמן התגובה הראשונית של השרת היה קצר"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "קובץ השירות (service worker) הוא הטכנולוגיה שמאפשרת לאפליקציה שלך להשתמש בתכונות רבות של Progressive Web App כמו 'מצב אופליין', 'הוספה למסך הבית' ו'התראות'. [מידע נוסף על קובצי שירות (service worker)](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "דף זה נשלט על ידי קובץ שירות (service worker), אך לא נמצא `start_url` כי לא ניתן היה לנתח את המניפסט בתור JSON תקף"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "דף זה נשלט על ידי קובץ שירות (service worker), אך ה-`start_url` ({startUrl}) לא נמצא בטווח ({scopeUrl}) של קובץ השירות"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "דף זה נשלט על ידי קובץ שירות (service worker), אך לא נמצא `start_url` כי לא אוחזר מניפסט."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "למקור זה יש לפחות קובץ שירות (service worker) אחד, אך הדף ({pageUrl}) לא נמצא בטווח."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "לא רושם קובץ שירות (service worker) ששולט בדף וב-`start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "רושם קובץ שירות (service worker) ששולט בדף וב-`start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "מסך פתיחה מעוצב מבטיח חוויה באיכות גבוהה כשמשתמשים מפעילים את האפליקציה שלך ממסכי הבית שלהם. [מידע נוסף על מסכי פתיחה](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "שיטות מומלצות"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "הבדיקות האלה מדגישות הזדמנויות [לשפר את הנגישות של אפליקציית האינטרנט](https://developer.chrome.com/docs/lighthouse/accessibility/). אפשר לזהות באופן אוטומטי רק חלק מבעיות הנגישות, ולכן מומלץ לבצע גם בדיקות ידניות."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "הפריטים האלה בודקים תחומים שלא ניתן לבדוק באמצעות כלי בדיקה אוטומטיים. מידע נוסף זמין במדריך שלנו שבו מוסבר [איך לערוך בדיקת נגישות](https://web.dev/how-to-review/)."
@@ -2277,7 +2361,7 @@
     "message": "לא ניתן יותר לבקש הרשאה ל-Notification API מ-iframe ממקורות שונים. במקום זאת, כדאי לבקש הרשאה ממסגרת ברמה עליונה או לפתוח חלון חדש."
   },
   "core/lib/deprecations-strings.js | ObsoleteCreateImageBitmapImageOrientationNone": {
-    "message": "האפשרות `imageOrientation: 'none'` ב-createImageBitmap הוצאה משימוש. במקומה צריך להשתמש ב-createImageBitmap ולהוסיף את האפשרות ‎\\{imageOrientation: 'from-image'‎\\}."
+    "message": "האפשרות `imageOrientation: 'none'` ב-createImageBitmap הוצאה משימוש. במקומה צריך להשתמש ב-createImageBitmap ולהוסיף את האפשרות ‎\\{imageOrientation: 'from-image'\\}."
   },
   "core/lib/deprecations-strings.js | ObsoleteWebRtcCipherSuite": {
     "message": "השותף שלך מנהל משא ומתן על גרסת ‎(D)TLS מיושנת. עליך לפנות לשותף שלך כדי לתקן זאת."
@@ -2769,7 +2853,7 @@
     "message": "כדאי להתקין [מודול של Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) שיכול לטעון תמונות בהדרגה. כדי לשפר ביצועים, מודולים מסוג זה מאפשרים לדחות את טעינת התמונות שאינן מופיעות מייד במסך."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "יש לשקול להשתמש במודול כדי להטביע נכסים קריטיים של CSS ושל JavaScript או כדי לטעון נכסים באופן אסינכרוני באמצעות JavaScript כגון מודול של [צבירת CSS/JS מתקדמת](https://www.drupal.org/project/advagg). חשוב: ייתכן שהאופטימיזציות המבוצעות על ידי המודול הזה יגרמו לתקלות באתר, ולכן כנראה שיהיה צורך לערוך שינויים בקוד."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "עיצובים, מודולים ומפרטי שרתים משפיעים על זמן התגובה של השרת. אפשר להשתמש בעיצוב שעבר אופטימיזציה, לבחור בקפידה מודול לאופטימיזציה ו/או לשדרג את השרת. שרתי האירוח שלך צריכים להשתמש בהעברה למטמון של PHP opcode ושל הזיכרון כדי לצמצם את זמני השאילתות של מסדי נתונים כגון Redis או Memcache, וגם להשתמש בלוגיקה באיכות אופטימלית של האפליקציה כדי להכין דפים במהירות רבה יותר."
@@ -2778,10 +2862,10 @@
     "message": "כדאי לשקול שימוש ב[סגנונות התמונות הרספונסיביות](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) כדי לצמצם את הגודל של התמונות שטענת לדף. אם נעשה שימוש בתצוגות להצגת פריטי תוכן מרובים בדף, כדאי לשקול יישום עימוד כדי להגביל את מספר פריטי התוכן המופיעים בכל דף נתון."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "יש לוודא ש\"קובצי ה-CSS המצטברים\" מופעלים בדף \"ניהול » הגדרה » פיתוח\". ניתן גם להגדיר אפשרויות צבירה מתקדמות יותר באמצעות [מודולים נוספים](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) שיכולים להאיץ את האתר בעזרת שרשור, הקטנה ודחיסה של סגנונות CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "יש לוודא ש\"קובצי ה-JavaScript המצטברים\" מופעלים בדף \"ניהול » הגדרה » פיתוח\". ניתן גם להגדיר אפשרויות צבירה מתקדמות יותר באמצעות [מודולים נוספים](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) שיכולים להאיץ את האתר בעזרת שרשור, הקטנה ודחיסה של נכסי JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "כדאי לשקול הסרה של כללי CSS שאינם בשימוש, ולצרף לדף הרלוונטי או לרכיב בדף רק את ספריות ה-Drupal הנדרשות. לפרטים נוספים, ניתן לעיין ב[קישור לתיעוד של Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). כדי לזהות ספריות מצורפות שמוסיפות תוכן CSS מיותר, כדאי להפעיל [כיסוי קוד](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) ב-Chrome DevTools. לאחר השבתה של צבירת CSS באתר ה-Drupal שלך, ניתן יהיה לזהות את העיצוב/המודול שאחראים להוספת גיליון הסגנונות. העיצובים/המודולים הבעייתיים הם אלה שברשימת גיליונות הסגנונות שלהם יש כמות גדולה של כיסוי קוד באדום. עיצוב/מודול צריך להכניס גיליון סגנונות לתור רק אם נעשה בו שימוש בפועל בדף."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "עליך להפעיל דחיסת נתונים בשרת Next.js. [למידע נוסף](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "עליך להשתמש ברכיב `nuxt/image` ולהגדיר את `format=\"webp\"`. [מידע נוסף](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "כדי למדוד את ביצועי הרינדור של הרכיבים, אפשר להיעזר ב-React DevTools Profiler, שמשתמש ב-Profiler API. [מידע נוסף.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "צריך למקם סרטונים בתוך `VideoBoxes`, להתאים אותם אישית באמצעות `Video Masks` או להוסיף `Transparent Videos`. [מידע נוסף](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "אפשר להעלות תמונות באמצעות `Wix Media Manager` כדי שהן יוצגו בפורמט WebP באופן אוטומטי. כדאי לבדוק [דרכים נוספות לאופטימיזציה](https://support.wix.com/en/article/site-performance-optimizing-your-media) של המדיה באתר."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "כש[מוסיפים קוד מצד שלישי](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) בכרטיסייה `Custom Code` שבמרכז הבקרה של האתר, חשוב לוודא שהוא נדחה או נטען בסוף גוף הקוד. אם אפשר, כדאי להשתמש ב[שילובים](https://support.wix.com/en/article/about-marketing-integrations) של Wix להטמעת כלי שיווק באתר. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "ב-Wix נעשה שימוש ברשתות CDN ובשמירה במטמון כדי שזמן התגובה יהיה קצר ככל שניתן עבור רוב המבקרים. כדאי [להפעיל שמירה במטמון באופן ידני](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) באתר, במיוחד אם משתמשים ב-`Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "עליך לבדוק את כל הקודים שהוספת לאתר מצדדים שלישיים בכרטיסייה `Custom Code` שבמרכז הבקרה של האתר. חשוב לשמור רק את השירותים הנחוצים לאתר. [מידע נוסף](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "כדאי לשקול העלאה של ה-GIF לשירות שיאפשר להטמיע אותו כסרטון HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "שמירה כ-JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "פתיחה ב-Viewer"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "הערכים משוערים והם עשויים להשתנות. [ציון הביצועים מחושב](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) ישירות לפי הערכים האלה."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "צפייה בעקבות המקוריות"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "צפייה בעקבות"
   },
diff --git a/front_end/third_party/lighthouse/locales/hi.json b/front_end/third_party/lighthouse/locales/hi.json
index 818f82c..4fd3df2 100644
--- a/front_end/third_party/lighthouse/locales/hi.json
+++ b/front_end/third_party/lighthouse/locales/hi.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` विशेषताएं और उनकी भूमिकाएं एक-दूसरे से मेल खाती हैं"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "अगर किसी एलिमेंट का ऐक्सेस किया जा सकने वाला नाम नहीं है, तो स्क्रीन रीडर उस एलिमेंट को किसी सामान्य नाम से बुलाते हैं. इस वजह से, वह एलिमेंट उन उपयोगकर्ताओं के लिए किसी काम का नहीं रहता जो स्क्रीन रीडर की मदद से ही टेक्स्ट पढ़ या समझ सकते हैं. [कमांड एलिमेंट को ज़्यादा से ज़्यादा लोगों तक पहुंचाने का तरीका जानें](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`, `link`, और `menuitem` एलिमेंट के नाम ऐक्सेस किए जा सकते हैं"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "स्क्रीन रीडर का इस्तेमाल करने वाले लोगों को ऐसे ARIA डायलॉग एलिमेंट से परेशानी होती है जिन पर ऐक्सेस किए जा सकने वाले नाम नहीं होते हैं. इससे वे एलिमेंट के इस्तेमाल का मकसद नहीं समझ पाते. [ARIA डायलॉग एलिमेंट को ज़्यादा से ज़्यादा ऐक्सेस करने लायक बनाने का तरीका जानें](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "`role=\"dialog\"` या `role=\"alertdialog\"` वाले एलिमेंट के नाम ऐक्सेस नहीं किए जा सकते."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "`role=\"dialog\"` या `role=\"alertdialog\"` वाले एलिमेंट के नाम ऐक्सेस किए जा सकते हैं."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "जब `aria-hidden=\"true\"`, दस्तावेज़ `<body>` पर सेट होता है, तो स्क्रीन रीडर जैसी सहायक टेक्नोलॉजी हर समय एक जैसा काम नहीं करती. [जानें कि `aria-hidden` का दस्तावेज़ के मुख्य हिस्से पर क्या असर पड़ता है](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` मान सही हैं"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "मार्कअप की मदद से बांटे गए टेक्स्ट नोड के आस-पास `role=text` जोड़ने से, VoiceOver उस टेक्स्ट को एक वाक्यांश मानेगा. हालांकि, एलिमेंट के फ़ोकस करने लायक डिसेंडेंट का एलान नहीं किया जाएगा. [`role=text` एट्रिब्यूट के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "`role=text` एट्रिब्यूट वाले एलिमेंट में फ़ोकस करने लायक डिसेंडेंट हैं."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "`role=text` एट्रिब्यूट वाले एलिमेंट में फ़ोकस करने लायक डिसेंडेंट नहीं हैं."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "अगर किसी टॉगल फ़ील्ड के पास ऐक्सेस किया जा सकने वाला नाम नहीं है, तो स्क्रीन रीडर उसे किसी सामान्य नाम से बुलाते हैं. इस वजह से, यह स्क्रीन रीडर की मदद से टेक्स्ट पढ़ने या समझने वालों के लिए किसी काम का नहीं रहता. [टॉगल फ़ील्ड के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA आईडी खास हैं"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "स्क्रीन रीडर का इस्तेमाल करने वाले लोगों को ऐसी हेडिंग से परेशानी होती है जिसमें कोई कॉन्टेंट नहीं है या ऐसा टेक्स्ट है जिसे ऐक्सेस नहीं किया जा सकता. इससे वे पेज के स्ट्रक्चर की जानकारी ऐक्सेस नहीं कर पाते हैं. [हेडिंग के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "हेडिंग एलिमेंट में कॉन्टेंट नहीं है."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "हेडिंग के सभी एलिमेंट में कॉन्टेंट मौजूद है."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "स्क्रीन रीडर जैसी सहायक टेक्नोलॉजी, एक से ज़्यादा लेबल वाले फ़ॉर्म फ़ील्ड का नाम गलत तरीके से बोल सकती हैं. ये टेक्नोलॉजी सिर्फ़ पहला, आखिरी या सभी लेबल इस्तेमाल करती हैं. [फ़ॉर्म लेबल इस्तेमाल करने का तरीका जानें](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` एलिमेंट में `[xml:lang]` एट्रिब्यूट है, जिसकी मुख्य भाषा `[lang]` एट्रिब्यूट है."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "एक ही वेब पेज पर ले जाने वाले लिंक की जानकारी एक ही होनी चाहिए. इससे लोगों को लिंक का इस्तेमाल करने के मकसद को समझने और यह तय करने में मदद मिलती है कि उन्हें लिंक पर जाना है या नहीं. [एक जैसे लिंक के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "एक जैसे लिंक अलग-अलग पेजों पर ले जाते हैं."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "एक जैसे लिंक एक ही पेज पर ले जाते हैं."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "जानकारी वाले एलिमेंट में, छोटा और ब्यौरे वाला वैकल्पिक टेक्स्ट होना चाहिए. सजावटी एलिमेंट में एक खाली ऑल्ट एट्रिब्यूट का इस्तेमाल किया जा सकता है. [`alt` एट्रिब्यूट के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "इमेज एलिमेंट में `[alt]` विशेषताएं शामिल हैं"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "इनपुट बटन में आसानी से समझ में आने वाला और ऐक्सेस किया जा सकने वाला टेक्स्ट जोड़ने से, स्क्रीन रीडर इस्तेमाल करने वालों को इनपुट बटन के मकसद को समझने में मदद मिल सकती है. [इनपुट बटन के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` एलिमेंट में`[alt]` टेक्स्ट है"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "लेबल यह पक्का करते हैं कि स्क्रीन रीडर जैसी सहायक टेक्नोलॉजी की मदद से, फ़ॉर्म कंट्रोल का नाम सही तरीके से बोला जाए. [फ़ॉर्म एलिमेंट के लेबल के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "फ़ॉर्म एलिमेंट में सहभागी लेबल हैं"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "एक मुख्य लैंडमार्क होने से, स्क्रीन रीडर इस्तेमाल करने वाले लोगों को वेब पेज पर नेविगेट करने में मदद मिलती है. [लैंडमार्क के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "दस्तावेज़ में कोई मुख्य लैंडमार्क नहीं है."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "दस्तावेज़ में एक मुख्य लैंडमार्क है."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "कई लोगों के लिए, कम कंट्रास्ट वाला टेक्स्ट पढ़ना मुश्किल या नामुमकिन होता है. समझ में आने वाले लिंक टेक्स्ट से, कम दृष्टि वाले लोगों को बेहतर अनुभव मिलता है. [लिंक को खास बनाने का तरीका जानें](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "रंग का इस्तेमाल करके, दिखाए गए लिंक अलग नज़र आने चाहिए."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "किसी भी रंग का इस्तेमाल किए बिना, लिंक अलग से पहचाने जा सकते हैं."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "समझने लायक, यूनीक, और फ़ोकस करने लायक लिंक टेक्स्ट (और इमेज के लिए इस्तेमाल किया जाने वाला वैकल्पिक टेक्स्ट, जब लिंक के तौर पर इस्तेमाल किया जाए) की मदद से, स्क्रीन रीडर इस्तेमाल करने वालों का नेविगेशन अनुभव बेहतर होता है. [लिंक को ऐक्सेस करने लायक बनाने का तरीका जानें](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` एलिमेंट में वैकल्पिक टेक्स्ट है"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "सही और असरदार लेबल के बिना फ़ॉर्म के एलिमेंट, स्क्रीन रीडर इस्तेमाल करने वालों के अनुभव को खराब कर सकते हैं. [`select` एलिमेंट के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "चुनने की सुविधा देने वाले एलिमेंट में उनसे जुड़े लेबल एलिमेंट नहीं हैं."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "चुनने की सुविधा देने वाले एलिमेंट में उनसे जुड़े लेबल एलिमेंट हैं."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "शून्य से ज़्यादा की वैल्यू साफ़ तौर पर, नेविगेशन के क्रम को दिखाती है. हालांकि, यह वैल्यू तकनीकी रूप से मान्य है. इसके बावजूद, सहायक टेक्नोलॉजी पर भरोसा करने वाले लोगों को यह वैल्यू अक्सर परेशान करती है. [`tabindex` एट्रिब्यूट के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "किसी भी एलिमेंट का `[tabindex]` मान 0 से ज़्यादा नहीं हो सकता"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "स्क्रीन रीडर में ऐसी सुविधाएं होती हैं जिनकी मदद से, टेबल पर नेविगेट करना आसान हो जाता है. यह पक्का करें कि टेबल में `[colspan]` एट्रिब्यूट वाले सेल के बजाय, असल कैप्शन एलिमेंट का इस्तेमाल किया जाता है. इससे स्क्रीन रीडर का इस्तेमाल करने वालों को बेहतर अनुभव मिल सकता है. [कैप्शन के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "टेबल में कैप्शन दिखाने के लिए, `[colspan]` एट्रिब्यूट वाली सेल के बजाय, `<caption>` का इस्तेमाल किया जाता है."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "टच टारगेट (स्क्रीन के वे हिस्से जहां छूने पर कोई कार्रवाई होती है) में ज़रूरत के मुताबिक साइज़ या स्पेस नहीं है."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "टच टारगेट (स्क्रीन के वे हिस्से जहां छूने पर कोई कार्रवाई होती है) में ज़रूरत के मुताबिक साइज़ और स्पेस है."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "स्क्रीन रीडर में ऐसी सुविधाएं होती हैं जिनकी मदद से, टेबल पर नेविगेट करना आसान हो जाता है. यह पक्का करें कि बड़ी टेबल (चौड़ाई और ऊंचाई में तीन या उससे ज़्यादा सेल) के `<td>` एलिमेंट में संबंधित टेबल हेडर का इस्तेमाल किया जाता है. इससे स्क्रीन रीडर का इस्तेमाल करने वालों के अनुभव को बेहतर बनाया जा सकता है. [टेबल हेडर के बारे में ज़्यादा जानें](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "पेज में कोई भी मेनिफ़ेस्ट <link> यूआरएल नहीं है"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "कोई भी मिलता-जुलता सर्विस वर्कर नहीं मिला. हो सकता है कि आपको पेज फिर से लोड करना पड़े या यह जांच करनी पड़े कि मौजूदा पेज के लिए सर्विस वर्कर का दायरा, मेनिफ़ेस्ट के दायरे और स्टार्ट यूआरएल जितना हो."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "मेनिफ़ेस्ट में 'start_url' फ़ील्ड न होने की वजह से सर्विस वर्कर की जांच नहीं की जा सकती"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications सिर्फ़ Chrome बीटा और Android पर स्थिर चैनलों पर काम करता है."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse यह पता नहीं कर सका कि कोई सर्विस वर्कर था या नहीं. Chrome के नए वर्शन के साथ इस्तेमाल करें."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "मेनिफ़ेस्ट का यूआरएल जिस स्कीम ({scheme}) का इस्तेमाल करता है वह Android पर काम नहीं करती."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "कुल लेआउट शिफ़्ट, व्यूपोर्ट में दिखने वाले एलिमेंट की हलचल बताता है. [कुल लेआउट शिफ़्ट से जुड़ी मेट्रिक के बारे में ज़्यादा जानें](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "इंटरैक्शन टू नेक्स्ट पेंट मेट्रिक, पेज पर रिस्पॉन्स मिलने में लगने वाले समय को मापती है. इससे पता चलता है कि उपयोगकर्ता के इनपुट का जवाब देने में पेज को कितना समय लगता है. [इंटरैक्शन टू नेक्स्ट पेंट मेट्रिक के बारे में ज़्यादा जानें](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "फ़र्स्ट कॉन्टेंटफ़ुल पेंट से, यह पता चलता है कि आपकी वेबसाइट का जो टेक्स्ट या इमेज किसी उपयोगकर्ता को सबसे पहले दिखा उसे दिखने में कितना समय लगा. [फ़र्स्ट कॉन्टेंटफ़ुल पेंट से जुड़ी मेट्रिक के बारे में ज़्यादा जानें](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "फ़र्स्ट मीनिंगफ़ुल पेंट मेट्रिक इस बात की जानकारी देती है कि किसी पेज का मुख्य कॉन्टेंट कब दिखा. [फ़र्स्ट मीनिंगफ़ुल पेंट से जुड़ी मेट्रिक के बारे में ज़्यादा जानें](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "इंटरैक्शन टू नेक्स्ट पेंट मेट्रिक, पेज पर रिस्पॉन्स मिलने में लगने वाले समय को मापती है. इससे पता चलता है कि उपयोगकर्ता के इनपुट का जवाब देने में पेज को कितना समय लगता है. [इंटरैक्शन टू नेक्स्ट पेंट मेट्रिक के बारे में ज़्यादा जानें](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "इंटरैक्टिव में लगने वाला समय, वह समय है जितनी देर में पेज पूरी तरह से इंटरैक्टिव हो जाता है. [इंटरैक्टिव में लगने वाले समय से जुड़ी मेट्रिक के बारे में ज़्यादा जानें](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "एक से ज़्यादा पेज रीडायरेक्ट करने से बचें"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "पेज रिसॉर्स की संख्या और साइज़ का बजट सेट करने के लिए, budget.json फ़ाइल जोड़ें. [परफ़ॉर्मेंस बजट के बारे में ज़्यादा जानें](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 अनुरोध • {byteCount, number, bytes} किबीबाइट}one{# अनुरोध • {byteCount, number, bytes} किबीबाइट}other{# अनुरोध • {byteCount, number, bytes} किबीबाइट}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "अनुरोधों की संख्या कम और ट्रांसफ़र का आकार छोटा रखें"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "कैननिकल लिंक, इस बारे में जानकारी देते हैं कि खोज के नतीजों में कौनसे यूआरएल दिखाए जाएं. [कैननिकल लिंक के बारे में ज़्यादा जानें](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "जवाब देने में सर्वर को लगने वाला शुरुआती समय कम था"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "सर्विस वर्कर एक ऐसी टेक्नोलॉजी है जो आपके ऐप्लिकेशन को, प्रोग्रेसिव वेब ऐप्लिकेशन के कई फ़ीचर इस्तेमाल करने की अनुमति देती है. इनमें ऑफ़लाइन, होमस्क्रीन पर जोड़ें, और पुश नोटिफ़िकेशन जैसे फ़ीचर शामिल हैं. [सर्विस वर्कर के बारे में ज़्यादा जानें](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "इस पेज का नियंत्रण सर्विस वर्कर के पास है. हालांकि, कोई `start_url` नहीं मिला, क्योंकि मेनिफ़ेस्ट को मान्य JSON के रूप में पार्स नहीं किया जा सका"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "इस पेज का नियंत्रण सर्विस वर्कर के पास है. हालांकि, `start_url` ({startUrl}) सर्विस वर्कर के दायरे में नहीं है ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "इस पेज का नियंत्रण सर्विस वर्कर के पास है. हालांकि, कोई `start_url` नहीं मिला, क्योंकि किसी पेज पर कोई मेनिफ़ेस्ट ही नहीं था."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "यहां पर एक या ज़्यादा सर्विस वर्कर हैं. हालांकि, पेज ({pageUrl}) दायरे में नहीं है."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "किसी ऐसे सर्विस वर्कर को रजिस्टर नहीं करता जो पेज और `start_url` को नियंत्रित करता है"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "किसी ऐसे सर्विस वर्कर को रजिस्टर करता है जो पेज और `start_url` को नियंत्रित करता है"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "जब लोग अपने डिवाइस की होमस्क्रीन से आपका ऐप्लिकेशन लॉन्च करते हैं, तो थीम वाली स्प्लैश स्क्रीन की वजह से उन्हें अच्छा अनुभव मिलता है. [स्प्लैश स्क्रीन के बारे में ज़्यादा जानें](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "सबसे अच्छे तरीके"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "ये सभी जांच आपको [आपके वेब ऐप्लिकेशन की सुलभता बेहतर करने](https://developer.chrome.com/docs/lighthouse/accessibility/) के अवसर देती हैं. सुलभता गड़बड़ियों के सिर्फ़ एक उपसेट के बारे में अपने आप पता लगाया जा सकता है, इसलिए हम मैन्युअल टेस्टिंग का सुझाव देते हैं."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "ये आइटम ऐसे मामलों में भी काम करते हैं जहां अपने आप काम करने वाला टेस्टिंग टूल नाकाम रहता है. हमारी गाइड में जाकर [सुलभता समीक्षा करने](https://web.dev/how-to-review/) के बारे में ज़्यादा जानें."
@@ -2769,7 +2853,7 @@
     "message": "ऐसा [Drupal मॉड्यूल](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) इंस्टॉल करें जो इमेज को धीमे लोड कर पाए. परफ़ॉर्मेंस को बेहतर बनाने के लिए, इस तरह के मॉड्यूल किसी भी ऑफ़स्क्रीन इमेज को अलग करने की सुविधा देते हैं."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "ज़रूरी सीएसएस और JavaScipt को इनलाइन करने के लिए या एसिंक्रोनस तौर पर JavaScript से लोड हो सकने वाली एसेट के लिए किसी मॉड्यूल का इस्तेमाल करें, जैसे कि [सीएसएस/जेएस का, बेहतर तरीके से एक साथ दिखने वाला](https://www.drupal.org/project/advagg) मॉड्यूल. ध्यान रखें कि इस मॉड्यूल से मिलने वाली ऑप्टिमाइज़ेशन आपकी साइट को नुकसान पहुंचा सकती हैं. इसलिए, शायद आपको कोड में बदलाव करना पड़े."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "थीम, मॉड्यूल, और सर्वर की खास बातें, सर्वर से जवाब मिलने का समय तय करने में मदद करती हैं. ज़्यादा ऑप्टिमाइज़ की हुई थीम ढूंढें, ऑप्टिमाइज़ेशन मॉड्यूल को सावधानी से चुनें, और/या अपना सर्वर अपग्रेड करें. आपके होस्टिंग सर्वर को डेटाबेस क्वेरी में लगने वाले समय को कम करने के लिए, Redis या Memcached जैसे PHP opcode कैशिंग, मेमोरी-कैशिंग का इस्तेमाल करना चाहिए. साथ ही, पेजों को तेज़ी से तैयार करने के लिए, ऑप्टिमाइज़ किए हुए ऐप्लिकेशन का लॉजिक भी होना चाहिए."
@@ -2778,10 +2862,10 @@
     "message": "आपके पेज पर लोड की गई इमेज के साइज़ को कम करने के लिए, [जवाब देने वाली इमेज की शैली](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) का इस्तेमाल करें. अगर आप किसी पेज पर कई कॉन्टेंट आइटम को दिखाने के लिए, व्यू की सुविधा का इस्तेमाल कर रहे हैं, तो उस पेज पर दिखने वाले कॉन्टेंट आइटम को कम करने के लिए, आप पेज पर नंबर डालने की सुविधा को लागू कर सकते हैं."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "पक्का करें कि आपने \"Administration » Configuration » Development\" पेज में \"सीएसएस फ़ाइलों को एक साथ दिखाने\" की सुविधा को चालू किया है. आप फ़ाइलों को एक साथ दिखाने के ज़्यादा बेहतर विकल्पों को [अतिरिक्त मॉड्यूल](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) की मदद से भी कॉन्फ़िगर करके, अपनी साइट की रफ़्तार को तेज़ कर सकते हैं. ऐसा करने के लिए, आपको सीएसएस शैली को जोड़ना, छोटा करना, और कंप्रेस करना होगा."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "पक्का करें कि आपने \"Administration » Configuration » Development\" पेज में, \"JavaScript फ़ाइलों को एक साथ दिखाने\" की सुविधा को चालू किया है. आप फ़ाइलों को एक साथ दिखाने के ज़्यादा बेहतर विकल्पों को [अतिरिक्त मॉड्यूल](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) की मदद से भी कॉन्फ़िगर करके, अपनी साइट की रफ़्तार को तेज़ कर सकते हैं. ऐसा करने के लिए, आपको अपनी JavaScript एसेट को जोड़ना, छोटा करना, और कंप्रेस करना होगा."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "ऐसे सीएसएस नियमों को हटाएं जिनका इस्तेमाल नहीं हुआ है. साथ ही, सही पेज या पेज के कॉम्पोनेंट में सिर्फ़ ज़रूरी Drupal लाइब्रेरी अटैच करें. ज़्यादा जानकारी के लिए, [Drupal के दस्तावेज़ का लिंक](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) देखें. Chrome DevTools में [कोड कवरेज](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) चलाकर, उन अटैच की गई लाइब्रेरी की पहचान करें जो आपके पेज में बाहरी सीएसएस को जोड़ रही हैं. जब आपकी Drupal साइट में सीएसएस के एक साथ दिखने की सुविधा बंद हो जाती है, तो आप स्टाइलशीट के यूआरएल से पहचान सकते हैं कि ऐसा किस थीम/मॉड्यूल की वजह से हुआ है. ऐसे थीम/मॉड्यूल खोजें जिनके पास उस सूची में कई ऐसी स्टाइलशीट हैं जिनके कोड कवरेज में बहुत से लाल निशान हैं. थीम/मॉड्यूल को स्टाइलशीट तभी क्यू में लगानी चाहिए, जब पेज पर उसका वाकई इस्तेमाल किया गया हो."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "अपने Next.js सर्वर पर कंप्रेस करने की सुविधा चालू करें. [ज़्यादा जानें](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "`nuxt/image` कॉम्पोनेंट का इस्तेमाल करें और `format=\"webp\"` सेट करें. [ज़्यादा जानें](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "React DevTools प्रोफ़ाइलर इस्तेमाल करें. यह आपके कॉम्पोनेंट की रेंडरिंग परफ़ॉर्मेंस मापने के लिए प्रोफ़ाइलर एपीआई का इस्तेमाल करता है. [ज़्यादा जानें](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)."
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "वीडियो को `VideoBoxes` में रखें, `Video Masks` का इस्तेमाल करके उन्हें पसंद के मुताबिक बनाएं या `Transparent Videos` जोड़ें. [ज़्यादा जानें](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "`Wix Media Manager` का इस्तेमाल करके इमेज अपलोड करें, ताकि यह पक्का किया जा सके कि उन्हें WebP के तौर पर अपने-आप दिखाया जाएगा. अपनी साइट की मीडिया फ़ाइलों को [ऑप्टिमाइज़ करने के और तरीके](https://support.wix.com/en/article/site-performance-optimizing-your-media) जानें."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "अपनी साइट के डैशबोर्ड के `Custom Code` टैब में [तीसरे पक्ष का कोड जोड़ते समय](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site), पक्का करें कि वह कोड बॉडी के आखिर में रखा या लोड हो. जहां भी हो सके, Wix के [इंटिग्रेशन](https://support.wix.com/en/article/about-marketing-integrations) का इस्तेमाल करके, अपनी साइट पर मार्केटिंग टूल जोड़ें. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix, ज़्यादातर लोगों को जल्द से जल्द जवाब देने के लिए, सीडीएन और कैश मेमोरी का इस्तेमाल करता है. अगर `Velo` का इस्तेमाल किया जा रहा है, तो अपनी साइट के लिए [मैन्युअल तरीके से कैश मेमोरी चालू करने](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) पर विचार करें."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "अपनी साइट के डैशबोर्ड के `Custom Code` टैब में, अपनी साइट में जोड़े गए किसी भी तीसरे पक्ष के कोड की समीक्षा करें. इसके बाद, सिर्फ़ वही सेवाएं रखें जो आपकी साइट के लिए ज़रूरी हैं. [ज़्यादा जानें](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "किसी ऐसी सेवा में अपनी GIF अपलोड करें जो उसे HTML5 वीडियो में जोड़ने के लिए तैयार रख सके."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "JSON के रूप में सेव करें"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "व्यूअर में खोलें"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "मान अनुमानित हैं और इनमें बदलाव हो सकता है. सीधे तौर पर इन मेट्रिक से [परफ़ॉर्मेंस स्कोर तय किए ](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) जाते हैं."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "मूल ट्रेस देखें"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "ट्रेस देखें"
   },
diff --git a/front_end/third_party/lighthouse/locales/hr.json b/front_end/third_party/lighthouse/locales/hr.json
index 7b42c79..2ecdd06 100644
--- a/front_end/third_party/lighthouse/locales/hr.json
+++ b/front_end/third_party/lighthouse/locales/hr.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atributi `[aria-*]` podudaraju se sa svojim ulogama"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Kad element nema pristupačni naziv, čitači zaslona najavljuju ga generičkim nazivom, što ga čini neupotrebljivim za korisnike koji se oslanjaju na čitače zaslona. [Saznajte kako naredbene elemente učiniti pristupačnijima](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elementi `button`, `link` i `menuitem` imaju pristupačne nazive"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA dijaloški elementi bez pristupačnih naziva mogu spriječiti korisnike čitača zaslona da prepoznaju svrhu tih elemenata. [Saznajte kako poboljšati pristupačnost ARIA dijaloških elemenata](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementi koji sadrže `role=\"dialog\"` ili `role=\"alertdialog\"` nemaju pristupačne nazive."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementi koji sadrže `role=\"dialog\"` ili `role=\"alertdialog\"` imaju pristupačne nazive."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Asistivne tehnologije, poput čitača zaslona, ne funkcioniraju dosljedno kad je oznaka `aria-hidden=\"true\"` postavljena na `<body>` dokumenta. [Saznajte kako `aria-hidden` utječe na tijelo dokumenta](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Vrijednosti `[role]` su valjane"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Ako dodate `role=text` oko podjele tekstnog čvora označavanjem, VoiceOver će ga moći tretirati kao jednu frazu, ali podređeni elementi koji se mogu fokusirati neće se najaviti. [Saznajte više o atributu `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementi s atributom `role=text` imaju podređene elemente koji se mogu fokusirati."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementi s atributom `role=text` nemaju podređene elemente koji se mogu fokusirati."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Kad polje prekidača nema pristupačni naziv, čitači zaslona najavljuju ga generičkim nazivom, što ga čini neupotrebljivim za korisnike koji se oslanjaju na čitače zaslona. [Saznajte više o poljima prekidača](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA ID-jevi su jedinstveni"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Naslov bez sadržaja ili nepristupačan tekst korisnicima čitača zaslona onemogućuje pristup informacijama o strukturi stranice. [Saznajte više o naslovima](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Elementi naslova ne sadrže sadržaj."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Svi elementi naslova sadrže sadržaj."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Ako polja obrasca imaju više oznaka, asistivne tehnologije kao što su čitači zaslona koji koriste prvu, zadnju ili sve oznake mogu ih najavljivati na zbunjujući način. [Saznajte kako upotrebljavati oznake obrasca](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Element `<html>` ima atribut `[xml:lang]` s istim osnovnim jezikom kao atribut `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Veze s istim odredištem trebaju imati isti opis kako bi korisnicima pomogle da razumiju svrhu veze i odluče žele li je pratiti. [Saznajte više o identičnim vezama](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identične veze nemaju istu svrhu."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identične veze imaju istu svrhu."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informativni elementi trebali bi sadržavati kratak, opisni zamjenski tekst. Ukrasni elementi mogu se zanemariti praznim atributom alt. [Saznajte više o atributu `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Elementi slike imaju `[alt]` atribute"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Dodavanje vidljivog i dostupnog teksta gumbima za unos može pomoći korisnicima čitača zaslona da shvate svrhu gumba za unos. [Saznajte više o gumbima za unos](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Elementi `<input type=\"image\">` sadrže `[alt]` tekst"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Oznake osiguravaju da asistivne tehnologije, poput čitača zaslona, pravilno najavljuju kontrole obrazaca. [Saznajte više o oznakama elemenata obrasca](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Elementi oblika imaju povezane oznake"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Jedan glavni orijentir pomaže korisnicima čitača zaslona da se kreću web-stranicom. [Saznajte više o orijentirima](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokument nema glavni orijentir."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokument ima glavni orijentir."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Mnogim je korisnicima teško ili nemoguće čitati tekst niskog kontrasta. Tekst veze koji se može raspoznati poboljšava doživljaj za slabovidne korisnike. [Saznajte kako postaviti raspoznatljive veze](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Veze se oslanjaju na boju kako bi bile raspoznatljive."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Veze su raspoznatljive bez oslanjanja na boju."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Tekst veze (i zamjenski tekst za slike kada se upotrebljavaju kao veze) koji je prepoznatljiv, jedinstven i može se fokusirati omogućuje lakše kretanje korisnicima čitača zaslona. [Saznajte kako veze učiniti pristupačnima](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Elementi `<object>` imaju zamjenski tekst"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Elementi obrasca bez učinkovitih oznaka mogu frustrirati korisnike čitača zaslona. [Saznajte više o elementu `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Odabrani elementi nemaju povezane elemente oznaka."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Odabrani elementi imaju povezane elemente oznake."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Vrijednost viša od 0 podrazumijeva eksplicitno naređivanje kretanja. Iako je tehnički valjano, to često frustrira korisnike koji se oslanjaju na asistivne tehnologije. [Saznajte više o atributu `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Nijedan element nema vrijednost `[tabindex]` veću od 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Čitači zaslona sadrže značajke za olakšavanje kretanja po tablicama. Ako tablice upotrebljavaju stvarni element titlova umjesto ćelija s atributom `[colspan]`, to može poboljšati doživljaj za korisnike čitača zaslona. [Saznajte više o titlovima](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tablice upotrebljavaju `<caption>` umjesto ćelija s atributom `[colspan]` kako bi naznačile naslov."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Ciljevi dodira nisu dovoljno veliki ni razmaknuti."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Ciljevi dodira dovoljno su veliki i razmaknuti."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Čitači zaslona sadrže značajke za olakšavanje kretanja po tablicama. Ako elementi `<td>` u velikoj tablici (tri ili više ćelija u širini i visini) imaju povezano zaglavlje tablice, to može poboljšati doživljaj za korisnike čitača zaslona. [Saznajte više o zaglavljima tablice](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Stranica nema URL manifesta <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nije pronađen podudaran uslužni alat. Možda ćete trebati ponovo učitati stranicu ili provjeriti obuhvaća li opseg uslužnog alata za trenutačnu stranicu opseg i početni URL iz manifesta."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Uslužni alat ne može se provjeriti bez polja \"start_url\" u manifestu"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications podržan je samo na beta i stabilnom kanalu Chromea na Androidu."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse nije mogao odrediti je li bilo uslužnog alata. Pokušajte s novijom verzijom Chromea."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Shema URL-a manifesta ({scheme}) nije podržana na Androidu."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Kumulativni pomak izgleda mjeri kretanje vidljivih elemenata u vidljivom dijelu. [Saznajte više o mjernom podatku Kumulativni pomak izgleda](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interakcija do sljedećeg renderiranja mjeri responzivnost stranice, koliko je vremena potrebno da stranica vidljivo reagira na korisnički unos. [Saznajte više o mjernom podatku Interakcija do sljedećeg renderiranja](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Prvo renderiranje sadržaja označava vrijeme renderiranja prvog teksta ili slike. [Saznajte više o mjernom podatku Prvo renderiranje sadržaja](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Prvo korisno renderiranje mjeri kada je vidljiv primarni sadržaj stranice. [Saznajte više o mjernom podatku Prvo korisno renderiranje](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interakcija do sljedećeg renderiranja mjeri responzivnost stranice, koliko je vremena potrebno da stranica vidljivo reagira na korisnički unos. [Saznajte više o mjernom podatku Interakcija do sljedećeg renderiranja](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Vrijeme do interaktivnosti količina je vremena koje je potrebno da stranica postane potpuno interaktivna. [Saznajte više o mjernom podatku Vrijeme do interaktivnosti](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Izbjegavajte višestruka preusmjeravanja stranica"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Da biste postavili proračune za količinu i veličinu resursa stranice, dodajte datoteku budget.json. [Saznajte više o proračunima za izvedbu](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{Jedan zahtjev • {byteCount, number, bytes} KiB}one{# zahtjev • {byteCount, number, bytes} KiB}few{# zahtjeva • {byteCount, number, bytes} KiB}other{# zahtjeva • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Neka zahtjevi budu malobrojni, a veličine prijenosa male"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Kanonske veze ukazuju na to koji URL prikazati u rezultatima pretraživanja. [Saznajte više o kanonskim vezama](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Inicijalno vrijeme odgovora poslužitelja bilo je kratko"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Uslužni je alat tehnologija koja aplikaciji omogućuje korištenje brojnih značajki progresivnih web-aplikacija, kao što je offline rad, dodavanje na početni zaslon i push obavijesti. [Saznajte više o uslužnim alatima](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Ovom stranicom upravlja uslužni alat, no nije pronađen `start_url` jer manifest nije raščlanjen kao važeći JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Ovom stranicom upravlja uslužni alat, no `start_url` ({startUrl}) nije u rasponu uslužnog alata ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Ovom stranicom upravlja uslužni alat, no nije pronađen `start_url` jer nije dohvaćen manifest."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Ova izvor ima jedan ili više uslužnih alata, no stranica ({pageUrl}) nije u rasponu."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Ne registrira uslužni alat koji kontrolira stranicu i `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registrira uslužni alat koji upravlja stranicom i `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Tematski pozdravni zaslon pruža bolji doživljaj korisnicima koji pokreću vašu aplikaciju na početnom zaslonu. [Saznajte više o pozdravnim zaslonima](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Najbolji primjeri iz prakse"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Ove provjere ističu prilike za [poboljšanje pristupačnosti vaše web-aplikacije](https://developer.chrome.com/docs/lighthouse/accessibility/). Budući da se automatskom provjerom može otkriti samo dio poteškoća s pristupačnošću, savjetujemo i ručno testiranje."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Područja adresa za te stavke koja alat za automatizirano testiranje ne može pokriti. Saznajte više u našem vodiču o [provođenju pregleda pristupačnosti](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Instalirajte [Drupalov modul](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) koji može učitavati slike s odgodom. Takvi moduli omogućuju odgađanje svih slika koje nisu na zaslonu kako bi se poboljšala izvedba."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Razmislite o modulu kojim bi se ugradili ključni CSS i JavaScript ili o potencijalnoj mogućnosti asinkronog učitavanja elemenata pomoću JavaScripta, kao što je modul [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Upozoravamo da optimizacije koje pruža taj modul mogu oštetiti vašu web-lokaciju, pa ćete vjerojatno trebati unijeti promjene u kôd."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Teme, moduli i specifikacije poslužitelja produljuju vrijeme odgovora poslužitelja. Savjetujemo vam da pronađete optimiziraniju temu, pažljivo odaberete modul za optimizaciju i/ili nadogradite poslužitelja. Hosting poslužitelji trebali bi koristiti predmemoriranje za PHP opkôd, predmemoriranje radi smanjenja vremena odgovaranja na upit iz baze podataka kao što su Redis ili Memcached, kao i optimiziranje logike aplikacije kako bi se stranice brže pripremile."
@@ -2778,10 +2862,10 @@
     "message": "Savjetujemo vam da upotrebljavate [responzivne stilove slika](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) kako biste smanjili veličinu slika učitanih na vašu stranicu. Ako koristite prikaze za prikazivanje više stavki sadržaja na stranici, savjetujemo vam da numeriranjem stranica ograničite broj stavki sadržaja koje se prikazuju na toj stranici."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Provjerite jeste li aktivirali opciju \"Agregiraj CSS datoteke\" na stranici \"Administracija » Konfiguracija » Razvoj\". Kroz [dodatne module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) također možete konfigurirati naprednije opcije agregacije kako biste ubrzali svoju web-lokaciju ulančavanjem, umanjivanjem i komprimiranjem CSS stilova."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Provjerite jeste li aktivirali opciju \"Agregiraj JavaScript datoteke\" na stranici \"Administracija » Konfiguracija » Razvoj\". Kroz [dodatne module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) također možete konfigurirati naprednije opcije agregacije kako biste ubrzali svoju web-lokaciju ulančavanjem, umanjivanjem i komprimiranjem JavaScript elemenata."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Razmislite o uklanjanju nekorištenih pravila CSS-a te relevantnoj stranici ili komponenti stranice priložite samo potrebne Drupalove zbirke. Pojedinosti pročitajte na [vezi na Drupalove dokumente](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Da biste pronašli priložene zbirke koje dodaju suvišan CSS, pokušajte pokrenuti [pokrivenost koda](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) u alatu Chrome DevTools. Odgovornu temu ili modul možete pronaći u URL-u list stilova kad je na web-lokaciji Drupala onemogućena agregacija CSS-a. Obratite pažnju na teme ili module koji na popisu imaju mnogo stilskih tablica s mnogo crvenog u pokrivenosti koda. Tema ili modul trebali bi postaviti list stilova u red samo ako se ona doista upotrebljava na stranici."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Omogućite kompresiju na Next.js poslužitelju. [Saznajte više](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Upotrijebite komponentu `nuxt/image` i postavite `format=\"webp\"`. [Saznajte više](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Upotrebljavajte React DevTools Profiler, koji se koristi Profiler API-jem, za mjerenje uspješnosti generiranja komponenti. [Saznajte više.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Postavite videozapise unutar `VideoBoxes`, prilagodite ih uz pomoć `Video Masks` ili dodajte `Transparent Videos`. [Saznajte više](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Prenesite slike pomoću usluge `Wix Media Manager` kako bi se automatski posluživale kao WebP. Pronađite [više načina za optimizaciju](https://support.wix.com/en/article/site-performance-optimizing-your-media) medija na svojoj web-lokaciji."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Prilikom [dodavanja koda treće strane](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) na karticu `Custom Code` na nadzornoj ploči web-lokacije pazite da bude odgođen ili da se učitava na kraju tijela koda. Ako je moguće, upotrijebite Wixove [integracije](https://support.wix.com/en/article/about-marketing-integrations) da biste na svoju web-lokaciju ugradili marketinške alate. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix koristi CDN-ove i predmemoriranje radi što bržeg posluživanja odgovora za većinu posjetitelja. Savjetujemo vam da [ručno omogućite spremanje u predmemoriju](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) za svoju web-lokaciju, osobito ako koristite `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Na kartici `Custom Code` na nadzornoj ploči web-lokacije pregledajte sav kôd treće strane koji ste dodali na web-lokaciju i zadržite samo usluge koje su neophodne za vašu web-lokaciju. [Saznajte više](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Savjetujemo vam da prenesete GIF na uslugu na kojoj će se kodirati za ugrađivanje kao HTML5 videozapis."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Spremi kao JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Otvori u pregledniku"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Vrijednosti se procjenjuju i mogu se razlikovati. [Rezultat izvedbe računa se](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) izravno pomoću tih mjernih podataka."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Prikaži izvorni trag"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Prikaži trag"
   },
diff --git a/front_end/third_party/lighthouse/locales/hu.json b/front_end/third_party/lighthouse/locales/hu.json
index fea3824..6b73a2a 100644
--- a/front_end/third_party/lighthouse/locales/hu.json
+++ b/front_end/third_party/lighthouse/locales/hu.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "A(z) `[aria-*]` attribútumok megfelelnek szerepüknek"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Ha valamelyik elem nem rendelkezik kisegítő névvel, a képernyőolvasók általános néven olvassák fel, ami használhatatlan a képernyőolvasóra hagyatkozó felhasználók számára. [További információ a parancselemek hozzáférhetőbbé tételéről](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "A(z) `button`, `link` és `menuitem` elemek akadálymentes névvel rendelkeznek"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "A kisegítő nevekkel nem rendelkező ARIA-párbeszédelemek megakadályozhatják, hogy a képernyőolvasót használók felismerjék ezeknek az elemeknek a célját. [További információ az ARIA-párbeszédelemek hozzáférhetőbbé tételéről](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "A(z) `role=\"dialog\"` vagy `role=\"alertdialog\"` attribútummal rendelkező elemeknek nincs kisegítő neve."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "A(z) `role=\"dialog\"` vagy `role=\"alertdialog\"` attribútummal rendelkező elemeknek van kisegítő neve."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "A segítő technológiák (például a képernyőolvasók) nem működnek konzisztensen, ha az `aria-hidden=\"true\"` be van állítva a dokumentum `<body>` elemében. [További információ arról, hogy milyen hatással van az `aria-hidden` a dokumentum törzsére](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "A(z) `[role]` értékek érvényesek"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Ha egy jelöléssel felosztott szövegcsomópont köré adja hozzá a(z) `role=text` attribútumot, akkor a VoiceOver képes lesz egyetlen kifejezésként kezelni, de az elem fókuszálható leszármazottai nem lesznek felolvasva. [További információ a(z) `role=text` attribútumról](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "A(z) `role=text` attribútummal rendelkező elemek fókuszálható leszármazottakat tartalmaznak."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "A(z) `role=text` attribútummal rendelkező elemek nem tartalmaznak fókuszálható leszármazottakat."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Ha valamelyik kapcsolómező nem rendelkezik kisegítő névvel, a képernyőolvasók általános néven olvassák fel, ami használhatatlan a képernyőolvasóra hagyatkozó felhasználók számára. [További információ a mezők közötti váltásról](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Az ARIA-azonosítók egyediek"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "A tartalom nélküli vagy nem hozzáférhető szöveggel rendelkező címsorok megakadályozzák, hogy a képernyőolvasót használók hozzáférjenek az oldal struktúrájára vonatkozó információkhoz. [További információ a címsorokról](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Egyes címsorelemek nem rendelkeznek tartalommal."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Minden címsorelemnek van tartalma."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "A több címkével rendelkező űrlapmezőket félreérthetően olvashatják fel a segítő technológiák (például a képernyőolvasók), amelyek az első, az utolsó vagy pedig az összes címkét használják. [További információ az űrlapcímkék használatáról](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "A(z) `<html>` elem `[xml:lang]` attribútuma ugyanazzal az alapnyelvvel rendelkezik, mint a(z) `[lang]` attribútum."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Az azonos céllal rendelkező linkeknek ugyanazzal a leírással kell rendelkezniük, hogy a felhasználók tisztában lehessenek a linkek céljával, és így eldönthessék, hogy követik-e őket. [További információ az egyforma linkekről](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Az egyforma linkek célja nem ugyanaz."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Az egyforma linkek ugyanazzal a céllal rendelkeznek."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Rövid, beszédes alternatív szöveget használjon a tájékoztató elemekhez. A díszítőelemek figyelmen kívül hagyhatók üres alt attribútummal. [További információ az `alt` attribútumról](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "A képelemekhez tartozik `[alt]` attribútum"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Ha felismerhető és jól olvasható szöveggel látja el a beviteli gombokat, azzal segíthet a képernyőolvasót használó felhasználóknak a beviteli gombok funkciójának megértésében. [További információ a beviteli gombokról](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "A(z) `<input type=\"image\">` elemek rendelkeznek `[alt]` szöveggel"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "A címkék biztosítják, hogy a segítő technológiák (pl. a képernyőolvasók) megfelelően jelezzék az űrlapvezérlőket. [További információ az űrlapelemcímkékről](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "A formátumelemekhez megfelelő címkék vannak társítva"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Egy fő ARIA-pont pont megadása segít a képernyőolvasó-felhasználóknak a weboldalakon való navigálásban. [További információ az ARIA-pontokról](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "A dokumentum nem tartalmaz fő ARIA-pontot."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "A dokumentum tartalmaz fő ARIA-ponttot."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Az alacsony kontrasztú szöveg sokak számára nehezen vagy egyáltalán nem olvasható. A felismerhető linkszövegek javítják a gyengénlátó felhasználók élményét. [További információ a linkek felismerhetőségének biztosításáról](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "A linkeket szín alapján lehet felismerni."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "A linkek a színtől függetlenül felismerhetők."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "A felismerhető, egyedi és fókuszálható linkszövegek (és linkként használt képek alternatív szövegei) jobb navigációs élményt biztosítanak a képernyőolvasóra hagyatkozó felhasználók számára. [További információ a linkek hozzáférhetővé tételéről](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "A(z) `<object>` elemek rendelkeznek alternatív szöveggel"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "A hatékony címkék nélküli űrlapelemek frusztráló élményt nyújthatnak a képernyőolvasót használók számára. [További információ a(z) `select` elemről](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "A kijelölt elemekhez nem tartoznak címkeelemek."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "A kiválasztott elemekhez címkeelemek is tartoznak."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "A 0-nál nagyobb érték explicit navigációs sorrendet jelent. Ez ugyan technikailag érvényes, azonban gyakran problémát jelent a segítő technológiákra hagyatkozó felhasználók számára. [További információ a `tabindex` attribútumról](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Egyetlen elem `[tabindex]` attribútumának sem 0-nál nagyobb az értéke"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "A képernyőolvasók olyan funkciókkal is rendelkeznek, amelyek megkönnyítik a táblázatokban való navigációt. Ha biztosítja, hogy a táblázatok a tényleges feliratelemet használják a(z) `[colspan]` attribútummal rendelkező cellák helyett, akkor javíthatja a képernyőolvasóra hagyatkozók felhasználói élményét. [További információk a feliratokról](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "A táblázatok a(z) `<caption>` paramétert használják feliratok jelölésére a(z) `[colspan]` attribútummal rendelkező cellák helyett."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Az érinthető felületek mérete vagy térköze nem megfelelő."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Az érinthető területek mérete és távolsága megfelelő."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "A képernyőolvasók olyan funkciókkal is rendelkeznek, amelyek megkönnyítik a táblázatokban való navigációt. Ha biztosítja, hogy egy nagy táblázatban (legalább három cellányi szélesség és magasság) szereplő `<td>` elemekhez társítva legyen táblázatfejléc, akkor javíthatja a képernyőolvasóra hagyatkozók felhasználói élményét. [További információ a táblázatfejlécekről](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Az oldalon nem található manifest-URL (<link>)"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nem található egyező service worker. Elképzelhető, hogy újra be kell töltenie az oldalt, vagy ellenőriznie kell, hogy a service worker jelenlegi oldalra vonatkozó scope-ja tartalmazza-e a manifestben található scope-ot és start_url-t."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Nem sikerült a service worker ellenőrzése, mivel nem található „start_url” mező a manifestben."
   },
@@ -969,7 +1083,7 @@
     "message": "A prefer_related_applications csak a Chrome bétaverziójában és a Stabil csatornákon támogatott Androidon."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "A Lighthouse nem tudta meghatározni, hogy volt-e service worker. Próbálja újra a Chrome újabb verziójával."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "A manifest URL-sémája ({scheme}) nem támogatott Androidon."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Az Elrendezés összmozgása mutató az oldal megjelenítési területén látható elemek mozgását méri. [További információ az Elrendezés összmozgása mutatóról](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Az interakciótól a következő vizuális válaszig eltelt idő az oldal válaszadási hajlandóságát méri, vagyis azt, hogy az oldal mennyi idő alatt reagál láthatóan a felhasználói bevitelre. [További információ Az interakciótól a következő vizuális válaszig eltelt idő mutatóról](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Az első vizuális tartalomválasz azt az időpontot jelöli, amikor a rendszer megkezdi az első szöveg vagy kép megjelenítését. [További információ az Első vizuális tartalomválasz mutatóról](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Az első releváns vizuális válasz azt méri, hogy mikor válik láthatóvá az oldal elsődleges tartalma. [További információ az Első releváns vizuális válasz mutatóról](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Az interakciótól a következő vizuális válaszig eltelt idő az oldal válaszadási hajlandóságát méri, vagyis azt, hogy az oldal mennyi idő alatt reagál láthatóan a felhasználói bevitelre. [További információ Az interakciótól a következő vizuális válaszig eltelt idő mutatóról](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Az interaktivitásig eltelt idő az az idő, amely ahhoz szükséges, hogy az oldal teljesen interaktívvá váljon. [További információ az Interaktivitásig eltelt idő mutatóról](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Kerülje a többszörös oldalátirányítást"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Az oldal forrásainak mennyiségére és méretére vonatkozó határértékeket egy budget.json fájl hozzáadásával határozhatja meg. [További információ a teljesítmény-határértékekről](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 kérelem • {byteCount, number, bytes} KiB}other{# kérelem • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "A kérések száma legyen kevés, az átvitelek pedig kis méretűek"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "A szabványos linkek a keresési eredményként megjelenítendő URL-re tesznek javaslatot. [További információ a szabványos linkekről](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "A kezdeti szerverválaszidő rövid volt"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "A service worker elnevezésű technológia lehető teszi az alkalmazás számára a progresszív webes alkalmazások funkcióinak használatát. Ilyen funkció például az offline működés, a kezdőképernyőhöz való hozzáadás és a leküldött (push) értesítések. [További információ a service worker technológiáról](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Az oldalt szolgáltató munkatárs vezérli, azonban a(z) `start_url` nem található, ugyanis nem sikerült a manifest érvényes JSON-ként való elemzése"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Az oldalt szolgáltató munkatárs vezérli, azonban a(z) `start_url` ({startUrl}) nincs a szolgáltató munkatárs hatókörében ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Az oldalt szolgáltató munkatárs vezérli, azonban a(z) `start_url` nem található, mert nem sikerült lekérni a manifestfájlt."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Ez a forrás rendelkezik legalább egy szolgáltató munkatárssal, azonban az oldal ({pageUrl}) nincs a hatókörükben."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Nem regisztrál szolgáltató munkatársat, amely vezérli az oldalt és a(z) `start_url` URL-t"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Olyan szolgáltató munkatársat regisztrál, amely vezérli az oldalt és a(z) `start_url` URL-t"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "A saját témájú betöltési képernyő jó felhasználói élményt eredményez, amikor a kezdőképernyőről indítják el az alkalmazást. [További információ a betöltési képernyőről](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Bevált módszerek"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Ezek az ellenőrzések olyan lehetőségeket emelnek ki, melyekkel javíthatók a [webalkalmazás kisegítő lehetőségei](https://developer.chrome.com/docs/lighthouse/accessibility/). A kisegítő lehetőségekkel kapcsolatos problémáknak csak egy része észlelhető automatikusan, ezért a manuális ellenőrzés is ajánlott."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Az alábbiak automatikus tesztelőeszközzel nem ellenőrizhető területekre vonatkoznak. További információt a [kisegítő lehetőségek felülvizsgálatáról](https://web.dev/how-to-review/) szóló útmutatónkban talál."
@@ -2769,7 +2853,7 @@
     "message": "Telepítsen olyan [Drupal-modult](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), amellyel késleltetve töltheti be a képeket. Egy ilyen modul javíthatja a teljesítményt a képernyőn kívül eső képek késleltetett betöltésével."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Érdemes lehet valamilyen (például az [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg)) modult használni a kritikus CSS- és JavaScript-elemek beágyazásához, illetve a tartalmak JavaScripten keresztüli, lehetőség szerint aszinkron módon történő betöltéséhez. Fontos, hogy az ilyen jellegű modulok által nyújtott optimalizációk működésképtelenné tehetik webhelyét, ezért valószínűleg módosítania kell majd a meglévő kódokat."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "A témák, a modulok és a szerver specifikációi mind befolyásolják a szerver válaszidejét. Érdemes lehet jobban optimalizált témát keresnie, megfelelő optimalizáló modult választania és/vagy nagyobb teljesítményű szerverre váltania. Alkalmazásszolgáltató szerverei a PHP-műveletkódok és a memória gyorsítótárazásával (pl. Redis vagy Memcached) csökkenthetik az adatbázisok lekérdezési idejét, illetve az alkalmazások optimalizált logikai hálózatával gyorsabban előkészíthetik az oldalakat."
@@ -2778,10 +2862,10 @@
     "message": "Érdemes lehet [reszponzív képstílusokat](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) használni, melyek csökkentik az oldalon betöltött képek méretét. Ha a Views funkciót használja ahhoz, hogy egy oldalon több tartalmi elemet jelenítsen meg, fontolja meg az oldalak számozását, amivel korlátozhatja az egy adott oldalon megjelenő tartalmi elemek számát."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Győződjön meg róla, hogy bekapcsolta a „CSS fájlok összegyűjtése” lehetőséget az „Adminisztráció » Beállítás » Fejlesztés” oldalon. Speciális összesítési lehetőségeket is beállíthat [további modulokon](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) keresztül, hogy összefűzéssel, minimalizálással és a CSS-stílusok tömörítésével felgyorsítsa webhelyét."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Győződjön meg róla, hogy bekapcsolta a „JavaScript-fájlok összesítése” lehetőséget az „Adminisztráció » Beállítás » Fejlesztés” oldalon. Speciális összesítési lehetőségeket is beállíthat [további modulokon](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) keresztül, hogy összefűzéssel, minimalizálással és a JavaScript-tartalmak tömörítésével felgyorsítsa webhelyét."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Érdemes lehet eltávolítani a nem használt CSS-szabályokat, és csak a szükséges Drupal-könyvtárakat csatolni a releváns oldalhoz vagy összetevőhöz. További részleteket a [Drupal dokumentációjában](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) találhat. A felesleges CSS-t elhelyező csatolt könyvtárak azonosításában a Chrome DevTools [kódlefedettség](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) eszköze is segíthet. A felelős téma vagy modul a stíluslap URL-je alapján azonosítható, ha a CSS-összesítés ki van kapcsolva az Ön Drupal webhelyén. Keressen olyan témákat vagy modulokat, amelyeknek több stíluslapjában is sok piros szín szerepel a kódlefedettségi listán. Ideális esetben a témák vagy modulok csak az oldalon ténylegesen használt stíluslapokat állítják sorba."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Engedélyezze a tömörítést a Next.js szerveren. [További információ](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Használja a(z) `nuxt/image` összetevőt, és állítsa be a következőt: `format=\"webp\"`. [További információ](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Használja a React DevTools Profilert, amely a Profiler API segítségével méri az összetevők megjelenítési teljesítményét. [További információ](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)."
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "A(z) `VideoBoxes` szakaszon belül elhelyezhet videókat, személyre szabhatja őket a(z) `Video Masks` használatával, vagy hozzáadhatja a következőt: `Transparent Videos`. [További információ](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Töltsön fel képeket a(z) `Wix Media Manager` használatával, hogy automatikusan WebP-formátumban jelenjenek meg. Keressen [további módszereket a webhely médiatartalmainak optimalizálására](https://support.wix.com/en/article/site-performance-optimizing-your-media)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Amikor [harmadik féltől származó kódot ad hozzá](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) a webhely irányítópultjának `Custom Code` lapján, győződjön meg arról, hogy késleltetve, illetve a kód body elemének végén töltődik be. Ha lehetséges, a Wix [integrációinak](https://support.wix.com/en/article/about-marketing-integrations) használatával ágyazzon be marketingeszközöket a webhelyébe. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "A legtöbb látogató számára a Wix CDN-ek és gyorsítótárazás segítségével jeleníti meg a válaszokat a lehető leggyorsabban. Fontolja meg a [gyorsítótárazás kézi engedélyezését](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) webhelyén, különösen a(z) `Velo` használata esetén."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Tekintse át a webhelyéhez hozzáadott, harmadik féltől származó kódot a webhely irányítópultjának `Custom Code` lapján, és csak a webhely számára szükséges szolgáltatásokat őrizze meg. [További információ](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Fontolja meg a GIF-fájlok olyan szolgáltatóhoz való feltöltését, amely lehetővé teszi a fájlok HTML5-videóként történő beágyazását."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Mentés JSON-ként"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Megnyitás a megtekintőben"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Az értékek becsültek és változhatnak. A [teljesítménypontszám kiszámítása](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) közvetlenül e mutatók alapján történik."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Eredeti nyom megtekintése"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Nyom megtekintése"
   },
diff --git a/front_end/third_party/lighthouse/locales/id.json b/front_end/third_party/lighthouse/locales/id.json
index 47afc10..8f6942d 100644
--- a/front_end/third_party/lighthouse/locales/id.json
+++ b/front_end/third_party/lighthouse/locales/id.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atribut `[aria-*]` cocok dengan perannya"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Jika elemen tidak memiliki label aksesibilitas, pembaca layar akan mengucapkannya dengan nama umum, sehingga tidak dapat digunakan oleh pengguna yang mengandalkan pembaca layar. [Pelajari cara membuat elemen perintah agar lebih mudah diakses](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elemen `button`, `link`, dan `menuitem` memiliki nama yang dapat diakses"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Elemen \"dialog\" ARIA tanpa label aksesibilitas dapat membuat pengguna pembaca layar tidak memahami fungsi elemen ini. [Pelajari cara membuat elemen \"dialog\" ARIA yang lebih mudah diakses](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elemen dengan `role=\"dialog\"` atau `role=\"alertdialog\"` tidak memiliki label aksesibilitas."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elemen dengan `role=\"dialog\"` atau `role=\"alertdialog\"` memiliki label aksesibilitas."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Teknologi pendukung seperti pembaca layar tidak berfungsi secara konsisten jika `aria-hidden=\"true\"` disetel pada`<body>` dokumen. [Pelajari cara `aria-hidden` memengaruhi isi dokumen](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Nilai `[role]` valid"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Menambahkan `role=text` di sekitar node teks yang dipisahkan oleh markup memungkinkan VoiceOver memperlakukannya sebagai satu frasa, tetapi turunan elemen yang dapat difokuskan tidak akan diucapkan. [Pelajari atribut `role=text` lebih lanjut](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elemen dengan atribut `role=text` memiliki turunan yang dapat difokuskan."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elemen dengan atribut `role=text` tidak memiliki turunan yang dapat difokuskan."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Jika kolom tombol tidak memiliki label aksesibilitas, pembaca layar akan mengucapkannya dengan nama umum, sehingga tidak dapat digunakan oleh pengguna yang mengandalkan pembaca layar. [Pelajari lebih lanjut kolom tombol](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ID ARIA unik"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Judul tanpa konten atau teks yang tidak dapat diakses membuat pengguna pembaca layar tidak dapat mengakses informasi di struktur halaman. [Pelajari judul lebih lanjut](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Elemen \"heading\" tidak berisi konten."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Semua elemen \"heading\" berisi konten."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Teknologi pendukung seperti pembaca layar yang menggunakan label pertama, terakhir, atau semua label mungkin akan salah mengucapkan kolom formulir yang memiliki beberapa label. [Pelajari cara menggunakan label formulir](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Elemen `<html>` memiliki atribut `[xml:lang]` dengan bahasa dasar yang sama dengan atribut `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Link dengan tujuan yang sama harus memiliki deskripsi yang sama, untuk membantu pengguna memahami tujuan link dan memutuskan apakah akan mengikutinya atau tidak. [Pelajari tentang link yang identik lebih lanjut](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Link yang identik tidak memiliki fungsi yang sama."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Link yang identik memiliki fungsi yang sama."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Elemen informatif harus memberikan teks alternatif yang singkat dan deskriptif. Elemen dekoratif dapat diabaikan dengan atribut alt kosong. [Pelajari atribut lebih lanjut `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Elemen halaman memiliki atribut `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Menambahkan teks yang jelas dan mudah diakses ke tombol input dapat membantu pengguna pembaca layar memahami tujuan tombol input. [Pelajari tombol input lebih lanjut](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Elemen `<input type=\"image\">` memiliki teks `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Label memastikan bahwa kontrol bentuk diucapkan dengan tepat oleh teknologi pendukung, seperti pembaca layar. [Pelajari lebih lanjut label elemen formulir](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Elemen formulir memiliki label yang terkait"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Satu penanda utama membantu pengguna pembaca layar membuka halaman web. [Pelajari penanda lebih lanjut](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokumen tidak memiliki penanda utama."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokumen memiliki penanda utama."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Teks yang memiliki kontras rendah akan sulit atau tidak mungkin dibaca oleh kebanyakan pengguna. Teks link yang jelas meningkatkan pengalaman bagi pengguna dengan gangguan penglihatan. [Pelajari cara membuat link yang mudah dibedakan](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Link bergantung pada warna agar dapat dibedakan."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Link dapat dibedakan tanpa bergantung pada warna."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Teks link (dan teks alternatif untuk gambar, saat digunakan sebagai link) yang mudah dilihat, unik, dan dapat difokuskan akan meningkatkan kualitas pengalaman navigasi bagi pengguna pembaca layar. [Pelajari cara membuat link dapat diakses](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Elemen `<object>` memiliki teks alternatif"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Elemen \"form\" tanpa label yang efektif dapat menciptakan pengalaman yang membingungkan bagi pengguna pembaca layar. [Pelajari elemen `select` lebih lanjut ](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Elemen \"select\" tidak memiliki elemen label terkait."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Elemen \"select\" memiliki elemen label terkait."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Nilai yang lebih besar dari 0 menunjukkan pengurutan navigasi eksplisit. Walaupun secara teknis valid, hal ini sering menciptakan pengalaman yang membingungkan bagi pengguna yang mengandalkan teknologi pendukung. [Pelajari atribut lebih lanjut `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Tidak ada elemen yang memiliki nilai `[tabindex]` lebih besar dari 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Pembaca layar memiliki fitur yang memudahkan navigasi tabel. Memastikan tabel menggunakan elemen teks yang sebenarnya, bukan sel dengan atribut `[colspan]`, dapat meningkatkan pengalaman bagi pengguna pembaca layar. [Pelajari teks lebih lanjut](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabel menggunakan `<caption>`, bukan sel dengan atribut `[colspan]` untuk menunjukkan teks."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Target sentuh tidak memiliki ukuran atau spasi yang memadai."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Target sentuh memiliki ukuran dan spasi yang memadai."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Pembaca layar memiliki fitur yang memudahkan navigasi tabel. Memastikan elemen `<td>` dalam tabel besar (lebar atau tinggi 3 sel atau lebih) memiliki header tabel terkait dapat meningkatkan kualitas pengalaman pengguna pembaca layar. [Pelajari lebih lanjut header tabel](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Halaman tidak memiliki URL <link> manifes"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Pekerja layanan yang cocok tidak terdeteksi. Anda harus memuat ulang halaman, atau memeriksa apakah cakupan pekerja layanan untuk halaman saat ini menyertakan scope dan start_URL dari manifes."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Tidak dapat memeriksa pekerja layanan tanpa kolom 'start_url' di manifes"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications hanya didukung di saluran Beta dan Stabil Chrome di Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse tidak dapat menentukan apakah ada pekerja layanan. Coba lagi dengan versi Chrome yang lebih baru."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Skema URL manifes ({scheme}) tidak didukung di Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Pergeseran Tata Letak Kumulatif (CLS) mengukur perpindahan elemen yang terlihat dalam area pandang. [Pelajari lebih lanjut metrik Pergeseran Tata Letak Kumulatif](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaction to Next Paint mengukur responsivitas halaman, yaitu waktu yang diperlukan halaman untuk merespons input pengguna secara jelas. [Pelajari lebih lanjut metrik Interaction to Next Paint](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "First Contentful Paint menandai waktu saat teks atau gambar pertama di-paint. [Pelajari lebih lanjut metrik First Contentful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "First Meaningful Paint mengukur waktu saat konten utama halaman terlihat. [Pelajari lebih lanjut metrik First Meaningful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaction to Next Paint mengukur responsivitas halaman, yaitu waktu yang diperlukan halaman untuk merespons input pengguna secara jelas. [Pelajari lebih lanjut metrik Interaction to Next Paint](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Waktu untuk Interaktif adalah lamanya waktu yang diperlukan halaman untuk menjadi interaktif sepenuhnya. [Pelajari lebih lanjut metrik Waktu untuk Interaktif](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Hindari pengalihan lebih dari satu halaman"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Untuk mengatur anggaran jumlah dan ukuran resource halaman, tambahkan file budget.json. [Pelajari lebih lanjut anggaran performa](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 permintaan • {byteCount, number, bytes} KiB}other{# permintaan • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Pertahankan jumlah permintaan tetap rendah dan ukuran transfer tetap kecil"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Link kanonis menyarankan URL yang akan ditampilkan dalam hasil penelusuran. [Pelajari lebih lanjut link kanonis](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Respons server awal memakan waktu singkat"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Pekerja layanan adalah teknologi yang memungkinkan aplikasi Anda menggunakan banyak fitur Progressive Web App, seperti fitur offline, tambahkan ke layar utama, dan notifikasi push. [Pelajari lebih lanjut Pekerja Layanan](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Halaman ini dikontrol oleh pekerja layanan, tetapi `start_url` tidak ditemukan karena manifes gagal diurai sebagai JSON yang valid"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Halaman ini dikontrol oleh pekerja layanan, tetapi `start_url` ({startUrl}) tidak termasuk dalam cakupan pekerja layanan ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Halaman ini dikontrol oleh pekerja layanan, tetapi `start_url` tidak ditemukan karena tidak ada manifes yang diambil."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Asal memiliki satu pekerja layanan atau lebih, tetapi halaman ({pageUrl}) tidak termasuk dalam cakupan."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Tidak mendaftarkan pekerja layanan yang mengontrol halaman dan `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Mendaftarkan pekerja layanan yang mengontrol halaman dan `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Layar pembuka yang bertema akan memberikan pengalaman berkualitas tinggi saat pengguna meluncurkan aplikasi dari layar utama. [Pelajari lebih lanjut layar pembuka](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Praktik terbaik"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Pemeriksaan ini menandai peluang untuk [menyempurnakan aksesibilitas aplikasi web Anda](https://developer.chrome.com/docs/lighthouse/accessibility/). Hanya sejumlah kecil masalah aksesibilitas yang dapat terdeteksi secara otomatis, sehingga pengujian manual juga dianjurkan."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Item berikut ini menangani area yang tidak dapat dicakup oleh fitur pengujian otomatis. Pelajari lebih lanjut dalam panduan kami tentang [menjalankan tinjauan aksesibilitas](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Instal [modul Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) yang dapat memuat gambar dengan lambat. Modul tersebut mampu menunda pemuatan gambar di bagian halaman yang belum ditampilkan untuk meningkatkan performa."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Sebaiknya gunakan modul untuk menyejajarkan CSS dan JavaScript penting, atau memuat aset potensial secara asinkron melalui JavaScript, seperti modul [Agregasi CSS/JS Lanjutan](https://www.drupal.org/project/advagg). Harap berhati-hati karena pengoptimalan yang disediakan oleh modul ini dapat merusak situs, sehingga Anda cenderung perlu mengubah kode."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Semua spesifikasi tema, modul, dan server berkontribusi pada waktu respons server. Sebaiknya cari tema yang lebih optimal, pilih modul pengoptimalan dengan hati-hati, dan/atau upgrade server Anda. Server hosting Anda harus memanfaatkan cache opcode dan cache memori PHP untuk mengurangi waktu kueri database, seperti Redis atau Memcached, serta logika aplikasi yang dioptimalkan guna menyiapkan halaman dengan lebih cepat."
@@ -2778,10 +2862,10 @@
     "message": "Sebaiknya gunakan [Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) untuk mengurangi ukuran gambar yang dimuat di halaman Anda. Jika Anda menggunakan Views untuk menampilkan beberapa item konten di halaman, sebaiknya implementasikan penomoran halaman guna membatasi jumlah item konten yang ditampilkan di halaman tersebut."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Pastikan Anda mengaktifkan \"Aggregate CSS files\" di halaman \"Administration » Configuration » Development\". Anda juga dapat mengonfigurasi opsi agregasi lanjutan lainnya melalui [modul tambahan](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) untuk mempercepat situs dengan menyambungkan, meminifikasi, dan mengompresi gaya CSS Anda."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Pastikan Anda mengaktifkan \"Aggregate JavaScript files\" di halaman \"Administration » Configuration » Development\". Anda juga dapat mengonfigurasi opsi agregasi lanjutan lainnya melalui [modul tambahan](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) untuk mempercepat situs dengan menyambungkan, meminifikasi, dan mengompresi aset JavaScript Anda."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Sebaiknya hapus aturan CSS yang tidak digunakan dan hanya lampirkan library Drupal yang diperlukan ke halaman atau komponen yang relevan di halaman. Buka [Link dokumentasi Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) untuk mengetahui detailnya. Untuk mengidentifikasi library yang dilampirkan yang menambahkan CSS tidak relevan, coba jalankan [cakupan kode](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) di Chrome DevTools. Anda dapat mengidentifikasi tema/modul yang bertanggung jawab dari URL stylesheet saat agregasi CSS dinonaktifkan di situs Drupal Anda. Cari tema/modul dengan banyak stylesheet dalam daftar yang memiliki banyak warna merah dalam cakupan kode. Tema/modul sebaiknya hanya menambahkan stylesheet ke antrean jika memang benar digunakan di halaman."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Aktifkan kompresi di server Next.js Anda. [Pelajari lebih lanjut](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Gunakan komponen `nuxt/image` dan setel `format=\"webp\"`. [Pelajari lebih lanjut](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Gunakan React DevTools Profiler, yang memanfaatkan Profiler API untuk mengukur performa rendering komponen Anda. [Pelajari lebih lanjut.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Tempatkan video di dalam `VideoBoxes`, sesuaikan menggunakan `Video Masks` atau tambahkan `Transparent Videos`. [Pelajari lebih lanjut](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Upload gambar menggunakan `Wix Media Manager` untuk memastikan gambar tersebut otomatis ditayangkan sebagai WebP. Temukan [banyak cara untuk mengoptimalkan](https://support.wix.com/en/article/site-performance-optimizing-your-media) media di situs Anda."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Saat [menambahkan kode pihak ketiga](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) di tab `Custom Code` pada dasbor situs, pastikan kode ditangguhkan atau dimuat di akhir isi kode. Jika memungkinkan, gunakan [integrasi](https://support.wix.com/en/article/about-marketing-integrations) Wix untuk menyematkan alat pemasaran di situs Anda. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix menggunakan CDN dan cache untuk memberikan respons secepat mungkin bagi sebagian besar pengunjung. Sebaiknya [aktifkan cache secara manual](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) untuk situs Anda, terutama jika menggunakan `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Tinjau kode pihak ketiga yang telah Anda tambahkan ke situs di tab `Custom Code` pada dasbor situs dan hanya pertahankan layanan yang diperlukan bagi situs Anda. [Ketahui selengkapnya](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Sebaiknya upload GIF ke layanan yang akan menyediakannya untuk disematkan sebagai video HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Simpan sebagai JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Buka di Penampil"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Nilai adalah hasil perkiraan dan dapat bervariasi. [Skor performa dihitung](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) secara langsung dari metrik ini."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Lihat Trace Asli"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Lihat Trace"
   },
diff --git a/front_end/third_party/lighthouse/locales/it.json b/front_end/third_party/lighthouse/locales/it.json
index 477cbfb..c31b5a7 100644
--- a/front_end/third_party/lighthouse/locales/it.json
+++ b/front_end/third_party/lighthouse/locales/it.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Gli attributi `[aria-*]` corrispondono ai rispettivi ruoli"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Quando un elemento non ha un nome accessibile, gli screen reader lo descrivono con un nome generico, rendendolo inutilizzabile per gli utenti che si affidano agli screen reader. [Scopri come rendere più accessibili gli elementi di comando](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Gli elementi `button`, `link` e `menuitem` hanno nomi accessibili"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Gli elementi delle finestre di dialogo ARIA senza nomi accessibili potrebbero impedire agli utenti di screen reader di comprendere lo scopo di questi elementi. [Scopri come rendere più accessibili gli elementi delle finestre di dialogo ARIA](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Gli elementi con `role=\"dialog\"` o `role=\"alertdialog\"` non hanno nomi accessibili."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Gli elementi con `role=\"dialog\"` o `role=\"alertdialog\"` hanno nomi accessibili."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Le tecnologie per la disabilità, come gli screen reader, funzionano in modo incoerente se viene impostato il valore `aria-hidden=\"true\"` nel documento `<body>`. [Scopri in che modo `aria-hidden` influisce sul corpo del documento](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "I valori `[role]` sono validi"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "L'aggiunta di `role=text` intorno a un nodo di testo diviso dal markup consente a VoiceOver di considerarlo come una singola frase, ma i discendenti attivabili dell'elemento non verranno annunciati. [Scopri di più sull'attributo `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Gli elementi con l'attributo `role=text` hanno discendenti attivabili."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Gli elementi con l'attributo `role=text` non hanno discendenti attivabili."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Quando un campo di attivazione/disattivazione non ha un nome accessibile, gli screen reader lo descrivono con un nome generico, rendendolo inutilizzabile per gli utenti che si affidano agli screen reader. [Scopri di più sui campi di attivazione/disattivazione](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Gli ID ARIA sono univoci"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Un'intestazione senza contenuti o con testo inaccessibile impedisce agli utenti di screen reader di accedere alle informazioni nella struttura della pagina. [Scopri di più sulle intestazioni](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Gli elementi di intestazione non includono contenuti."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Tutti gli elementi di intestazione includono contenuti."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "I campi dei moduli con più etichette potrebbero essere descritti in modo confuso dalle tecnologie per la disabilità come gli screen reader, che usano la prima etichetta, l'ultima o tutte le etichette. [Scopri come utilizzare le etichette dei moduli](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "L'elemento `<html>` ha un attributo `[xml:lang]` con la stessa lingua di base dell'attributo `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "I link con la stessa destinazione devono avere la stessa descrizione per aiutare gli utenti a comprendere lo scopo dei link e decidere se seguirli o meno. [Scopri di più sui link identici](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "I link identici non hanno lo stesso scopo."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "I link identici hanno lo stesso scopo."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Gli elementi informativi dovrebbero mostrare testo alternativo breve e descrittivo. Gli elementi decorativi possono essere ignorati con un attributo ALT vuoto. [Scopri di più sull'attributo `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Gli elementi immagine hanno attributi `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "L'aggiunta di testo distinguibile e accessibile ai pulsanti di immissione può aiutare gli utenti di screen reader a comprendere lo scopo dei pulsanti. [Scopri di più sui pulsanti di immissione](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Gli elementi `<input type=\"image\">` hanno testo `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Le etichette consentono di assicurarsi che i controlli dei moduli vengano descritti in modo corretto dalle tecnologie per la disabilità, come gli screen reader. [Scopri di più sulle etichette degli elementi del modulo](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Gli elementi del modulo sono associati a etichette"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Un punto di riferimento principale aiuta gli utenti di screen reader a navigare in una pagina web. [Scopri di più sui punti di riferimento](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Il documento non ha un punto di riferimento principale."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Il documento ha un punto di riferimento principale."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Il testo a basso contrasto è difficile, se non impossibile, da leggere per molti utenti. Un testo dei link distinguibile migliora l'esperienza degli utenti ipovedenti. [Scopri come rendere distinguibili i link](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "I link sono distinguibili in base al colore."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "I link sono distinguibili senza doversi basare sul colore."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Un testo dei link (incluso il testo alternativo delle immagini, se come link) distinguibile, univoco e attivabile migliora l'esperienza di navigazione per gli utenti di screen reader. [Scopri come rendere accessibili i link](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Gli elementi `<object>` hanno testo alternativo"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Gli elementi del modulo senza etichette efficaci possono creare esperienze frustranti per gli utenti di screen reader. [Scopri di più sull'elemento `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Alcuni elementi non hanno elementi di etichette associati."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Alcuni elementi hanno elementi di etichette associati."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Un valore maggiore di 0 implica un ordine di navigazione esplicito. Sebbene sia tecnicamente valido, spesso genera un'esperienza frustrante per gli utenti che usano tecnologie per la disabilità. [Scopri di più sull'attributo `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Nessun elemento ha un valore `[tabindex]` maggiore di 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Gli screen reader sono dotati di funzionalità che semplificano la navigazione nelle tabelle. Se nelle tabelle usi l'elemento effettivo dei sottotitoli codificati anziché le celle con l'attributo `[colspan]`, puoi migliorare l'esperienza degli utenti di screen reader. [Scopri di più sui sottotitoli codificati](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Le tabelle utilizzano `<caption>` anziché celle con l'attributo `[colspan]` per indicare un sottotitolo codificato."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "I touch target non hanno dimensioni o spaziatura sufficienti."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "I touch target hanno dimensioni e spaziatura sufficienti."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Gli screen reader sono dotati di funzionalità che semplificano la navigazione nelle tabelle. Se gli elementi `<td>` in una tabella di grandi dimensioni (3 o più celle in larghezza e altezza) hanno un'intestazione di tabella associata, potrebbe migliorare l'esperienza degli utenti di screen reader. [Scopri di più sulle intestazioni delle tabelle](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "La pagina non contiene URL del file manifest <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nessun service worker corrispondente trovato. Potrebbe essere necessario ricaricare la pagina o verificare che l'ambito del service worker per la pagina corrente includa l'ambito e l'URL di avvio dal file manifest."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Impossibile verificare il service worker se il file manifest non contiene un campo \"start_url\""
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications è supportato solo sui canali beta e stabili di Chrome su Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse non ha potuto determinare se fosse presente un service worker. Prova con una versione più recente di Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Lo schema dell'URL del file manifest ({scheme}) non è supportato su Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "La metrica Cumulative Layout Shift misura lo spostamento degli elementi visibili all'interno dell'area visibile. [Scopri di più sulla metrica Cumulative Layout Shift](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "L'interazione con Next Paint misura l'adattabilità della pagina, il tempo necessario alla pagina per rispondere in modo visibile all'input utente. [Scopri di più sulla metrica Interaction to Next Paint](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "First Contentful Paint indica il momento in cui vengono visualizzati il primo testo o la prima immagine. [Scopri di più sulla metrica First Contentful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "La metrica First Meaningful Paint indica quando diventano visibili i contenuti principali di una pagina. [Scopri di più sulla metrica First Meaningful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "L'interazione con Next Paint misura l'adattabilità della pagina, il tempo necessario alla pagina per rispondere in modo visibile all'input utente. [Scopri di più sulla metrica Interaction to Next Paint](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Tempo all'interattività indica il tempo necessario affinché la pagina diventi completamente interattiva. [Scopri di più sulla metrica Tempo all'interattività](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Evita i reindirizzamenti tra più pagine"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Per impostare budget relativi alla quantità e alle dimensioni delle risorse della pagina, aggiungi un file budget.json. [Scopri di più sui budget delle prestazioni](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 richiesta • {byteCount, number, bytes} KiB}other{# richieste • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Mantieni un numero ridotto di richieste e dimensioni di trasferimento limitate"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "I link canonici suggeriscono quale URL mostrare nei risultati di ricerca. [Scopri di più sui link canonici](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Il tempo di risposta iniziale del server è stato breve"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Il service worker è la tecnologia che consente alla tua app di usare tante funzionalità delle app web progressive, ad esempio il funzionamento offline, l'aggiunta alla schermata Home e le notifiche push. [Scopri di più sui service worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Questa pagina è controllata tramite un service worker, ma non è stato trovato alcun elemento `start_url` perché non è stato possibile analizzare il file manifest come JSON valido"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Questa pagina è controllata tramite un service worker, ma `start_url` ({startUrl}) non rientra nell'ambito del service worker ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Questa pagina è controllata tramite un service worker, ma non è stato trovato alcun elemento `start_url` perché non è stato recuperato alcun file manifest."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Questa origine contiene uno o più service worker, ma la pagina ({pageUrl}) non rientra nell'ambito."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Non registra un service worker che controlla la pagina e `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registra un service worker che controlla la pagina e `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Una schermata iniziale a tema assicura un'esperienza di alta qualità quando gli utenti avviano la tua app dalla schermata Home. [Scopri di più sulle schermate iniziali](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Best practice"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Questi controlli mettono in evidenza le opportunità per [migliorare l'accessibilità della tua applicazione web](https://developer.chrome.com/docs/lighthouse/accessibility/). È possibile rilevare automaticamente soltanto un sottoinsieme di problemi di accessibilità, pertanto sono consigliati anche i test manuali."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Questi elementi riguardano aree che uno strumento di test automatizzato non può coprire. Leggi ulteriori informazioni nella nostra guida su come [effettuare un esame di accessibilità](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Installa [un modulo Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) che consenta il caricamento lento delle immagini. Questi moduli offrono la possibilità di rimandare qualsiasi immagine fuori schermo per migliorare le prestazioni."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Potresti usare un modulo per incorporare codice JavaScript e CSS fondamentale o potenzialmente caricare asset in modo asincrono tramite JavaScript, come il modulo [CSS avanzato/Aggregazione JS](https://www.drupal.org/project/advagg). Fai attenzione perché le ottimizzazioni offerte da questo modulo potrebbero interrompere la funzionalità del tuo sito, pertanto potresti dover apportare modifiche al codice."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Le specifiche del server, i moduli e i temi contribuiscono al tempo di risposta del server. Potresti usare un tema più ottimizzato, selezionando con cura un modulo per l'ottimizzazione e/o eseguendo l'upgrade del server. I server hosting dovrebbero usare la memorizzazione nella cache opcode PHP, la memorizzazione nella cache per ridurre i tempi di query del database come Redis o memcache e una logica dell'applicazione ottimizzata per preparare più rapidamente le pagine."
@@ -2778,10 +2862,10 @@
     "message": "Potresti usare gli [stili di immagini adattabili](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) per ridurre le dimensioni delle immagini caricate nella tua pagina. Se usi Views per mostrare diversi contenuti su una pagina, potresti implementare l'impaginazione per limitare il numero di contenuti mostrati su una data pagina."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Assicurati di aver attivato l'opzione \"Aggregate CSS files\" (Aggrega file CSS) nella pagina \"Administration » Configuration » Development\" (Amministrazione » Configurazione » Sviluppo). Inoltre, puoi configurare altre opzioni di aggregazione avanzate tramite i [moduli aggiuntivi](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) per velocizzare il tuo sito concatenando, minimizzando e comprimendo i tuoi stili CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Assicurati di aver attivato l'opzione \"Aggregate JavaScript files\" (Aggrega file JavaScript) nella pagina \"Administration » Configuration » Development\" (Amministrazione » Configurazione » Sviluppo). Inoltre, puoi configurare altre opzioni di aggregazione avanzate tramite i [moduli aggiuntivi](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) per velocizzare il tuo sito concatenando, minimizzando e comprimendo i tuoi asset JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Potresti rimuovere le regole CSS inutilizzate e collegare solo le librerie Drupal necessarie alle pagine o ai componenti in una pagina pertinenti. Per i dettagli, apri il [link alla documentazione relativa a Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Per individuare le librerie collegate che aggiungono CSS estraneo, prova a eseguire la [copertura del codice](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) in Chrome DevTools. Puoi individuare il tema/modulo responsabile nell'URL del foglio di stile quando l'aggregazione CSS è disattivata sul tuo sito Drupal. Cerca i temi/moduli che nell'elenco hanno diversi fogli di stile con molto rosso nella copertura del codice. Un tema/modulo dovrebbe aggiungere in coda un foglio di stile solo se viene effettivamente utilizzato nella pagina."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Attiva la compressione sul tuo server Next.js. [Scopri di più](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Usa il componente `nuxt/image` e imposta `format=\"webp\"`. [Scopri di più](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Usa lo strumento React DevTools Profiler, che usa l'API Profiler, per misurare le prestazioni di rendering dei tuoi componenti. [Ulteriori informazioni](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)."
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Posiziona i video all'interno di `VideoBoxes`, personalizzali con `Video Masks` o aggiungi `Transparent Videos`. [Scopri di più](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Carica le immagini utilizzando `Wix Media Manager` per assicurarti che vengano pubblicate automaticamente come WebP. Trova [altri modi per ottimizzare](https://support.wix.com/en/article/site-performance-optimizing-your-media) i contenuti multimediali del tuo sito."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Quando [aggiungi codice di terze parti](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) nella scheda `Custom Code` della dashboard del tuo sito, assicurati che venga differito o caricato alla fine del corpo del codice. Se possibile, utilizza le [integrazioni](https://support.wix.com/en/article/about-marketing-integrations) di Wix per incorporare gli strumenti di marketing nel tuo sito. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix utilizza CDN e memorizzazione nella cache per fornire risposte il più rapidamente possibile per la maggior parte dei visitatori. Valuta la possibilità di [attivare manualmente la memorizzazione nella cache](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) per il tuo sito, soprattutto se utilizzi `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Controlla l'eventuale codice di terze parti che hai aggiunto al tuo sito nella scheda `Custom Code` della dashboard del sito e conserva soltanto i servizi necessari per il sito. [Scopri di più](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Potresti caricare la tua GIF su un servizio che la renda disponibile per l'incorporamento come video HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Salva come JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Apri nell'app Viewer"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "I valori sono delle stime e potrebbero variare. Il [punteggio relativo alle prestazioni viene calcolato](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) direttamente in base a queste metriche."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Visualizza traccia originale"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Visualizza traccia"
   },
diff --git a/front_end/third_party/lighthouse/locales/ja.json b/front_end/third_party/lighthouse/locales/ja.json
index 2d27732..287ec76 100644
--- a/front_end/third_party/lighthouse/locales/ja.json
+++ b/front_end/third_party/lighthouse/locales/ja.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` 属性は役割と一致しています"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "要素にユーザー補助機能用の名前が設定されていない場合、スクリーン リーダーでは一般名で読み上げられるため、スクリーン リーダーのみを使用するユーザーには用途がわかりません。[コマンド要素にアクセスしやすくする方法の詳細](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`、`link`、`menuitem` 要素にユーザー補助機能向けの名前が設定されています"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA ダイアログ要素にユーザー補助機能用の名前が設定されていない場合、スクリーン リーダーのユーザーはこれらの要素の用途を識別できません。[ARIA ダイアログ要素をアクセスしやすくする方法の詳細](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "`role=\"dialog\"` または `role=\"alertdialog\"` が含まれる要素に、ユーザー補助機能用の名前が設定されていません。"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "`role=\"dialog\"` または `role=\"alertdialog\"` が含まれる要素に、ユーザー補助機能用の名前が設定されています。"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "スクリーン リーダーなどの支援技術は、ドキュメントの `<body>` に `aria-hidden=\"true\"` が設定されていると、正常に動作しません。[`aria-hidden` がドキュメントの本文に与える影響についての詳細](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` の値は有効です"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "マークアップによってテキストノードの分割を `role=text` で囲むと、ナレーションで 1 つのフレーズとして扱うことができますが、要素のフォーカス可能な子孫は読み上げられません。[`role=text` 属性の詳細](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "`role=text` 属性が指定された要素にフォーカス可能な子孫があります。"
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "`role=text` 属性が指定された要素にフォーカス可能な子孫がありません。"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "切り替えフィールドにユーザー補助機能用の名前が設定されていない場合、スクリーン リーダーでは一般名で読み上げられるため、スクリーン リーダーのみを使用するユーザーには用途がわかりません。[切り替えフィールドの詳細](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA ID は一意です"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "見出しにコンテンツがない場合やアクセスできないテキストが含まれている場合、スクリーン リーダーのユーザーはページの構造に関する情報にアクセスできません。[見出しの詳細](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "見出し要素にコンテンツが含まれていません。"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "すべての見出し要素にコンテンツが含まれています。"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "フォーム フィールドに複数のラベルが設定されている場合、スクリーン リーダーなどの支援技術で最初または最後のラベルだけ、もしくはすべてのラベルが読み上げられるため、混乱が生じる可能性があります。[フォームラベルの使用方法の詳細](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` 要素に、`[lang]` 属性と同じベース言語の `[xml:lang]` 属性があります。"
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "リンク先が同じリンクは、ユーザーがそのリンクの目的を理解し、クリックするかどうかを判断できるように、説明を同じものにする必要があります。[同一リンクの詳細](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "同一のリンクの目的が同じではありません。"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "同一のリンクの目的は同じです。"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "説明的要素は、簡潔でわかりやすい代替テキストにする必要があります。装飾的要素は、alt 属性が空の場合は無視される可能性があります。[`alt` 属性の詳細](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "画像要素に `[alt]` 属性が指定されています"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "識別可能およびアクセス可能なテキストを入力ボタンに追加すると、スクリーン リーダーのユーザーが入力ボタンの目的を把握するのに役立ちます。[入力ボタンの詳細](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` 要素に `[alt]` テキストが指定されています"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "ラベルを使用すると、フォームの各コントロールが支援技術(スクリーン リーダーなど)によって正しく読み上げられるようになります。[フォーム要素のラベルの詳細](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "フォームの要素にラベルが関連付けられています"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "メインのランドマークが 1 つ設定されていると、スクリーン リーダーのユーザーがウェブページを移動しやすくなります。[ランドマークの詳細](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "ドキュメントにメインのランドマークが設定されていません。"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "ドキュメントにメインのランドマークが設定されています。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "低コントラストのテキストを使用すると、多くのユーザーは読むことが困難または不可能になります。識別可能なリンクテキストを使用すると、ロービジョンのユーザーの利便性が向上します。[リンクを識別可能にする方法の詳細](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "リンクは色に依存して識別可能です。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "リンクは色に依存せずに識別可能です。"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "識別可能、フォーカス可能な一意のリンクテキスト(および画像をリンクとして使用している場合はその代替テキスト)を使用すると、スクリーン リーダーでのナビゲーションの操作性が向上します。[リンクをアクセス可能にする方法の詳細](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` 要素に代替テキストが指定されています"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "効果的なラベルのないフォーム要素は、スクリーン リーダーのユーザーにとって不便となる可能性があります。[`select` 要素の詳細](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "一部の要素にラベル要素が関連付けられていません。"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "一部の要素にラベル要素が関連付けられています。"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "値が 0 より大きい場合は、明示的なナビゲーション順序を示します。技術的には有効ですが、多くの場合、支援技術を使用しているユーザーにとって利便性が低下します。[`tabindex` 属性の詳細](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "`[tabindex]` に 0 より大きい値を指定している要素はありません"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "スクリーン リーダーには、表内の移動を補助する機能があります。表で `[colspan]` 属性を含むセルの代わりに、実際の字幕要素を使用すると、スクリーン リーダー ユーザーの利便性が向上する可能性があります。[字幕の詳細](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "表で字幕を示すために `[colspan]` 属性を含むセルの代わりに `<caption>` が使用されています。"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "タップ ターゲットのサイズや間隔は十分な大きさではありません。"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "タップ ターゲットのサイズと間隔は十分な大きさです。"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "スクリーン リーダーには、表内の移動を補助する機能があります。サイズの大きい表(幅と高さが 3 セル以上)の `<td>` 要素にテーブル ヘッダーを関連付けると、スクリーン リーダー ユーザーの利便性が向上する可能性があります。[テーブル ヘッダーの詳細](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "ページにマニフェストの <link> URL がありません"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "一致する Service Worker が検出されませんでした。ページを再読み込みするか、現在のページの Service Worker のスコープにマニフェストのスコープと開始 URL が含まれていることを確認する必要があります。"
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "マニフェストに「start_url」フィールドがないため Service Worker をチェックできませんでした"
   },
@@ -969,7 +1083,7 @@
     "message": "Android の Chrome の Beta チャンネルと Stable チャンネルでサポートされるのは、prefer_related_applications のみです。"
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse は Service Worker の有無を確認できませんでした。新しいバージョンの Chrome でお試しください。"
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "マニフェスト URL スキーム({scheme})は Android ではサポートされていません。"
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulative Layout Shift はビューポート内の視覚要素がどのくらい移動しているかを測定する指標です。[Cumulative Layout Shift 指標の詳細](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaction to Next Paint は、ページの応答性、ユーザーの入力に対してページが視覚的に応答するまでの時間を測定します。[Interaction to Next Paint 指標の詳細](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "First Contentful Paint は、テキストまたは画像が初めてペイントされるまでにかかった時間です。[First Contentful Paint の指標の詳細](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "First Meaningful Paint は、ページの主要なコンテンツが可視化されるまでにかかった時間です。[First Meaningful Paint の指標の詳細](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaction to Next Paint は、ページの応答性、ユーザーの入力に対してページが視覚的に応答するまでの時間を測定します。[Interaction to Next Paint 指標の詳細](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "操作可能になるまでの時間とは、ページが完全に操作可能になるのに要する時間です。[操作可能になるまでの時間の指標についての詳細](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "複数のページ リダイレクトの回避"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "ページリソースの数とサイズの予算を設定するには、budget.json ファイルを追加します。[パフォーマンス バジェットの詳細](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 件のリクエスト • {byteCount, number, bytes} KiB}other{# 件のリクエスト • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "リクエスト数を少なく、転送サイズを小さく維持してください"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "正規リンクで、検索結果に表示する URL を指定します。[正規リンクの詳細](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "最初のサーバー応答時間は問題ない速さです"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service Worker は、多くのプログレッシブ ウェブアプリ機能(オフライン、ホーム画面への追加、プッシュ通知など)をアプリで使用できるようにするための技術です。[Service Worker の詳細](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "このページは Service Worker によって制御されていますが、マニフェストが有効な JSON としてパースされなかったため、`start_url` は見つかりませんでした"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "このページは Service Worker によって制御されていますが、`start_url`({startUrl})が Service Worker のスコープ({scopeUrl})内にありません"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "このページは Service Worker によって制御されていますが、マニフェストが取得されなかったため、`start_url` は見つかりませんでした。"
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "この発信元には Service Worker が存在しますが、ページ({pageUrl})がスコープ内にありません。"
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "ページと `start_url` を制御する Service Worker が登録されていません"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "ページと `start_url` を制御する Service Worker が登録されています"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "テーマのあるスプラッシュ画面を設定すると、ホーム画面からのアプリの起動時に、質の良いアプリであることをユーザーにアピールできます。[スプラッシュ画面の詳細](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "おすすめの方法"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "これらのチェックにより、[ウェブアプリのユーザー補助機能の改善点](https://developer.chrome.com/docs/lighthouse/accessibility/)が明確になります。自動的に検出できるユーザー補助の問題は一部に過ぎないため、手動テストも実施することをおすすめします。"
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "ここに、自動テストツールではカバーできない範囲に対処する項目が表示されます。詳しくは、[ユーザー補助機能の審査を実施する](https://web.dev/how-to-review/)方法についてのガイドをご覧ください。"
@@ -2769,7 +2853,7 @@
     "message": "[Drupal のモジュール](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search)をインストールすると、画像を遅延読み込みできます。このようなモジュールにより、画面外の画像の読み込みを遅らせてパフォーマンスを改善できます。"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "モジュールを使用して、重要な CSS と JavaScript をインラインで読み込むか、JavaScript 経由でアセットを非同期で読み込むことをご検討ください([Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg) モジュールなど)。ただし、このモジュールの最適化処理によってサイトが破壊されることがあります。その場合は、コードを変更する必要があります。"
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "テーマ、モジュール、サーバー仕様はすべてサーバーの応答時間に影響します。より最適化されたテーマを探す、最適化モジュールを慎重に選ぶ、サーバーをアップグレードすることをおすすめします。ホスティング サーバーでは、PHP OPcode キャッシング、データベースのクエリ時間を減らす Redis や Memcached などのメモリ キャッシング、ページの準備を速くするために最適化されたアプリケーション ロジックを利用する必要があります。"
@@ -2778,10 +2862,10 @@
     "message": "ページに読み込まれる画像のサイズを小さくするには、[Responsive Image Styles](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) の使用をご検討ください。Views を使用して複数のコンテンツ アイテムを 1 つのページに表示している場合、ページに表示されるコンテンツ アイテムの数を制限するため、ページ分けの実装をご検討ください。"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "[Administration] > [Configuration] > [Development] ページで、[Aggregate CSS files] を有効にしていることを確認してください。[追加のモジュール](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search)を使用してより高度な集約オプションを設定し、CSS スタイルを結合、軽量化、圧縮してサイトの動作を速くすることもできます。"
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "[Administration] > [Configuration] > [Development] ページで [Aggregate JavaScript files] を有効にしていることを確認してください。[追加のモジュール](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search)を使用してより高度な集約オプションを設定し、JavaScript アセットを結合、軽量化、圧縮してサイトの動作を速くすることもできます。"
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "使用されていない CSS ルールの削除を検討し、必要な Drupal ライブラリのみを関連性の高いページまたはページのコンポーネントに接続してください。詳しくは、[Drupal のドキュメントのリンク](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library)をご覧ください。不要な CSS を読み込んでいる接続済みライブラリを特定するには、Chrome DevTools で[コードの Coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) を確認します。Drupal のサイトで CSS の集約が無効になっている場合、スタイルシートの URL から、該当のテーマやモジュールを特定できます。多くのスタイルシートを使用しているテーマやモジュール(コードの Coverage で赤色の部分が多いもの)をリストで探します。テーマやモジュールによってキューに追加されるスタイルシートは、実際にページで使用されるもののみにする必要があります。"
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Next.js サーバーで圧縮を有効にしてください。[詳細](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "`nuxt/image` コンポーネントを使用して、`format=\"webp\"` を設定します。[詳細](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Profiler API を採用している React DevTools Profiler を使用して、コンポーネントのレンダリング性能を測定します。[詳細](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "動画を `VideoBoxes` 内に配置するか、`Video Masks` を使用してカスタマイズするか、`Transparent Videos` を追加します。[詳細](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "`Wix Media Manager` を使用して画像をアップロードし、自動的に WebP として配信されるようにします。サイトのメディアを[最適化するその他の方法](https://support.wix.com/en/article/site-performance-optimizing-your-media)をご確認ください。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "サイトのダッシュボードの `Custom Code` タブに[サードパーティのコードを追加](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site)する際は、遅延させるか、コード本文の最後に読み込まれるようにしてください。可能な場合は、Wix の[統合](https://support.wix.com/en/article/about-marketing-integrations)を使用してサイトにマーケティング ツールを埋め込みます。 "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix は CDN とキャッシュを活用して、ほとんどの訪問者にできるだけ早く応答を返せるようにします。特に `Velo` を使用する場合は、サイトの[キャッシュを手動で有効にする](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed)ことを検討してください。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "サイトに追加したサードパーティのコードをサイトのダッシュボードの `Custom Code` タブで確認して、サイトに必要なサービスのみを残します。[詳細](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "GIF を HTML5 動画として埋め込み可能なサービスにアップロードすることをご検討ください。"
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "JSON 形式で保存"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "ビューアで開く"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "推定値のため変動する可能性があります。[パフォーマンス スコアの計算](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)は、これらの指標を基に行っています。"
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "元のトレースを表示"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "トレースを表示"
   },
diff --git a/front_end/third_party/lighthouse/locales/ko.json b/front_end/third_party/lighthouse/locales/ko.json
index 7ceef67..6b6193d 100644
--- a/front_end/third_party/lighthouse/locales/ko.json
+++ b/front_end/third_party/lighthouse/locales/ko.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` 속성이 역할과 일치함"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "요소에 액세스 가능한 이름이 없는 경우 스크린 리더가 일반적인 이름으로 읽기 때문에 스크린 리더에 의존하는 사용자는 해당 요소를 사용할 수 없게 됩니다. [명령어 요소의 접근성을 높이는 방법 알아보기](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`, `link` 및 `menuitem` 요소에 접근성을 위한 이름이 있음"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "액세스 가능한 이름이 없는 ARIA 대화상자 요소로 인해 스크린 리더 사용자가 이러한 요소의 용도를 파악하지 못할 수 있습니다. [ARIA 대화상자 요소의 접근성을 높이는 방법 알아보기](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "`role=\"dialog\"` 또는 `role=\"alertdialog\"`가 있는 요소에 액세스 가능한 이름이 없습니다."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "`role=\"dialog\"` 또는 `role=\"alertdialog\"`가 있는 요소에 액세스 가능한 이름이 있습니다."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "스크린 리더와 같은 보조 기술은 `aria-hidden=\"true\"`가 문서 `<body>`에 설정된 경우 일관성 없게 작동합니다. [`aria-hidden`이 문서 본문에 미치는 영향 알아보기](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` 값이 유효함"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "마크업으로 분할된 텍스트 노드 주위에 `role=text`를 추가하면 VoiceOver가 이를 하나의 구문으로 취급할 수 있지만, 요소의 포커스 가능한 하위 요소는 표시되지 않습니다. [`role=text` 속성에 관해 자세히 알아보기](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "`role=text` 속성이 있는 요소에 포커스 가능한 하위 요소가 있습니다."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "`role=text` 속성이 있는 요소에는 포커스 가능한 하위 요소가 없습니다."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "전환 버튼 입력란에 액세스 가능한 이름이 없는 경우 스크린 리더가 일반적인 이름으로 읽기 때문에 스크린 리더에 의존하는 사용자는 해당 입력란을 사용할 수 없게 됩니다. [전환 버튼 입력란에 관해 자세히 알아보기](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "중복되는 ARIA ID가 없음"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "콘텐츠가 없는 제목이나 액세스 불가한 텍스트를 포함하는 제목이 있는 경우 스크린 리더 사용자가 페이지 구조의 정보를 얻는 데 어려움을 겪습니다. [제목에 관해 자세히 알아보세요](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "제목 요소에 콘텐츠가 포함되어 있지 않습니다."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "모든 제목 요소에 콘텐츠가 포함되어 있습니다."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "라벨이 여러 개인 양식 입력란은 첫 번째, 마지막 또는 모든 라벨을 사용하는 스크린 리더와 같은 보조 기술에서 잘못 읽을 수 있습니다. [양식 라벨 사용 방법 알아보기](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` 요소에는 `[lang]` 속성과 동일한 기본 언어를 사용하는 `[xml:lang]` 속성이 있습니다."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "도착 페이지가 동일한 링크에는 동일한 설명을 제공하여 사용자가 링크의 목적을 이해하고 링크 사용 여부를 결정할 수 있도록 해야 합니다. [동일한 링크에 관해 자세히 알아보세요](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "동일한 링크의 목적이 동일하지 않습니다."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "동일한 링크의 목적이 동일합니다."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "정보 요소는 짧아야 하며 설명을 제공하는 대체 텍스트를 목표로 해야 합니다. 장식 요소는 Alt 속성이 비어 있는 경우 무시될 수 있습니다. [`alt` 속성에 관해 자세히 알아보기](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "이미지 요소에 `[alt]` 속성이 있음"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "입력 버튼에 식별 가능하고 액세스 가능한 텍스트를 추가하면 스크린 리더 사용자가 입력 버튼의 목적을 이해하는 데 도움이 될 수 있습니다. [입력 버튼에 관해 자세히 알아보세요](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` 요소에 `[alt]` 텍스트가 있음"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "라벨을 사용하면 스크린 리더와 같은 보조 기술에서 양식 컨트롤을 올바르게 읽을 수 있습니다. [양식 요소 라벨에 관해 자세히 알아보기](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "양식 요소에 관련 라벨이 포함되어 있습니다"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "주요 랜드마크가 하나 있으면 스크린 리더 사용자가 웹페이지를 탐색하는 데 도움이 됩니다. [랜드마크에 관해 자세히 알아보세요](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "문서에 주요 랜드마크가 없습니다."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "문서에 주요 랜드마크가 있습니다."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "많은 사용자가 저대비 텍스트를 읽는 데 어려움을 겪거나 전혀 읽지 못합니다. 눈에 잘 띄는 링크 텍스트는 시력이 낮은 사용자의 사용 경험을 개선합니다. [링크가 눈에 잘 띄게 만드는 방법을 알아보세요](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "색상에 의존하여 링크를 구분할 수 있습니다."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "색상에 의존하지 않고 링크를 구분할 수 있습니다."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "인식하기 쉽고, 고유하고, 초점을 맞추기 쉬운 링크 텍스트(및 이미지가 링크로 사용되는 경우 이미지의 대체 텍스트)를 사용하면 스크린 리더 사용자의 탐색 환경을 개선할 수 있습니다. [링크 접근성을 높이는 방법 알아보기](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` 요소에 대체 텍스트가 있음"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "효과적인 라벨이 없는 양식 요소로 인해 스크린 리더 사용자가 불편을 겪을 수 있습니다. [`select` 요소에 관해 자세히 알아보기](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "선택 요소에 연결된 라벨 요소가 없습니다."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "선택 요소에 연결된 라벨 요소가 있습니다."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "0보다 큰 값은 명시적인 탐색 순서를 나타냅니다. 기술적으로는 유효하나 보조 기술에 의존하는 사용자에게 불편한 환경이 생기는 경우가 많습니다. [`tabindex` 속성에 관해 자세히 알아보기](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "`[tabindex]` 값이 0보다 큰 요소가 없음"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "스크린 리더에는 표를 좀 더 쉽게 탐색하는 기능이 있습니다. 표에서 `[colspan]` 속성이 있는 셀 대신 실제 자막 요소를 사용하면 스크린 리더 사용자 환경을 개선할 수 있습니다. [자막에 관해 자세히 알아보세요](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "표에서 자막을 나타내기 위해 `[colspan]` 속성이 있는 셀 대신 `<caption>`을(를) 사용합니다."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "터치 영역의 크기 또는 간격이 충분하지 않습니다."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "터치 영역의 크기와 간격이 충분합니다."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "스크린 리더에는 표를 좀 더 쉽게 탐색하는 기능이 있습니다. 큰 표(너비와 높이의 셀이 3개 이상)의 `<td>` 요소에 표 헤더가 연결되어 있는지 확인하면 스크린 리더 사용자의 환경을 개선할 수 있습니다. [표 헤더에 관해 자세히 알아보세요](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "페이지에 매니페스트 <link> URL이 없습니다."
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "일치하는 서비스 워커가 감지되지 않았습니다. 페이지를 새로고침하거나 현재 페이지에 관한 서비스 워커의 범위가 범위와 매니페스트의 시작 URL을 포괄하는지 확인하세요."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "매니페스트에 'start_url' 필드가 없는 서비스 워크를 확인할 수 없습니다."
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications는 Android의 Chrome 베타 및 공개 버전 채널에서만 지원됩니다."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse에서 서비스 워커의 유무를 판단할 수 없습니다. 최신 버전의 Chrome을 사용해 시도해 보세요."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Android에서 지원되지 않는 매니페스트 URL 스키마({scheme})입니다."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "레이아웃 변경 횟수는 표시 영역 안에 보이는 요소의 이동을 측정합니다. [레이아웃 변경 횟수 측정항목에 관해 자세히 알아보기](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaction to Next Paint(다음 페인트와의 상호작용)은 페이지 응답성, 즉 페이지가 사용자 입력에 시각적으로 반응하는 데 걸리는 시간을 측정합니다. [Interaction to Next Paint(다음 페인트와의 상호작용) 측정항목에 관해 자세히 알아보기](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "콘텐츠가 포함된 첫 페인트는 첫 번째 텍스트 또는 이미지가 표시되는 시간을 나타냅니다. [콘텐츠가 포함된 첫 페인트 측정항목에 관해 자세히 알아보기](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "유의미한 첫 페인트는 페이지의 기본 콘텐츠가 표시되는 경우를 측정합니다. [유의미한 첫 페인트 측정항목에 관해 자세히 알아보기](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaction to Next Paint(다음 페인트와의 상호작용)은 페이지 응답성, 즉 페이지가 사용자 입력에 시각적으로 반응하는 데 걸리는 시간을 측정합니다. [Interaction to Next Paint(다음 페인트와의 상호작용) 측정항목에 관해 자세히 알아보기](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "상호작용 시작 시간은 페이지와 완전히 상호작용할 수 있게 될 때까지 걸리는 시간입니다. [상호작용 시작 시간 측정항목에 관해 자세히 알아보기](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "여러 차례의 페이지 리디렉션 피하기"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "페이지 리소스의 수량과 크기와 관련해 예산을 설정하려면 budget.json 파일을 추가하세요. [성능 예산에 관해 자세히 알아보기](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{요청 1개 • {byteCount, number, bytes}KiB}other{요청 #개 • {byteCount, number, bytes}KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "요청 수는 낮게, 전송 크기는 작게 유지하기"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "표준 링크는 검색결과에 어떤 URL을 표시할지 알려줍니다. [표준 링크에 관해 자세히 알아보기](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "초기 서버 응답 시간 짧음"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "서비스 워커는 앱에서 오프라인, 홈 화면에 추가, 푸시 알림 등 다양한 프로그레시브 웹 앱 기능을 사용할 수 있도록 설정하는 기술입니다. [서비스 워커에 관해 자세히 알아보기](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "이 페이지는 서비스 워커로 인해 제어되지만 매니페스트가 유효한 JSON으로 파싱하는 데 실패했으므로 `start_url`을(를) 찾지 못했습니다."
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "이 페이지는 서비스 워커로 인해 제어되지만 `start_url`({startUrl})이(가) 서비스 워커의 범위({scopeUrl})에 있지 않습니다."
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "이 페이지는 서비스 워커로 인해 제어되지만 가져온 매니페스트가 없으므로 `start_url`을(를) 찾지 못했습니다."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "이 원본에 하나 이상의 서비스 워커가 있지만 페이지({pageUrl})가 범위 내에 있지 않습니다."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "페이지와 `start_url`을(를) 제어하는 서비스 워커를 등록하지 않음"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "페이지와 `start_url`을(를) 제어하는 서비스 워커를 등록함"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "테마 스플래시 화면을 사용하면 사용자가 홈 화면에서 앱을 실행했을 때 고품질의 환경을 경험할 수 있습니다. [스플래시 화면에 관해 자세히 알아보기](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "권장사항"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "이 검사에서는 [웹 앱의 접근성을 개선](https://developer.chrome.com/docs/lighthouse/accessibility/)하도록 추천된 사항을 강조합니다. 접근성 문제의 일부만 자동으로 감지되므로 직접 테스트하는 것도 좋습니다."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "자동화된 테스트 도구가 처리할 수 없는 영역을 다루는 항목입니다. [접근성 검토 실시](https://web.dev/how-to-review/)에 관한 가이드에서 자세히 알아보세요."
@@ -2769,7 +2853,7 @@
     "message": "이미지를 지연 로드할 수 있는 [Drupal 모듈](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search)을 설치하세요. 이러한 모듈은 오프스크린 이미지를 지연하여 성능을 개선해 줍니다."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "모듈을 사용하여 중요 CSS 및 자바스크립트를 인라인으로 표시해 보세요. 또는 [고급 CSS/JS 집계](https://www.drupal.org/project/advagg) 모듈과 같은 자바스크립트를 통해 애셋을 비동기식으로 로드할 수 있습니다. 이 모듈에서 제공하는 최적화로 인해 사용 중인 사이트가 제대로 작동하지 않을 수 있으므로 코드를 변경해야 할 가능성이 큽니다."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "테마, 모듈, 서버 사양은 모두 서버 응답 시간에 영향을 미칩니다. 더욱 최적화된 테마를 찾고, 최적화 모듈을 신중하게 선택하고, 서버를 업그레이드해 보세요. 호스팅 서버에서는 PHP opcode 캐싱 및 데이터베이스 쿼리 시간을 단축하기 위한 Redis나 Memcached 등의 메모리 캐싱을 사용하고, 페이지를 더 빠르게 준비하기 위해 최적화된 애플리케이션 로직을 사용해야 합니다."
@@ -2778,10 +2862,10 @@
     "message": "페이지에서 로드되는 이미지의 크기를 줄이려면 [반응형 이미지 스타일](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8)을 사용해 보세요. 페이지에 여러 콘텐츠 항목을 표시하는 데 Views를 사용하고 있다면 페이지로 나누기를 구현하여 주어진 페이지에 표시되는 콘텐츠 항목의 수를 제한하는 것이 좋습니다."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "'Administration(관리) » Configuration(구성) » Development(개발)' 페이지에서 'Aggregate CSS files(CSS 파일 집계)'를 사용 설정했는지 확인합니다. [추가 모듈](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search)을 통해 고급 집계 옵션을 구성하면 CSS 스타일을 연결, 축소, 압축함으로써 사이트 속도를 높일 수 있습니다."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "'Administration(관리) » Configuration(구성) » Development(개발)' 페이지에서 'Aggregate JavaScript files(자바스크립트 파일 집계)'를 사용 설정했는지 확인합니다. [추가 모듈](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search)을 통해 고급 집계 옵션을 구성하면 자바스크립트 애셋을 연결, 축소, 압축함으로써 사이트 속도를 높일 수 있습니다."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "미사용 CSS 규칙을 삭제하는 방안을 고려하고, 관련 페이지 또는 페이지의 구성요소에 필요한 Drupal 라이브러리만 연결합니다. 자세한 정보는 [Drupal 문서 링크](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library)를 참고하세요. 연결된 라이브러리 중 불필요한 CSS를 추가하는 라이브러리를 확인하려면 Chrome DevTools의 [코드 범위](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage)를 실행해 보세요. Drupal 사이트에서 CSS 집계가 사용 중지되어 있으면 스타일시트의 URL에서 원인이 되는 테마 또는 모듈을 확인할 수 있습니다. 목록에서 코드 범위에 빨간색이 많이 보이는 스타일시트가 여러 개 있는 테마 또는 모듈을 찾아보세요. 테마 또는 모듈은 페이지에서 실제 사용되는 스타일시트만 대기열에 포함해야 합니다."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Next.js 서버에서 압축 기능을 사용하세요. [자세히 알아보기](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "`nuxt/image` 구성요소를 사용해 `format=\"webp\"` 형식을 설정하세요. [자세히 알아보기](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Profiler API를 활용하는 React 개발자 도구 프로파일러를 사용하여 구성요소의 렌더링 성능을 측정합니다. [자세히 알아보기](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "`VideoBoxes`에 동영상을 배치하거나 `Video Masks`를 사용하여 맞춤설정하거나 `Transparent Videos`를 추가하세요. [자세히 알아보기](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "WebP로 자동 제공되도록 `Wix Media Manager`를 사용하여 이미지를 업로드합니다. 사이트 미디어를 [최적화하는 다양한 방법](https://support.wix.com/en/article/site-performance-optimizing-your-media)을 알아보세요."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "사이트 대시보드의 `Custom Code` 탭에서 [서드 파티 코드를 추가](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site)할 때 코드가 지연되거나 코드 본문 끝에 로드되는지 확인합니다. 가능한 경우 Wix의 [통합](https://support.wix.com/en/article/about-marketing-integrations)을 사용하여 사이트에 마케팅 도구를 삽입합니다. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix는 CDN과 캐싱을 활용하여 대부분의 방문자에게 최대한 빠르게 응답을 제공합니다. 특히 `Velo`를 사용하는 경우 사이트에 [캐싱을 수동으로 사용 설정](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed)하는 것이 좋습니다."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "사이트 대시보드의 `Custom Code` 탭에서 사이트에 추가한 서드 파티 코드를 검토하고 사이트에 필요한 서비스만 유지합니다. [자세히 알아보세요](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "GIF를 HTML5 동영상으로 삽입할 수 있게 해 주는 서비스에 GIF를 업로드해 보세요."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "JSON으로 저장"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "뷰어에서 열기"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "값은 추정치이며 달라질 수 있습니다. 이러한 측정항목에서 [성능 점수가 직접 계산됩니다](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "출처 흔적 보기"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "흔적 보기"
   },
diff --git a/front_end/third_party/lighthouse/locales/lt.json b/front_end/third_party/lighthouse/locales/lt.json
index 8ac6400..b256c7e 100644
--- a/front_end/third_party/lighthouse/locales/lt.json
+++ b/front_end/third_party/lighthouse/locales/lt.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atributai „`[aria-*]`“ atitinka savo vaidmenis"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Kai nenurodytas pasiekiamasis elemento pavadinimas, ekrano skaitytuvai apie jį praneša naudodami bendrąjį pavadinimą, todėl jo negali naudoti ekrano skaitytuvo naudotojai. [Sužinokite, kaip komandų elementus padaryti lengviau pasiekiamus](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Nurodyti neįgaliesiems pritaikyti elementų „`button`“, „`link`“ ir „`menuitem`“ pavadinimai"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA dialogo elementai be pasiekiamųjų pavadinimų gali neleisti ekrano skaitytuvų naudotojams matyti šių elementų tikslo. [Sužinokite, kaip padaryti ARIA dialogo elementus lengviau pasiekiamus](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementuose su `role=\"dialog\"` arba `role=\"alertdialog\"` nėra pasiekiamųjų pavadinimų."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementuose su `role=\"dialog\"` arba `role=\"alertdialog\"` yra pasiekiamųjų pavadinimų."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Pagalbinės technologijos, pvz., ekrano skaitytuvai, veikia nenuosekliai, kai dokumente „`<body>`“ nustatytas elementas „`aria-hidden=\"true\"`“. [Sužinokite, kaip „`aria-hidden`“ paveikia dokumento turinį](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Elemento „`[role]`“ vertės yra tinkamos"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Pridėjus `role=text` aplink teksto mazgo padalijimą pagal žymėjimą, „VoiceOver“ gali laikyti jį viena fraze, bet išryškinami elemento poelemenčiai nebus skelbiami. [Sužinokite daugiau apie atributą „`role=text`“](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementuose su atributu „`role=text`“ yra suaktyvinamų poelemenčių."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementuose su atributu „`role=text`“ nėra suaktyvinamų poelemenčių."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Kai nenurodytas pasiekiamasis perjungimo lauko pavadinimas, ekrano skaitytuvai apie jį praneša naudodami bendrąjį pavadinimą, todėl jo negali naudoti ekrano skaitytuvo naudotojai. [Sužinokite daugiau apie laukų perjungimą](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA ID yra unikalūs"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Antraštė, kurioje nėra turinio, ar nepasiekiamas tekstas neleidžia ekrano skaitytuvų naudotojams pasiekti puslapio struktūros informacijos. [Sužinokite daugiau apie antraštes](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Antraštės elementuose nėra turinio."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Visuose antraštės elementuose yra turinio."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Apie formos laukus su keliomis etiketėmis gali klaidinančiai pranešti pagalbinės technologijos, pvz., ekrano skaitytuvai, naudojantys pirmą, paskutinę arba visas etiketes. [Sužinokite, kaip naudoti formų etiketes](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Elemente „`<html>`“ yra atributas „`[xml:lang]`“, kurio pagrindinė kalba sutampa su atributo „`[lang]`“ kalba."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Nuorodų su ta pačia paskirties vieta aprašas turi būti toks pats, kad naudotojai lengviau suprastų nuorodos tikslą ir nuspręstų, ar ją naudoti. [Sužinokite daugiau apie identiškas nuorodas](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identiškų nuorodų tikslas nėra tas pats."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identiškų nuorodų tikslas yra tas pats."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informaciniuose elementuose turėtų būti pateiktas trumpas, aprašomasis alternatyvus tekstas. Dekoratyvinių elementų galima nepaisyti nurodžius tuščią alternatyvų atributą. [Sužinokite daugiau apie atributą „`alt`“](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Vaizdo elementuose yra atributų „`[alt]`“"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Jei prie įvesties mygtukų pridėsite pastebimą ir pasiekiamą tekstą, ekrano skaitytuvo naudotojams bus lengviau suprasti įvesties mygtuko paskirtį. [Sužinokite daugiau apie įvesties mygtukus](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Elementuose „`<input type=\"image\">`“ yra „`[alt]`“ teksto"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Etiketės užtikrina, kad pagalbinės technologijos, pvz., ekrano skaitytuvai, tinkamai praneštų apie formų valdiklius. [Sužinokite daugiau apie formų elementų etiketes](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Formos elementuose yra atitinkamų etikečių"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Vienas pagrindinis orientyras padeda ekrano skaitytuvo naudotojams naršyti tinklalapį. [Sužinokite daugiau apie orientyrus](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokumente nėra pagrindinio orientyro."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokumente yra pagrindinis orientyras."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Mažo kontrasto tekstą daugumai naudotojų yra sudėtinga arba neįmanoma perskaityti. Atskiriamas nuorodos tekstas pagerina patirtį sutrikusio regėjimo naudotojams. [Sužinokite, kaip nuorodas padaryti atskiriamas](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Nuorodas galima atskirti pagal spalvą."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Nuorodas galima atskirti ne pagal spalvą."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Aiškus ir unikalus nuorodos tekstas (ir alternatyvusis vaizdų tekstas, kai jie naudojami kaip nuorodos), į kurį lengva sutelkti dėmesį, pagerina naršymo patirtį ekrano skaitytuvų naudotojams. [Sužinokite, kaip nuorodas padaryti pasiekiamas](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Elementuose „`<object>`“ yra alternatyviojo teksto"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Dėl formos elementų be veiksmingų etikečių ekrano skaitytuvo naudotojams gali būti nepatogu naudotis funkcijomis. [Sužinokite daugiau apie elementą „`select`“](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Kai kuriuose elementuose nėra susietų etikečių elementų."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Pasirinktuose elementuose yra susijusių etikečių elementų."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Didesnė nei 0 vertė aiškiai nurodo naršymo tvarką. Iš tiesų tai yra tinkamas sprendimas, tačiau dažnai erzina pagalbinių technologijų naudotojus. [Sužinokite daugiau apie atributą „`tabindex`“](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Nėra elemento su didesne nei 0 „`[tabindex]`“ verte"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Ekrano skaitytuvuose naudojamos funkcijos, padedančios lengviau naršyti lenteles. Užtikrinus, kad lentelėse naudojamas faktinis subtitrų elementas, o ne langeliai su atributu „`[colspan]`“, gali būti pagerinta ekrano skaitytuvų naudotojų patirtis. [Sužinokite daugiau apie subtitrus.](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Lentelėse naudojamas skirtukas „`<caption>`“ vietoje langelių su atributu „`[colspan]`“ antraštei nurodyti."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Jutiklinės sritys arba jų tarpai nepakankamo dydžio."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Jutiklinių sričių ir jų tarpų dydis yra pakankamas."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Ekrano skaitytuvuose naudojamos funkcijos, padedančios lengviau naršyti lenteles. Užtikrinus, kad elementai „`<td>`“ didelėje lentelėje (trys ar daugiau langelių iš pločio ir aukščio) turi susietą lentelės antraštę, gali būti pagerinta ekrano skaitytuvų naudotojų patirtis. [Sužinokite daugiau apie lentelių antraštes](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Puslapyje nėra aprašo <link> URL"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Neaptikta atitinkančio pagalbinio „JavaScript“ failo. Gali reikėti iš naujo įkelti puslapį arba patikrinti, ar dabartinis pagalbinis „JavaScript“ failas apima aprašo apimtį ir pradžios URL."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Nepavyko patikrinti pagalbinio „JavaScript“ failo, nes apraše nėra lauko „start_url“"
   },
@@ -969,7 +1083,7 @@
     "message": "„prefer_related_applications“ palaikoma tik beta versijos „Chrome“ ir pastoviuose kanaluose sistemoje „Android“."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "„Lighthouse“ nepavyko nustatyti, ar buvo pagalbinis „JavaScript“ failas. Bandykite naudodami naujesnės versijos „Chrome“."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Aprašo URL schema ({scheme}) nepalaikoma sistemoje „Android“."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Nustatant kaupiamąjį išdėstymo poslinkį įvertinamas peržiūros srityje matomų elementų judėjimas. [Sužinokite daugiau apie kaupiamojo išdėstymo poslinkio metriką](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Laikas nuo sąveikos iki kito žymėjimo įvertina puslapio atsako laiką: kiek laiko praeina, kol matomas puslapio atsakas į naudotojo įvestį. [Sužinokite daugiau apie laiką nuo sąveikos iki kito žymėjimo](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Pirmas turiningas žymėjimas nurodo laiką, kada pažymimas pirmasis tekstas ar vaizdas. [Sužinokite daugiau apie pirmo turiningo žymėjimo metriką](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Pirmasis reikšmingas parodymas nurodo, kada parodomas pagrindinis puslapio turinys. [Sužinokite daugiau apie pirmojo reikšmingo parodymo metriką](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Laikas nuo sąveikos iki kito žymėjimo įvertina puslapio atsako laiką: kiek laiko praeina, kol matomas puslapio atsakas į naudotojo įvestį. [Sužinokite daugiau apie laiką nuo sąveikos iki kito žymėjimo](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Laikas iki sąveikos yra vertė, nurodanti, kiek laiko reikia, kol puslapis tampa visiškai interaktyvus. [Sužinokite daugiau apie laiko iki sąveikos metriką](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Venkite kelių puslapio peradresavimų"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Kad nustatytumėte puslapio išteklių kiekio ir dydžio biudžetus, pridėkite biudžeto .json failą. [Sužinokite daugiau apie našumo biudžetus](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{Viena užklausa • {byteCount, number, bytes} KiB}one{# užklausa • {byteCount, number, bytes} KiB}few{# užklausos • {byteCount, number, bytes} KiB}many{# užklausos • {byteCount, number, bytes} KiB}other{# užklausų • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Pasistenkite neteikti daug užklausų ir neperkelti daug duomenų"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Standartizuotos nuorodos siūlo, kurį URL rodyti paieškos rezultatuose. [Sužinokite daugiau apie standartizuotas nuorodas](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Pradinio serverio atsako laikas buvo trumpas"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Pagalbinis „JavaScript“ failas – tai technologija, įgalinanti jūsų programą naudoti daug laipsniškosios žiniatinklio programos funkcijų, pvz., naudoti neprisijungus, pridėti prie pagrindinio ekrano ar naudoti iš karto gaunamus pranešimus. [Sužinokite daugiau apie pagalbinius „JavaScript“ failus](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Šis puslapis valdomas naudojant pagalbinį „JavaScript“ failą, tačiau `start_url` nerasta, nes aprašo nepavyko analizuoti kaip galiojančio JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Šs puslapis valdomas naudojant pagalbinį „JavaScript“ failą, tačiau `start_url` ({startUrl}) nepatenka į pagalbinio „JavaScript“ failo aprėptį ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Šis puslapis valdomas naudojant pagalbinį „JavaScript“ failą, tačiau neaptikta `start_url`, nes neįkeltas joks aprašas."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Šiame pradiniame puslapyje yra vienas ar daugiau pagalbinių „JavaScript“ failų, tačiau puslapis ({pageUrl}) neįtrauktas."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Neregistruojamas pagalbinis „JavaScript“ failas, naudojamas puslapiams ir `start_url` valdyti"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registruojamas pagalbinis „JavaScript“ failas, naudojamas puslapiams ir `start_url` valdyti"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Teminis prisistatymo langas užtikrina kokybišką patirtį naudotojui paleidžiant jūsų programą iš pagrindinio ekrano. [Sužinokite daugiau apie prisistatymo langus](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Geriausia praktika"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Atlikę šias patikras sužinosite, kaip galite [geriau pritaikyti žiniatinklio programą](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatiškai galima aptikti tik dalį pritaikomumo problemų, todėl rekomenduojama atlikti ir neautomatinį tikrinimą."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Šie elementai apima sritis, kurių automatinio bandymo įrankis negali aprėpti. Mūsų vadove sužinokite daugiau apie tai, kaip [atlikti pritaikomumo peržiūrą](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Įdiekite [„Drupal“ modulį](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), kuris galėtų įkelti vaizdus naudojant atidėtąjį įkėlimą. Naudojant tokius modulius galima atidėti bet kokius ne ekraninius vaizdus, kad būtų padidintas našumas."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Apsvarstykite galimybę naudoti modulį, kad galėtumėte įterpti svarbią CSS kalbą ir „JavaScript“ arba galimai nesinchronizuotai įkelti išteklius naudodami „JavaScript“, pvz., [išplėstinio CSS kalbos ir (arba) JS apibendrinimo](https://www.drupal.org/project/advagg) modulį. Atminkite, kad dėl šio modulio teikiamo optimizavimo gali būti pažeistos jūsų svetainės funkcijos, todėl tikriausiai turėsite atlikti kodo pakeitimų."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Temos, moduliai ir serverio specifikacijos – visa tai turi įtakos serverio atsako laikui. Galbūt vertėtų surasti geriau optimizuotą temą, atidžiai pasirinkti optimizavimo modulį ir (arba) naujovinti serverį. Prieglobos serveriai turėtų naudoti PHP operacijos kodų talpyklą, atminties talpyklą, kad sumažintų duomenų bazės užklausų skaičių, pvz., „Redis“ ar „Memcached“, bei optimizuotą programos logiką, kad puslapiai būtų sparčiau parengti."
@@ -2778,10 +2862,10 @@
     "message": "Apsvarstykite galimybę naudoti [interaktyvių vaizdų stilius](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8), kad sumažintumėte puslapyje įkeliamus vaizdus. Jei naudojate rodinius keliems turinio elementams rodyti puslapyje, apsvarstykite galimybę įdiegti puslapių numeravimą, kad apribotumėte nurodytame puslapyje rodomų turinio elementų skaičių."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Būtinai įgalinkite funkciją „Apibendrinti CSS kalbos failus“ puslapyje „Administravimas“ » „Konfigūravimas“ » „Diegimas“. Be to, galite konfigūruoti išplėstines apibendrinimo parinktis naudodami [papildomus modulius](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), kad svetainė sparčiau veiktų, sujungiant, suglaudinant CSS kalbos stilius ir pašalinant jų nereikalingus duomenis."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Būtinai įgalinkite funkciją „Apibendrinti „JavaScript“ failus“ puslapyje „Administravimas“ » „Konfigūravimas“ » „Diegimas“. Be to, galite konfigūruoti išplėstines apibendrinimo parinktis naudodami [papildomus modulius](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), kad svetainė sparčiau veiktų, sujungiant, suglaudinant „JavaScript“ išteklius ir pašalinant jų nereikalingus duomenis."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Apsvarstykite galimybę pašalinti nenaudojamas CSS kalbos taisykles ir pridėti tik reikalingas „Drupal“ bibliotekas prie atitinkamo puslapio ar komponento puslapyje. Jei reikia išsamios informacijos, žr. [„Drupal“ dokumentų nuorodą](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Kad nustatytumėte pridėtas bibliotekas, pridedančias nesusijusios CSS kalbos, pabandykite vykdyti [kodo aprėpties procesą](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) naudodami „Chrome DevTools“. Susijusią temą ir (arba) modulį galite nustatyti pagal stiliaus aprašo URL, kai CSS kalbos apibendrinimas išjungtas „Drupal“ svetainėje. Ieškokite temų ir (arba) modulių, kurių sąraše pateikta daug stiliaus aprašų, kurių kodo aprėptyje yra daug raudonos spalvos. Tema ir (arba) modulis įtraukti stiliaus aprašą į eilę turėtų tik tokiu atveju, jei jis tikrai naudojamas puslapyje."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Įgalinkite glaudinimą Next.js serveryje. [Sužinokite daugiau](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Naudokite komponentą „`nuxt/image`“ ir nustatykite „`format=\"webp\"`“. [Sužinokite daugiau](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Naudokite „React“ kūrimo įrankių analizės įrankį (kurį naudojant pasitelkiama analizės įrankio API) komponentų pateikimo našumui įvertinti. [Sužinokite daugiau.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Įdėkite vaizdo įrašus į „`VideoBoxes`“, tinkinkite juos naudodami „`Video Masks`“ arba pridėkite „`Transparent Videos`“. [Sužinokite daugiau](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Įkelkite vaizdus naudodami „`Wix Media Manager`“, kad jie būtų automatiškai teikiami kaip „WebP“. Raskite [daugiau būdų optimizuoti](https://support.wix.com/en/article/site-performance-optimizing-your-media) svetainės mediją."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Svetainės informacijos suvestinės skirtuke „`Custom Code`“ pridėdami [trečiosios šalies kodą](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site), kodo pabaigoje patikrinkite, ar jis yra atidėtas arba įkeltas. Jei įmanoma, naudokite „Wix“ [integravimą](https://support.wix.com/en/article/about-marketing-integrations) svetainėje įterpdami rinkodaros įrankių. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "„Wix“ naudoja TPT ir saugojimą talpykloje, kad kuo greičiau pateiktų atsakymus daugumai lankytojų. Apsvarstykite galimybę [neautomatiškai įgalinti saugojimo talpykloje funkciją](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) svetainėje, ypač jei naudojate „`Velo`“."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Svetainės informacijos suvestinės skirtuke „`Custom Code`“ peržiūrėkite trečiosios šalies kodą, kurį pridėjote prie svetainės, ir palikite tik paslaugas, kurios būtinos jūsų svetainei. [Sužinokite daugiau](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Apsvarstykite galimybę įkelti savo GIF į paslaugą, kuri leis jį įterpti kaip HTML5 vaizdo įrašą."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Išsaugoti kaip JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Atidaryti naudojant žiūriklį"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Vertės yra apytikslės ir gali skirtis. [Našumo įvertinimas apskaičiuojamas](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) tiesiogiai pagal šias metrikas."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Žr. pradinį pėdsaką"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Žr. pėdsaką"
   },
diff --git a/front_end/third_party/lighthouse/locales/lv.json b/front_end/third_party/lighthouse/locales/lv.json
index 5d0e775..d0648a9 100644
--- a/front_end/third_party/lighthouse/locales/lv.json
+++ b/front_end/third_party/lighthouse/locales/lv.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atribūti `[aria-*]` atbilst savām lomām"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Ja elementam nav pieejama nosaukuma, ekrāna lasītāji nolasa to ar vispārīgu nosaukumu, līdz ar to elements kļūst nelietojams ekrāna lasītāju lietotājiem. [Uzziniet, kā padarīt komandu elementus pieejamākus](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elementiem “`button`”, “`link`” un “`menuitem`” ir pieejami nosaukumi"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Ja ARIA dialoglodziņu elementiem nav pieejamu nosaukumu, ekrāna lasītāju lietotāji var nesaprast šo elementu mērķi. [Uzziniet, kā padarīt ARIA dialoglodziņu elementus pieejamākus](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementiem ar atribūtu “`role=\"dialog\"`” vai “`role=\"alertdialog\"`” nav pieejamu nosaukumu"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementiem ar atribūtu “`role=\"dialog\"`” vai “`role=\"alertdialog\"`” ir pieejami nosaukumi"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Atbalsta tehnoloģijas, piemēram, ekrāna lasītāji, darbojas nekonsekventi, kad dokumenta elementam `<body>` ir iestatīts atribūts “`aria-hidden=\"true\"`”. [Uzziniet, kā atribūts “`aria-hidden`” ietekmē dokumenta pamattekstu](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Atribūta `[role]` vērtības ir derīgas"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Ja apkārt marķējuma sadalītam teksta mezglam pievienojat atribūtu “`role=text`”, funkcijā VoiceOver var apstrādāt šo teksta mezglu kā vienu frāzi, taču netiek paziņots par fokusējamiem elementa pēctečiem. [Uzziniet vairāk par atribūtu “`role=text`”](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementiem ar atribūtu “`role=text`” ir fokusējami pēcteči."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementiem ar atribūtu “`role=text`” nav fokusējamu pēcteču"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Ja pārslēgšanas laukam nav pieejama nosaukuma, ekrāna lasītāji nolasa to ar vispārīgu nosaukumu, līdz ar to elements kļūst nelietojams ekrāna lasītāju lietotājiem. [Uzziniet vairāk par pārslēgšanas laukiem](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA identifikatori ir unikāli"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Ja virsrakstā nav satura vai teksts nav pieejams, ekrāna lasītāju lietotāji nevar piekļūt informācijai par lapas struktūru. [Uzziniet vairāk par virsrakstiem](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Virsraksta elementos nav satura"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Visos virsraksta elementos ir saturs"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Veidlapas laukus ar vairākām iezīmēm var nepareizi nolasīt atbalsta tehnoloģijas, piemēram, ekrāna lasītāji, kuri izmanto pirmo, pēdējo vai visas iezīmes. [Uzziniet, kā izmantot veidlapu iezīmes](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Elementam `<html>` ir atribūts `[xml:lang]` ar tādu pašu pamata valodu kā atribūtam `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Ja saitēm ir viens galamērķis, arī saišu aprakstam jābūt vienādam, lai lietotāji varētu saprast katras saites mērķi un izlemt, vai sekot tai. [Uzziniet vairāk par identiskām saitēm](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identiskām saitēm ir atšķirīgi mērķi"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identiskām saitēm ir vienāds mērķis"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informatīvajiem elementiem ir nepieciešams īss, aprakstošs alternatīvais teksts. Dekoratīvajiem elementiem alternatīvo atribūtu var atstāt tukšu. [Uzziniet vairāk par atribūtu “`alt`”](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Attēlu elementiem ir atribūti `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Pievienojot ievades pogām saprotamu un pieejamu tekstu, varat palīdzēt ekrāna lasītāju lietotājiem saprast, kam ievades pogas ir paredzētas. [Uzziniet vairāk par ievades pogām.](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Elementi `<input type=\"image\">` ietver tekstu `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Ja norādīsiet iezīmes, atbalsta tehnoloģijas, piemēram, ekrāna lasītāji, varēs pareizi atskaņot veidlapu vadīklas. [Uzziniet vairāk par veidlapas elementu iezīmēm](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Veidlapu elementiem ir saistītas iezīmes"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Viens galvenais orientieris palīdz ekrāna lasītāja lietotājiem pārvietoties tīmekļa lapā. [Uzziniet vairāk par orientieriem](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokumentā nav galvenā orientiera"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokumentam ir galvenais orientieris"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Daudziem lietotājiem ir grūti vai pat neiespējami izlasīt tekstu ar zemu kontrastu. Atšķirams saišu teksts uzlabo pieredzi vājredzīgiem lietotājiem. [Uzziniet, kā padarīt saites atšķiramas](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Lai atšķirtu saites, jāpaļaujas uz krāsu"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Var atšķirt saites, nepaļaujoties uz krāsu"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Atšķirams, unikāls un fokusējams saites teksts (un alternatīvais teksts attēliem, kas tiek izmantoti kā saites) nodrošina labākas navigācijas iespējas lietotājiem, kuri izmanto ekrāna lasītājus. [Uzziniet, kā padarīt saites pieejamas](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Elementi `<object>` ietver alternatīvo tekstu"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Veidlapu elementi bez efektīvām iezīmēm var radīt neapmierinošu pieredzi ekrāna lasītāju lietotājiem. [Uzziniet vairāk par elementu “`select`”](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Atlasītajiem elementiem nav saistītu iezīmju elementu"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Atlasītajiem elementiem ir saistīti iezīmju elementi"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Ja vērtība ir lielāka par “0”, navigācijas secība ir noteikta. Lai gan tehniski šis risinājums ir derīgs, bieži vien tas mulsina lietotājus, kuri izmanto atbalsta tehnoloģijas. [Uzziniet vairāk par atribūtu “`tabindex`”](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Nevienam elementam nav atribūta `[tabindex]` vērtības, kas augstāka par 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Ekrāna lasītāju funkcijas atvieglo pārvietošanos tabulās. Gādājot, lai tabulās tiktu izmantots elements “caption”, nevis šūnas ar atribūtu `[colspan]`, varat uzlabot lietošanas pieredzi lietotājiem, kuri izmanto ekrāna lasītājus. [Uzziniet vairāk par subtitriem.](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Lai tabulās norādītu uzrakstus, tiek izmantots `<caption>`, nevis šūnas ar atribūtu `[colspan]`"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Skāriena mērķu izmēri un atstarpes nav pietiekamas"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Skāriena mērķiem ir pietiekami izmēri un atstarpes"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Ekrāna lasītāju funkcijas atvieglo pārvietošanos tabulās. Parūpējoties, lai lielā tabulā (tādā, kurā ir vismaz trīs rindas un trīs kolonnas) katram `<td>` elementam būtu saistīta tabulas galvene, varat uzlabot lietošanas pieredzi lietotājiem, kuri izmanto ekrāna lasītājus. [Uzziniet vairāk par tabulu galvenēm.](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Lapā nav <link> taga ar manifesta vietrādi URL"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Netika atrasts atbilstošs pakalpojumu skripts. Iespējams, būs atkārtoti jāielādē lapa vai jāpārliecinās, ka pašreizējās lapas pakalpojumu skripta tvērumā ir iekļauts manifestā norādītais tvērums un sākuma URL."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Nevarēja pārbaudīt pakalpojumu skriptu, jo manifestā nav lauka “start_url”"
   },
@@ -969,7 +1083,7 @@
     "message": "Rekvizīts “prefer_related_applications” tiek atbalstīts tikai pārlūkprogrammas Chrome beta un stabilās versijās operētājsistēmā Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse nevarēja noteikt, vai ir pieejams pakalpojumu skripts. Pamēģiniet izmantot jaunāku pārlūka Chrome versiju."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Manifesta URL shēma ({scheme}) netiek atbalstīta operētājsistēmā Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulative Layout Shift norāda redzamo elementu kustību skatvietā. [Uzziniet vairāk par rādītāju “Cumulative Layout Shift”](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaction to Next Paint nosaka lapas atbildi — laiku, kas lapai nepieciešams, lai redzami reaģētu uz lietotāja ievadi. [Uzziniet vairāk par rādītāju “Interaction to Next Paint”](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Rādītājs “First Contentful Paint” ataino laiku, kad tiek atveidots pirmais teksts vai attēls. [Uzziniet vairāk par rādītāju “First Contentful Paint”](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Rādītājs “Pirmais nozīmīgais satura atveidojums” ataino, kad kļūst redzams lapas galvenais saturs. [Uzziniet vairāk par rādītāju “Pirmais nozīmīgais satura atveidojums”](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaction to Next Paint nosaka lapas atbildi — laiku, kas lapai nepieciešams, lai redzami reaģētu uz lietotāja ievadi. [Uzziniet vairāk par rādītāju “Interaction to Next Paint”](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Rādītājs “Time to Interactive” ir laiks, kas nepieciešams, lai lapa kļūtu pilnībā interaktīva. [Uzziniet vairāk par rādītāju “Time to Interactive”](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Nepieļaujiet vairākas lapas novirzīšanas"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Lai iestatītu lapas resursu daudzuma un lieluma budžetus, pievienojiet failu “budget.json”. [Uzziniet vairāk par izpildes budžetiem](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{Viens pieprasījums • {byteCount, number, bytes} KiB}zero{# pieprasījumu • {byteCount, number, bytes} KiB}one{# pieprasījums • {byteCount, number, bytes} KiB}other{# pieprasījumi • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Uzturiet nelielu pieprasījumu skaitu un mazu pārsūtīšanas failu lielumu"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Kanoniskās saites iesaka, kurus URL rādīt meklēšanas rezultātos. [Uzziniet vairāk par kanoniskajām saitēm](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Sākotnējās servera atbildes laika bija īss"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Pakalpojumu skripts ir tehnoloģija, kas palīdz nodrošināt daudzas progresīvo tīmekļa lietotņu funkcijas, piemēram, lietotnes izmantošanu bezsaistē, pievienošanu sākuma ekrānam un informatīvos paziņojumus. [Uzziniet vairāk par pakalpojumu skriptiem](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Lapu kontrolē pakalpojumu skripts, taču netika atrasts `start_url`, jo neizdevās analizēt manifestu kā derīgu JSON failu"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Lapu kontrolē pakalpojumu skripts, taču vietrādis URL `start_url` ({startUrl}) nav ietverts pakalpojumu skripta tvērumā ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Lapu kontrolē pakalpojumu skripts, taču netika atrasts `start_url`, jo manifests netika ienests."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Šim sākumpunktam ir viens vai vairāki pakalpojumu skripti, taču attiecīgā lapa ({pageUrl}) nav tvērumā."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Nav reģistrēts pakalpojumu skripts, kas kontrolētu lapu un `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Ir reģistrēts pakalpojumu skripts, kas kontrolē lapu un `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Uzplaiksnījuma ekrāns ar piemērotu motīvu nodrošina labu pieredzi, lietotājiem palaižot lietotni no sākuma ekrāna. [Uzziniet vairāk par uzplaiksnījuma ekrāniem](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Paraugprakse"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Šīs atzīmes parāda iespējas [uzlabot jūsu tīmekļa lietotnes pieejamību](https://developer.chrome.com/docs/lighthouse/accessibility/). Automātiski var noteikt tikai pieejamības problēmu apakškopu, tāpēc ir ieteicama arī manuālā testēšana."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Šie vienumi norāda uz vietām, kurām automātiskais testēšanas rīks nevar piekļūt. Uzziniet vairāk mūsu ceļvedī par [pieejamības pārskata veikšanu](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Instalējiet [Drupal moduli](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), ar ko var veikt attēlu atlikto ielādi. Šādi moduļi sniedz iespēju atlikt jebkādu ārpus ekrāna esošu attēlu ielādi, lai uzlabotu veiktspēju."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Ieteicams izmantot moduli, piemēram, moduli [Izvērstā CSS/JS apkopošana](https://www.drupal.org/project/advagg), lai iekļautu būtisku CSS un JavaScript kodu vai potenciāli ielādētu līdzekļus asinhronā veidā, izmantojot JavaScript. Ņemiet vērā, ka šī moduļa nodrošinātā optimizācija var traucēt vietnes darbībai, tādēļ, visticamāk, jums būs jāveic izmaiņas kodā."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Motīvi, moduļi un servera specifikācijas ietekmē servera atbildes laiku. Ieteicams atrast optimizētu motīvu, rūpīgi izvēlēties optimizācijas moduli un/vai jaunināt serveri. Mitināšanas serveros ir jāievieš PHP operācijas koda saglabāšana kešatmiņā, atmiņas saglabāšana kešatmiņā, lai samazinātu datu bāzes vaicājumu apstrādei nepieciešamo laiku, piemēram, Redis vai Memcached, kā arī optimizēta lietojumprogrammas loģika, lai varētu ātrāk sagatavot lapas."
@@ -2778,10 +2862,10 @@
     "message": "Ieteicams izmantot [adaptīvo attēlu stilus](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8), lai samazinātu lapā ielādēto attēlu lielumu. Ja saskarni Views izmantojat, lai lapā rādītu vairākus satura elementus, ieteicams ieviest lapdali, lai ierobežotu attiecīgajā lapā redzamo satura elementu skaitu."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Lapā “Administrācija » Konfigurācija » Izstrāde” jābūt iespējotai funkcijai “Apkopot CSS failus”. Varat arī konfigurēt uzlabotas apkopošanas iespējas [papildu moduļos](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), lai paātrinātu vietnes darbību, savienojot, samazinot un saspiežot CSS stilus."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Lapā “Administrācija » Konfigurācija » Izstrāde” jābūt iespējotai funkcijai “Apkopot JavaScript failus”. Varat arī konfigurēt uzlabotas apkopošanas iespējas [papildu moduļos](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), lai paātrinātu vietnes darbību, savienojot, samazinot un saspiežot JavaScript līdzekļus."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Ieteicams noņemt neizmantotās CSS kārtulas un pievienot tikai vajadzīgās Drupal bibliotēkas atbilstošajām lapām vai komponentiem lapā. Lai iegūtu detalizētu informāciju, skatiet [Drupal dokumentācijas saiti](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Lai identificētu pievienotās bibliotēkas, kas pievieno lieku CSS kodu, mēģiniet izpildīt [koda pārklājumu](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage), izmantojot Chrome DevTools. Attiecīgo motīvu/moduli varat identificēt stilu lapas vietrādī URL, kad Drupal vietnē ir atspējota CSS apkopošana. Meklējiet motīvus/moduļus, kuriem sarakstā ir daudz stilu lapu ar daudz sarkanām atzīmēm koda pārklājumā. Motīvam/modulim ir jāievieto rindā stilu lapu tikai tad, ja tā faktiski tiek izmantota tīmekļa lapā."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Iespējojiet saspiešanu savā Next.js serverī. [Uzziniet vairāk](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Izmantojiet komponentu `nuxt/image` un iestatiet vērtību `format=\"webp\"`. [Uzziniet vairāk](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Varat mērīt komponentu renderēšanas veiktspēju ar spraudni React DevTools Profiler, kurā tiek izmantots Profiler API. [Uzziniet vairāk.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Ievietojiet videoklipus `VideoBoxes` tagos, pielāgojiet tos, izmantojot `Video Masks`, vai pievienojiet `Transparent Videos`. [Uzziniet vairāk](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Augšupielādējiet attēlus, izmantojot rīku `Wix Media Manager`, lai tie automātiski tiktu rādīti formātā WebP. Uzziniet, [kā vēl var optimizēt](https://support.wix.com/en/article/site-performance-optimizing-your-media) vietnes multivides saturu."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Savas vietnes informācijas paneļa cilnē `Custom Code` [pievienojot trešās puses kodu](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site), gādājiet, lai šis kods tiktu ielādēts ar aizkavi vai koda kopas beigās. Lai iegultu vietnē mārketinga rīkus, ja iespējams, izmantojiet [Wix integrācijas](https://support.wix.com/en/article/about-marketing-integrations). "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Platformā Wix, izmantojot satura nodrošināšanas tīklus un saglabāšanu kešatmiņā, vairumam apmeklētāju atbildes tiek nosūtītas pēc iespējas ātrāk. Ieteicams vietnei [manuāli iespējot saglabāšanu kešatmiņā](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed), īpaši tad, ja izmantojat `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Pārskatiet trešās puses kodu, ko esat pievienojis vietnei, izmantojot vietnes informācijas paneļa cilni `Custom Code`, un paturiet tikai vietnei nepieciešamos pakalpojumus. [Uzziniet vairāk](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Ieteicams augšupielādēt GIF failu pakalpojumā, kuru varēs izmantot, lai iegultu GIF failu kā HTML5 videoklipu."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Saglabāt kā JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Atvērt skatītājā"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Vērtības ir aptuvenas un var atšķirties. [Veiktspējas rezultāts tiek aprēķināts](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/), pamatojoties tieši uz šiem metrikas veidiem."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Skatīt sākotnējo trasējumu"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Skatīt trasējumu"
   },
diff --git a/front_end/third_party/lighthouse/locales/nl.json b/front_end/third_party/lighthouse/locales/nl.json
index 34a9bf8..98c8c7e 100644
--- a/front_end/third_party/lighthouse/locales/nl.json
+++ b/front_end/third_party/lighthouse/locales/nl.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]`-kenmerken komen overeen met hun rollen"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Als een element geen toegankelijke naam heeft, kondigen schermlezers dit aan met een generieke naam, waardoor het veld onbruikbaar wordt voor gebruikers die afhankelijk zijn van schermlezers. [Meer informatie over hoe je opdrachtelementen toegankelijker maakt](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`- `link`- en `menuitem`-elementen hebben toegankelijke namen"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA-dialoogvensterelementen zonder toegankelijke namen kunnen voorkomen dat gebruikers van schermlezers het doel van deze elementen kunnen herkennen. [Meer informatie over hoe je ARIA-dialoogelementen toegankelijker maakt](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementen met `role=\"dialog\"` of `role=\"alertdialog\"` hebben geen toegankelijke namen."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementen met `role=\"dialog\"` of `role=\"alertdialog\"` hebben toegankelijke namen."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Ondersteunende technologieën, zoals schermlezers, werken inconsistent als `aria-hidden=\"true\"` is ingesteld in het document `<body>`. [Meer informatie over hoe `aria-hidden` invloed heeft op de hoofdtekst van het document](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]`-waarden zijn geldig"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Als je `role=text` toevoegt rond een tekstnode die is gesplitst door opmaak, kan VoiceOver dit behandelen als één woordgroep, maar worden de focusbare onderliggende elementen van het element niet aangekondigd. [Meer informatie over het kenmerk `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementen met het kenmerk `role=text` hebben focusbare onderliggende elementen."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementen met het kenmerk `role=text` hebben geen focusbare onderliggende elementen."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Als een schakelveld geen toegankelijke naam heeft, kondigen schermlezers dit aan met een generieke naam, waardoor het veld onbruikbaar wordt voor gebruikers die afhankelijk zijn van schermlezers. [Meer informatie over het aan-/uitzetten van velden](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA-ID's zijn uniek"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Een kop zonder content of met ontoegankelijke tekst voorkomt dat gebruikers van een schermlezer toegang kunnen krijgen tot informatie over de paginastructuur. [Meer informatie over koppen](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Heading-elementen bevatten geen content."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Alle heading-elementen bevatten content."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Formuliervelden met meerdere labels kunnen verwarrend worden aangekondigd door ondersteunende technologieën, zoals schermlezers, die het eerste label, het laatste label of alle labels gebruiken. [Meer informatie over hoe je formulierlabels gebruikt](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Het element `<html>` heeft een `[xml:lang]`-kenmerk met dezelfde basistaal als het kenmerk `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Links met dezelfde bestemming moeten dezelfde beschrijving hebben, zodat gebruikers het doel van de link kunnen begrijpen en kunnen beslissen of ze de link willen volgen. [Meer informatie over identieke links](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identieke links hebben niet hetzelfde doel."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identieke links hebben hetzelfde doel."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Voor informatieve elementen moet een korte, beschrijvende alternatieve tekst worden gebruikt. Decoratieve elementen kunnen worden genegeerd met een leeg alt-kenmerk. [Meer informatie over het kenmerk `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Afbeeldingselementen bevatten `[alt]`-kenmerken"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Als je onderscheidende en toegankelijke tekst aan invoerknoppen toevoegt, kunnen gebruikers van een schermlezer beter begrijpen wat het doel van de invoerknop is. [Meer informatie over invoerknoppen](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">`-elementen bevatten `[alt]`-tekst"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Labels zorgen ervoor dat formulieropties juist worden aangekondigd door hulptechnologieën, zoals schermlezers. [Meer informatie over formulierelementlabels](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Formulierelementen hebben bijbehorende labels"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Een hoofdoriëntatiepunt helpt gebruikers van een schermlezer om op een webpagina te navigeren. [Meer informatie over oriëntatiepunten](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Het document heeft geen hoofdoriëntatiepunt."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Het document heeft een hoofdoriëntatiepunt."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Voor veel gebruikers is tekst met weinig contrast moeilijk of onmogelijk te lezen. Met onderscheidbare linktekst wordt de gebruikerservaring voor slechtzienden verbeterd. [Meer informatie over hoe je links makkelijk te onderscheiden kunt maken](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Links zijn afhankelijk van de kleur om ze te kunnen onderscheiden."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Links zijn te onderscheiden zonder afhankelijk te zijn van kleur."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Met linktekst (en alternatieve tekst voor afbeeldingen, indien gebruikt als links) die herkenbaar, uniek en focusbaar is, verbeter je de navigatiefunctionaliteit voor gebruikers van een schermlezer. [Meer informatie over hoe je links toegankelijk maakt](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>`-elementen bevatten alternatieve tekst"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Form-elementen zonder effectieve labels kunnen frustrerende gebruikerservaringen veroorzaken voor gebruikers van schermlezers. [Meer informatie over het element `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Select-elementen hebben geen gekoppelde label-elementen."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Select-elementen hebben gekoppelde label-elementen."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Een waarde groter dan 0 impliceert een expliciete navigatievolgorde. Hoewel dit technisch geldig is, is dit vaak vervelend voor gebruikers die afhankelijk zijn van hulptechnologieën. [Meer informatie over het kenmerk `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Geen element dat een `[tabindex]`-waarde heeft die groter is dan 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Schermlezers hebben functies die navigeren in tabellen makkelijker maken. Als je zorgt dat tabellen het daadwerkelijke bijschriftelement gebruiken in plaats van cellen met het kenmerk `[colspan]`, kun je de functionaliteit verbeteren voor gebruikers van een schermlezer. [Meer informatie over bijschriften](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabellen gebruiken `<caption>` in plaats van cellen met het kenmerk `[colspan]` om een bijschrift aan te geven."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Tikdoelen zijn niet groot genoeg of hebben niet voldoende lege ruimte."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Tikdoelen zijn groot genoeg en hebben voldoende lege ruimte."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Schermlezers hebben functies die navigeren in tabellen makkelijker maken. Als je zorgt dat `<td>`-elementen in een grote tabel (3 of meer cellen in breedte en hoogte) een gekoppelde tabelkop hebben, kun je de functionaliteit verbeteren voor gebruikers van een schermlezer. [Meer informatie over tabelkoppen](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "De pagina heeft geen manifest-URL <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Geen overeenkomende service worker gevonden. Laad de pagina opnieuw of check of het bereik van de service worker voor de huidige pagina het bereik en de start-URL van het manifest omvat."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Kan de service worker niet checken zonder een veld 'start_url' in het manifest"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications wordt alleen ondersteund op bèta- en stabiele kanalen van Chrome op Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse kan niet bepalen of er een service worker is. Probeer het met een nieuwere versie van Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Het URL-schema van het manifest ({scheme}) wordt niet ondersteund op Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulatieve indelingsverschuiving (CLS) meet de beweging van zichtbare elementen binnen de viewport. [Meer informatie over de statistiek Cumulatieve indelingsverschuiving (CLS)](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interactie tot Volgende weergave meet de responsiviteit van de pagina, dat wil zeggen hoelang het duurt voordat de pagina zichtbaar reageert op gebruikersinvoer. [Meer informatie over de statistiek Interactie tot Volgende weergave](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Eerste weergave met content (FCP) geeft de tijd aan waarbinnen de eerste tekst of afbeelding wordt weergegeven. [Meer informatie over de statistiek Eerste weergave met content (LCP)](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Eerste nuttige weergave (FMP) meet wanneer de primaire content van een pagina zichtbaar is. [Meer informatie over de statistiek Eerste nuttige weergave (FMP)](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interactie tot Volgende weergave meet de responsiviteit van de pagina, dat wil zeggen hoelang het duurt voordat de pagina zichtbaar reageert op gebruikersinvoer. [Meer informatie over de statistiek Interactie tot Volgende weergave](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Tijd tot interactief is de hoeveelheid tijd die nodig is voordat een pagina volledig interactief is. [Meer informatie over de statistiek Tijd tot interactief](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Vermijd meerdere pagina-omleidingen"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Voeg een budget.json-bestand toe om budgetten in te stellen voor de hoeveelheid en grootte van paginabronnen. [Meer informatie over prestatiebudgetten](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 verzoek • {byteCount, number, bytes} KiB}other{# verzoeken • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Houd het aantal verzoeken laag en de overdrachtsgrootte klein"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Canonieke links geven een suggestie voor welke URL moet worden getoond in de zoekresultaten. [Meer informatie over canonieke links](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Eerste reactietijd van server was kort"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "De service worker is de technologie waarmee je app veel functies van progressive web-apps kan gebruiken, zoals offline functionaliteit, toevoegen aan het startscherm en pushmeldingen. [Meer informatie over service workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Deze pagina wordt beheerd door een service worker, maar er is geen `start_url` gevonden omdat het manifest niet kan worden geparseerd als geldig json-bestand"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Deze pagina wordt beheerd door een service worker, maar de `start_url` ({startUrl}) valt niet binnen het bereik van de service worker ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Deze pagina wordt beheerd door een service worker, maar er is geen `start_url` gevonden omdat er geen manifest is opgehaald."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Deze herkomst heeft een of meer service workers, maar de pagina ({pageUrl}) valt niet binnen het bereik."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Registreert geen service worker die de pagina en `start_url` beheert"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registreert een service worker die de pagina en `start_url` beheert"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Een startscherm met een thema zorgt voor een gebruikerservaring van hoge kwaliteit als gebruikers je app starten vanaf hun startscherm. [Meer informatie over startschermen](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "Praktische tips"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Deze controles geven mogelijkheden aan om [de toegang tot je web-app te verbeteren](https://developer.chrome.com/docs/lighthouse/accessibility/). Alleen een subset van toegankelijkheidsproblemen kan automatisch worden gedetecteerd. Daarom wordt handmatig testen ook aangeraden."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Deze items gaan over gebieden die niet kunnen worden getest met een automatische testtool. Bekijk meer informatie in onze gids over [het uitvoeren van een toegankelijkheidscontrole](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Installeer [een Drupal-module](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) voor lazy loading van afbeeldingen. Met dergelijke modules kunnen afbeeldingen die niet in beeld zijn, worden uitgesteld om de prestaties te verbeteren."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Overweeg een module te gebruiken om kritieke css en JavaScript inline te plaatsen of items potentieel asynchroon te laden via JavaScript, zoals de module [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Bedenk wel dat de optimalisatie die deze module biedt, de werking van je site kan verstoren. Het is daarom goed mogelijk dat je de code moet wijzigen."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Thema's, modules en serverspecificaties zijn allemaal van invloed op de reactietijd van de server. Overweeg een thema te gebruiken dat beter is geoptimaliseerd, kies met zorg een optimalisatiemodule en/of upgrade je server. Je hostingservers moeten gebruikmaken van PHP-opcode-caching, geheugencaching (zoals Redis of Memcached) om de databasequerytijden te beperken en geoptimaliseerde app-logica om pagina's sneller voor te bereiden."
@@ -2778,10 +2862,10 @@
     "message": "Overweeg [responsieve afbeeldingsstijlen](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) te gebruiken om de grootte van geladen afbeeldingen op je pagina te verkleinen. Als je Views gebruikt om meerdere contentitems op een pagina te tonen, kun je overwegen paginering te gebruiken om het aantal zichtbare contentitems op een pagina te beperken."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Zorg ervoor dat je Aggregate CSS files (Css-bestanden aggregeren) hebt aangezet op de pagina Administration » Configuration » Development (Beheer > Configuratie > Ontwikkeling). Je kunt ook meer geavanceerde verzamelingsopties instellen via [extra modules](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) om je site te versnellen door je css-stijlen in te korten, te verkleinen en te comprimeren."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Zorg ervoor dat je Aggregate JavaScript files (JavaScript-bestanden aggregeren) hebt aangezet op de pagina Administration » Configuration » Development (Beheer > Configuratie > Ontwikkeling). Je kunt ook meer geavanceerde verzamelingsopties instellen via [extra modules](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) om je site te versnellen door je JavaScript-items in te korten, te verkleinen en te comprimeren."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Overweeg ongebruikte css-regels te verwijderen en alleen de benodigde Drupal-bibliotheken bij te voegen bij de relevante pagina of component op een pagina. Klik op de [link naar de Drupal-documentatie](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) voor meer informatie. Voer [codedekking](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) uit in Chrome DevTools als je bijgevoegde bibliotheken wilt identificeren die extra css toevoegen. Je kunt identificeren welk thema/welke module verantwoordelijk is voor de URL van de stylesheet als css-verzameling is uitgezet op je Drupal-site. Ga in de lijst op zoek naar thema's/modules met veel stylesheets en veel rood in de codedekking. Een thema/module zou een stylesheet alleen in de wachtrij moeten plaatsen als de stylesheet daadwerkelijk wordt gebruikt op de pagina."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Zet de compressie op je Next.js-server aan. [Meer informatie](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Gebruik de component `nuxt/image` en stel `format=\"webp\"` in. [Meer informatie](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Gebruik de React DevTools Profiler, die gebruikmaakt van de Profiler API, om de weergaveprestaties van je componenten te meten. [Meer informatie.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Plaats video's binnen `VideoBoxes`, pas ze aan met `Video Masks` of voeg `Transparent Videos` toe. [Meer informatie](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Upload afbeeldingen met `Wix Media Manager` om ervoor te zorgen dat ze automatisch worden weergegeven als WebP. Ontdek [meer manieren om de media van je site te optimaliseren](https://support.wix.com/en/article/site-performance-optimizing-your-media)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Als je [code van derden toevoegt](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) op het tabblad `Custom Code` van het dashboard van je site, zorg je ervoor dat deze wordt uitgesteld of aan het einde van de codetekst wordt geladen. Gebruik waar mogelijk de [integraties](https://support.wix.com/en/article/about-marketing-integrations) van Wix om marketingtools in te sluiten op je site. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix gebruikt CDN's en cacheopslag om reacties voor de meeste bezoekers zo snel mogelijk weer te geven. Je kunt overwegen [handmatig cachen aan te zetten](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) voor je site, vooral als je `Velo` gebruikt."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Check op het tabblad `Custom Code` van je sitedashboard alle code van derden die je aan je site hebt toegevoegd en behoud alleen de services die nodig zijn voor je site. [Meer informatie](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Overweeg je gif te uploaden naar een service waarmee het mogelijk is de gif in te sluiten als html5-video."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Opslaan als json"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Openen in viewer"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Waarden worden geschat en kunnen variëren. De [prestatiescore wordt rechtstreeks berekend](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) op basis van deze statistieken."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Oorspronkelijke tracering bekijken"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Tracering bekijken"
   },
diff --git a/front_end/third_party/lighthouse/locales/no.json b/front_end/third_party/lighthouse/locales/no.json
index 96415d3..78feeda 100644
--- a/front_end/third_party/lighthouse/locales/no.json
+++ b/front_end/third_party/lighthouse/locales/no.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]`-attributtene samsvarer med rollene sine"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Når elementer ikke har tilgjengelige navn, beskriver skjermlesere dem med generiske navn. Dermed er de ubrukelige for brukere som er avhengige av skjermlesere. [Finn ut hvordan du gjør kommandoelementer mer tilgjengelige](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`-, `link`- og `menuitem`-elementer har tilgjengelige navn"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Når ARIA-dialogelementer ikke har tilgjengelige navn, kan det forhindre brukere av skjermlesere fra å forstå formålet med disse elementene. [Finn ut hvordan du gjør ARIA-dialogelementer mer tilgjengelige](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementer med `role=\"dialog\"` eller `role=\"alertdialog\"` har ikke tilgjengelige navn."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementer med `role=\"dialog\"` eller `role=\"alertdialog\"` har tilgjengelige navn."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Assisterende teknologi, for eksempel skjermlesere, fungerer ikke konsekvent når `aria-hidden=\"true\"` er angitt på dokumentets `<body>`-element. [Finn ut hvordan `aria-hidden` påvirker dokumentets «body»-element](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]`-verdiene er gyldige"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Hvis du legger til `role=text` rundt en tekstnode som er oppdelt via oppmerking, kan VoiceOver behandle elementet som én frase, men elementets fokuserbare underelementer blir ikke kunngjort. [Finn ut mer om `role=text`-attributtet](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementer med `role=text`-attributtet har fokuserbare underelementer."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementer med `role=text`-attributtet har ikke fokuserbare underelementer."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Når av/på-felt ikke har tilgjengelige navn, beskriver skjermlesere dem med generiske navn. Dermed er de ubrukelige for brukere som er avhengige av skjermlesere. [Finn ut mer om av/på-felt](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA-ID-er er unike"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Overskrifter uten innhold eller med utilgjengelig tekst forhindrer brukere av skjermlesere fra å få tilgang til informasjon om sidens struktur. [Finn ut mer om overskrifter](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Overskriftselementer har ikke innhold."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Alle overskriftselementer har innhold."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Skjemafelt med flere etiketter kan bli lest opp på en forvirrende måte av assisterende teknologi, for eksempel skjermlesere som bruker enten den første etiketten, den siste etiketten eller alle etikettene. [Finn ut hvordan du bruker skjemaetiketter](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>`-elementet har et `[xml:lang]`-attributt med samme grunnspråk som `[lang]`-attributtet."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Linker med samme destinasjon skal ha samme beskrivelse, slik at brukerne forstår formålet med linkene og kan avgjøre om de vil følge dem. [Finn ut mer om identiske linker](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identiske linker har ikke samme formål."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identiske linker har samme formål."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informative elementer bør ta sikte på korte og beskrivende alternative tekster. Dekorative elementer kan ignoreres med tomme alt-attributter. [Finn ut mer om `alt`-attributtet](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Bildeelementene har `[alt]`-attributter"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Når du legger til leselig og tilgjengelig tekst på inndataknapper, blir det enklere for brukere av skjermlesere å forstå formålet med inndataknappen. [Finn ut mer om inndataknapper](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">`-elementer har `[alt]`-tekst"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Etiketter sørger for at skjemakontroller leses opp på riktig måte av assisterende teknologi, som skjermlesere. [Finn ut mer om etiketter for skjemaelementer](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Skjemaelementene har tilknyttede etiketter"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Å ha ett primært landemerke gjør det lettere for brukere av skjermlesere å navigere på nettsider. [Finn ut mer om landemerker](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokumentet har ikke noe primært landemerke."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokumentet har et primært landemerke."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Tekst med lav kontrast er vanskelig eller umulig å lese for mange brukere. Linktekst som kan skjelnes, gjør opplevelsen bedre for brukere med nedsatt synsevne. [Finn ut hvordan du gjør det mulig å skjelne linker](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Man er avhengig av farger for å kunne skjelne linker."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Linker kan skjelnes uten at man er avhengig av farger."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Når du bruker linktekst (og alternativ tekst for bilder som brukes som linker) som er tydelig, unik og fokuserbar, blir navigeringsopplevelsen bedre for brukere av skjermlesere. [Finn ut hvordan du gjør linker tilgjengelige](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>`-elementer har alternativ tekst"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Skjemaelementer uten effektive etiketter kan skape frustrerende opplevelser for brukere av skjermlesere. [Finn ut mer om `select`-elementet](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "«select»-elementer har ikke tilknyttede «label»-elementer."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "«select»-elementer har tilknyttede «label»-elementer."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Større verdier enn 0 antyder en eksplisitt navigeringsrekkefølge. Selv om dette teknisk sett er gyldig, kan det ofte være frustrerende for brukere som er avhengige av assisterende teknologi. [Finn ut mer om `tabindex`-attributtet](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Ingen elementer har en `[tabindex]`-verdi som er større enn 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Skjermlesere har funksjonalitet som gjør det enklere å navigere i tabeller. Når du sørger for at tabeller bruker det faktiske «caption»-elementet i stedet for celler med `[colspan]`-attributtet, kan du gjøre opplevelsen bedre for brukere av skjermlesere. [Finn ut mer om «caption»-elementer](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabeller bruker `<caption>` i stedet for celler med `[colspan]`-attributtet for å indikere etiketter."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Berøringselementer har ikke tilstrekkelig størrelse eller avstand."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Berøringselementer har tilstrekkelig størrelse og avstand."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Skjermlesere har funksjonalitet som gjør det enklere å navigere i tabeller. Ved å sørge for at `<td>`-elementer i store tabeller (tre eller flere celler i bredde og høyde) har tilhørende tabelloverskrifter, kan du gjøre opplevelsen bedre for brukere av skjermlesere. [Finn ut mer om tabelloverskrifter](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Siden har ingen manifest-<link>-nettadresse"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Fant ingen samsvarende Service Worker. Du må kanskje laste inn siden på nytt eller sjekke at Service Worker for den gjeldende siden har et omfang som omslutter omfanget («scope») og start-nettadressen («start_url») fra manifestet."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Kunne ikke sjekke Service Worker uten et «start_url»-felt i manifestet"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications støttes kun i Chrome Beta- og Stable-kanalene på Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse kunne ikke fastslå om det fantes noen Service Worker. Prøv med en nyere versjon av Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Protokollen for manifestets nettadresse ({scheme}) støttes ikke i Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Akkumulert utseendeforskyvning (CLS) måler bevegelsene til synlige elementer i det synlige området. [Finn ut mer om beregningen Akkumulert utseendeforskyvning (CLS)](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Tid fra interaksjon til neste opptegning måler hvor responsiv siden er, altså hvor lang tid siden bruker på å gi en synlig respons på inndata fra brukerne. [Finn ut mer om beregningen Tid fra interaksjon til neste opptegning](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Den første innholdsrike opptegningen (FCP) markerer den første gangen tekst eller bilder tegnes opp. [Finn ut mer om beregningen Første innholdsrike opptegning (FCP)](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Første vesentlige opptegning (FMP) måler når hovedinnholdet på en side er synlig. [Finn ut mer om beregningen Første vesentlige opptegning (FMP)](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Tid fra interaksjon til neste opptegning måler hvor responsiv siden er, altså hvor lang tid siden bruker på å gi en synlig respons på inndata fra brukerne. [Finn ut mer om beregningen Tid fra interaksjon til neste opptegning](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Tid til interaktiv vil si hvor lang tid det tar før siden blir helt interaktiv. [Finn ut mer om beregningen Tid til interaktiv](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Unngå flere viderekoblinger av siden"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "For å angi begrensninger for antall sideressurser og størrelsen på disse, legg til en budget.json-fil. [Finn ut mer om ytelsesbegrensninger](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 forespørsel • {byteCount, number, bytes} KiB}other{# forespørsler • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Minimer antall forespørsler og størrelsen på overføringer"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Kanoniske linker foreslår hvilken nettadresse som skal vises i søkeresultater. [Finn ut mer om kanoniske linker](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Den innledende tjenerresponstiden var kort"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service Worker er teknologien som gjør at appen din kan bruke mange funksjoner for progressive nettprogrammer, f.eks. muligheten til å bruke appen uten nett, legge den til på startskjermen og sende pushvarslinger. [Finn ut mer om Service Worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Denne siden styres av en tjenestearbeider, men ingen `start_url` ble funnet fordi manifestet ikke kunne parses som gyldig JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Denne siden styres av en tjenestearbeider, men `start_url` ({startUrl}) ligger utenfor tjenestearbeiderens omfang ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Denne siden styres av en tjenestearbeider, men ingen `start_url` ble funnet fordi manifestet ikke ble hentet."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Denne plasseringen har én eller flere tjenestearbeidere, men siden ({pageUrl}) ligger utenfor omfanget."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Registrerer ikke en tjenestearbeider som styrer siden og `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registrerer en tjenestearbeider som styrer siden og `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Tematiske splash-skjermer gjør at brukerne får en kvalitetsopplevelse når de starter appen fra startskjermen. [Finn ut mer om splash-skjermer](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Anbefalte fremgangsmåter"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Disse kontrollene fremhever muligheter til [å gjøre nettappen din mer tilgjengelig](https://developer.chrome.com/docs/lighthouse/accessibility/). Kun et utvalg av tilgjengelighetsproblemer kan oppdages automatisk, så du bør teste manuelt i tillegg."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Disse punktene tar for seg områder som ikke kan dekkes av automatiske testverktøy. Finn ut mer i veiledningen vår om [å utføre tilgjengelighetsgjennomganger](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Installer [en Drupal-modul](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) som kan utsette innlastingen av bilder. Slike moduler gir mulighet til å utsette innlasting av bilder som ikke er på skjermen, slik at ytelsen økes."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Vurder å bruke en modul for å bygge inn kritisk CSS- og JavaScript-kode eller potensielt laste inn ressurser asynkront via JavaScript, som for eksempel modulen [avansert CSS-/JS-aggregering](https://www.drupal.org/project/advagg). Vær obs på at optimalisering som gjøres av denne modulen, kan gjøre at nettstedet ditt slutter å fungere, så du må sannsynligvis gjøre kodeendringer."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Både temaer, moduler og tjenerspesifikasjoner virker inn på tjenerens responstid. Vurder å finne et mer optimalisert tema, velge en optimaliseringsmodul nøye og/eller oppgradere tjeneren. Vertstjenerne dine bør benytte seg av bufring av PHP-operasjonskoder, minnebufring som Redis eller Memcached for å redusere tiden databasespørringer tar, samt optimalisert applikasjonslogikk for å klargjøre sider raskere."
@@ -2778,10 +2862,10 @@
     "message": "Vurder å bruke [responsive bildestiler](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) for å redusere størrelsen på bilder som lastes inn på siden. Hvis du bruker Views til å vise flere innholdselementer på siden, bør du vurdere å implementere sideinndeling for å begrense antallet innholdselementer som vises på en gitt side."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Forsikre deg om at du har slått på «Aggreger CSS-filer» på siden «Administrasjon > Konfigurasjon > Utvikling». Du kan også konfigurere mer avanserte aggregeringsalternativer gjennom [tilleggsmoduler](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) for å gjøre nettstedet ditt raskere ved å spleise, minifisere og komprimere CSS-stilene dine."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Forsikre deg om at du har slått på «Aggreger JavaScript-filer» på siden «Administrasjon > Konfigurasjon > Utvikling». Du kan også konfigurere mer avanserte aggregeringsalternativer gjennom [tilleggsmoduler](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) for å gjøre nettstedet ditt raskere ved å spleise, minifisere og komprimere JavaScript-ressursene dine."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Vurder å fjerne ubrukte CSS-regler og kun legge ved de nødvendige Drupal-bibliotekene på den relevante siden eller komponenten på siden. Se [linken til Drupal-dokumentasjonen](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) for mer informasjon. For å identifisere vedlagte bibliotek som legger til overflødig CSS, prøv å kjøre [kodedekning](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) i Chrome DevTools. Du kan finne temaet eller modulen som er ansvarlig, i nettadressen til stilarket når CSS-aggregering er avslått på Drupal-nettstedet ditt. Se opp for temaer og moduler som har mange stilark på listen, og som viser mye rødt i kodedekningen. Temaer og moduler bør bare legge stilark i kø hvis disse faktisk brukes på siden."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Slå på komprimering på Next.js-tjeneren din. [Finn ut mer](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Bruk `nuxt/image`-komponenten og angi `format=\"webp\"`. [Finn ut mer](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Bruk React DevTools Profiler, som benytter Profiler-API-et, til å måle gjengivelsesytelsen for komponentene. [Finn ut mer.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Plasser videoer i `VideoBoxes`, tilpass dem med `Video Masks`, eller legg til `Transparent Videos`. [Finn ut mer](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Last opp bilder med `Wix Media Manager` for å sikre at de automatisk vises som WebP. Finn [flere måter å optimalisere](https://support.wix.com/en/article/site-performance-optimizing-your-media) mediene på nettstedet ditt på."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Når du [legger til tredjepartskode](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) på `Custom Code`-fanen i oversikten for nettstedet ditt, må du sørge for at den er utsatt eller lastes inn til slutt i kodeteksten. Der det er mulig, bør du bruke [integrasjonene](https://support.wix.com/en/article/about-marketing-integrations) til Wix for å bygge inn markedsføringsverktøy på nettstedet ditt. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix bruker ILN-er og bufring for at de fleste besøkende skal få best mulig responstid. Vurder å [slå på bufring manuelt](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) for nettstedet ditt, spesielt hvis du bruker `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Gå gjennom eventuell tredjepartskode du har lagt til på nettstedet ditt, på `Custom Code`-fanen i oversikten for nettstedet ditt, og behold bare de tjenestene som er nødvendige for nettstedet. [Finn ut mer](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Vurder å laste opp GIF-filen til en tjeneste som gjør det mulig å bygge den inn som en HTML5-video."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Lagre som JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Åpne i Viewer"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Verdiene er anslått og kan variere. [Beregningen av ytelsespoengsummen](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) er basert direkte på disse verdiene."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Vis opprinnelig sporing"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Vis sporing"
   },
diff --git a/front_end/third_party/lighthouse/locales/pl.json b/front_end/third_party/lighthouse/locales/pl.json
index 10e51d8..d4b1cf6 100644
--- a/front_end/third_party/lighthouse/locales/pl.json
+++ b/front_end/third_party/lighthouse/locales/pl.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atrybuty `[aria-*]` odpowiadają swoim rolom"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Gdy element nie ma nazwy na potrzeby ułatwień dostępu, czytniki ekranu określają go nazwą ogólną, przez co jest on bezużyteczny dla ich użytkowników. [Jak ułatwić dostęp do elementów poleceń](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elementy `button`, `link` i `menuitem` mają nazwy na potrzeby ułatwień dostępu"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Elementy okien ARIA, które nie zawierają nazw na potrzeby ułatwień dostępu, mogą uniemożliwiać użytkownikom czytników ekranu rozpoznanie zastosowania tych elementów. [Więcej informacji o ułatwieniach dostępu w elementach okien ARIA](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementy z atrybutami `role=\"dialog\"` lub `role=\"alertdialog\"` nie mają nazw na potrzeby ułatwień dostępu."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementy z atrybutami `role=\"dialog\"` lub `role=\"alertdialog\"` mają nazwy na potrzeby ułatwień dostępu."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Technologie wspomagające, takie jak czytniki ekranu, mogą działać nieprawidłowo, gdy dokument `<body>` ma ustawiony atrybut `aria-hidden=\"true\"`. [Jak atrybut `aria-hidden` wpływa na treść dokumentu](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Wartości `[role]` są prawidłowe"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Dodanie atrybutu `role=text` wokół węzła tekstowego ujętego w znaczniki umożliwi funkcji VoiceOver rozpoznanie go jako 1 wyrażenia. Możliwe do zaznaczenia elementy podrzędne nie będą jednak odczytywane. [Więcej informacji o atrybucie `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementy z atrybutem `role=text` mają możliwe do zaznaczenia elementy podrzędne."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementy z atrybutem `role=text` nie mają możliwych do zaznaczenia elementów podrzędnych."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Gdy pole przełączania nie ma nazwy na potrzeby ułatwień dostępu, czytniki ekranu określają je nazwą ogólną, przez co jest ono bezużyteczne dla ich użytkowników. [Więcej informacji o polach przełączania](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Identyfikatory ARIA są unikalne"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Nagłówki bez treści lub z tekstem bez ułatwień dostępu uniemożliwiają użytkownikom czytników ekranu poznanie struktury strony. [Więcej informacji o nagłówkach](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Elementy nagłówka nie zawierają treści."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Wszystkie elementy nagłówków zawierają treść."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Technologie wspomagające, takie jak czytniki ekranu, które używają pierwszych, ostatnich lub wszystkich etykiet, mogą błędnie interpretować pola formularzy z wieloma etykietami. [Jak korzystać z etykiet formularzy](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Element `<html>` ma atrybut `[xml:lang]` z tym samym językiem podstawowym co atrybut `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Linki z tym samym miejscem docelowym powinny mieć ten sam opis, aby użytkownicy mogli łatwiej zrozumieć jego zastosowanie i zdecydować, czy chcą go kliknąć. [Więcej informacji o identycznych linkach](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identyczne linki nie mają tego samego zastosowania."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identyczne linki mają to samo zastosowanie."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Elementy informacyjne powinny mieć krótki, opisowy tekst zastępczy. Elementy dekoracyjne można zignorować, podając pusty atrybut alt. [Więcej informacji o atrybucie `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Elementy graficzne mają atrybuty `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Dobrze widoczny i wyraźny tekst dodany do przycisków wprowadzania danych może ułatwić użytkownikom czytnika ekranu zrozumienie funkcji danego przycisku. [Więcej informacji o przyciskach wprowadzania danych](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Elementy `<input type=\"image\">` mają tekst `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Etykiety zapewniają prawidłowe odczytywanie kontrolek formularzy przez technologie wspomagające takie jak czytniki ekranu. [Więcej informacji o etykietach elementów formularzy](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Z elementami formularzy są powiązane etykiety"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Główny punkt orientacyjny ułatwia użytkownikom czytników ekranu poruszanie się po stronie internetowej. [Więcej informacji o punktach orientacyjnych](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokument nie ma głównego punktu orientacyjnego."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokument ma główny punkt orientacyjny."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Wielu użytkowników ma problemy z czytaniem tekstu o niskim kontraście. Łatwy do odróżnienia tekst linku ma duże znaczenie dla osób niedowidzących. [Więcej informacji o wyróżnianiu linków](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Linki można odróżnić głównie na podstawie koloru."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Linki można odróżnić bez użycia koloru."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Tekst linków (i tekst zastępczy obrazów używanych jako linki), który jest charakterystyczny, unikalny i możliwy do wybrania, ułatwia nawigację użytkownikom czytników ekranu. [Jak ułatwić dostęp do linków](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Elementy `<object>` mają tekst zastępczy"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Elementy formularzy bez odpowiednich etykiet mogą utrudniać korzystanie z witryny użytkownikom czytników ekranu. [Więcej informacji o elemencie `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Elementy do wybrania nie mają powiązanych z nimi elementów etykiet."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Elementy do wybrania mają powiązane z nimi elementy etykiet."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Wartość większa niż 0 implikuje określoną wprost kolejność nawigacji. Chociaż takie rozwiązanie jest technicznie poprawne, często powoduje frustrację użytkowników technologii wspomagających. [Więcej informacji o atrybucie `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Żaden element nie ma wartości atrybutu `[tabindex]` większej niż 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Czytniki ekranu mają funkcje, które ułatwiają nawigację w tabelach. Aby poprawić wrażenia użytkowników czytnika ekranu, w tabelach używaj rzeczywistego elementu podpisu zamiast komórek z atrybutem `[colspan]`. [Więcej informacji o podpisach](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Do wskazywania podpisu tabele używają elementu `<caption>` zamiast komórek z atrybutem `[colspan]`."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Docelowe elementy dotykowe nie mają odpowiedniej wielkości lub właściwych odstępów."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Docelowe elementy dotykowe mają odpowiednią wielkość i właściwe odstępy."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Czytniki ekranu mają funkcje, które ułatwiają nawigację w tabelach. Aby poprawić wrażenia użytkowników czytnika ekranu, zadbaj o to, żeby elementy `<td>` w dużej tabeli (wysokiej i szerokiej na co najmniej 3 komórki) miały powiązany nagłówek tabeli. [Więcej informacji o nagłówkach tabel](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Strona nie ma adresu URL pliku manifestu <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nie wykryto pasującego skryptu service worker. Konieczne może być ponowne załadowanie strony albo sprawdzenie, czy skrypt service worker dla bieżącej strony obejmuje zakres i URL początkowy z pliku manifestu."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Nie można sprawdzić skryptu service worker bez pola „start_url” w pliku manifestu"
   },
@@ -969,7 +1083,7 @@
     "message": "Atrybut prefer_related_applications jest obsługiwany tylko w wersjach beta i stabilnej Chrome na Androida."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Narzędzie Lighthouse nie mogło określić, czy był dostępny skrypt service worker. Spróbuj użyć nowszej wersji Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Schemat adresu URL pliku manifestu ({scheme}) nie jest obsługiwany na urządzeniach z Androidem."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Zbiorcze przesunięcie układu to miara ruchu elementów w widocznym obszarze. [Więcej informacji o danych dotyczących zbiorczego przesunięcia układu](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Czas od interakcji do kolejnego wyrenderowania określa responsywność strony, czyli czas potrzebny do widocznej reakcji na dane wprowadzone przez użytkownika. [Więcej informacji o czasie od interakcji do kolejnego wyrenderowania](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Pierwsze wyrenderowanie treści oznacza czas wyrenderowania pierwszego tekstu lub obrazu. [Więcej informacji o danych pierwszego wyrenderowania treści](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Pierwsze wyrenderowanie elementu znaczącego oznacza czas pojawienia się na ekranie głównej zawartości strony. [Więcej informacji o pierwszym wyrenderowaniu elementu znaczącego](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Czas od interakcji do kolejnego wyrenderowania określa responsywność strony, czyli czas potrzebny do widocznej reakcji na dane wprowadzone przez użytkownika. [Więcej informacji o czasie od interakcji do kolejnego wyrenderowania](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Czas do pełnej interaktywności to czas, po którym strona staje się w pełni interaktywna. [Więcej informacji o danych dotyczących czasu do pełnej interaktywności](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Unikaj wielokrotnych przekierowań"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Aby określić budżety dla liczby i rozmiaru zasobów strony, dodaj plik budget.json. [Więcej informacji o budżetach wydajności](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 żądanie • {byteCount, number, bytes} KiB}few{# żądania • {byteCount, number, bytes} KiB}many{# żądań • {byteCount, number, bytes} KiB}other{# żądania • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Liczba żądań i ilość przesyłanych danych powinny być małe"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Linki kanoniczne sugerują URL, który ma być pokazywany w wynikach wyszukiwania. [Więcej informacji o linkach kanonicznych](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Wstępny czas reakcji serwera był krótki"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Skrypt service worker pozwala aplikacji na korzystanie z wielu funkcji progresywnych aplikacji internetowych – takich jak działanie offline, dodawanie do ekranu głównego czy powiadomienia push. [Więcej informacji o skryptach service worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Stroną steruje skrypt service worker, ale nie znaleziono elementu `start_url`, ponieważ nie udało się przetworzyć pliku manifestu jako prawidłowego pliku JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Tą stroną steruje skrypt service worker, ale element `start_url` ({startUrl}) nie znajduje się w jego zakresie ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Tą stroną steruje skrypt service worker, ale nie znaleziono elementu `start_url`, ponieważ nie został pobrany żaden plik manifestu."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Ta witryna zawiera co najmniej jeden skrypt service worker, ale strona ({pageUrl}) nie jest w zakresie."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Nie rejestruje skryptu service worker, który steruje stroną i elementem `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Rejestruje skrypt service worker, który steruje stroną i elementem `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Ekran powitalny z niestandardowym motywem zapewnia użytkownikom lepsze wrażenia podczas otwierania aplikacji z ekranu głównego. [Więcej informacji o ekranach powitalnych](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "Sprawdzone metody"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Te testy wskazują możliwości [poprawy ułatwień dostępu Twojej aplikacji internetowej](https://developer.chrome.com/docs/lighthouse/accessibility/). Ponieważ wykryć automatycznie można tylko część problemów z ułatwieniami dostępu, wskazane jest przeprowadzenie też testów ręcznych."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Te pozycje dotyczą obszarów, których narzędzie do testów automatycznych nie może zbadać. Więcej informacji w naszym przewodniku po [prowadzeniu przeglądu ułatwień dostępu](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Zainstaluj [moduł Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), który umożliwia leniwe ładowanie obrazów. Takie moduły umożliwiają odłożenie ładowania obrazów niewyświetlanych na ekranie w celu poprawy wydajności."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Sugerujemy używanie modułu wbudowującego w stronę krytyczny kod CSS i JavaScript albo asynchroniczne ładowanie zasobów za pomocą JavaScriptu (np. przy użyciu modułu [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg)). Pamiętaj, że optymalizacje dostarczane przez ten moduł mogą zakłócić działanie witryny i konieczne może być wprowadzenie zmian w kodzie."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Motywy, moduły i specyfikacje serwera są nie bez znaczenia dla jego czasu reakcji. Być może warto znaleźć lepiej zoptymalizowany motyw, starannie wybrać moduł optymalizujący lub przejść na nowszą wersję serwera. Na serwerach hostujących należy używać pamięci podręcznej kodu operacji PHP oraz buforowania w pamięci operacyjnej (np. Redis lub Memcached), by skrócić czas zapytań do bazy danych, a także zoptymalizować logikę aplikacji, by szybciej przygotowywać strony."
@@ -2778,10 +2862,10 @@
     "message": "Sugerujemy używanie [stylów obrazów elastycznych](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) w celu zmniejszenia wielkości plików graficznych wczytywanych na stronie. Jeśli używasz Views do wyświetlania wielu elementów treści na stronie, rozważ zastosowanie podziału na strony, aby ograniczyć liczbę elementów wyświetlanych na jednej stronie."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Musisz mieć włączoną opcję „Aggregate CSS files” (Agreguj pliki CSS) na stronie „Administration » Configuration » Development” (Administracja » Konfiguracja » Programowanie). Istnieją też [dodatkowe moduły](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), za pomocą których możesz skonfigurować bardziej zaawansowane opcje agregacji, aby przyspieszyć działanie strony dzięki konkatenacji, minifikacji i kompresji stylów CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Musisz mieć włączoną opcję „Aggregate JavaScript files” (Agreguj pliki JavaScript) na stronie „Administration » Configuration » Development” (Administracja » Konfiguracja » Programowanie). Istnieją też [dodatkowe moduły](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), za pomocą których możesz skonfigurować bardziej zaawansowane opcje agregacji, aby przyspieszyć działanie strony dzięki konkatenacji, minifikacji i kompresji plików JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Sugerujemy usunięcie nieużywanych reguł CSS i dołączenie bibliotek Drupala tylko do tych stron lub komponentów na stronach, które ich potrzebują. Szczegółowe informacje znajdziesz w [dokumentacji Drupala](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Aby zidentyfikować dołączone biblioteki, które dodają nieistotny kod CSS, uruchom [zasięg kodu](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) w Chrome DevTools. Motyw/moduł, który dołącza te biblioteki, możesz zidentyfikować na podstawie adresu URL arkusza stylów, gdy witryna Drupala ma wyłączoną agregację kodu CSS. Szukaj motywów/modułów, które mają na liście wiele arkuszy stylów z dużą ilością czerwonego koloru w zasięgu kodu. Motyw/moduł powinien umieszczać arkusz stylów w kolejce tylko wtedy, gdy rzeczywiście jest on używany na stronie."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Włącz na swoim serwerze Next.js kompresję. [Więcej informacji](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Użyj komponentu `nuxt/image` i ustaw `format=\"webp\"`. [Więcej informacji](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Do pomiaru wydajności renderowania komponentów używaj programu profilującego z narzędzi dla programistów React, który wykorzystuje interfejs Profiler API. [Więcej informacji](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Umieść filmy w elemencie `VideoBoxes`, dostosuj je za pomocą elementu `Video Masks` lub dodaj `Transparent Videos`. [Więcej informacji](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Prześlij obrazy, używając usługi `Wix Media Manager`, aby mieć pewność, że będą one automatycznie wyświetlane w formacie WebP. Poznaj [inne sposoby optymalizacji](https://support.wix.com/en/article/site-performance-optimizing-your-media) multimediów w witrynie."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "[Dodając kod spoza witryny](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) na karcie `Custom Code` w panelu witryny, upewnij się, że jest on odroczony lub ładowany na końcu. Gdy tylko jest to możliwe, umieszczaj narzędzia marketingowe w witrynie, korzystając z [integracji](https://support.wix.com/en/article/about-marketing-integrations) Wix. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix korzysta z sieci CDN i buforowania, aby jak najszybciej wyświetlać odpowiedzi większości użytkownikom. Zastanów się nad [ręcznym włączeniem buforowania](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) w witrynie – zwłaszcza jeśli używasz `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Sprawdź kod spoza witryny dodany na karcie `Custom Code` w panelu witryny i zachowaj tylko te usługi, które są niezbędne. [Więcej informacji](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Możesz przesłać plik GIF do usługi, która umożliwi umieszczanie go jako pliku wideo HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Zapisz jako JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Otwórz w przeglądarce"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Wartości są szacunkowe i mogą się zmieniać. [Wynik wydajności jest obliczony](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) bezpośrednio na podstawie tych danych."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Wyświetl oryginalne dane śledzenia"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Wyświetl ślad"
   },
diff --git a/front_end/third_party/lighthouse/locales/pt-PT.json b/front_end/third_party/lighthouse/locales/pt-PT.json
index 7713f7c..b52744a 100644
--- a/front_end/third_party/lighthouse/locales/pt-PT.json
+++ b/front_end/third_party/lighthouse/locales/pt-PT.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Os atributos `[aria-*]` correspondem às respetivas funções"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Quando um elemento não tem um nome acessível, os leitores de ecrã anunciam-no com um nome genérico, tornando-o inutilizável para os utilizadores que dependem de leitores de ecrã. [Saiba como tornar os elementos de comandos mais acessíveis](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Os elementos `button`, `link` e `menuitem` têm nomes acessíveis"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Os elementos da caixa de diálogo ARIA sem nomes acessíveis podem impedir os utilizadores de leitores de ecrã de perceberem a finalidade destes elementos. [Saiba como tornar os elementos da caixa de diálogo ARIA mais acessíveis](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Os elementos com `role=\"dialog\"` ou `role=\"alertdialog\"` não têm nomes acessíveis."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Os elementos com `role=\"dialog\"` ou `role=\"alertdialog\"` têm nomes acessíveis."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "As tecnologias de assistência, que incluem os leitores de ecrã, funcionam de forma inconsistente quando `aria-hidden=\"true\"` está definido no `<body>` do documento. [Saiba como o `aria-hidden` afeta o corpo do documento](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Os valores `[role]` são válidos"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Adicionar `role=text` à volta de um nó de texto dividido por marcação permite que o VoiceOver o trate como uma expressão, mas os descendentes focalizáveis do elemento não são anunciados. [Saiba mais acerca do atributo `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Os elementos com o atributo `role=text` têm descendentes focalizáveis."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Os elementos com o atributo `role=text` não têm descendentes focalizáveis."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Quando um campo ativar/desativar não tem um nome acessível, os leitores de ecrã anunciam-no com um nome genérico, tornando-o inutilizável para os utilizadores que dependem de leitores de ecrã. [Saiba mais acerca dos campos ativar/desativar](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Os IDs ARIA são exclusivos"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Um título sem conteúdo ou com texto inacessível impede os utilizadores de leitores de ecrã de acederem a informações sobre a estrutura da página. [Saiba mais acerca dos títulos](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Os elementos do título não têm conteúdo."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Todos os elementos de título têm conteúdo."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Os campos de formulários com várias etiquetas podem ser anunciados de forma confusa por tecnologias de assistência, como leitores de ecrã que usam a primeira, a última ou todas as etiquetas. [Saiba como usar etiquetas de formulários](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "O elemento `<html>` tem um atributo `[xml:lang]` com o mesmo idioma base que o atributo `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Os links com o mesmo destino devem ter a mesma descrição para ajudar os utilizadores a compreenderem o objetivo do link e decidirem se o devem seguir. [Saiba mais acerca dos links idênticos](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Os links idênticos não têm a mesma finalidade."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Os links idênticos têm a mesma finalidade."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Os elementos informativos devem procurar incluir texto curto, descritivo e alternativo. Os elementos decorativos podem ser ignorados com um atributo alternativo vazio. [Saiba mais acerca do atributo `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Os elementos de imagem têm atributos `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Adicionar texto percetível e acessível aos botões de entrada pode ajudar os utilizadores de leitores de ecrã a compreender a finalidade do botão de entrada. [Saiba mais acerca dos botões de entrada](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Os elementos `<input type=\"image\">` têm texto `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "As etiquetas garantem que os controlos de formulários são anunciados adequadamente pelas tecnologias de assistência, que incluem os leitores de ecrã. [Saiba mais acerca das etiquetas de elementos de formulários](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Os elementos de formulário têm etiquetas associadas"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Um ponto de referência principal ajuda os utilizadores de leitores de ecrã a navegar numa página Web. [Saiba mais sobre pontos de referência](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "O documento não tem um ponto de referência principal."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "O documento tem um ponto de referência principal."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "O texto de baixo contraste é difícil ou impossível de ler para muitos utilizadores. O texto do link percetível melhora a experiência dos utilizadores com visão reduzida. [Saiba como tornar os links distinguíveis](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Os links dependem da cor para serem distinguíveis."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Os links são distinguíveis sem depender da cor."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "O texto de link (e texto alternativo para imagens, quando usado como link) que seja percetível, exclusivo e focalizável melhora a experiência de navegação dos utilizadores de leitores de ecrã. [Saiba como tornar os links acessíveis](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Os elementos `<object>` têm texto alternativo"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Os elementos de formulário sem etiquetas eficazes podem criar experiências frustrantes para os utilizadores de leitores de ecrã. [Saiba mais acerca do elemento `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Os elementos Select não têm elementos de etiqueta associados."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Os elementos Select têm elementos de etiqueta associados."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Um valor superior a 0 implica uma ordenação de navegação explícita. Embora seja tecnicamente válida, esta situação costuma criar experiências frustrantes para os utilizadores que dependem de tecnologias de assistência. [Saiba mais acerca do atributo `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Nenhum elemento tem um valor `[tabindex]` superior a 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Os leitores de ecrã têm funcionalidades para facilitar a navegação em tabelas. Garantir que as tabelas usam o elemento de legenda real em vez das células com o atributo `[colspan]` pode melhorar a experiência dos utilizadores de leitores de ecrã. [Saiba mais sobre as legendas](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "As tabelas usam `<caption>` em vez de células com o atributo `[colspan]` para indicar uma legenda."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "As áreas de toque não têm tamanho nem espaçamento suficientes."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "As áreas de toque têm tamanho e espaçamento suficientes."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Os leitores de ecrã têm funcionalidades para facilitar a navegação em tabelas. Garantir que os elementos `<td>` numa tabela grande (3 ou mais células de largura e altura) têm um cabeçalho de tabela associado pode melhorar a experiência para os utilizadores de leitores de ecrã. [Saiba mais acerca dos cabeçalhos de tabelas](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "A página não tem um URL <link> de manifesto."
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Não foi detetado nenhum service worker correspondente. Poderá ter de atualizar a página ou verificar se o âmbito do service worker da página atual inclui o URL de início e o âmbito do manifesto."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Não foi possível verificar o service worker sem um campo \"start_url\" no manifesto."
   },
@@ -969,7 +1083,7 @@
     "message": "A opção prefer_related_applications só é suportada no Chrome Beta e nos canais estáveis do Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "O Lighthouse não conseguiu determinar se existia um service worker. Tente com uma versão mais recente do Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "O esquema do URL do manifesto ({scheme}) não é suportado no Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "A Mudança de esquema cumulativo mede o movimento dos elementos visíveis na área visível. [Saiba mais acerca da métrica Mudança de esquema cumulativo](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "A interação até ao preenchimento seguinte mede a capacidade de resposta da página, bem como o tempo que esta demora a responder visivelmente à introdução do utilizador. [Saiba mais acerca da métrica Interação até ao preenchimento seguinte](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "O Primeiro preenchimento com conteúdo assinala o momento de preenchimento com o primeiro texto ou imagem. [Saiba mais acerca da métrica Primeiro preenchimento com conteúdo](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "A métrica Primeiro preenchimento significativo mede quando é que o conteúdo principal de uma página fica visível. [Saiba mais acerca da métrica Primeiro preenchimento significativo](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "A interação até ao preenchimento seguinte mede a capacidade de resposta da página, bem como o tempo que esta demora a responder visivelmente à introdução do utilizador. [Saiba mais acerca da métrica Interação até ao preenchimento seguinte](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "O Tempo até à interação é a quantidade de tempo que a página demora a ficar totalmente interativa. [Saiba mais acerca da métrica Tempo até à interação](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Evite vários redirecionamentos de página"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Adicione um ficheiro budget.json para definir orçamentos para a quantidade e o tamanho dos recursos da página. [Saiba mais acerca dos orçamentos de desempenho](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 pedido • {byteCount, number, bytes} KiB}other{# pedidos • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Mantenha a contagem dos pedidos baixa e os tamanhos de transferência pequenos"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Os links canónicos sugerem o URL a apresentar nos resultados da pesquisa. [Saiba mais acerca dos links canónicos](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "O tempo de resposta do servidor inicial foi curto"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "O service worker é a tecnologia que permite que a sua app use muitas funcionalidades de apps Web progressivas, tais como offline, adicionar ao ecrã principal e notificações push. [Saiba mais acerca dos service workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Esta página é controlada por um service worker, no entanto, não foi encontrado nenhum `start_url` porque o manifesto falhou ao analisar como um JSON válido."
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Esta página é controlada por um service worker, no entanto, o `start_url` ({startUrl}) não está no âmbito do service worker ({scopeUrl})."
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Esta página é controlada por um service worker, no entanto, não foi encontrado nenhum `start_url` porque não foi obtido nenhum manifesto."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Esta origem tem um ou mais service workers, no entanto, a página ({pageUrl}) não está no âmbito."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Não regista um service worker que controla a página e `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Regista um service worker que controla a página e `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Um ecrã inicial temático garante uma experiência de alta qualidade quando os utilizadores iniciam a app a partir dos respetivos ecrãs principais. [Saiba mais acerca dos ecrãs iniciais](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Práticas recomendadas"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Estas verificações realçam as oportunidades de [melhorar a acessibilidade da sua app Web](https://developer.chrome.com/docs/lighthouse/accessibility/). Apenas um subconjunto de problemas de acessibilidade pode ser detetado automaticamente, pelo que é recomendado efetuar também testes manuais."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Estes itens destinam-se a áreas não abrangidas por uma ferramenta de teste automatizada. Saiba mais no nosso guia sobre como [efetuar uma revisão de acessibilidade](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Instale [um módulo do Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) capaz de efetuar o carregamento em diferido de imagens. Esses módulos permitem adiar o carregamento de quaisquer imagens não apresentadas no ecrã para melhorar o desempenho."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Considere utilizar um módulo para colocar CSS e JavaScript crítico inline ou potencialmente carregar recursos de forma assíncrona através de JavaScript, como o módulo [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Tenha em atenção que as otimizações oferecidas por este módulo podem causar erros no seu site, pelo que poderá ser necessário efetuar alterações ao código."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "As especificações dos temas, módulos e servidor, no seu conjunto, contribuem para o tempo de resposta do servidor. Considere procurar um tema mais otimizado, selecionar cuidadosamente um módulo de otimização e/ou atualizar o servidor. Os seus servidores de alojamento devem utilizar a colocação em cache de código de operação PHP ao colocá-lo na cache da memória para reduzir os tempos de consulta das bases de dados, em sistemas como o Redis ou o Memcached, bem como a lógica de aplicação otimizada para preparar páginas mais rapidamente."
@@ -2778,10 +2862,10 @@
     "message": "Considere utilizar [estilos de imagens adaptáveis](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) para reduzir o tamanho das imagens carregadas na sua página. Se estiver a utilizar vistas para apresentar vários itens de conteúdo numa página, considere implementar a paginação para limitar o número de itens de conteúdo apresentados numa determinada página."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Certifique-se de que tem a opção \"Agregar ficheiros CSS\" na página \"Administração » Configuração » Programação\". Também pode configurar opções de agregação mais avançadas através dos [módulos adicionais](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) para acelerar o seu site ao concatenar, reduzir e comprimir os seus estilos de CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Certifique-se de que ativou a opção \"Agregar ficheiros JavaScript\" na página \"Administração » Configuração » Programação\". Também pode configurar opções de agregação mais avançadas através dos [módulos adicionais](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) para acelerar o seu site ao concatenar, reduzir e comprimir os seus recursos de JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Considere remover regras de CSS não utilizadas e anexe apenas as bibliotecas do Drupal necessárias à página relevante ou a um componente numa página. Consulte o [link da documentação do Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) para obter detalhes. Para identificar bibliotecas anexadas que estejam a adicionar CSS não reconhecido, experimente executar a [cobertura de código](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) nas DevTools do Chrome. Pode identificar o tema/módulo responsável a partir do URL da folha de estilos quando a agregação de CSS estiver desativada no seu site do Drupal. Preste atenção a temas/módulos que tenham muitas folhas de estilo na lista com muito vermelho na cobertura do código. Um tema/módulo só deve ter uma folha de estilos na fila de espera se esta for efetivamente utilizada na página."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Ative a compressão no seu servidor Next.js. [Saiba mais](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Use o componente `nuxt/image` e defina `format=\"webp\"`. [Saiba mais](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Utilize o Gerador de perfis do React DevTools, que utiliza a API do Gerador de perfis, para medir o desempenho de renderização dos seus componentes. [Saiba mais](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)."
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Coloque vídeos dentro de `VideoBoxes`, personalize-os com `Video Masks` ou adicione `Transparent Videos`. [Saiba mais](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Carregue imagens com o `Wix Media Manager` para garantir que são publicadas automaticamente como WebP. Descubra [mais formas de otimizar](https://support.wix.com/en/article/site-performance-optimizing-your-media) o conteúdo multimédia do seu site."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Quando [adicionar código de terceiros](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) no separador `Custom Code` do painel de controlo do site, certifique-se de que este é diferido ou carregado no final do corpo do código. Sempre que possível, use as [integrações](https://support.wix.com/en/article/about-marketing-integrations) do Wix para incorporar ferramentas de marketing no seu site. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "O Wix usa RFCs (redes de fornecimento de conteúdo) e a colocação em cache para publicar respostas o mais rapidamente possível para a maioria dos visitantes. Considere [ativar manualmente a colocação em cache](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) para o seu site, especialmente se usar o `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Reveja o código de terceiros adicionado ao seu site no separador `Custom Code` do painel de controlo do site e mantenha apenas os serviços necessários para o site. [Saiba mais](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Considere carregar o GIF para um serviço que o disponibilizará para incorporação como vídeo HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Guardar como JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Abrir no visualizador"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Os valores são estimados e podem variar. A [pontuação de desempenho é calculada](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) diretamente a partir destas métricas."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Ver rastreio original"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Ver rastreio"
   },
diff --git a/front_end/third_party/lighthouse/locales/pt.json b/front_end/third_party/lighthouse/locales/pt.json
index c4be6c2..40445d2 100644
--- a/front_end/third_party/lighthouse/locales/pt.json
+++ b/front_end/third_party/lighthouse/locales/pt.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Os atributos `[aria-*]` correspondem às próprias funções"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Quando um elemento não tem um nome acessível, os leitores de tela o anunciam com um nome genérico, fazendo com que os usuários que dependem desses leitores não possam usá-lo. [Aprenda a tornar os elementos de comando mais acessíveis](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Os elementos `button`, `link` e `menuitem` têm nomes acessíveis"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Elementos de caixa de diálogo ARIA sem nomes acessíveis podem impedir que usuários de leitores de tela entendam a finalidade desses elementos. [Saiba como tornar os elementos da caixa de diálogo ARIA mais acessíveis](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementos com `role=\"dialog\"` ou `role=\"alertdialog\"` não têm nomes acessíveis."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementos com `role=\"dialog\"` ou `role=\"alertdialog\"` têm nomes acessíveis."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "As tecnologias adaptativas, como leitores de tela, funcionam de maneira inconsistente quando o `aria-hidden=\"true\"` está configurado no documento `<body>`. [Aprenda como o `aria-hidden` afeta o corpo do documento](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Os valores de `[role]` são válidos"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Adicionar `role=text` ao redor de um nó de texto dividido por marcação permite que o VoiceOver trate isso como uma frase, mas os descendentes focalizáveis do elemento não vão ser anunciados. [Saiba mais sobre o atributo `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Os elementos com o atributo `role=text` têm descendentes focalizáveis."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Os elementos com o atributo `role=text` não têm descendentes focalizáveis."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Quando um campo de alternância não tem um nome acessível, os leitores de tela o anunciam com um nome genérico, fazendo com que os usuários com leitores de tela não possam usá-lo. [Saiba mais sobre campos de alternância](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Os códigos ARIA são únicos"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Um cabeçalho sem conteúdo ou com texto inacessível impede que usuários de leitores de tela acessem informações sobre a estrutura da página. [Saiba mais sobre cabeçalhos](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Os elementos de <heading> não têm conteúdo."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Todos os elementos de <heading> têm conteúdo."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Os campos de formulários com vários rótulos podem ser anunciados de maneira confusa por tecnologias adaptativas como leitores de tela, que usam o primeiro, o último ou todos os rótulos. [Aprenda a usar os rótulos de formulários](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "O elemento `<html>` tem um atributo `[xml:lang]` com o mesmo idioma base que o atributo `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Links com o mesmo destino devem ter a mesma descrição, para ajudar os usuários a entender a finalidade do link e decidir se devem ou não clicar nele. [Saiba mais sobre links idênticos](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Links idênticos não têm a mesma finalidade."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Links idênticos têm a mesma finalidade."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "O texto de elementos informativos precisa ser alternativo, breve e descritivo. Elementos decorativos podem ser ignorados com um atributo alternativo vazio. [Saiba mais sobre o atributo `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Os elementos de imagem têm atributos `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "A adição de texto compreensível e acessível a botões de entrada pode ajudar os usuários de leitores de tela a entender a finalidade do botão. [Saiba mais sobre botões de entrada.](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Os elementos `<input type=\"image\">` têm texto `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Os marcadores garantem que os controles de formulário sejam enunciados corretamente por tecnologias adaptativas, como, por exemplo, leitores de tela. [Saiba mais sobre marcadores de elementos de formulários](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Os elementos de formulário têm etiquetas associadas"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Um ponto de referência principal ajuda os usuários de leitores de tela a navegar em uma página da Web. [Saiba mais sobre pontos de referência](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "O documento não tem um ponto de referência principal."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "O documento tem um ponto de referência principal."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Para muitos usuários, é difícil ou impossível ler textos com baixo contraste. Textos de link perceptíveis melhoram a experiência dos usuários com baixa visão. [Saiba como tornar os links diferenciáveis](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Os links dependem da cor para serem distinguíveis."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Os links são distinguíveis sem depender da cor."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Textos de link (e textos alternativos de imagens, quando utilizados como link) compreensíveis, únicos e focalizáveis melhoram a experiência de navegação para usuários de leitores de tela. [Aprenda a deixar os links mais acessíveis](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Os elementos `<object>` têm texto alternativo"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Elementos de <form> sem rótulos eficazes podem criar experiências frustrantes para usuários de leitores de tela. [Saiba mais sobre o elemento `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Os elementos de seleção não têm elementos de <label> associados."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Os elementos de <select> têm elementos de <label> associados."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Um valor maior que 0 indica uma ordem explícita de navegação. Embora tecnicamente válido, isso costuma gerar experiências frustrantes para os usuários que utilizam tecnologias adaptativas. [Saiba mais sobre o atributo `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Nenhum elemento tem um valor de `[tabindex]` maior que 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Os leitores de tela têm recursos para facilitar a navegação em tabelas. Garantir que as tabelas usem o elemento de legenda em vez de células com o atributo `[colspan]` pode melhorar a experiência dos usuários de leitores de tela. [Saiba mais sobre legendas.](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "As tabelas usam `<caption>` em vez de células com o atributo `[colspan]` para indicar uma legenda."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "As áreas de toque não têm tamanho ou espaçamento suficiente."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "As áreas de toque têm tamanho e espaçamento suficientes."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Os leitores de tela têm recursos para facilitar a navegação em tabelas. Garantir que os elementos `<td>` em uma tabela grande (com largura e altura de três ou mais células) tenham um cabeçalho associado pode melhorar a experiência dos usuários de leitores de tela. [Saiba mais sobre cabeçalhos da tabela.](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -894,7 +1011,7 @@
     "message": "Motivo da falha"
   },
   "core/audits/installable-manifest.js | description": {
-    "message": "O service worker é a tecnologia que permite que seu app use muitos recursos do Progressive Web App, como disponibilidade off-line, adição à tela inicial e notificações push. Com implementações de manifesto e service worker adequadas, os navegadores podem solicitar proativamente que os usuários adicionem seu app à tela inicial deles, o que pode aumentar o engajamento. [Saiba mais sobre os requisitos de instalação do manifesto](https://developer.chrome.com/docs/lighthouse/pwa/installable-manifest/)."
+    "message": "O service worker é a tecnologia que permite que seu app use muitos recursos do App Web Progressivo, como disponibilidade off-line, adição à tela inicial e notificações push. Com implementações de manifesto e service worker adequadas, os navegadores podem solicitar proativamente que os usuários adicionem seu app à tela inicial deles, o que pode aumentar o engajamento. [Saiba mais sobre os requisitos de instalação do manifesto](https://developer.chrome.com/docs/lighthouse/pwa/installable-manifest/)."
   },
   "core/audits/installable-manifest.js | displayValue": {
     "message": "{itemCount,plural, =1{1 motivo}one{# motivo}other{# motivos}}"
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "A página não tem um URL de manifesto <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nenhum service worker correspondente foi detectado. Pode ser necessário atualizar a página ou conferir se o escopo do service worker da página atual inclui o escopo e o URL de início do manifesto."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Não foi possível verificar o service worker sem um campo \"start_url\" no manifesto"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications só é compatível no Android com Canais Beta e Stable do Chrome."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "O Lighthouse não conseguiu determinar se havia um service worker. Tente de novo com uma versão mais recente do Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "O Android não tem suporte ao esquema de URL do manifesto ({scheme})."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "\"Mudança de layout cumulativa\" mede o movimento de elementos visíveis na janela de visualização. [Saiba mais sobre a métrica \"Mudança de layout cumulativa\"](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "A métrica \"Interação com a próxima exibição\" mede a capacidade de resposta da página, ou seja, quanto tempo a página leva para responder de maneira visível à entrada do usuário. [Saiba mais sobre a métrica \"Interação com a próxima exibição\"](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "\"Primeira exibição de conteúdo\" marca o momento em que o primeiro texto ou imagem é disponibilizado. [Saiba mais sobre a métrica \"Primeira exibição de conteúdo\"](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "\"Primeira exibição significativa\" marca o momento em que o conteúdo principal de uma página se torna visível. [Saiba mais sobre a métrica \"Primeira exibição significativa\"](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "A métrica \"Interação com a próxima exibição\" mede a capacidade de resposta da página, ou seja, quanto tempo a página leva para responder de maneira visível à entrada do usuário. [Saiba mais sobre a métrica \"Interação com a próxima exibição\"](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "\"Tempo para interação da página\" é o período necessário para que uma página fique totalmente interativa. [Saiba mais sobre a métrica \"Tempo para interação da página\"](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Evite redirecionamentos múltiplos de página"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Para definir orçamentos para a quantidade e o tamanho dos recursos da página, adicione um arquivo budget.json. [Saiba mais sobre montantes de desempenho](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 solicitação • {byteCount, number, bytes} KiB}one{# solicitação • {byteCount, number, bytes} KiB}other{# solicitações • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Mantenha as contagens de solicitações baixas e os tamanhos de transferência pequenos"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Os links canônicos sugerem o URL a ser exibido nos resultados da pesquisa. [Saiba mais sobre links canônicos](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "O tempo de resposta inicial do servidor foi curto"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "O service worker é a tecnologia que permite que seu app use muitos recursos do Progressive Web App, por exemplo, disponibilidade off-line, adicionar à tela inicial e notificações de push. [Saiba mais sobre os service workers](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Esta página é controlada por um service worker, no entanto, nenhum `start_url` foi encontrado porque o manifesto não foi analisado como um JSON válido."
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Esta página é controlada por um service worker, no entanto, a `start_url` ({startUrl}) não está no escopo dele ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Esta página é controlada por um service worker, no entanto, nenhuma `start_url` foi encontrada porque nenhum manifesto foi recuperado."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Esta origem tem um ou mais service workers, no entanto, a página ({pageUrl}) não está em escopo."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Não há registro de um service worker que controle a página e `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Há registro de um service worker que controla a página e `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Uma tela de apresentação personalizada garante uma experiência de alta qualidade quando os usuários abrem o aplicativo na tela inicial. [Saiba mais sobre telas de apresentação](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Práticas recomendadas"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Essas verificações destacam oportunidades para [melhorar a acessibilidade do seu app da Web](https://developer.chrome.com/docs/lighthouse/accessibility/). Somente um subconjunto de problemas de acessibilidade pode ser detectado automaticamente, portanto, testes manuais também devem ser realizados."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Esses itens se referem a áreas que uma ferramenta de teste automatizada não pode cobrir. Saiba mais no nosso guia sobre [como realizar uma avaliação de acessibilidade](https://web.dev/how-to-review/)."
@@ -1713,7 +1797,7 @@
     "message": "Desempenho"
   },
   "core/config/default-config.js | pwaCategoryDescription": {
-    "message": "Essas verificações validam os aspectos de um Progressive Web App. [Aprenda a criar um bom Progressive Web App](https://web.dev/pwa-checklist/)."
+    "message": "Essas verificações validam os aspectos de um App Web Progressivo. [Aprenda a criar um bom App Web Progressivo](https://web.dev/pwa-checklist/)."
   },
   "core/config/default-config.js | pwaCategoryManualDescription": {
     "message": "Essas verificações são solicitadas pela [Lista de verificação de PWA](https://web.dev/pwa-checklist/) de referência, mas não são automaticamente realizadas pelo Lighthouse. Elas não afetam sua pontuação, mas é importante verificá-las manualmente."
@@ -2604,7 +2688,7 @@
     "message": "Desempenho"
   },
   "flow-report/src/i18n/ui-strings.js | categoryProgressiveWebApp": {
-    "message": "Progressive Web App"
+    "message": "App Web Progressivo"
   },
   "flow-report/src/i18n/ui-strings.js | categorySeo": {
     "message": "SEO"
@@ -2634,13 +2718,13 @@
     "message": "Medir o desempenho de carregamento de página, como, por exemplo, Maior exibição de conteúdo e Índice de velocidade."
   },
   "flow-report/src/i18n/ui-strings.js | helpUseCaseNavigation3": {
-    "message": "Avaliar os recursos do Progressive Web App."
+    "message": "Avaliar os recursos do App Web Progressivo."
   },
   "flow-report/src/i18n/ui-strings.js | helpUseCaseSnapshot1": {
     "message": "Localizar problemas de acessibilidade em aplicativos de página única ou formulários complexos."
   },
   "flow-report/src/i18n/ui-strings.js | helpUseCaseSnapshot2": {
-    "message": "Avaliar práticas recomendadas de menus e elementos da IU ocultos nas interações."
+    "message": "Avaliar práticas recomendadas de menus e elementos da interface ocultos nas interações."
   },
   "flow-report/src/i18n/ui-strings.js | helpUseCaseTimespan1": {
     "message": "Medir as mudanças de layout e o tempo de execução em JavaScript em uma série de interações."
@@ -2769,7 +2853,7 @@
     "message": "Instale [um módulo Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) que possa carregar imagens lentamente. Esses módulos oferecem a capacidade de adiar qualquer imagem fora da tela para melhorar o desempenho."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Use um módulo para CSS e JavaScript in-line essenciais ou carregue recursos de forma assíncrona via JavaScript, como o módulo [Agregação CSS/JS avançada](https://www.drupal.org/project/advagg). As otimizações oferecidas por esse módulo podem corromper seu site, então é provável que você precise fazer modificações no código."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Todas as especificações de servidor, temas e módulos contribuem para o tempo de resposta do servidor. Recomendamos que você use um tema mais otimizado, selecionando cuidadosamente um módulo de otimização e/ou fazendo upgrade do seu servidor. Seu servidor de hospedagem precisa usar armazenamento em cache com código de operação PHP, memória cache para reduzir o tempo de consulta de banco de dados, como no Redis ou Memcached, além de otimizar a aplicação lógica para preparar as páginas mais rapidamente."
@@ -2778,10 +2862,10 @@
     "message": "Use [Estilo de Imagem Responsiva](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) para reduzir o tamanho das imagens carregadas na sua página. Se estiver usando \"Visualização\" para mostrar vários conteúdos em uma página, implemente a paginação para limitar o número de itens mostrados em uma determinada página."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Não esqueça de ativar o \"Agregar documentos CSS\" na página \"Administração » Configurações » Desenvolvimento\". É possível também configurar opções de agregação mais avançadas pelos [módulos adicionais](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) para acelerar seu site por concatenação, minificação, e compactação dos estilos CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Não esqueça de ativar \"Agregar documentos JavaScript\" na página \"Administração » Configurações » Desenvolvimento\". É possível também configurar opções de agregação mais avançadas pelos [módulos adicionais](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) para acelerar seu site por concatenação, minificação, e compactação dos recursos JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Remova as regras não utilizadas do CSS e anexe apenas as bibliotecas Drupal necessárias para a página ou para o componente da página. Veja o [link do documento Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) para mais detalhes. Para identificar bibliotecas anexas que estão adicionando CSS externo, execute a [cobertura de código](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) no Chrome DevTools. É possível identificar o tema/módulo responsável pelo URL da folha de estilo quando a agregação do CSS está desativada no seu site Drupal. Procure temas/módulos que tenham muitas folhas de estilo na lista, apresentando um nível alto de vermelho na cobertura do código. Um tema/módulo só deverá colocar uma folha de estilo na fila se ela for realmente usada na página."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Ative a compressão no seu servidor Next.js. [Saiba mais](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Use o componente `nuxt/image` e o defina como `format=\"webp\"`. [Saiba mais](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Use o React DevTools Profiler, que usa a API Profiler, para medir o desempenho de renderização dos componentes. [Saiba mais.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Coloque vídeos dentro de `VideoBoxes`, personalize eles usando `Video Masks` ou adicione `Transparent Videos`. [Saiba mais](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Faça upload de imagens usando `Wix Media Manager` para garantir que elas sejam veiculadas automaticamente como WebP. Descubra [mais maneiras de otimizar](https://support.wix.com/en/article/site-performance-optimizing-your-media) as mídias do seu site."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Ao [adicionar um código de terceiros](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) na guia `Custom Code` do painel do site, confira se ele foi adiado ou carregado no final do corpo do código. Sempre que possível, use as [integrações](https://support.wix.com/en/article/about-marketing-integrations) do Wix para incorporar ferramentas de marketing ao seu site. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "O Wix usa CDNs e armazenamento em cache para oferecer respostas o mais rápido possível para a maioria dos visitantes. Considere [ativar manualmente o armazenamento em cache](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) para seu site, principalmente se estiver usando `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Revise o código de terceiros que você adicionou ao site na guia `Custom Code` do painel e mantenha apenas os serviços necessários. [Saiba mais](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Faça upload do seu GIF para um serviço que o disponibilizará para incorporação como um vídeo HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Salvar como JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Abrir no visualizador"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Os valores são estimados e podem variar. O [índice de desempenho é calculado](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) diretamente por essas métricas."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Ver rastro original"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Ver rastro"
   },
diff --git a/front_end/third_party/lighthouse/locales/ro.json b/front_end/third_party/lighthouse/locales/ro.json
index 33cb771..349030b 100644
--- a/front_end/third_party/lighthouse/locales/ro.json
+++ b/front_end/third_party/lighthouse/locales/ro.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atributele `[aria-*]` se potrivesc cu rolurile"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Când un element nu are un nume accesibil, cititoarele de ecran îl anunță cu o denumire generică, făcându-l inutil pentru utilizatorii care se bazează pe cititoarele de ecran. [Află cum să faci elementele de comandă mai accesibile](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elementele `button`, `link` și `menuitem` au nume accesibile"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Elementele de dialog ARIA fără nume accesibile pot împiedica utilizatorii cititoarelor de ecran să distingă scopul acestor elemente. [Află cum să faci elementele de dialog ARIA mai accesibile](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementele cu `role=\"dialog\"` sau `role=\"alertdialog\"` nu au nume accesibile."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementele cu `role=\"dialog\"` sau `role=\"alertdialog\"` au nume accesibile."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Tehnologiile de asistare, precum cititoarele de ecran, funcționează inconsecvent atunci când `aria-hidden=\"true\"` este setat pentru documentul `<body>`. [Află cum `aria-hidden` afectează corpul documentului](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Valorile `[role]` sunt valide"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Dacă adaugi `role=text` în jurul unui nod de text împărțit folosind limbaj de markup, VoiceOver îl va trata ca pe o expresie, dar descendenții focalizabili ai elementului nu vor fi anunțați. [Află mai multe despre atributul `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementele cu atributul `role=text` au descendenți focalizabili."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementele cu atributul `role=text` nu au descendenți focalizabili."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Când un câmp de comutare nu are un nume accesibil, cititoarele de ecran îl anunță cu o denumire generică, făcându-l inutil pentru utilizatorii care se bazează pe cititoarele de ecran. [Află mai multe despre câmpurile de comutare](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ID-urile ARIA sunt unice"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Un titlu fără conținut sau textul inaccesibil împiedică utilizatorii cititoarelor de ecran să acceseze informații din structura paginii. [Află mai multe despre titluri](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Elementele titlului nu includ conținut."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Toate elementele titlului includ conținut."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Câmpurile de formular cu etichete multiple pot fi anunțate în mod derutant de tehnologiile de asistare, precum cititoarele de ecran care folosesc prima, ultima sau toate etichetele. [Află cum să folosești etichetele de formular](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Elementul `<html>` are un atribut `[xml:lang]` cu aceeași limbă de bază ca atributul `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Linkurile cu aceeași destinație trebuie să aibă aceeași descriere pentru a ajuta utilizatorii să înțeleagă scopul linkului și să decidă dacă îl accesează. [Află mai multe despre linkurile identice](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Linkurile identice nu au același scop."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Linkurile identice au același scop."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Elementele informative ar trebui să conțină texte alternative descriptive scurte. Elementele decorative pot fi ignorate cu un atribut Alt gol. [Află mai multe despre atributul `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Elementele imagine au atribute `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Adăugarea de text vizibil și accesibil la butoanele de introducere poate ajuta utilizatorii cititoarelor de ecran să înțeleagă scopul butonului de introducere. [Află mai multe despre butoanele de introducere](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Elementele `<input type=\"image\">` au text `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Etichetele asigură că opțiunile formularelor sunt anunțate corect de tehnologiile de asistare, precum cititoarele de ecran. [Află mai multe despre etichetele elementelor de formular](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Elementele formularului au etichete asociate"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Reperul principal îi ajută pe utilizatorii cititoarelor de ecran să navigheze într-o pagină web. [Află mai multe despre repere](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Documentul nu are un reper principal."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Documentul are un reper principal."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Textul cu un contrast redus este dificil sau imposibil de citit pentru mulți utilizatori. Textul care se poate distinge îmbunătățește experiența utilizatorilor cu vedere slabă. [Află cum să creezi linkuri distincte](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Pentru a fi distincte, linkurile se bazează pe culoare."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Linkurile sunt distincte fără a se baza pe culoare."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Textul linkurilor (și textul alternativ pentru imagini, când sunt folosite ca linkuri) care se poate distinge, unic și pe care se poate focaliza, îmbunătățește navigarea pentru utilizatorii de cititoare de ecran. [Află cum să creezi linkuri accesibile](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Elementele `<object>` au text alternativ"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Elementele de formular fără etichete eficiente pot crea frustrări utilizatorilor cititoarelor de ecran. [Află mai multe despre elementul `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Anumite elemente nu au elemente de etichetă asociate."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Anumite elemente au elemente de etichetă asociate."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "O valoare mai mare decât 0 implică o ordine explicită de navigare. Deși valid din punct de vedere tehnic, acest lucru creează adesea frustrări utilizatorilor care se bazează pe tehnologii de asistare. [Află mai multe despre atributul `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Niciun element nu are o valoare `[tabindex]` mai mare decât 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Cititoarele de ecran au funcții care facilitează navigarea în tabele. Dacă te asiguri că tabelele folosesc elementul de subtitrare în locul celulelor cu atributul `[colspan]`, experiența utilizatorilor de cititoare de ecran poate fi îmbunătățită. [Află mai multe despre subtitrări](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabelele folosesc `<caption>` în locul celulelor cu atributul `[colspan]` pentru a indica o legendă."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Țintele de atins nu au o dimensiune sau o spațiere suficientă."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Țintele de atins au o dimensiune și o spațiere suficiente."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Cititoarele de ecran au funcții care facilitează navigarea în tabele. Dacă te asiguri că elementele `<td>` dintr-un tabel mare (trei sau mai multe celule în lățime și înălțime) au un antet de tabel asociat, experiența poate fi îmbunătățită pentru utilizatorii cititoarelor de ecran. [Află mai multe despre antetele tabelelor](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Pagina nu include adresa URL <link> a manifestului"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nu s-a detectat niciun service worker care corespunde. Poate fi necesar să reîncarci pagina sau să verifici dacă aria de acoperire a service workerului pentru pagina actuală include aria de acoperire și adresa URL inițială din manifest."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Nu s-a putut verifica service workerul fără câmpul „start_url” în manifest"
   },
@@ -969,7 +1083,7 @@
     "message": "Proprietatea prefer_related_applications este acceptată numai în Chrome Beta și pe canale stabile de pe Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse nu a putut stabili dacă este vorba despre un service worker. Încearcă folosind o versiune mai nouă de Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Schema adresei URL a manifestului ({scheme}) nu este acceptată pe Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulative Layout Shift măsoară deplasarea elementelor vizibile în aria vizibilă. [Află mai multe despre valoarea Cumulative Layout Shift](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interacțiunea cu următoarea reprezentare măsoară receptivitatea paginii, adică timpul necesar pentru ca pagina să răspundă în mod vizibil la comanda utilizatorului. [Află mai multe despre valoarea Interacțiunea cu următoarea reprezentare](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "First Contentful Paint arată momentul când se redă primul text sau prima imagine. [Află mai multe despre valoarea First Contentful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "First Meaningful Paint arată momentul când este vizibil conținutul principal al unei pagini. [Află mai multe despre valoarea First Meaningful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interacțiunea cu următoarea reprezentare măsoară receptivitatea paginii, adică timpul necesar pentru ca pagina să răspundă în mod vizibil la comanda utilizatorului. [Află mai multe despre valoarea Interacțiunea cu următoarea reprezentare](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Time to Interactive este timpul necesar pentru ca pagina să devină complet interactivă. [Află mai multe despre valoarea Time to Interactive](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Evită mai multe redirecționări ale paginii"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Ca să setezi limitele pentru cantitatea și dimensiunea resurselor de pagină, adaugă un fișier budget.json. [Află mai multe despre limitele de funcționare](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{O solicitare • {byteCount, number, bytes} KiB}few{# solicitări • {byteCount, number, bytes} KiB}other{# de solicitări • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Păstrează numărul de solicitări scăzut și dimensiunea transferurilor redusă"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Linkurile canonice sugerează care adresă URL să se afișeze în rezultatele căutării. [Află mai multe despre linkurile canonice](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Durata inițială de răspuns de la server a fost scurtă"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service worker este tehnologia care îi permite aplicației să folosească mai multe funcții de aplicații web progresive, cum ar fi cele offline, adăugarea în ecranul de pornire și notificările push. [Află mai multe despre elementele service worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Pagina este controlată de un service worker, dar nu s-a găsit niciun `start_url`, deoarece manifestul nu s-a putut analiza ca un JSON valid"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Pagina este controlată de un service worker, dar `start_url` ({startUrl}) nu este în aria de acoperire a acestuia ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Pagina este controlată de un service worker, dar nu s-a găsit un `start_url`, deoarece nu s-a preluat niciun manifest."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Această origine are unul sau mai multe elemente service worker, însă pagina ({pageUrl}) nu este în aria de acoperire."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Nu înregistrează un service worker care să controleze pagina și `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Înregistrează un service worker care să controleze pagina și `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Un ecran de întâmpinare tematic asigură o experiență de calitate atunci când utilizatorii lansează aplicația din ecranele de pornire. [Află mai multe despre ecranele de întâmpinare](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Cele mai bune practici"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Aceste verificări evidențiază oportunitățile pentru a [îmbunătăți accesibilitatea aplicației web](https://developer.chrome.com/docs/lighthouse/accessibility/). Doar un subset de probleme de accesibilitate pot fi detectate automat, astfel încât se recomandă și testarea manuală."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Aceste elemente se adresează zonelor pe care un instrument de testare automată nu le poate acoperi. Află mai multe din ghidul nostru despre [realizarea unei evaluări a accesibilității](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Instalează [un modul Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) care poate încărca lent imagini. Aceste module oferă opțiunea de a amâna imaginile din afara ecranului pentru a îmbunătăți performanța."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Îți recomandăm să folosești un modul pentru a activa inline elementele CSS și JavaScript critice sau să încarci în mod asincron elemente prin JavaScript, de exemplu, modulul [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Atenție, optimizările oferite de acest modul pot să întrerupă site-ul, astfel că probabil va trebui să modifici codul."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Temele, modulele și specificațiile serverului contribuie toate la timpul de răspuns al serverului. Îți recomandăm să găsești o temă mai optimizată, selectând cu atenție un modul de optimizare și/sau făcând upgrade la server. Serverele de găzduire ar trebui să folosească stocarea în memoria cache opcode a codului PHP pentru a reduce duratele de interogare a bazei de date, de exemplu, Redis sau Memcached, precum și logica optimizată a aplicației pentru a pregăti paginile mai rapid."
@@ -2778,10 +2862,10 @@
     "message": "Îți recomandăm să folosești [Stilurile de imagini adaptabile](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) pentru a reduce dimensiunea imaginilor încărcate în pagină. Dacă folosești Views pentru a afișa mai multe elemente de conținut într-o pagină, îți recomandăm să implementezi paginarea pentru a limita numărul elementelor de conținut afișate într-o anumită pagină."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Activează opțiunea „Aggregate CSS files” (Agregă fișierele CSS) în pagina „Administration » Configuration » Development” (Administrare » Configurare » Dezvoltare). Poți să configurezi și opțiuni de agregare mai avansate folosind [module suplimentare](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), ca să accelerezi site-ul prin concatenarea, minimizarea și comprimarea stilurilor CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Activează opțiunea „Aggregate JavaScript files” (Agregă fișierele JavaScript) în pagina „Administration » Configuration » Development” (Administrare » Configurare » Dezvoltare). Poți să configurezi și opțiuni de agregare mai avansate folosind [module suplimentare](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), ca să accelerezi site-ul prin concatenarea, minimizarea și comprimarea elementelor JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Îți recomandăm să elimini regulile CSS nefolosite și să atașezi numai bibliotecile Drupal necesare la pagina sau componenta relevantă dintr-o pagină. Accesează [linkul spre documentația Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) pentru detalii. Ca să identifici bibliotecile atașate care adaugă conținut CSS neesențial, rulează [acoperirea codului](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) în Chrome DevTools. Poți identifica tema/modulul responsabil din adresa URL a foii de stil dacă dezactivezi agregarea CSS pe site-ul Drupal. Caută teme/module care au multe foi de stil în listă cu mult roșu în bara acoperirii codului. O temă/un modul ar trebui să pună în coadă o foaie de stil numai dacă este într-adevăr folosită în pagină."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Activează comprimarea pe serverul Next.js. [Află mai multe](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Folosește componenta `nuxt/image` și setează `format=\"webp\"`. [Află mai multe](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Folosește React DevTools Profiler, care beneficiază de API-ul Profiler pentru a măsura performanța de redare a componentelor. [Află mai multe.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Plasează videoclipuri în `VideoBoxes`, personalizează-le folosind `Video Masks` sau adaugă `Transparent Videos`. [Află mai multe](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Încarcă imagini folosind `Wix Media Manager` pentru a te asigura că sunt difuzate automat ca WebP. Găsește [mai multe modalități de optimizare](https://support.wix.com/en/article/site-performance-optimizing-your-media) a conținutului media din site."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Când [adaugi un cod terță parte](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) în fila `Custom Code` din tabloul de bord al site-ului, asigură-te că acesta este amânat sau încărcat la sfârșitul corpului codului. Dacă este posibil, folosește [integrările](https://support.wix.com/en/article/about-marketing-integrations) Wix pentru a încorpora instrumente de marketing în site. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix folosește CDN-uri și stocarea în memoria cache pentru a oferi cât mai rapid răspunsuri pentru majoritatea vizitatorilor. Îți recomandăm să [activezi manual stocarea în memoria cache](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) pentru site, mai ales dacă folosești `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Examinează codul terță parte pe care l-ai adăugat în site în fila `Custom Code` din tabloul de bord al site-ului și păstrează numai serviciile necesare pentru site. [Află mai multe](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Îți recomandăm să încarci GIF-ul într-un serviciu care îl va pune la dispoziție pentru încorporare ca videoclip HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Salvează ca JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Deschide în vizualizator"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Valorile sunt estimate și pot varia. [Scorul de performanță este calculat](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) direct folosind aceste valori."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Vezi urma inițială"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Vezi urma"
   },
diff --git a/front_end/third_party/lighthouse/locales/ru.json b/front_end/third_party/lighthouse/locales/ru.json
index 6c07189..9f7cdef 100644
--- a/front_end/third_party/lighthouse/locales/ru.json
+++ b/front_end/third_party/lighthouse/locales/ru.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Атрибуты `[aria-*]` соответствуют своим ролям"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Если у элемента нет названия, доступного программам чтения с экрана, пользователи услышат его общее название и не поймут, для чего он нужен. Подробнее о том, [как сделать элементы команд более доступными](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)…"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "У элементов `button`, `link` и `menuitem` есть названия, доступные программам чтения с экрана"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Если у элементов диалогового окна ARIA нет доступных имен, пользователи программ чтения с экрана могут не понимать назначение этих элементов. Подробнее о том, [как сделать элементы диалогового окна ARIA более доступными](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)…"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "У элементов с атрибутом `role=\"dialog\"` или `role=\"alertdialog\"` нет доступных названий"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "У элементов с атрибутом `role=\"dialog\"` или `role=\"alertdialog\"` есть доступные названия"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Программы чтения с экрана и другие технологии специальных возможностей могут работать некорректно, если для `<body>` задан атрибут `aria-hidden=\"true\"`. Подробнее о том, [как `aria-hidden` влияет на элемент body](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)…"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Недействительные значения атрибутов `[role]` отсутствуют"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Если добавить отделенный разметкой атрибут `role=text` перед текстовым узлом и после него, VoiceOver будет определять текст как одну фразу, но фокусируемые потомки не будут озвучиваться. Подробнее [об атрибуте `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)…"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "У элементов с атрибутом `role=text` есть фокусируемые потомки"
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "У элементов атрибута `role=text` нет фокусируемых потомков"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Если у переключателя нет названия, доступного программам чтения с экрана, пользователи услышат его общее название и не поймут, для чего он нужен. Подробнее [о переключателях](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)…"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Идентификаторы ARIA уникальны"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Если у заголовка нет содержимого или текст недоступен, пользователи программы чтения с экрана не могут получить информацию о структуре страницы. Подробнее [о заголовках](https://dequeuniversity.com/rules/axe/4.7/empty-heading)…"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "В элементах заголовка нет содержимого"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Во всех элементах заголовка есть содержимое"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Когда программы чтения с экрана или другие технологии специальных возможностей обнаруживают поля формы с несколькими ярлыками, они озвучивают только первый, последний или все ярлыки. Это может запутать пользователей. Подробнее о том, [как использовать ярлыки формы](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)…"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "У элемента `<html>` есть атрибут `[xml:lang]`, основной язык которого совпадает с языком в атрибуте `[lang]`"
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "У ссылок с одним назначением должно быть одинаковое описание. Так пользователь поймет, куда они ведут, и решит, следует ли по ним переходить. Подробнее [об одинаковых ссылках](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)…"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "У одинаковых ссылок разное назначение"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "У одинаковых ссылок одно назначение"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "В информационных элементах должен содержаться короткий и ясный альтернативный текст. Если элемент декоративный, то атрибут alt для него можно оставить пустым. Подробнее [об атрибуте `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)…"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "У элементов изображений есть атрибут `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Добавьте к кнопкам ввода легко различимый текст, чтобы пользователи программы чтения с экрана могли понимать их назначение. Подробнее [о кнопках ввода](https://dequeuniversity.com/rules/axe/4.7/input-button-name)…"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Элементы `<input type=\"image\">` содержат атрибут `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Ярлыки нужны для того, чтобы программы чтения с экрана и другие технологии специальных возможностей могли правильно озвучивать элементы управления формой. Подробнее [о ярлыках для элементов формы](https://dequeuniversity.com/rules/axe/4.7/label)…"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Элементам формы присвоены соответствующие ярлыки"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Если добавить ориентир main, пользователям программы чтения с экрана будет удобнее перемещаться по веб-странице. Подробнее [об ориентирах](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)…"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "В документе нет ориентира main"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "В документе есть ориентир main"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Многие пользователи не видят текст с низкой контрастностью, или им сложно его воспринимать. Хорошо различимый текст ссылки облегчает работу людям со слабым зрением. Подробнее о том, [как сделать ссылку хорошо различимой](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)…"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Ссылки нельзя различить, не опираясь на цвет"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Ссылки можно различить, не опираясь на цвет"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Текст ссылок (как и альтернативный текст для изображений, используемых в качестве ссылок) должен быть уникальным, фокусируемым и доступным для программ чтения с экрана. Подробнее о том, [как сделать ссылки доступными для программ с технологиями специальных возможностей](https://dequeuniversity.com/rules/axe/4.7/link-name)…"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "У элементов `<object>` есть альтернативный текст"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Элементы формы без эффективных меток могут доставить неудобства пользователям программы чтения с экрана. Подробнее [об элементе `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)…"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "У элементов select нет связанных элементов label"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "У элементов select есть связанные элементы label"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Значение больше 0 подразумевает явное указание порядка навигации. Это может создавать трудности для пользователей с ограниченными возможностями. Подробнее [об атрибуте `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)…"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Нет элементов со значением атрибута `[tabindex]` выше 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Чтобы пользователям было проще перемещаться по таблицам с помощью программ чтения с экрана, не используйте в таблицах ячейки с атрибутом `[colspan]` для обозначения подписей. Подробнее [о подписях](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)…"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Для обозначения подписей в таблицах используется элемент `<caption>` вместо ячеек с атрибутом `[colspan]`"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Области прикосновения и расстояние между ними недостаточно большие"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Области прикосновения и расстояние между ними достаточно большие"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Чтобы пользователям было проще перемещаться по таблицам с помощью программ чтения с экрана, рекомендуем добавлять заголовки для элементов `<td>` в больших таблицах (состоящих из трех или более ячеек в высоту и ширину). Подробнее [о заголовках таблиц](https://dequeuniversity.com/rules/axe/4.7/td-has-header)…"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Страница не содержит URL манифеста <link>."
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Подходящих файлов service worker не найдено. Перезагрузите страницу или убедитесь, что файлы service worker текущей страницы включают область действия и стартовый URL из манифеста."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Для проверки файла service worker в манифесте должно быть поле start_url."
   },
@@ -969,7 +1083,7 @@
     "message": "Атрибут prefer_related_applications поддерживается только в бета-версии Chrome и стабильной версии на устройствах Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse не удалось проверить наличие файла service worker. Повторите попытку в более новой версии Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Android не поддерживает схему URL манифеста ({scheme})."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Совокупное смещение макета – это величина, на которую смещаются видимые элементы области просмотра при загрузке. Подробнее о [совокупном смещении макета](https://web.dev/cls/)…"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Взаимодействие до следующей отрисовки – показатель скорости отклика страницы. Он отражает, через какое время становится виден ответ страницы на ввод данных пользователем. Подробнее [о взаимодействии до следующей отрисовки](https://web.dev/inp/)…"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Первая отрисовка контента – показатель, который отражает время между началом загрузки страницы и появлением первого изображения или блока текста. Подробнее [о первой отрисовке контента](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)…"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Первая значимая отрисовка – показатель, определяющий интервал времени между началом загрузки страницы и появлением основного контента. Подробнее [о первой значимой отрисовке](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)…"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Взаимодействие до следующей отрисовки – показатель скорости отклика страницы. Он отражает, через какое время становится виден ответ страницы на ввод данных пользователем. Подробнее [о взаимодействии до следующей отрисовки](https://web.dev/inp/)…"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Время загрузки для взаимодействия – показатель, который отражает время, за которое страница полностью подготавливается к взаимодействию с пользователем. Подробнее [о времени загрузки для взаимодействия](https://developer.chrome.com/docs/lighthouse/performance/interactive/)…"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Избегайте большого количества переадресаций"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Чтобы установить бюджет для количества и размера ресурсов на странице, добавьте файл budget.json. Подробнее [о бюджетах производительности](https://web.dev/use-lighthouse-for-performance-budgets/)…"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 запрос • {byteCount, number, bytes} КиБ}one{# запрос • {byteCount, number, bytes} КиБ}few{# запроса • {byteCount, number, bytes} КиБ}many{# запросов • {byteCount, number, bytes} КиБ}other{# запроса • {byteCount, number, bytes} КиБ}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Постарайтесь уменьшить количество запросов и размеры передаваемых данных"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Канонические ссылки помогают определить, какой URL будет показан в результатах поиска. Подробнее [о канонических ссылках](https://developer.chrome.com/docs/lighthouse/seo/canonical/)…"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Время до получения первого байта от сервера допустимое"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service worker – это технология, позволяющая добавлять в приложения возможности современных веб-приложений, например поддержку офлайн-режима, добавление на главный экран и push-уведомления. Подробнее [о файлах service worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)…"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Страницей управляет Service Worker, но не найден `start_url`, так как не удалось интерпретировать манифест как JSON."
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Страницей управляет Service Worker, но `start_url` ({startUrl}) находится вне его области действия ({scopeUrl})."
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Страницей управляет Service Worker, но не удалось найти `start_url`, так как не был получен манифест."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "В этом источнике несколько Service Worker, но страница {pageUrl} не входит в их область действия."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Не регистрируется Service Worker, управляющий страницей и `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Регистрируется Service Worker, управляющий страницей и `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Приложение оставляет у пользователей более приятное впечатление, когда оно встречает их тематической заставкой. Подробнее [о заставках](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)…"
   },
@@ -1623,7 +1707,7 @@
     "message": "Рекомендации"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Узнайте, какие трудности могут возникнуть у людей с ограниченными возможностями при использовании вашего веб-приложения, и [сделайте его доступнее](https://developer.chrome.com/docs/lighthouse/accessibility/). Тестирование вручную поможет выявить проблемы доступности, которые не были обнаружены автоматически."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Ручная проверка позволяет охватить области, которые невозможно протестировать автоматически. Подробнее [о проверке специальных возможностей](https://web.dev/how-to-review/)…"
@@ -2769,7 +2853,7 @@
     "message": "Чтобы применять отложенную загрузку изображений, установите [модуль Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search). Разрешив загружать скрытые изображения позже, вы ускорите отрисовку сайта."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Рекомендуем использовать специальный модуль, например [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg), позволяющий встраивать критически важный код CSS и JavaScript, а также асинхронно загружать ресурсы с помощью JavaScript. Обратите внимание, что такие модули могут привести к сбоям в работе сайта. Не исключено, что вам потребуется внести изменения в код."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "На время ответа влияют как используемые на сайте темы и модули, так и настройки сервера. Советуем найти более оптимизированную тему, тщательно подобрать модуль для оптимизации и/или обновить версию сервера. Серверы вашего хостинга должны поддерживать кеширование операционного кода PHP, кеширование в памяти для ускорения ответа баз данных (например, Redis или Memcached), а также оптимизированную логику приложения, чтобы быстрее подготавливать страницы к загрузке."
@@ -2778,10 +2862,10 @@
     "message": "Чтобы уменьшить размер изображений на странице, используйте [адаптивные стили изображений](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8). Если вы используете Views для показа нескольких материалов на одной странице, рекомендуем применить разбивку на страницы, чтобы ограничить количество показываемых элементов."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Убедитесь, что включен параметр \"Объединить файлы CSS\" на странице \"Администрирование > Конфигурация > Разработка\". Расширенные настройки агрегации можно задать с помощью [дополнительных модулей](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), которые позволяют объединять, уменьшать и сжимать таблицы стилей CSS для ускорения загрузки сайта."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Убедитесь, что включен параметр \"Объединить файлы JavaScript\" на странице \"Администрирование > Конфигурация > Разработка\". Расширенные настройки агрегации можно задать с помощью [дополнительных модулей](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), которые позволяют объединять, уменьшать и сжимать файлы JavaScript для ускорения загрузки сайта."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Рекомендуем удалять ненужные правила CSS и подключать к страницам и их компонентам только те библиотеки Drupal, которые требуются для их загрузки. Подробные сведения можно прочитать в [документации Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Чтобы найти подключенные библиотеки, которые загружают неиспользуемый код JavaScript, запустите [анализ покрытия кода](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) в Инструментах разработчика Chrome. Если на вашем сайте Drupal выключена агрегация CSS, определить проблемный модуль или тему можно по URL-адресу таблицы стилей. Обращайте внимание на модули и темы с большим количеством таблиц стилей, где при анализе покрытия кода преобладает красный цвет. Таблица стилей должна попадать в очередь, только если она используется на странице."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Включите сжатие на сервере Next.js. [Подробнее…](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Используйте компонент `nuxt/image`, чтобы установить значение `format=\"webp\"`. [Подробнее…](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Используйте подключаемый модуль React DevTools, который с помощью API профилировщика может оценить скорость визуализации ваших компонентов. [Подробнее…](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Поместите видео в `VideoBoxes`, настройте их с помощью `Video Masks` или добавьте `Transparent Videos`. [Подробнее…](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Загрузите изображения, используя `Wix Media Manager`, чтобы они автоматически преобразовывались в формат WebP. Узнайте [о других способах оптимизации медиаконтента на сайте](https://support.wix.com/en/article/site-performance-optimizing-your-media)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Если вы [добавляете сторонний код](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) на вкладке `Custom Code` панели управления сайта, вызывайте или загружайте его в конце кода тела страницы. По возможности встраивайте маркетинговые инструменты в сайт с помощью [интеграций](https://support.wix.com/en/article/about-marketing-integrations) Wix. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix использует CDN и кеширование, чтобы как можно быстрее обрабатывать ответы для большинства посетителей. Рекомендуем [вручную включить кеширование](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) для сайта, особенно если вы используете код `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Просмотрите весь сторонний код, который вы добавили на сайт на вкладке `Custom Code` панели управления, и оставьте только необходимые сервисы. [Подробнее…](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Используйте сервисы, которые позволяют встраивать GIF-файлы на страницы сайта в формате видео HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Сохранить как JSON-файл"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Открыть в Viewer"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Значения приблизительные и могут изменяться. [Уровень производительности рассчитывается](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) непосредственно на основании этих показателей."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Посмотреть оригинальную трассировку"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Посмотреть трассировку"
   },
diff --git a/front_end/third_party/lighthouse/locales/sk.json b/front_end/third_party/lighthouse/locales/sk.json
index 54a00b6..4bebfc1 100644
--- a/front_end/third_party/lighthouse/locales/sk.json
+++ b/front_end/third_party/lighthouse/locales/sk.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atribúty `[aria-*]` zodpovedajú svojim rolám"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Keď prvok nemá dostupný názov, čítačky obrazovky ho oznamujú pod generickým názvom, takže je pre používateľov nepoužiteľný. [Ako zlepšiť dostupnosť prvkov príkazov](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Prvky `button`, `link` a `menuitem` majú dostupné názvy"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Prvky ARIA dialógových okien bez dostupných názvov môžu brániť používateľom čítačiek obrazovky rozpoznať ich účel. [Ako zlepšiť dostupnosť prvkov ARIA dialógových okien](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Prvky s atribútom `role=\"dialog\"` alebo `role=\"alertdialog\"` nemajú dostupné názvy."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Prvky s atribútom `role=\"dialog\"` alebo `role=\"alertdialog\"` majú dostupné názvy."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Asistenčné technológie, ako sú čítačky obrazovky, nepracujú konzistentne, keď je v dokumente `<body>` nastavený atribút `aria-hidden=\"true\"`. [Ako `aria-hidden` ovplyvňuje textovú časť dokumentov](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Hodnoty `[role]` sú platné"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Ak pridáte `role=text` okolo rozdelenia uzlov textu pomocou značiek, VoiceOver bude text považovať za jednu frázu, ale označiteľné podradené prvky daného prvku nebudú oznamované. [Ďalšie informácie o atribúte `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Prvky s atribútom `role=text` majú označiteľné podradené prvky."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Prvky s atribútom `role=text` nemajú označiteľné podradené prvky."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Keď pole prepínača nemá dostupný názov, čítačky obrazovky ho oznamujú pod generickým názvom, takže je pre používateľov nepoužiteľné. [Ďalšie informácie o poliach prepínačov](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Identifikátory ARIA nie sú jedinečné"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Nadpis bez obsahu alebo nedostupný text bránia prístupu používateľov čítačiek obrazovky k informáciám v štruktúre stránky. [Ďalšie informácie o nadpisoch](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Prvky nadpisu nezahŕňajú obsah."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Všetky prvky napisov zahŕňajú obsah."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Asistenčné technológie, ako napríklad čítačky obrazovky, ktoré používajú buď prvý, posledný, alebo všetky štítky, môžu polia formulárov s viacerými štítkami ohlásiť nepresne. [Ako používať štítky formulárov](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Prvok `<html>` má atribút `[xml:lang]` s rovnakým základným jazykom ako atribút `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Odkazy s rovnakým cieľom musia mať rovnaký opis, aby používatelia porozumeli ich účelu a mohli sa rozhodnúť, či ich použijú. [Ďalšie informácie o rovnakých odkazoch](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identické odkazy nemajú rovnaký účel."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identické odkazy majú rovnaký účel."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informatívne prvky by mali mať krátky opisný alternatívny text. Dekoratívne prvky je možné ignorovať pomocou prázdneho atribútu alt. [Ďalšie informácie o atribúte `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Prvky obrázka majú atribúty `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Pridaním rozlíšiteľného a prístupného textu k tlačidlám vstupu môžete pomôcť používateľom čítačiek obrazovky porozumieť účelu tlačidla vstupu. [Ďalšie informácie o tlačidlách vstupu](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Prvky `<input type=\"image\">` majú text `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Štítky zaisťujú, aby asistenčné technológie (napríklad čítačky obrazovky) správne oznamovali ovládacie prvky formulárov. [Ďalšie informácie o štítkoch prvkov formulárov](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "K prvkom formulára sú priradené štítky"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Jeden hlavný orientačný bod pomáha používateľom čítačiek obrazovky prechádzať webovú stránku. [Ďalšie informácie o orientačných bodoch](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokument nemá hlavný orientačný bod."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokument má hlavný orientačný bod."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Mnohí používatelia majú problémy s čítaním textu s nízkym kontrastom, prípadne to vôbec nedokážu. Rozpoznateľný text odkazu zlepšuje dojem slabozrakých používateľov. [Ako nastaviť rozlíšiteľné odkazy](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Odkazy sú rozlíšiteľné iba na základe farebného odlíšenia."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Odkazy sú rozlíšiteľné aj bez farebného odlíšenia."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Rozpoznateľný, jedinečný a zamerateľný text odkazu (a alternatívny text pre obrázky, ktoré sa používajú ako odkazy) zlepšuje navigáciu pomocou čítačky obrazovky. [Ako sprístupniť odkazy](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Prvky `<object>` majú alternatívny text"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Prvky formulárov bez efektívnych štítkov môžu byť pre používateľov čítačiek obrazovky frustrujúce. [Ďalšie informácie o prvku `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Vybrané prvky nemajú spojené prvky štítkov."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Vybrané prvky majú spojené prvky štítkov."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Hodnota väčšia ako 0 označuje explicitné usporiadanie navigácie. Ide o technicky platné riešenie, ale často vedie k nepríjemným skúsenostiam používateľov, ktorí potrebujú asistenčné technológie. [Ďalšie informácie o atribúte `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Žiadny prvok nemá hodnotu `[tabindex]` vyššiu ako 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Čítačky obrazovky majú funkcie, ktoré zjednodušujú prehliadanie tabuliek. Ak zaistíte, že tabuľky budú používať príslušný prvok titulku namiesto buniek s atribútom `[colspan]`, môžete zlepšiť prostredie pre používateľov čítačiek obrazovky. [Ďalšie informácie o titulkoch](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabuľky uvádzajú titulok pomocou `<caption>` namiesto buniek s atribútom `[colspan]`."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Miesta dotyku nie sú dostatočne veľké ani priestorné."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Miesta dotyku sú dostatočne veľké aj priestorné."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Čítačky obrazovky majú funkcie, ktoré zjednodušujú prehliadanie tabuliek. Ak zaistíte, že prvky `<td>` vo veľkej tabuľke (minimálne tri bunky na šírku a výšku) budú mať spojenú hlavičku tabuľky, môžete tým zlepšiť prostredie pre používateľov čítačiek obrazovky. [Ďalšie informácie o hlavičkách tabuliek](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Stránka nemá webovú adresu <link> manifestu"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nezistila sa žiadna zodpovedajúca obsluha. Stránku budete musieť zrejme znova načítať. Prípadne skontrolujte, či rozsah obsluhy pre aktuálnu stránku zahrnuje rozsah a začiatočnú webovú adresu z manifestu."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Nepodarilo sa skontrolovať obsluhu bez poľa „start_url“ v manifeste"
   },
@@ -969,7 +1083,7 @@
     "message": "Parameter prefer_related_applications je podporovaný iba v beta verzii a stabilných verziách Chromu v Androide."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Nástroju Lighthouse sa nepodarilo rozpoznať obsluhu. Skúste to s novou verziou Chromu."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Schéma webovej adresy manifestu ({scheme}) nie je v Androide podporovaná."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Kumulatívna zmena rozloženia meria pohyb viditeľných prvkov v rámci oblasti zobrazenia. [Ďalšie informácie o metrike Kumulatívna zmena rozloženia](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Čas od interakcie do ďalšieho vykreslenia meria responzívnosť stránky, teda ako dlho jej trvá viditeľne odpovedať na vstup používateľa. [Ďalšie informácie o metrike Čas od interakcie do ďalšieho vykreslenia](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Prvé vykreslenie obsahu označuje čas, za ktorý je vykreslený prvý text alebo obrázok. [Ďalšie informácie o metrike Prvé vykreslenie obsahu](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Prvé zmysluplné vykreslenie meria, kedy je hlavný obsah stránky viditeľný. [Ďalšie informácie o metrike Prvé zmysluplné vykreslenie](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Čas od interakcie do ďalšieho vykreslenia meria responzívnosť stránky, teda ako dlho jej trvá viditeľne odpovedať na vstup používateľa. [Ďalšie informácie o metrike Čas od interakcie do ďalšieho vykreslenia](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Čas do interaktivity je údaj o tom, koľko času prejde, kým bude stránka plne interaktívna. [Ďalšie informácie o metrike Čas do interaktivity](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Vyhnite sa viacnásobným presmerovaniam stránky"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Ak chcete nastaviť rozpočty pre množstvo a veľkosť zdrojov stránky, pridajte súbor budget.json. [Ďalšie informácie o výkonnostných rozpočtoch](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 požiadavka • {byteCount, number, bytes} KiB}few{# požiadavky • {byteCount, number, bytes} KiB}many{# requests • {byteCount, number, bytes} KiB}other{# požiadaviek • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Udržiavajte nízke počty žiadostí a malé veľkosti prenosov"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Kanonické odkazy navrhujú, ktorá webová adresa sa má zobraziť vo výsledkoch vyhľadávania. [Ďalšie informácie o kanonických odkazoch](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Počiatočný čas odpovede servera bol krátky"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Obsluha je technológia, ktorá umožňuje vašej aplikácii používať mnoho funkcií progresívnej webovej aplikácie, napríklad offline režim, pridanie na plochu a upozornenia aplikácie. [Ďalšie informácie o obsluhe](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Túto stránku ovláda obsluha, ale nenašla sa vlastnosť `start_url`, pretože sa nepodarilo analyzovať manifest ako platný súbor JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Túto stránku ovláda obsluha, ale hodnota `start_url` ({startUrl}) sa nenachádza v rozsahu obsluhy ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Túto stránku ovláda obsluha, ale nenašla sa vlastnosť `start_url`, pretože sa nepodarilo načítať manifest."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Zdroj obsahuje jednu alebo viac obslúh, avšak stránka ({pageUrl}) nie je v rozsahu."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Nemá zaregistrovanú obsluhu, ktorá ovláda stránku a vlastnosť `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Má zaregistrovanú obsluhu, ktorá ovláda stránku a vlastnosť `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Úvodná obrazovka s motívom zaistí skvelý dojem používateľa, keď si spustí vašu aplikáciu z plochy. [Ďalšie informácie o úvodných obrazovkách](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "Osvedčené postupy"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Tieto kontroly zvýrazňujú možnosti [zlepšenia dostupnosti vašej webovej aplikácie](https://developer.chrome.com/docs/lighthouse/accessibility/). Automaticky je možné zistiť iba podmnožinu problémov s dostupnosťou, preto sa odporúča ručné testovanie."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Tieto položky sa zaoberajú oblasťami, ktoré automatické testovanie nemôže obsiahnuť. Ďalšie informácie získate v [sprievodcovi vykonávaním kontroly dostupnosti](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Nainštalujte [modul Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), ktorý môže načítavať obrázky až v poslednej chvíli. Tieto moduly umožňujú odložiť obrázky mimo obrazovky na zlepšenie výkonnosti."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Zvážte použitie modulu na vloženie kľúčovej šablóny CSS a JavaSciptu do textu, prípadne potenciálne načítavajte podklady asynchrónne prostredníctvom JavaScriptu, ako je modul [Rozšírená agregácia šablóny CSS a JavaScriptu](https://www.drupal.org/project/advagg). Upozorňujeme, že optimalizácie poskytnuté týmto modulom môžu porušiť váš web, takže budete musieť zrejme zmeniť kód."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Čas odpovede servera ovplyvňujú motívy, moduly a špecifikácie servera. Odporúčame nájsť optimalizovanejší motív, opatrne vybrať modul na optimalizáciu alebo inovovať server. Vaše hostiteľské servery by mali využívať ukladanie kódov operácií PHP do vyrovnávacej pamäte, ukladanie do vyrovnávacej pamäte na zníženie časov dopytov databázy (napríklad Redis alebo Memcached), ako aj optimalizovanú aplikačnú logiku na skrátenie prípravy stránok."
@@ -2778,10 +2862,10 @@
     "message": "Zvážte použitie [štýlov responzívnych obrázkov](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8), aby ste znížili veľkosť obrázkov načítavaných na stránke. Ak zobrazujete viacero položiek obsahu na stránke pomocou Zobrazení, zvážte implementáciu stránkovania, aby ste obmedzili počet položiek obsahu zobrazovaných na danej stránke."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Skontrolujte, či ste povolili „Agregovať súbory CSS“ na stránke Správa » Konfigurácia » Vývoj. Tiež môžete nakonfigurovať pokročilejšie možnosti agregácie prostredníctvom [ďalších modulov](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search), aby ste tak zrýchlili svoj web zreťazením, minifikáciou a kompresiou štýlov CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Skontrolujte, či ste povolili „Agregovať súbory JavaScriptu“ na stránke Správa » Konfigurácia » Vývoj. Tiež môžete nakonfigurovať pokročilejšie možnosti agregácie prostredníctvom [ďalších modulov](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search), aby ste ak zrýchlili svoj web zreťazením, minifikáciou a kompresiou podkladov JavaScriptu."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Zvážte odstránenie nepoužívaných pravidiel šablóny CSS a na relevantnú stránku alebo do komponentu na stránke priložte iba potrebné knižnice Drupal. Podrobnosti si zobrazíte pomocou [odkazu na dokumentáciu Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Priložené knižnice pridávajúce externý JavaScript skúste identifikovať spustením funkcie [zahrnutia v kóde](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) v nástroji Chrome DevTools. Príslušný motív alebo modul identifikujete pomocou webovej adresy šablóny so štýlmi, keď je na webe Drupal deaktivovaná agregácia šablón CSS. Nájdite motívy alebo moduly, ktoré majú v zozname mnoho šablón so štýlmi s veľkým počtom červených hodnôt vo funkcii zahrnutia v kóde. Motív alebo modul by mal šablónu so štýlmi zaradiť do poradia iba vtedy, keď sa používa na príslušnej stránke."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Povoľte kompresiu na serveri Next.js. [Ďalšie informácie](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Použite komponent `nuxt/image` a nastavte `format=\"webp\"`. [Ďalšie informácie](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Na meranie výkonnosti vykresľovania svojich komponentov použite profilovač React DevTools Profiler, ktorý využíva rozhranie Profiler API. [Ďalšie informácie](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Vložte videá do atribútu `VideoBoxes`, prispôsobte ich pomocou atribútu `Video Masks` alebo pridajte `Transparent Videos`. [Ďalšie informácie](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Nahrajte obrázky pomocou formátu `Wix Media Manager`, čím zaistíte, že sa budú automaticky zobrazovať ako WebP. Zistite [ďalšie spôsoby optimalizácie](https://support.wix.com/en/article/site-performance-optimizing-your-media) médií webu."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Pri [pridávaní kódu tretej strany](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) na karte `Custom Code` hlavného panela vášho webu sa uistite, že je odložený alebo načítavaný na konci textu kódu. Ak je to možné, vložte marketingové nástroje na svoj web pomocou [integrácii](https://support.wix.com/en/article/about-marketing-integrations) služby Wix. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix zobrazuje väčšine návštevníkov odpovede čo najrýchlejšie pomocou sietí na distribúciu obsahu a ukladaním do vyrovnávacej pamäte. Zvážte [manuálne povolenie ukladania do vyrovnávacej pamäte](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) v súvislosti so svojím webom, obzvlášť vtedy, keď používate `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Skontrolujte každý kód tretej strany, ktorý ste pridali na svoj web na karte `Custom Code` jeho hlavného panela, a ponechajte si iba služby, ktoré sú preň nevyhnutné. [Ďalšie informácie](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Zvážte nahranie gifu do služby, ktorá umožní jeho vloženie v podobe videa HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Uložiť ako JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Otvoriť v zobrazovači"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Hodnoty sú odhady, ktoré sa môžu líšiť. [Skóre výkonnosti sa vypočítava](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) priamo z týchto metrík."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Zobraziť pôvodnú stopu"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Zobraziť stopu"
   },
diff --git a/front_end/third_party/lighthouse/locales/sl.json b/front_end/third_party/lighthouse/locales/sl.json
index 3bf9c28..c8e34e1 100644
--- a/front_end/third_party/lighthouse/locales/sl.json
+++ b/front_end/third_party/lighthouse/locales/sl.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atributi `[aria-*]` se ujemajo s svojimi vlogami"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Če element nima dostopnega imena, ga bralniki zaslona predstavijo z generičnim imenom, s čimer je neuporaben za uporabnike, ki se zanašajo na bralnike zaslona. [Preberite, kako izboljšate dostop do elementov ukaza](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elementi `button`, `link` in `menuitem` imajo dostopna imena."
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Elementi pogovornih oken ARIA brez imen za osebe s posebnimi potrebami lahko uporabnikom bralnikov zaslona preprečijo spoznati namen teh elementov. [Preberite, kako lahko naredite pogovorna okna ARIA dostopnejša za osebe s posebnimi potrebami](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementi z vlogo `role=\"dialog\"` ali `role=\"alertdialog\"` nimajo imen za osebe s posebnimi potrebami."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementi z vlogo `role=\"dialog\"` ali `role=\"alertdialog\"` imajo imena za osebe s posebnimi potrebami."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Podporne tehnologije, kot so bralniki zaslona, delujejo nedosledno, če je atribut `aria-hidden=\"true\"` nastavljen na dokument `<body>`. [Preberite, kako `aria-hidden` vpliva na telo dokumenta](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Vrednosti `[role]` so veljavne"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Če okoli besedilnega vozlišča, ki ga delijo oznake, dodate element `role=text`, funkciji VoiceOver omogočite, da ga obravnava kot eno besedno zvezo, vendar podrejeni elementi elementa, ki jih je mogoče izbrati, ne bodo najavljeni. [Preberite več o atributu `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementi z atributom `role=text` imajo podrejene elemente, ki jih je mogoče izbrati."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementi z atributom `role=text` nimajo podrejenih elementov, ki jih je mogoče izbrati."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Če preklopno polje nima dostopnega imena, ga bralniki zaslona predstavijo z generičnim imenom, s čimer je neuporaben za uporabnike, ki se zanašajo na bralnike zaslona. [Preberite več o preklopnih poljih](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ID-ji ARIA so enolični"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Naslov brez vsebine ali z besedilom, ki ni prilagojeno osebam s posebnimi potrebami, uporabnikom bralnikov zaslona preprečuje dostop do informacij v strukturi strani. [Preberite več o naslovih](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Elementi naslova so brez vsebine."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Vsi elementi naslova imajo vsebino."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Polja v obrazcih z več oznakami lahko podporne tehnologije, kot so bralniki zaslona, ki uporabljajo prvo, zadnjo ali vse oznake, najavijo tako, da zbegajo uporabnike. [Preberite, kako uporabljate oznake obrazca](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Element `<html>` ima atribut `[xml:lang]` z istim osnovnim jezikom kot atribut `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Povezave z istim ciljem morajo imeti isti opis, da bodo uporabniki lažje razumeli namen povezave in se odločili, ali jo bodo uporabili. [Preberite več o enakih povezavah](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Enake povezave nimajo istega namena."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Enake povezave imajo isti namen."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informativni elementi naj imajo kratko, opisno nadomestno besedilo. Okrasne elemente je mogoče prezreti s praznim nadomestnim atributom. [Preberite več o atributu `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Elementi slik imajo atribute `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Če gumbom za vnos dodate prepoznavno in dostopno besedilo, bodo uporabniki bralnikov zaslona morda bolje razumeli namen gumba za vnos. [Preberite več o gumbih za vnos](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Elementi `<input type=\"image\">` imajo besedilo `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Oznake zagotavljajo, da pomožne tehnologije, na primer bralniki zaslona, ustrezno predstavijo kontrolnike za obrazce. [Preberite več o oznakah elementov obrazca](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Elementi obrazcev imajo povezane oznake"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Eden glavnih identifikatorjev območja na strani pomaga uporabnikom bralnikov zaslona pri premikanju po spletni strani. [Preberite več o glavnih identifikatorjih območja](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokument nima glavnega identifikatorja območja."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokument ima glavni identifikator območja na strani."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Besedilo z nizkim kontrastom številni uporabniki težko preberejo ali ga sploh ne morejo prebrati. Razločno besedilo povezave izboljša izkušnjo slabovidnim uporabnikom. [Preberite, kako poskrbite, da bodo povezave razločne](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Razločevanje povezav terja uporabo barv."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Povezave je mogoče razločiti brez uporabe barv."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Besedilo za povezavo (in nadomestno besedilo za slike, kadar so uporabljene kot povezave), ki je prepoznavno in edinstveno ter ga je mogoče izbrati, uporabnikom bralnikov zaslona zagotavlja boljšo izkušnjo pomikanja. [Preberite, kako poskrbite, da bodo povezave dostopne](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Elementi `<object>` imajo nadomestno besedilo"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Elementi obrazcev brez učinkovitih oznak lahko uporabnikom bralnikov zaslona povzročijo neprijetne izkušnje. [Preberite več o elementu `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Določeni elementi nimajo povezanih elementov oznak."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Določeni elementi imajo povezane elemente oznak."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Vrednost, večja od 0, kaže na izrecno razporeditev pomikanja. Čeprav je načeloma veljavna, pogosto vodi v zoprne izkušnje za uporabnike, ki se zanašajo na pomožne tehnologije. [Preberite več o atributu `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Noben element nima večje vrednosti za `[tabindex]` od 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Bralniki zaslona imajo funkcije za preprostejše pomikanje po tabelah. Če zagotovite, da tabele namesto celic z atributom `[colspan]` uporabljajo dejanski element napisov, lahko izboljšate izkušnjo za uporabnike bralnikov zaslona. [Več o napisih](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabele namesto celic z atributom `[colspan]` za navajanje napisa uporabljajo to: `<caption>`."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Ciljna območja dotika nimajo zadostne velikosti ali razmika."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Ciljna območja dotika imajo zadostno velikost in razmik."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Bralniki zaslona imajo funkcije za preprostejše pomikanje po tabelah. Če zagotovite, da imajo elementi `<td>` v veliki tabeli (3 ali več celic v širino in višino) povezano glavo tabele, lahko izboljšate izkušnjo za uporabnike bralnikov zaslona. [Preberite več o glavah tabel](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Stran nima URL-ja manifesta <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Noben ujemajoči proces storitve ni zaznan. Morda boste morali znova naložiti stran oziroma preveriti, ali obseg procesa storitve za trenutno stran zajema obseg in začetni URL manifesta."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Procesa storitve ni mogoče preveriti brez polja »start_url« v manifestu"
   },
@@ -969,7 +1083,7 @@
     "message": "Vrednost »prefer_related_applications« je podprta samo v Chromu Beta in stabilnih različicah Chroma v sistemu Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse ni uspel zaznati procesa storitve. Poskusite z novejšo različico Chroma."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Shema URL-ja v manifestu ({scheme}) ni podprta v sistemu Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Kumulativna sprememba postavitve meri premikanje vidnih elementov znotraj vidnega območja. [Preberite več o meritvi »Kumulativna sprememba postavitve«](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interakcija do naslednjega izrisa meri odzivnost strani, kako dolgo traja, da se stran vidno odzove na vnos uporabnika. [Preberite več o meritvi interakcije do naslednjega izrisa](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Prvi vsebinski izris označuje čas, ko je izrisano prvo besedilo oziroma je izrisana prva slika. [Preberite več o meritvi prvega vsebinskega izrisa](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Prvo smiselno barvanje meri, kdaj je vidna glavna vsebina strani. [Preberite več o meritvi prvega smiselnega izrisa](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interakcija do naslednjega izrisa meri odzivnost strani, kako dolgo traja, da se stran vidno odzove na vnos uporabnika. [Preberite več o meritvi interakcije do naslednjega izrisa](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Čas do interaktivnosti je čas, potreben, da stran postane povsem interaktivna. [Preberite več o meritvi »Čas do interaktivnosti«](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Izogibajte se preusmeritvam na več strani"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Če želite nastaviti proračune za količino in velikost sredstev strani, dodajte datoteko budget.json. [Preberite več o proračunih za uspešnost](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 zahteva • {byteCount, number, bytes} KiB}one{# zahteva • {byteCount, number, bytes} KiB}two{# zahtevi • {byteCount, number, bytes} KiB}few{# zahteve • {byteCount, number, bytes} KiB}other{# zahtev • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Število zahtev naj bo majhno in prenosi naj ne bodo preveliki"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Kanonične povezave predlagajo, kateri URL naj bo prikazan v rezultatih iskanja. [Preberite več o kanoničnih povezavah](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Začetni odzivni čas strežnika je bil kratek"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Proces storitve je tehnologija, ki aplikaciji omogoča uporabo številnih funkcij moderne spletne aplikacije, na primer delovanje brez povezave, dodajanje na začetni zaslon in potisna obvestila. [Preberite več o procesih storitve](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "To stran nadzira proces storitve, vendar ni bilo mogoče najti ničesar od tega: `start_url`, ker ni bilo mogoče razčleniti manifesta kot veljavne datoteke JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "To stran nadzira proces storitve, vendar `start_url` ({startUrl}) ni v obsegu procesa storitve ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "To stran nadzira proces storitve, vendar ni bilo mogoče najti ničesar od tega: `start_url`, ker niso bili preneseni manifesti."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Ta izvor ima enega ali več procesov storitve, vendar stran ({pageUrl}) ni v obsegu."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Ne registrira procesa storitve, ki nadzira stran in to: `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registrira proces storitve, ki nadzira stran in to: `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "S tematskim pozdravnim zaslonom zagotovite visokokakovostno izkušnjo, ko uporabniki zaženejo aplikacijo z začetnih zaslonov. [Preberite več o pozdravnih zaslonih](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Najboljši postopki"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Ta preverjanja izpostavijo priložnosti za [izboljšanje dostopnosti vaše spletne aplikacije](https://developer.chrome.com/docs/lighthouse/accessibility/). Samodejno je mogoče ugotoviti samo podnabor morebitnih težav z dostopnostjo, zato spodbujamo ročno preverjanje."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Ti elementi se nanašajo na področja, ki jih ne more obdelati samodejno orodje za preizkušanje. Več o tem lahko preberete v našem vodniku o [izvedbi pregleda dostopnosti](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Namestite [modul sistema Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), ki lahko uporablja odloženo nalaganje slik. Taki moduli omogočajo odlog nalaganja slik, ki niso na zaslonu, za večjo učinkovitost delovanja."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Razmislite o uporabi modula za vstavljanje kritičnega CSS-ja in JavaScripta ali potencialno asinhrono nalaganje elementov prek JavaScripta, kot je modul [Napredno združevanje za CSS/JS](https://www.drupal.org/project/advagg). Upoštevajte, da lahko optimizacije, ki jih ponuja ta modul, pokvarijo delovanje vašega spletnega mesta, zato boste verjetno morali spremeniti kodo."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Teme, moduli in strežniške specifikacije prispevajo k odzivnemu času strežnika. Razmislite o tem, da bi poiskali bolj optimizirano temo, skrbno izbrali optimizacijski modul in/ali nadgradili strežnik. Vaši gostiteljski strežniki bi morali izkoriščati predpomnjenje operativne kode, predpomnjenje pomnilnika za skrajšanje časa poizvedbe v zbirki podatkov (denimo programsko opremo Redis ali Memcached) ter tudi optimizirano logiko aplikacij za hitrejšo pripravo strani."
@@ -2778,10 +2862,10 @@
     "message": "Razmislite o uporabi [slogov odzivnih slik](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) za zmanjšanje velikosti slik, naloženih na strani. Če za prikaz več vsebinskih elementov na strani uporabljate funkcijo Pogledi, razmislite o razdelitvi na več strani, da omejite število vsebinskih elementov, prikazanih na določeni strani."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Preverite, ali ste omogočili možnost »Združevanje datotek CSS« na strani »Skrbništvo » Konfiguracija » Razvoj«. V [dodatnih modulih](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) lahko konfigurirate tudi naprednejše možnosti združevanja ter tako s sestavljanjem, pomanjševanjem in stiskanjem slogov za CSS pospešite svoje spletno mesto."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Preverite, ali ste omogočili možnost »Združevanje datotek JavaScript« na strani »Skrbništvo » Konfiguracija » Razvoj«. V [dodatnih modulih](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) lahko konfigurirate tudi naprednejše možnosti združevanja ter tako s sestavljanjem, pomanjševanjem in stiskanjem elementov JavaScript pospešite svoje spletno mesto."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Razmislite o tem, da bi odstranili neuporabljena pravila za CSS in potrebne knjižnice sistema Drupal priložili samo ustrezni strani ali komponenti na strani. Za podrobnosti si oglejte [povezavo do dokumentacije za Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Če želite ugotoviti, katere priložene knjižnice dodajo zunanji CSS, poskušajte z orodji Chrome DevTools izvesti [preizkus pokritosti kode](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage). Ustrezno temo/modul lahko ugotovite na podlagi URL-ja datoteke s slogi, ko je združevanje za CSS onemogočeno na vašem spletnem mestu sistema Drupal. Bodite pozorni na teme/module, ki imajo na seznamu mnogo datotek s slogi, ki imajo v pokritosti kode veliko rdeče obarvanega območja. Datoteka s slogi naj bo v čakalni vrsti teme/modula samo, če je dejansko uporabljena na strani."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Omogočite stiskanje v strežniku Next.js. [Več o tem](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Uporabite komponento `nuxt/image` in nastavite `format=\"webp\"`. [Več o tem](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Uporabite React DevTools Profiler, ki uporablja API za Profiler API, za merjenje učinkovitosti delovanja upodabljanja komponent. [Več o tem](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Postavite videoposnetke v to: `VideoBoxes`, prilagodite jih s tem: `Video Masks`, lahko pa tudi dodate to: `Transparent Videos`. [Več o tem](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Naložite slike s storitvijo `Wix Media Manager`, s čimer boste zagotovili, da bodo samodejno prikazane v obliki WebP. Poiščite [več načinov za optimizacijo](https://support.wix.com/en/article/site-performance-optimizing-your-media) predstavnosti spletnega mesta."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Ko [dodajate kodo neodvisnega ponudnika](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) na zavihku `Custom Code` nadzorne plošče spletnega mesta, poskrbite, da je odložena ali naložena na koncu telesa kode. Če je mogoče, uporabite [integracije](https://support.wix.com/en/article/about-marketing-integrations) storitve Wix, da na spletnem mestu vdelate trženjska orodja. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Platforma Wix uporablja omrežja za prenos vsebine in predpomnjenje za čim hitrejše prikazovanje odgovorov večini obiskovalcev. Razmislite o [ročnem omogočanju predpomnjenja](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) za spletno mesto, zlasti če uporabljate storitev `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Na zavihku `Custom Code` nadzorne plošče spletnega mesta preglejte vse kode neodvisnih ponudnikov, ki ste jih dodali na spletnem mestu, in obdržite samo storitve, ki so nujne za delovanje spletnega mesta. [Več informacij](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Razmislite o tem, da bi GIF naložili v storitev, prek katere bo na voljo za vdelavo kot videoposnetek v obliki HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Shrani kot JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Odpri v pregledovalniku"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Vrednosti so ocenjene in lahko odstopajo. [Rezultat uspešnosti se izračuna](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) neposredno iz teh meritev."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Ogled izvirne sledi"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Ogled sledi"
   },
diff --git a/front_end/third_party/lighthouse/locales/sr-Latn.json b/front_end/third_party/lighthouse/locales/sr-Latn.json
index e4363fd..92f31cc 100644
--- a/front_end/third_party/lighthouse/locales/sr-Latn.json
+++ b/front_end/third_party/lighthouse/locales/sr-Latn.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Atributi `[aria-*]` se podudaraju sa svojim ulogama"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Kada element nema pristupačan naziv, čitači ekrana ga najavljuju pomoću generičkog naziva, pa korisnici koji se oslanjaju na čitače ekrana ne mogu da ga koriste. [Saznajte kako da učinite elemente komandi pristupačnijim](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Elementi `button`, `link` i `menuitem` imaju nazive prilagođene funkcijama pristupačnosti"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA elementi dijaloga bez pristupačnih naziva mogu da spreče korisnike čitača ekrana da razumeju njihovu svrhu. [Saznajte kako da učinite ARIA elemente dijaloga pristupačnijim](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Elementi sa stavkom `role=\"dialog\"` ili `role=\"alertdialog\"` nemaju pristupačne nazive."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Elementi sa stavkom `role=\"dialog\"` ili `role=\"alertdialog\"` imaju pristupačne nazive."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Tehnologije za pomoć osobama sa invaliditetom, poput čitača ekrana, ne rade dosledno kada se `aria-hidden=\"true\"` podesi za `<body>` dokumenta. [Saznajte kako `aria-hidden` utiče na sadržaj dokumenta](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Vrednosti za `[role]` su važeće"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Ako dodate `role=text` oko tekstualnog čvora podeljenog oznakom, omogućavate VoiceOver-u da ga tretira kao jednu frazu, ali nasleđeni elementi koji mogu da se fokusiraju neće biti objavljeni. [Saznajte više o atributu `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Elementi sa atributom `role=text` imaju nasleđene elemente koji mogu da se fokusiraju."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Elementi sa atributom `role=text` nemaju nasleđene elemente koji mogu da se fokusiraju."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Kada polje za prekidač nema naziv prilagođen funkciji pristupačnosti, čitači ekrana ga najavljuju pomoću generičkog naziva, pa korisnici koji se oslanjaju na čitače ekrana ne mogu da ga koriste. [Saznajte više o uključivanju ili isključivanju polja](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA ID-ovi su jedinstveni"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Naslov bez sadržaja ili sa nepristupačnim tekstom sprečava korisnike čitača ekrana da pristupaju informacijama o strukturi stranice. [Saznajte više o naslovima](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Elementi naslova nemaju sadržaj."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Svi elementi naslova imaju sadržaj."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Tehnologije za pomoć osobama sa invaliditetom, poput čitača ekrana koji koriste prvu, poslednju ili sve oznake, mogu da čitaju polja obrasca sa više oznaka na način koji zbunjuje korisnike. [Saznajte kako da koristite oznake obrazaca](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Element `<html>` ima atribut `[xml:lang]` sa istim osnovnim jezikom kao i atribut `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Linkovi sa istim odredištem treba da imaju isti opis da bi korisnici lakše razumeli svrhu linka i odlučili da li da ga prate. [Saznajte više o identičnim linkovima](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identični linkovi nemaju istu svrhu."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identični linkovi imaju istu svrhu."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Informativni elementi treba da sadrže kratki, opisni alternativni tekst. Dekorativni elementi mogu da se zanemare praznim atributom alt. [Saznajte više o atributu `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Elementi slika imaju atribute `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Dodavanje prepoznatljivog i pristupačnog teksta dugmadima za unos može da pomogne korisnicima čitača ekrana da razumeju svrhu dugmeta za unos. [Saznajte više o dugmadi za unos](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Elementi `<input type=\"image\">` sadrže tekst `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Oznake omogućavaju da tehnologije za pomoć osobama sa invaliditetom, poput čitača ekrana, pravilno najavljuju kontrole obrazaca. [Saznajte više o oznakama elemenata obrasca](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Elementi obrazaca imaju povezane oznake"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Jedno glavno obeležje pomaže korisnicima čitača ekrana da se kreću po veb-stranici. [Saznajte više o obeležjima](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokument nema glavno obeležje."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokument ima glavno obeležje."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Mnogi korisnici veoma teško čitaju tekst sa malim kontrastom ili uopšte ne mogu da ga čitaju. Tekst linka koji je vidljiv poboljšava doživljaj za slabovide korisnike. [Saznajte kako da pravite linkove koji mogu da se razlikuju](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Linkovi mogu da se razlikuju tek uz boju."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Linkovi mogu da se razlikuju bez boje."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Tekst linka (i alternativni tekst za slike kada se koristi za linkove) koji je prepoznatljiv, jedinstven i može da se fokusira olakšava kretanje za korisnike čitača ekrana. [Saznajte kako da učinite linkove dostupnim.](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Elementi `<object>` imaju alternativni tekst"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Elementi obrazaca bez efikasnih oznaka mogu da nerviraju korisnike čitača ekrana. [Saznajte više o elementu `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Određeni elementi nemaju povezane elemente oznaka."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Određeni elementi imaju povezane elemente oznaka."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Vrednost veća od 0 označava eksplicitni raspored navigacije. Iako je tehnički ispravno, to često frustrira korisnike koji se oslanjaju na tehnologije za pomoć osobama sa invaliditetom. [Saznajte više o atributu `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Vrednost nijednog elementa `[tabindex]` nije veća od 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Čitači ekrana imaju funkcije koje olakšavaju kretanje kroz tabele. Ako se pobrinete da tabele koriste stvarni element titla umesto ćelija sa atributom `[colspan]`, možete da poboljšate doživljaj za korisnike čitača ekrana. [Saznajte više o titlovima](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabele koriste `<caption>` umesto ćelija sa atributom `[colspan]` za označavanje titla."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Mete za dodir nemaju dovoljnu veličinu ili razmak."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Mete za dodir imaju dovoljnu veličinu i razmak."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Čitači ekrana imaju funkcije koje olakšavaju kretanje kroz tabele. Ako se pobrinete da elementi `<td>` u velikoj tabeli (3 ili više ćelija širine i visine) imaju povezano zaglavlje tabele, možete da poboljšate doživljaj za korisnike čitača ekrana. [Saznajte više o zaglavljima tabela](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Stranica ne sadrži <link> URL manifesta"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Nije otkriven nijedan odgovarajući serviser. Možda ćete morati ponovo da učitate stranicu ili da proverite da li opseg servisera za aktuelnu stranicu obuhvata opseg i početni URL iz manifesta."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Provera servisera bez polja „start_url“ u manifestu nije uspela"
   },
@@ -969,7 +1083,7 @@
     "message": "Stavka prefer_related_applications je podržana samo u Chrome-u beta i na Stabilnim kanalima na Android-u."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse nije uspeo da utvrdi da li je postojao serviser. Probajte sa novijom verzijom Chrome-a."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Šema URL-a manifesta ({scheme}) nije podržana na Android-u."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Kumulativni pomak sadržaja stranice meri kretanje vidljivih elemenata unutar oblasti prikaza. [Saznajte više o pokazatelju Kumulativni pomak sadržaja stranice](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interakcija do sledećeg prikazivanja meri brzinu odgovora stranice, koliko dugo stranici treba da vidljivo odgovori na unos korisnika. [Saznajte više o pokazatelju Interakcija do sledećeg prikazivanja](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Prvo prikazivanje sadržaja označava vreme kada se prikazuju prvi tekst ili slika. [Saznajte više o pokazatelju Prvo prikazivanje sadržaja](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Prvo značajno prikazivanje označava vreme kada primarni sadržaj stranice postaje vidljiv. [Saznajte više o pokazatelju Prvo značajno prikazivanje](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interakcija do sledećeg prikazivanja meri brzinu odgovora stranice, koliko dugo stranici treba da vidljivo odgovori na unos korisnika. [Saznajte više o pokazatelju Interakcija do sledećeg prikazivanja](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Vreme do početka interakcije je količina vremena koja je potrebna da bi stranica postala potpuno interaktivna. [Saznajte više o pokazatelju Vreme do početka interakcije](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Izbegavajte višestruka preusmeravanja stranice"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Da biste podesili ciljeve za količinu i veličinu resursa stranice, dodajte datoteku budget.json file. [Saznajte više o ograničenjima učinka](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 zahtev • {byteCount, number, bytes} KiB}one{# zahtev • {byteCount, number, bytes} KiB}few{# zahteva • {byteCount, number, bytes} KiB}other{# zahteva • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Omogući da broj zahteva i veličine prenosa budu mali"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Kanonički linkovi predlažu koji URL treba da se prikaže u rezultatima pretrage. [Saznajte više o kanoničkim linkovima](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Početno vreme odgovora servera je bilo kratko"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Serviser je tehnologija koja omogućava aplikaciji da koristi mnoge funkcije progresivnih veb-aplikacija, poput oflajn rada, dodavanja na početni ekran i iskačućih obaveštenja. [Saznajte više o serviserima](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Ovu stranicu kontroliše serviser, ali nije pronađen nijedan `start_url` jer nije uspelo raščlanjivanje manifesta kao važeće JSON datoteke"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Ovu stranicu kontroliše serviser, ali `start_url` ({startUrl}) ne spada u opseg servisera ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Ovu stranicu kontroliše serviser, ali nije pronađen nijedan `start_url` jer nijedan manifest nije preuzet."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Ovaj izvor ima jedan ili više servisera, ali stranica ({pageUrl}) nije u opsegu."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Ne registruje serviser koji kontroliše stranicu i `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registruje serviser koji kontroliše stranicu i `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Tematski uvodni ekran obezbeđuje kvalitetan doživljaj kada korisnici pokreću aplikaciju sa početnih ekrana. [Saznajte više o uvodnim ekranima](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Najbolje prakse"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Ove provere ističu prilike za [poboljšanje pristupačnosti veb-aplikacije](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatski može da se otkrije samo jedan podskup problema sa pristupačnošću, pa preporučujemo da obavljate i ručno testiranje."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Ove stavke obrađuju oblasti koje alatka za automatizovano testiranje ne može da obuhvati. Saznajte više u vodiču o [sprovođenju pregleda pristupačnosti](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Instalirajte [Drupal modul](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) koji može odloženo da učitava slike. Takvi moduli pružaju mogućnost odlaganja svih slika van ekrana da bi se poboljšao učinak."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Predlažemo da koristite modul za ugradnju ključnog CSS-a i JavaScipt-a ili potencijalno asinhrono učitavanje elemenata putem JavaScript-a, poput modula [Napredno CSS/JS grupisanje](https://www.drupal.org/project/advagg). Imajte na umu da optimizacije koje pruža ovaj modul mogu da oštete sajt, pa ćete verovatno morati da unesete neke promene u kôd."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Teme, moduli i specifikacije servera doprinose vremenu odgovora servera. Predlažemo da pronađete optimizovaniju temu, pažljivo izaberete modul za optimizaciju i/ili nadogradite server. Serveri za hostovanje treba da koriste keširanje PHP opkoda, keširanje memorije radi smanjenja vremena odgovaranja na upit iz baze podataka, poput Redis-a ili Memcached-a, kao i optimizovanu logiku aplikacije radi brže pripreme stranica."
@@ -2778,10 +2862,10 @@
     "message": "Predlažemo da koristite [prilagodljive stilove slika](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) kako biste smanjili veličinu slika koje se učitavaju na stranici. Ako koristite Views (prikazi) da biste prikazali više stavki sadržaja na stranici, razmislite o primeni numerisanja stranica da biste ograničili broj stavki sadržaja koje se prikazuju na određenoj stranici."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Uverite se da ste omogućili Aggregate CSS files (Grupisanje CSS datoteka) na stranici Administration (Administracija) » Configuration (Konfiguracija) » Development (Razvoj). Možete i da konfigurišete naprednije opcije grupisanja putem [dodatnih modula](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) kako biste ubrzali sajt nadovezivanjem, umanjivanjem i komprimovanjem CSS stilova."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Uverite se da ste omogućili Aggregate JavaScript files (Grupisanje JavaScript datoteka) na stranici Administration (Administracija) » Configuration (Konfiguracija) » Development (Razvoj). Možete i da konfigurišete naprednije opcije grupisanja putem [dodatnih modula](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) kako biste ubrzali sajt nadovezivanjem, umanjivanjem i komprimovanjem JavaScript elemenata."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Predlažemo da uklonite CSS pravila koja se ne koriste i priložite samo neopohdne Drupal biblioteke relevantnoj stranici ili komponenti na stranici. Detalje potražite na [linku za Drupal dokumentaciju](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Da biste identifikovali priložene biblioteke koje dodaju suvišan CSS, probajte da pokrenete proveru [pokrivenosti koda](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) u alatki Chrome DevTools. Spornu temu ili modul možete da identifikujete u URL-u opisa stila kad je na Drupal sajtu onemogućeno CSS grupisanje. Potražite teme ili module koji na listi imaju mnogo opisa stila sa dosta crvenih elemenata u pokrivenosti koda. Tema ili modul treba da stave opis stila na listu samo ako se on stvarno koristi na stranici."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Omogućite komprimovanje na Next.js serveru. [Saznajte više](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Koristite komponentu `nuxt/image` i podesite `format=\"webp\"`. [Saznajte više](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Koristite React DevTools Profiler, koji koristi API Profiler, da biste merili performanse prikazivanja komponenata. [Saznajte više.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Postavite video snimke unutar stavke `VideoBoxes`, prilagodite ih koristeći `Video Masks` ili dodajte stavku `Transparent Videos`. [Saznajte više](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Otpremite slike koristeći `Wix Media Manager` da biste bili sigurni da će se automatski prikazivati kao WebP. Pronađite [još načina za optimizaciju](https://support.wix.com/en/article/site-performance-optimizing-your-media) medija sajta."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Kada [dodajete kôd treće strane](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) na karticu `Custom Code` kontrolne table sajta, uverite se da je odložen ili učitan na kraju tela koda. Gde je to moguće, koristite Wix [integracije](https://support.wix.com/en/article/about-marketing-integrations) da biste ugradili alatke za marketing na sajt. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix koristi CDN-ove i keširanje da bi što brže prikazao odgovore za većinu posetilaca. Razmislite o [ručnom omogućavanju keširanja](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) za sajt, naročito ako koristite `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Pregledajte svaki nezavisni kôd koji ste dodali na sajt na kartici `Custom Code` kontrolne table sajta i zadržite samo usluge koje su neophodne za sajt. [Saznajte više](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Predlažemo da otpremite GIF u uslugu koja će ga kodirati za ugradnju kao HTML5 video."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Sačuvaj kao JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Otvori u prikazivaču"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Vrednosti predstavljaju procene i mogu da variraju. [Ocena učinka sa izračunava](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) direktno na osnovu tih pokazatelja."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Prikaži originalni trag"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Prikaži trag"
   },
diff --git a/front_end/third_party/lighthouse/locales/sr.json b/front_end/third_party/lighthouse/locales/sr.json
index 9cfa4c9..4f1caf3 100644
--- a/front_end/third_party/lighthouse/locales/sr.json
+++ b/front_end/third_party/lighthouse/locales/sr.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Атрибути `[aria-*]` се подударају са својим улогама"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Када елемент нема приступачан назив, читачи екрана га најављују помоћу генеричког назива, па корисници који се ослањају на читаче екрана не могу да га користе. [Сазнајте како да учините елементе команди приступачнијим](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Елементи `button`, `link` и `menuitem` имају називе прилагођене функцијама приступачности"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA елементи дијалога без приступачних назива могу да спрече кориснике читача екрана да разумеју њихову сврху. [Сазнајте како да учините ARIA елементе дијалога приступачнијим](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Елементи са ставком `role=\"dialog\"` или `role=\"alertdialog\"` немају приступачне називе."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Елементи са ставком `role=\"dialog\"` или `role=\"alertdialog\"` имају приступачне називе."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Технологије за помоћ особама са инвалидитетом, попут читача екрана, не раде доследно када се `aria-hidden=\"true\"` подеси за `<body>` документа. [Сазнајте како `aria-hidden` утиче на садржај документа](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Вредности за `[role]` су важеће"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Ако додате `role=text` око текстуалног чвора подељеног ознаком, омогућавате VoiceOver-у да га третира као једну фразу, али наслеђени елементи који могу да се фокусирају неће бити објављени. [Сазнајте више о атрибуту `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Елементи са атрибутом `role=text` имају наслеђене елементе који могу да се фокусирају."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Елементи са атрибутом `role=text` немају наслеђене елементе који могу да се фокусирају."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Када поље за прекидач нема назив прилагођен функцији приступачности, читачи екрана га најављују помоћу генеричког назива, па корисници који се ослањају на читаче екрана не могу да га користе. [Сазнајте више о укључивању или искључивању поља](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA ИД-ови су јединствени"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Наслов без садржаја или са неприступачним текстом спречава кориснике читача екрана да приступају информацијама о структури странице. [Сазнајте више о насловима](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Елементи наслова немају садржај."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Сви елементи наслова имају садржај."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Технологије за помоћ особама са инвалидитетом, попут читача екрана који користе прву, последњу или све ознаке, могу да читају поља обрасца са више ознака на начин који збуњује кориснике. [Сазнајте како да користите ознаке образаца](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Елемент `<html>` има атрибут `[xml:lang]` са истим основним језиком као и атрибут `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Линкови са истим одредиштем треба да имају исти опис да би корисници лакше разумели сврху линка и одлучили да ли да га прате. [Сазнајте више о идентичним линковима](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Идентични линкови немају исту сврху."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Идентични линкови имају исту сврху."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Информативни елементи треба да садрже кратки, описни алтернативни текст. Декоративни елементи могу да се занемаре празним атрибутом alt. [Сазнајте више о атрибуту `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Елементи слика имају атрибуте `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Додавање препознатљивог и приступачног текста дугмадима за унос може да помогне корисницима читача екрана да разумеју сврху дугмета за унос. [Сазнајте више о дугмади за унос](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Елементи `<input type=\"image\">` садрже текст `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Ознаке омогућавају да технологије за помоћ особама са инвалидитетом, попут читача екрана, правилно најављују контроле образаца. [Сазнајте више о ознакама елемената обрасца](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Елементи образаца имају повезане ознаке"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Једно главно обележје помаже корисницима читача екрана да се крећу по веб-страници. [Сазнајте више о обележјима](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Документ нема главно обележје."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Документ има главно обележје."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Многи корисници веома тешко читају текст са малим контрастом или уопште не могу да га читају. Текст линка који је видљив побољшава доживљај за слабовиде кориснике. [Сазнајте како да правите линкове који могу да се разликују](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Линкови могу да се разликују тек уз боју."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Линкови могу да се разликују без боје."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Текст линка (и алтернативни текст за слике када се користи за линкове) који је препознатљив, јединствен и може да се фокусира олакшава кретање за кориснике читача екрана. [Сазнајте како да учините линкове доступним.](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Елементи `<object>` имају алтернативни текст"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Елементи образаца без ефикасних ознака могу да нервирају кориснике читача екрана. [Сазнајте више о елементу `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Одређени елементи немају повезане елементе ознака."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Одређени елементи имају повезане елементе ознака."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Вредност већа од 0 означава експлицитни распоред навигације. Иако је технички исправно, то често фрустрира кориснике који се ослањају на технологије за помоћ особама са инвалидитетом. [Сазнајте више о атрибуту `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Вредност ниједног елемента `[tabindex]` није већа од 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Читачи екрана имају функције које олакшавају кретање кроз табеле. Ако се побринете да табеле користе стварни елемент титла уместо ћелија са атрибутом `[colspan]`, можете да побољшате доживљај за кориснике читача екрана. [Сазнајте више о титловима](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Табеле користе `<caption>` уместо ћелија са атрибутом `[colspan]` за означавање титла."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Мете за додир немају довољну величину или размак."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Мете за додир имају довољну величину и размак."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Читачи екрана имају функције које олакшавају кретање кроз табеле. Ако се побринете да елементи `<td>` у великој табели (3 или више ћелија ширине и висине) имају повезано заглавље табеле, можете да побољшате доживљај за кориснике читача екрана. [Сазнајте више о заглављима табела](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Страница не садржи <link> URL манифеста"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Није откривен ниједан одговарајући сервисер. Можда ћете морати поново да учитате страницу или да проверите да ли опсег сервисера за актуелну страницу обухвата опсег и почетни URL из манифеста."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Провера сервисера без поља „start_url“ у манифесту није успела"
   },
@@ -969,7 +1083,7 @@
     "message": "Ставка prefer_related_applications је подржана само у Chrome-у бета и на Стабилним каналима на Android-у."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse није успео да утврди да ли је постојао сервисер. Пробајте са новијом верзијом Chrome-а."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Шема URL-а манифеста ({scheme}) није подржана на Android-у."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Кумулативни помак садржаја странице мери кретање видљивих елемената унутар области приказа. [Сазнајте више о показатељу Кумулативни помак садржаја странице](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Интеракција до следећег приказивања мери брзину одговора странице, колико дуго страници треба да видљиво одговори на унос корисника. [Сазнајте више о показатељу Интеракција до следећег приказивања](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Прво приказивање садржаја означава време када се приказују први текст или слика. [Сазнајте више о показатељу Прво приказивање садржаја](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Прво значајно приказивање означава време када примарни садржај странице постаје видљив. [Сазнајте више о показатељу Прво значајно приказивање](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Интеракција до следећег приказивања мери брзину одговора странице, колико дуго страници треба да видљиво одговори на унос корисника. [Сазнајте више о показатељу Интеракција до следећег приказивања](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Време до почетка интеракције је количина времена која је потребна да би страница постала потпуно интерактивна. [Сазнајте више о показатељу Време до почетка интеракције](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Избегавајте вишеструка преусмеравања странице"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Да бисте подесили циљеве за количину и величину ресурса странице, додајте датотеку budget.json file. [Сазнајте више о ограничењима учинка](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 захтев • {byteCount, number, bytes} KiB}one{# захтев • {byteCount, number, bytes} KiB}few{# захтева • {byteCount, number, bytes} KiB}other{# захтева • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Омогући да број захтева и величине преноса буду мали"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Канонички линкови предлажу који URL треба да се прикаже у резултатима претраге. [Сазнајте више о каноничким линковима](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Почетно време одговора сервера је било кратко"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Сервисер је технологија која омогућава апликацији да користи многе функције прогресивних веб-апликација, попут офлајн рада, додавања на почетни екран и искачућих обавештења. [Сазнајте више о сервисерима](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Ову страницу контролише сервисер, али није пронађен ниједан `start_url` јер није успело рашчлањивање манифеста као важеће JSON датотеке"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Ову страницу контролише сервисер, али `start_url` ({startUrl}) не спада у опсег сервисера ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Ову страницу контролише сервисер, али није пронађен ниједан `start_url` јер ниједан манифест није преузет."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Овај извор има један или више сервисера, али страница ({pageUrl}) није у опсегу."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Не региструје сервисер који контролише страницу и `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Региструје сервисер који контролише страницу и `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Тематски уводни екран обезбеђује квалитетан доживљај када корисници покрећу апликацију са почетних екрана. [Сазнајте више о уводним екранима](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Најбоље праксе"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Ове провере истичу прилике за [побољшање приступачности веб-апликације](https://developer.chrome.com/docs/lighthouse/accessibility/). Аутоматски може да се открије само један подскуп проблема са приступачношћу, па препоручујемо да обављате и ручно тестирање."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Ове ставке обрађују области које алатка за аутоматизовано тестирање не може да обухвати. Сазнајте више у водичу о [спровођењу прегледа приступачности](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Инсталирајте [Drupal модул](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) који може одложено да учитава слике. Такви модули пружају могућност одлагања свих слика ван екрана да би се побољшао учинак."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Предлажемо да користите модул за уградњу кључног CSS-а и JavaScipt-а или потенцијално асинхроно учитавање елемената путем JavaScript-а, попут модула [Напредно CSS/JS груписање](https://www.drupal.org/project/advagg). Имајте на уму да оптимизације које пружа овај модул могу да оштете сајт, па ћете вероватно морати да унесете неке промене у кôд."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Теме, модули и спецификације сервера доприносе времену одговора сервера. Предлажемо да пронађете оптимизованију тему, пажљиво изаберете модул за оптимизацију и/или надоградите сервер. Сервери за хостовање треба да користе кеширање PHP опкода, кеширање меморије ради смањења времена одговарања на упит из базе података, попут Redis-а или Memcached-а, као и оптимизовану логику апликације ради брже припреме страница."
@@ -2778,10 +2862,10 @@
     "message": "Предлажемо да користите [прилагодљиве стилове слика](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) како бисте смањили величину слика које се учитавају на страници. Ако користите Views (прикази) да бисте приказали више ставки садржаја на страници, размислите о примени нумерисања страница да бисте ограничили број ставки садржаја које се приказују на одређеној страници."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Уверите се да сте омогућили Aggregate CSS files (Груписање CSS датотека) на страници Administration (Администрација) » Configuration (Конфигурација) » Development (Развој). Можете и да конфигуришете напредније опције груписања путем [додатних модула](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) како бисте убрзали сајт надовезивањем, умањивањем и компримовањем CSS стилова."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Уверите се да сте омогућили Aggregate JavaScript files (Груписање JavaScript датотека) на страници Administration (Администрација) » Configuration (Конфигурација) » Development (Развој). Можете и да конфигуришете напредније опције груписања путем [додатних модула](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) како бисте убрзали сајт надовезивањем, умањивањем и компримовањем JavaScript елемената."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Предлажемо да уклоните CSS правила која се не користе и приложите само неопохдне Drupal библиотеке релевантној страници или компоненти на страници. Детаље потражите на [линку за Drupal документацију](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Да бисте идентификовали приложене библиотеке које додају сувишан CSS, пробајте да покренете проверу [покривености кода](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) у алатки Chrome DevTools. Спорну тему или модул можете да идентификујете у URL-у описа стила кад је на Drupal сајту онемогућено CSS груписање. Потражите теме или модуле који на листи имају много описа стила са доста црвених елемената у покривености кода. Тема или модул треба да ставе опис стила на листу само ако се он стварно користи на страници."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Омогућите компримовање на Next.js серверу. [Сазнајте више](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Користите компоненту `nuxt/image` и подесите `format=\"webp\"`. [Сазнајте више](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Користите React DevTools Profiler, који користи API Profiler, да бисте мерили перформансе приказивања компонената. [Сазнајте више.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Поставите видео снимке унутар ставке `VideoBoxes`, прилагодите их користећи `Video Masks` или додајте ставку `Transparent Videos`. [Сазнајте више](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Отпремите слике користећи `Wix Media Manager` да бисте били сигурни да ће се аутоматски приказивати као WebP. Пронађите [још начина за оптимизацију](https://support.wix.com/en/article/site-performance-optimizing-your-media) медија сајта."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Када [додајете кôд треће стране](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) на картицу `Custom Code` контролне табле сајта, уверите се да је одложен или учитан на крају тела кода. Где је то могуће, користите Wix [интеграције](https://support.wix.com/en/article/about-marketing-integrations) да бисте уградили алатке за маркетинг на сајт. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix користи CDN-ове и кеширање да би што брже приказао одговоре за већину посетилаца. Размислите о [ручном омогућавању кеширања](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) за сајт, нарочито ако користите `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Прегледајте сваки независни кôд који сте додали на сајт на картици `Custom Code` контролне табле сајта и задржите само услуге које су неопходне за сајт. [Сазнајте више](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Предлажемо да отпремите GIF у услугу која ће га кодирати за уградњу као HTML5 видео."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Сачувај као JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Отвори у приказивачу"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Вредности представљају процене и могу да варирају. [Оцена учинка са израчунава](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) директно на основу тих показатеља."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Прикажи оригинални траг"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Прикажи траг"
   },
diff --git a/front_end/third_party/lighthouse/locales/sv.json b/front_end/third_party/lighthouse/locales/sv.json
index 65cc44af..8e27909 100644
--- a/front_end/third_party/lighthouse/locales/sv.json
+++ b/front_end/third_party/lighthouse/locales/sv.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Attributen av typen `[aria-*]` stämmer med elementets roll"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Utan en maskinläsbar etikett läses element upp med en generell etikett av skärmläsarna. Det gör dem oanvändbara för personer som behöver använda en skärmläsare. [Läs mer om hur du gör kommandoelement mer tillgängliga](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Namnen för `button`-, `link`- och `menuitem`-elementen är igenkännliga"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA-dialogelement utan maskinläsbara etiketter kan hindra skärmläsaranvändare från att bedöma syftet med dessa element. [Läs om hur du gör ARIA-dialogelement mer tillgängliga](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Element med `role=\"dialog\"` eller `role=\"alertdialog\"` har inte maskinläsbara etiketter."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Element med `role=\"dialog\"` eller `role=\"alertdialog\"` har maskinläsbara etiketter."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Hjälpmedelstekniker som skärmläsare fungerar inte ordentligt när `aria-hidden=\"true\"` har angetts för dokumentet `<body>`. [Läs om hur `aria-hidden` påverkar dokumenttexten](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Alla `[role]`-värden är giltiga"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Om du lägger till `role=text` runt en textnod som delats upp efter uppmärkning kan VoiceOver behandla den som en fras, men elementets fokuserbara underordnade element tillkännages inte. [Läs mer om attributet `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Element med attributet `role=text` har fokuserbara underordnade element."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Element med attributet `role=text` har inte fokuserbara underordnade element."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Utan en maskinläsbar etikett läses av/på-fält upp med en generell etikett av skärmläsarna. Det gör dem oanvändbara för personer som behöver använda en skärmläsare. [Läs mer om att aktivera och inaktivera fält](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Alla ARIA-id:n är unika"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "En rubrik som saknar innehåll eller innehåller otillgänglig text hindrar användare med skärmläsare från att få tillgång till information i sidans struktur. [Läs mer om rubriker](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Rubrikelementen har inget innehåll."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Alla rubrikelement har innehåll."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Formulärfält med flera etiketter kan läsas upp på ett förvirrande sätt av hjälpmedelstekniker, till exempel skärmläsare som använder antingen den första, sista eller alla etiketterna. [Läs om hur du använder formuläretiketter](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>`-elementet har ett `[xml:lang]`-attribut med samma basspråk som `[lang]`-attributet."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Länkar med samma destination bör ha samma beskrivning för att hjälpa användarna att förstå syftet med länken och avgöra om de ska följa den. [Läs mer om identiska länkar](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Identiska länkar har inte samma syfte."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Identiska länkar har samma syfte."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Element med informativ funktion bör ha en kort, beskrivande alternativ text. Element som bara har estetisk funktion kan ignoreras genom att alt-attributet lämnas tomt. [Läs mer om attributet `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Alla bildelement har `[alt]`-attribut"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Att lägga till urskiljbar och tillgänglig text på inmatningsknappar kan hjälpa användare med skärmläsare att förstå syftet med inmatningsknappen. [Läs mer om inmatningsknappar](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Alla `<input type=\"image\">`-element har `[alt]`-text"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Etiketterna gör att de olika delarna av ett formulär kan presenteras korrekt för användare med skärmläsare eller annan hjälpmedelsteknik. [Läs mer om etiketter för olika formulärdelar](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Alla formulärelement har etiketter"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Ett huvudlandmärke hjälper användare med skärmläsare att navigera på en webbsida. [Läs mer om landmärken](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokumentet har inget huvudlandmärke."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokumentet har ett huvudlandmärke."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Text med låg kontrast blir svårläst eller oläslig för många användare. Länktext som är urskiljbar förbättrar upplevelsen för användare med nedsatt syn. [Läs mer om hur du gör länkar särskiljbara](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Länkarna har olika färg för att kunna särskiljas."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Det går att särskilja länkar utan att förlita sig på färg."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Det blir enklare att navigera för den som använder en skärmläsare om alla länktexter (och alternativtexter för alla bilder som används som länkar) är igenkännliga, unika och fokuserbara. [Läs mer om hur du gör länkar tillgängliga](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` element har alt-text"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Formulärelement utan effektiva etiketter kan upplevas som frustrerande för användare som använder en skärmläsare. [Läs mer om elementet `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Vissa element saknar kopplade etikettelement."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Vissa element har kopplade etikettelement."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Med värden större än noll anges en explicit ordningsföljd för navigeringen. Även om detta inte är fel rent tekniskt leder det ofta till en frustrerande upplevelse för den som är beroende av tekniska hjälpmedel. [Läs mer om attributet `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Det finns inga element med ett `[tabindex]`-värde som är större än 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Skärmläsare har funktioner som gör det enklare att navigera i tabeller. Om du ser till att tabeller använder själva textningselementet i stället för celler med `[colspan]`-attributet kan det förbättra upplevelsen för användare med skärmläsare. [Läs mer om textning](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tabeller använder `<caption>` i stället för celler med `[colspan]`-attributet för att ange textning."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Tryckområdena är för små och har inte tillräckliga avstånd."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Tryckområdena är tillräckligt stora och har tillräckliga avstånd."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Skärmläsare har funktioner som gör det enklare att navigera i tabeller. Om du ser till att `<td>`-element i en stor tabell (tre eller fler celler i bredd och höjd) har en tillhörande tabellrubrik kan det förbättra upplevelsen för användare med skärmläsare. [Läs mer om tabellrubriker](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Sidan har ingen webbadress för <link> i manifestet"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Ingen matchande tjänstefunktion hittades. Du kanske måste läsa in sidan igen eller kontrollera att tjänstefunktionens omfattning för den aktuella sidan inbegriper omfattningen och startwebbadressen i manifestet."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Det går inte att kontrollera tjänstefunktionen utan fältet start_url i manifestet."
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications stöds bara i Chrome Beta och Chrome Stable på Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse kunde inte avgöra om en tjänstefunktion används. Testa med en senare version av Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Manifestets webbadresschema ({scheme}) stöds inte på Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Kumulativ layoutförskjutning mäter rörelsen hos synliga element inom visningsområdet. [Läs mer om mätvärdet Kumulativ layoutförskjutning](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaktion till nästa uppritning mäter sidans responsivitet, hur lång tid det tar innan det syns att en sida svarar på indata från användare. [Läs mer om mätvärdet Interakation till nästa uppritning](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Första innehållsrenderingen anger när den första texten eller bilden ritades upp. [Läs mer om mätvärdet Första innehållsrenderingen](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Första användbara renderingen anger när sidans primära innehåll blev synligt. [Läs mer om mätvärdet Första användbara renderingen](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaktion till nästa uppritning mäter sidans responsivitet, hur lång tid det tar innan det syns att en sida svarar på indata från användare. [Läs mer om mätvärdet Interakation till nästa uppritning](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Tid till interaktivt tillstånd är den tid det tar innan sidan är fullständigt interaktiv. [Läs mer om mätvärdet Tid till interaktivt tillstånd](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Undvik upprepade omdirigeringar"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Lägg till en budget.json-fil för att ange budgetar för kvantitet och storlek på sidresurser. [Läs mer om prestandabudgetar](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 begäran • {byteCount, number, bytes} Kibit}other{# förfrågningar • {byteCount, number, bytes} Kibit}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Begränsa antalet begäranden och storleken på överföringar"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Kanoniska länkar föreslår vilka webbadresser som ska visas i sökresultat. [Läs mer om kanoniska länkar](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Serverns första svarstid var kort"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Tjänstefunktioner är en teknik som gör det möjligt att använda flera funktioner för progressiva webbappar i appen, till exempel offlineanvändning, pushmeddelanden och att lägga till den på startskärmen. [Läs mer om tjänstefunktioner](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Sidan styrs av en tjänstefunktion, men `start_url` hittades inte eftersom det inte gick att analysera manifestet som giltigt JSON-format."
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Den här sidan styrs av en tjänstefunktion, men `start_url` ({startUrl}) är inte inom tjänstefunktionens omfattning ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Sidan styrs av en tjänstefunktion, men `start_url` hittades inte eftersom inget manifest hämtades."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Ursprunget har en eller flera tjänstefunktioner, men sidan ({pageUrl}) är inte inom omfattningen."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Registrerar inte en tjänstefunktion som styr sidan och `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Registrerar en tjänstefunktion som styr sidan och `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Med hjälp av en välkomstskärm med ett tema som visas när användarna startar appen på startskärmen kan du se till att de får en bra upplevelse. [Läs mer om välkomstskärmar](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Bästa metoder"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Dessa kontroller visar möjligheter att [förbättra tillgängligheten för din webbapp](https://developer.chrome.com/docs/lighthouse/accessibility/). Alla tillgänglighetsproblem kan inte identifieras automatiskt. Du bör därför även testa manuellt."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Dessa punkter beskriver områden som inte kan testas automatiskt. Läs mer i vår guide om att [granska tillgängligheten](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Installera [en Drupal-modul](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) som kan utnyttja uppskjuten inläsning av bilder. Med sådana moduler går det att skjuta upp inläsningen av bilder som inte visas på skärmen i syfte att förbättra prestandan."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Du kan använda en modul för att lägga till kritiska CSS- och JavaScript-tillgångar eller läsa in tillgångar asynkront via JavaScript, t.ex. modulen [Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg). Tänk på att optimeringarna som denna modul gör kan leda till att webbplatsen slutar att fungera, så du kan behöva ändra i koden."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Serverns svarstider påverkas av teman, moduler och serverns prestanda. Du kan använda ett mer optimerat tema, välja en optimeringsmodul och/eller uppgradera servern. Värdservrarna ska använda cachelagring av OP-kod för PHP och minnescachelagring för att minska sökfrågetiderna för databasen, t.ex. Redis eller Memcached, samt en optimerad applogik för att förbereda sidor snabbare."
@@ -2778,10 +2862,10 @@
     "message": "Du kan använda [responsiva bildformat](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) för att minska storleken på bilderna som läses in på sidan. Om du använder Views för att visa flera innehållsobjekt på en sida kan du implementera sidnumrering om du vill begränsa antalet innehållsobjekt som visas på en viss sida."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Kontrollera att du har aktiverat Aggregate CSS files under Administration » Configuration » Development. Du kan även konfigurera mer avancerade sammanställningsalternativ via [ytterligare moduler](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) och göra webbplatsen snabbare genom att sammanfoga, minifiera och komprimera CSS-format."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Kontrollera att du har aktiverat Aggregate JavaScript files under Administration » Configuration » Development. Du kan även konfigurera mer avancerade sammanställningsalternativ via [ytterligare moduler](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) och göra webbplatsen snabbare genom att sammanfoga, minifiera och komprimera JavaScript-tillgångar."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Vi rekommenderar att du tar bort CSS-regler som inte används och endast bifogar nödvändiga Drupal-bibliotek till den relevanta sidan eller komponenten på en sida. Du hittar mer information i [dokumentationen om Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library). Testa fliken för [kodtäckning](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) i Chromes utvecklarverktyg om du vill se vilka bibliotek som lägger till överflödig CSS. Du ser på formatmallens webbadress vilket tema eller vilken modul som koden kommer från när CSS-sammanställning är inaktiverat för Drupal-webbplatsen. Titta efter teman eller moduler med många CSS-formatmallar på listan där en stor del av stapeln är röd. Ett tema eller en modul ska bara ställa en formatmall i kö för inläsning om det faktiskt används på sidan."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Aktivera komprimering på Next.js-servern. [Läs mer](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Använd komponenten `nuxt/image` och ange `format=\"webp\"`. [Läs mer](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Mät renderingens resultat för dina komponenter med hjälp av React DevTools Profiler, som drar nytta av Profiler API. [Läs mer.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Placera videor i `VideoBoxes`, anpassa dem med `Video Masks` eller lägg till `Transparent Videos`. [Läs mer](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Ladda upp bilder med `Wix Media Manager` för att se till att de visas automatiskt som WebP. Upptäck [fler sätt att optimera](https://support.wix.com/en/article/site-performance-optimizing-your-media) webbplatsens media."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "När du [lägger till kod från tredje part](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) på fliken `Custom Code` på webbplatsöversikten kontrollerar du att den skjuts upp eller läses in i slutet av kodtexten. Använd om möjligt Wix [integrationer](https://support.wix.com/en/article/about-marketing-integrations) om du vill bädda in marknadsföringsverktyg på din webbplats. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix använder NFI och cachelagring för att visa svaren så snabbt som möjligt för de flesta besökarna. Vi rekommenderar att du [aktiverar cachelagring manuellt](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) för webbplatsen, särskilt om du använder `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Granska eventuella koder från tredje part som du har lagt till på webbplatsen på fliken `Custom Code` i webbplatsens översikt och behåll endast de tjänster som behövs för webbplatsen. [Läs mer](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Ladda upp GIF-filen till en tjänst som kan göra den tillgänglig för inbäddning som HTML5-video."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Spara som JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Öppna i visningsprogram"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Värdena är uppskattningar och kan variera. [Prestandapoängen beräknas](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) direkt utifrån dessa mätvärden."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Visa ursprungligt spår"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Visa spår"
   },
diff --git a/front_end/third_party/lighthouse/locales/ta.json b/front_end/third_party/lighthouse/locales/ta.json
index 0548751..f12a4a8 100644
--- a/front_end/third_party/lighthouse/locales/ta.json
+++ b/front_end/third_party/lighthouse/locales/ta.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` பண்புக்கூறுகள் அவற்றின் பங்களிப்புகளுடன் பொருந்துகின்றன"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "ஓர் உறுப்புக்குத் தெளிவான பெயர் இல்லை எனில் ஸ்கிரீன் ரீடர்கள் பொதுவான பெயரைப் பயன்படுத்தி அதை அறிவிக்கும். ஸ்கிரீன் ரீடர்களைப் பயன்படுத்துபவர்களுக்கு இது உதவியாக இருக்காது. [கட்டளை உறுப்புகளை அதிகம் அணுகத்தக்கதாக மாற்றுவது எப்படி என அறிக](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`, `link`, `menuitem` ஆகிய உறுப்புகளுக்குத் தெளிவான பெயர்கள் உள்ளன"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "ARIA உரையாடல் உறுப்புகளின் பெயர்கள் தெளிவாக இல்லை என்றால் ஸ்கிரீன் ரீடர் பயனர்கள் அவற்றின் நோக்கத்தைப் புரிந்துகொள்வது கடினம். [ARIA உரையாடல் உறுப்புகளை மேலும் தெளிவாக்குவது எப்படி என அறிக](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "`role=\"dialog\"` அல்லது `role=\"alertdialog\"` உள்ள உறுப்புகளுக்குத் தெளிவான பெயர்கள் இல்லை."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "`role=\"dialog\"` அல்லது `role=\"alertdialog\"` உள்ள உறுப்புகளுக்குத் தெளிவான பெயர்கள் உள்ளன."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "`<body>` ஆவணத்தில் `aria-hidden=\"true\"` அமைக்கப்பட்டிருக்கும்போது ஸ்கிரீன் ரீடர்கள் போன்ற உதவிகரமான தொழில்நுட்பங்கள் சீராக இயங்காது. [`aria-hidden` ஆவண அங்கத்தை எப்படிப் பாதிக்கிறது என அறிக](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` செல்லுபடியாகும் மதிப்புகளைக் கொண்டுள்ளன"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "மார்க்-அப் மூலம் பிரிக்கப்பட்ட டெக்ஸ்ட் நோடில் `role=text` சேர்த்தால் வாய்ஸ் ஓவர் சேவை அதை ஒரே வாக்கியமாகக் கருதும், ஆனால் அந்தப் பகுதியில் இருக்கும் ஃபோகஸ் செய்யக்கூடிய டிசன்டென்ட்டுகள் அறிவிக்கப்படாது. [`role=text` பண்புக்கூறு குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "`role=text` பண்புக்கூறு உள்ள உறுப்புகளுக்கு ஃபோகஸ் செய்யக்கூடிய டிசன்டென்ட்டுகள் உள்ளன."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "`role=text` பண்புக்கூறு உள்ள உறுப்புகளில் ஃபோகஸ் செய்யக்கூடிய டிசன்டென்ட்டுகள் இல்லை."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "நிலைமாற்றுப் புலம் ஒன்றுக்குத் தெளிவான பெயர் இல்லை எனில் ஸ்கிரீன் ரீடர்கள் அதைப் பொதுவான பெயரைப் பயன்படுத்தி அறிவிக்கும். இது ஸ்கிரீன் ரீடர்களைப் பயன்படுத்தும் பயனர்களுக்கு உதவியாக இருக்காது. [நிலைமாற்றுப் புலங்கள் குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA ஐடிகள் பிரத்தியேகமானவையாக உள்ளன"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "தலைப்பில் உள்ளடக்கம் இல்லை என்றாலோ புரியாத வார்த்தைகள் இருந்தாலோ ஸ்கிரீன் ரீடர் பயனர்கள் அந்த இணையப் பக்கத்தில் உள்ள தகவல்களை அணுகுவது கடினம். [தலைப்புகள் குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "தலைப்பு உறுப்புகளில் உள்ளடக்கம் இல்லை."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "தலைப்பு உறுப்புகள் அனைத்திலும் உள்ளடக்கம் உள்ளது."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "ஸ்கிரீன் ரீடர்கள் போன்ற உதவிகரமான தொழில்நுட்பங்கள் முதல் லேபிள், இறுதி லேபிள் அல்லது அனைத்து லேபிள்களையும் பயன்படுத்தும் என்பதால் படிவத்தில் பல லேபிள்கள் இருப்பது தெளிவற்ற அறிவிப்புகளுக்கு வழிவகுக்கலாம். [படிவ லேபிள்களைப் பயன்படுத்துவது எப்படி என அறிக](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`[lang]` பண்புக்கூறில் உள்ள அதே அடிப்படை மொழிப் பண்புக்கூறை `<html>` உறுப்பில் உள்ள `[xml:lang]` பண்புக்கூறு கொண்டுள்ளது."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "இணைப்பின் நோக்கத்தைப் பயனர்கள் புரிந்துகொள்ளவும், அதைப் பின்பற்றுவதைக் குறித்துத் தீர்மானிக்கவும், ஒரே இலக்கைக் கொண்ட இணைப்புகளுக்கு விளக்கமும் ஒன்றாக இருக்க வேண்டும். [ஒரே மாதிரியான இணைப்புகள் குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "ஒரே மாதிரியான இணைப்புகளுக்கு ஒரே நோக்கம் இல்லை."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "ஒரே மாதிரியான இணைப்புகளுக்கு ஒரே நோக்கம் உள்ளது."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "தகவல் உறுப்புகளில் சுருக்கமான, விளக்கமான மாற்று வார்த்தைகள் இருக்க வேண்டும். அலங்கார உறுப்புகளில் காலியான மாற்றுப் பண்புக்கூறு இருக்கலாம். [`alt` பண்புக்கூறு குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "பட உறுப்புகள் `[alt]` பண்புக்கூறுகளைக் கொண்டுள்ளன"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "தெளிவான மற்றும் அணுகக்கூடிய வார்த்தைகளை உள்ளீட்டு பட்டன்களில் சேர்ப்பது ஸ்கிரீன் ரீடரைப் பயன்படுத்துபவர்களுக்கு அந்த பட்டனின் நோக்கத்தைப் புரிந்துகொள்ள உதவலாம். [உள்ளீட்டு பட்டன்கள் குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` உறுப்புகளில் `[alt]` வார்த்தைகள் உள்ளன"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "ஸ்கிரீன் ரீடர்கள் போன்ற உதவிகரமான தொழில்நுட்பங்களால் சரியாக அறிவிக்கப்படும் வகையில் படிவக் கட்டுப்பாடுகள் இருப்பதை லேபிள்கள் உறுதிசெய்கின்றன. [படிவ உறுப்பு லேபிள்கள் குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "படிவ உறுப்புகளுக்கு, தொடர்புடைய லேபிள்கள் உள்ளன"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "ஒரு முக்கிய லேண்ட்மார்க் இருந்தால் ஸ்கிரீன் ரீடர் பயனர்கள் இணையப் பக்கத்தைக் கையாள உதவியாக இருக்கும். [லேண்ட்மார்க்குகள் குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "ஆவணத்தில் முக்கிய லேண்ட்மார்க் இல்லை."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "ஆவணத்தில் முக்கிய லேண்ட்மார்க் உள்ளது."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "பல பயனர்களால் குறைவான ஒளி மாறுபாடுள்ள வார்த்தைகளைப் படிக்க முடியாது அல்லது அவை படிக்கக் கடினமாக இருக்கும். தெளிவாக அடையாளம் காணக்கூடிய வார்த்தைகள் உள்ள இணைப்பு, பார்வைக் குறைபாடு உள்ள பயனர்களின் அனுபவத்தை மேம்படுத்தும். [அடையாளம் காணக்கூடிய வகையில் இணைப்புகளை மாற்றுவது எப்படி என அறிக](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "வண்ணங்களின் உதவி இல்லாமல் இணைப்புகளை அடையாளங்காண முடியாது."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "வண்ணங்களின் உதவி இல்லாமல் இணைப்புகளை அடையாளங்காணலாம்."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "தெளிவான, தனித்துவமான, மையப்படுத்தக்கூடிய இணைப்பு வார்த்தைகள் (மற்றும் இணைப்புகளாகப் பயன்படுத்தப்படும் படங்களுக்கான மாற்று வார்த்தைகள்) ஸ்கிரீன் ரீடர் பயனர்களுக்கான வழிகாட்டும் அனுபவத்தை மேம்படுத்தும். [இணைப்புகளின் தெளிவுத்தன்மையை அதிகப்படுத்துவது எப்படி என அறிக](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` உறுப்புகளில் மாற்று வார்த்தைகள் உள்ளன"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "படிவத்திலுள்ள பகுதிகளின் லேபிள்கள் சரியாக இல்லாவிட்டால் ஸ்கிரீன் ரீடர் பயனர்களின் அனுபவம் மோசமாகிவிடக் கூடும். [`select` உறுப்பு குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "குறிப்பிட்ட உறுப்புகளில் தொடர்புடைய லேபிள் உறுப்புகள் இல்லை."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "குறிப்பிட்ட உறுப்புகளில் தொடர்புடைய லேபிள் உறுப்புகள் உள்ளன."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "0க்கு அதிகமான மதிப்பு வெளிப்படையான ஒரு வழிசெலுத்தல் வரிசை முறையைக் குறிப்பிடுகிறது. தொழில்நுட்பரீதியாகச் செல்லுபடியாகும் என்றாலும், உதவிகரமான தொழில்நுட்பங்களைச் சார்ந்திருக்கும் பயனர்களுக்கு இது பெரும்பாலும் குழப்பமான அனுபவத்தையே உருவாக்கும். [`tabindex` பண்புக்கூறு குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "எந்த உறுப்புக்கும் `[tabindex]` மதிப்பு 0க்கு அதிகமாக இல்லை"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "அட்டவணைகளில் எளிதாகச் செல்வதற்கு ஸ்கிரீன் ரீடர்களில் அம்சங்கள் உள்ளன. கலங்களுடன் இருக்கும் `[colspan]` பண்புக்கூறுக்குப் பதிலாக அசல் தலைப்பை அட்டவணைகள் பயன்படுத்துவதை உறுதிசெய்வது ஸ்கிரீன் ரீடரைப் பயன்படுத்துபவர்களின் அனுபவத்தை மேம்படுத்தலாம். [தலைப்புகள் குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "தலைப்பைக் குறிப்பிட கலங்களுடன் இருக்கும் `[colspan]` பண்புக்கூறுக்குப் பதிலாக `<caption>` ஐ அட்டவணைகள் பயன்படுத்தும்."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "டச் டார்கெட்டுகள் தெளிவான அளவில் சீரான இடைவெளிகளுடன் இல்லை."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "டச் டார்கெட்டுகள் தெளிவான அளவில் சீரான இடைவெளிகளுடன் உள்ளன."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "அட்டவணைகளில் எளிதாகச் செல்வதற்கு ஸ்கிரீன் ரீடர்களில் அம்சங்கள் உள்ளன. பெரிய அட்டவணையில் உள்ள (அகலம் மற்றும் உயரத்தில் 3 அல்லது அதற்கு மேற்பட்ட கலங்கள்) `<td>` உறுப்புகள் தொடர்புடைய அட்டவணைத் தலைப்பைக் கொண்டிருப்பதை உறுதிசெய்வது ஸ்கிரீன் ரீடரைப் பயன்படுத்தும் பயனர்களின் அனுபவத்தை மேம்படுத்தலாம். [அட்டவணைத் தலைப்புகள் குறித்து மேலும் அறிக](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "பக்கம் மெனிஃபெஸ்ட் <link> URLலைக் கொண்டிருக்கவில்லை"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "பொருந்தும் service worker எதுவும் கண்டறியப்படவில்லை. பக்கத்தை ரெஃப்ரெஷ் செய்ய வேண்டியிருக்கலாம் அல்லது தற்போதைய பக்கத்திற்கான service workerரின் நோக்கம் மெனிஃபெஸ்ட்டின் ஸ்கோப் மற்றும் ஸ்டார்ட் URLலைக் கொண்டுள்ளதா எனச் சரிபார்க்கவும்."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "மெனிஃபெஸ்ட்டில், 'start_url' இல்லாத service workerரைச் சரிபார்க்க முடியவில்லை"
   },
@@ -969,7 +1083,7 @@
     "message": "Chrome பீட்டாவிலும் Androidல் நிலையான சேனல்களிலும் மட்டுமே prefer_related_applications ஆதரிக்கப்படும்."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse கருவியால் service worker இருந்ததா என்பதைத் தீர்மானிக்க முடியவில்லை. Chromeமின் புதிய பதிப்பில் முயலவும்."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Androidல் மெனிஃபெஸ்ட் URL ஸ்கீம் ({scheme}) ஆதரிக்கப்படவில்லை."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "காட்சிப் பகுதிக்குள் தெரியக்கூடிய கூறுகளின் நகர்வை கியூமுலேட்டிவ் லேஅவுட் ஷிஃப்ட் அளவிடுகிறது. [கியூமுலேட்டிவ் லேஅவுட் ஷிஃப்ட் அளவீடு குறித்து மேலும் அறிக](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "செயல்-காட்சி நேரம் என்பது பக்கத்தின் பதிலளிக்கும் தன்மையை அளவிடுகிறது, அதாவது பயனர் உள்ளீட்டிற்குப் பக்கத்தின் தெரிவுநிலை எந்த அளவிற்கு உள்ளது என்பதை அளவிடுவது. [செயல்-காட்சி நேர அளவீடு குறித்து மேலும் அறிக](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "'உள்ளடக்கத்துடன் முதல் தோற்றம்' என்பது வார்த்தைகளோ படமோ முதலில் தோன்றும் நேரத்தைக் குறிக்கிறது. ['உள்ளடக்கத்துடன் முதல் தோற்றம்' அளவீடு குறித்து மேலும் அறிக](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "'பயனுள்ள முதல் தோற்றம்' என்பது பக்கத்தின் முதன்மை உள்ளடக்கம் எப்போது தெரிகிறது என்பதை அளவிடுகிறது. ['பயனுள்ள முதல் தோற்றம்' அளவீடு குறித்து மேலும் அறிக](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "செயல்-காட்சி நேரம் என்பது பக்கத்தின் பதிலளிக்கும் தன்மையை அளவிடுகிறது, அதாவது பயனர் உள்ளீட்டிற்குப் பக்கத்தின் தெரிவுநிலை எந்த அளவிற்கு உள்ளது என்பதை அளவிடுவது. [செயல்-காட்சி நேர அளவீடு குறித்து மேலும் அறிக](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "பக்கம் முழுமையாகப் பங்கேற்கத்தக்க வகையில் ஏற்றப்பட எடுத்துக்கொள்ளும் நேரம் எதிர்வினை நேரம் எனப்படும். ['எதிர்வினை நேரம்' அளவீடு குறித்து மேலும் அறிக](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "பல பக்கங்களுக்குத் திசைதிருப்புவதைத் தவிர்க்கவும்"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "பக்க ஆதாரங்களின் அளவிற்கும் எண்ணிக்கைக்கும் பட்ஜெட்களை அமைக்க budget.json ஃபைலைச் சேர்க்கவும். [செயல்திறன் பட்ஜெட்கள் குறித்து மேலும் அறிக](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 கோரிக்கை • {byteCount, number, bytes} KiB}other{# கோரிக்கைகள் • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "கோரிக்கை எண்ணிக்கைகளைக் குறைவாகவும் பரிமாற்ற அளவுகளை சிறியதாகவும் வைத்திருங்கள்"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "தேடல் முடிவுகளில் எந்த URLலைக் காட்ட வேண்டும் என்பதை 'முன்னுரிமை இணைப்புகள்' பரிந்துரைக்கும். [முன்னுரிமை இணைப்புகள் குறித்து மேலும் அறிக](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "சேவையகப் பதிலளிப்புக்கான தொடக்க நேரம் குறைவானது"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service worker என்பது ஆஃப்லைனில் இயங்குதல், முகப்புத்திரையில் சேர்த்தல், புஷ் அறிவிப்புகள் போன்ற நவீன இணைய ஆப்ஸின் பல்வேறு அம்சங்களை உங்கள் ஆப்ஸ் பயன்படுத்த அனுமதிக்கும் தொழில்நுட்பமாகும். [Service Workerகள் குறித்து மேலும் அறிக](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "சேவைச் செயலாக்கி மூலம் இந்தப் பக்கம் கட்டுப்படுத்தப்படுகிறது, இருப்பினும் சரியான JSON ஆக மெனிஃபெஸ்ட்டைப் பாகுபடுத்த முடியாத காரணத்தால் `start_url` கண்டறியப்படவில்லை"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "இந்தப் பக்கம் சேவைச் செயலாக்கி மூலம் கட்டுப்படுத்தப்படுகிறது, இருப்பினும் `start_url` ({startUrl}) சேவைச் செயாலாக்கியின் நோக்கத்தில் ({scopeUrl}) இல்லை"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "இந்தப் பக்கம் சேவைச் செயலாக்கி மூலம் கட்டுப்படுத்தப்படுகிறது, இருப்பினும் மெனிஃபெஸ்ட் எதுவும் பெறப்படவில்லை என்பதால் `start_url` கண்டறியப்படவில்லை."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "இந்த இணையதளத்தில் ஒன்றோ அதற்கு மேற்பட்ட சேவைச் செயலாக்கிகளோ உள்ளன, இருப்பினும் இந்தப் பக்கம் ({pageUrl}) நோக்கத்தில் இல்லை."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "பக்கம், `start_url` போன்றவற்றைக் கட்டுப்படுத்துவதற்கான சேவைச் செயலாக்கி பதிவு செய்யப்படவில்லை"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "பக்கம், `start_url` போன்றவற்றைக் கட்டுப்படுத்தும் சேவைச் செயலாக்கியைப் பதிவுசெய்யும்."
-  },
   "core/audits/splash-screen.js | description": {
     "message": "பயனர்கள் அவர்களது முகப்புத் திரைகளில் இருந்து உங்கள் ஆப்ஸைத் தொடங்கும்போது உயர்தரமான அனுபவத்தைப் பெறுவதை தீம் அமைக்கப்பட்ட ஸ்பிளாஷ் திரை உறுதிப்படுத்தும். [ஸ்பிளாஷ் திரைகள் குறித்து மேலும் அறிக](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "சிறந்த நடைமுறைகள்"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "இந்த சரிபார்ப்புகள் [உங்கள் இணைய ஆப்ஸின் அணுகல்தன்மையை மேம்படுத்துவதற்கான](https://developer.chrome.com/docs/lighthouse/accessibility/) வாய்ப்புகளைத் தனிப்படுத்திக் காட்டுகின்றன. அணுகல்தன்மை சிக்கல்களில் சிலவற்றை மட்டுமே தானாகக் கண்டறிய முடியும் என்பதால் நேரடி பரிசோதனையையும் செய்ய ஊக்குவிக்கிறோம்."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "தானியங்கி சோதனைக் கருவியால் சோதிக்க முடியாத பகுதிகளை இவை சோதிக்கும். எங்கள் வழிகாட்டியில் [அணுகல்தன்மை மதிப்பாய்வை நடத்துவதைப்](https://web.dev/how-to-review/) பற்றி மேலும் தெரிந்துகொள்ளலாம்."
@@ -2769,7 +2853,7 @@
     "message": "படங்களைத் தேவையுள்ளபோது ஏற்றும் [Drupal மாடியூலை](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) நிறுவவும். செயல்திறனை மேம்படுத்துவதற்காக இந்த மாடியூல்கள் திரைக்கு வெளியில் உள்ள படங்களை மெதுவாக ஏற்றும் வசதியை வழங்குகின்றன."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "முக்கியமான CSS & JavaScriptடை முன்னிலைப்படுத்த, மாடியூலைப் பயன்படுத்தவும் அல்லது [மேம்பட்ட CSS/JS ஒருங்கிணைப்பு](https://www.drupal.org/project/advagg) மாடியூல் போன்ற JavaScript மூலம் ஒத்திசைவின்றி அசெட்டுகளை ஏற்றவும். இந்த மாடியூல் வழங்கும் மேம்படுத்துதல்கள் உங்கள் இணையதளத்தைப் பாதிக்கலாம் என்பதால் நீங்கள் குறியீட்டில் மாற்றங்களைச் செய்ய வேண்டியிருக்கும்."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "தீம்கள், மாடியூல்கள், சேவையக விவரக்குறிப்புகள் ஆகிய அனைத்தும் சேவையகத்தின் வேகத்தை நிர்ணயிக்கின்றன. மேலும் மேம்படுத்தப்பட்ட தீமினைக் கண்டறிந்து, மேம்படுத்தல் மாடியூலைக் கவனமாகத் தேர்ந்தெடுக்கவும் மற்றும்/அல்லது சேவையகத்தை மேம்படுத்தவும். PHP ஆப்கோட் தற்காலிகச் சேமிப்பு, Redis/Memcached போன்ற தரவுத்தள வினவல் நேரங்களைக் குறைப்பதற்கான தற்காலிக நினைவகச் சேமிப்பு, பக்கங்கள் விரைவாக ஏற்றப்படுவதற்கான மேம்பட்ட பயன்பாட்டு லாஜிக் ஆகியவற்றை உங்கள் ஹோஸ்டிங் சேவையகங்கள் பயன்படுத்த அனுமதிக்க வேண்டும்."
@@ -2778,10 +2862,10 @@
     "message": "உங்கள் பக்கத்தில் ஏற்றப்படும் படங்களின் அளவைக் குறைக்க [திரைக்கு ஏற்ப அளவு மாறும் பட ஸ்டைல்களைப்](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) பயன்படுத்தவும். பக்கத்தில் பல உள்ளடக்கத்தைக் காட்டுவதற்கு ’காட்சிகளைப்’ பயன்படுத்தினால் அந்தப் பக்கத்தில் காட்டப்படும் உள்ளடக்கத்தின் எண்ணிக்கையை வரம்பிட அதைப் பக்கங்களாகப் பிரிக்கவும்."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "\"நிர்வாகம் » உள்ளமைவு » மேம்பாடு\" என்ற பக்கத்தில் “ஒருங்கிணைப்பு CSS கோப்புகளை” இயக்கியுள்ளதை உறுதிசெய்துகொள்ளவும். CSS ஸ்டைல்களை ஒன்றிணைத்தும் சிறிதாக்கியும் சுருக்கியும் உங்கள் தளத்தின் செயல்பாட்டை வேகப்படுத்த, [கூடுதல் மாடியூல்கள்](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) மூலமாகவும் மேலும் மேம்பட்ட ஒருங்கிணைப்பு விருப்பங்களை உள்ளமைக்கலாம்."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "\"நிர்வாகம் » உள்ளமைவு » மேம்பாடு\" என்ற பக்கத்தில் “JavaScript கோப்புகளை ஒருங்கிணை” என்பதை இயக்கியுள்ளதை உறுதிசெய்துகொள்ளவும். JavaScript அசெட்டுகளை ஒன்றிணைத்தும் சிறிதாக்கியும் சுருக்கியும் உங்கள் தளத்தின் செயல்பாட்டை வேகப்படுத்த, [கூடுதல் மாடியூல்கள்](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) மூலமாகவும் மேலும் மேம்பட்ட ஒருங்கிணைப்பு விருப்பங்களை உள்ளமைக்கலாம்."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "பயன்படுத்தப்படாத CSS விதிகளை அகற்றிவிட்டு தொடர்புடைய பக்கம்/பக்கத்தில் உள்ள காம்பனென்ட்டில் தேவையான Drupal லைப்ரரிகளை மட்டும் இணைக்கவும். விவரங்களுக்கு [Drupal ஆவணமாக்கல் இணைப்பைப்](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) பார்க்கவும். பொருத்தமற்ற CSSஸைச் சேர்க்கும் இணைக்கப்பட்ட லைப்ரரிகளை அடையாளம் காண, Chrome DevToolsஸில் [குறியீட்டுக் கவரேஜை](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) இயக்கிப் பார்க்கவும். Drupal தளத்தில் CSS ஒருங்கிணைப்பு முடக்கப்பட்டிருக்கும்போது ஸ்டைல்ஷீட்டின் URLலில் இதற்குக் காரணமான தீம்/மாடியூலைக் கண்டறியலாம். அதிகளவு சிவப்பில் உள்ள குறியீட்டுக் கவரேஜைக் கொண்ட பட்டியலில் பல ஸ்டைல்ஷீட்களைக் கொண்ட தீம்கள்/மாடியூல்களைக் கண்டறியவும். பக்கத்தில் பயன்படுத்தும் பட்சத்தில் ஒரு தீம்/மாடியூல் ஒரு ஸ்டைல்ஷீட்டை மட்டுமே வரிசையில் சேர்க்க வேண்டும்."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "உங்கள் Next.js சேவையகத்தில் சுருக்குதலை இயக்கவும். [மேலும் அறிக](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "`nuxt/image` காம்பனென்ட்டைப் பயன்படுத்தி, `format=\"webp\"` வடிவமைப்பை அமைக்கவும். [மேலும் அறிக](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "உங்கள் கூறுகளின் ரெண்டரிங் செயல்திறனை அளவிட Profiler APIயைப் பயன்படுத்தும் React DevTools Profilerரைப் பயன்படுத்தவும். [மேலும் அறிக.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "வீடியோக்களை `VideoBoxes` உள்ளே காட்டவும், `Video Masks` பயன்படுத்தி அவற்றைப் பிரத்தியேகமாக்கவும் அல்லது `Transparent Videos` சேர்க்கவும். [மேலும் அறிக](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "படங்களின் வகை WebP என்று தானாகவே வழங்கப்படுவதை உறுதிசெய்ய, அவற்றை `Wix Media Manager` பயன்படுத்திப் பதிவேற்றவும். உங்கள் தளத்தின் மீடியாவை [மேம்படுத்த கூடுதல் வழிகளைக்](https://support.wix.com/en/article/site-performance-optimizing-your-media) கண்டறியவும்."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "உங்கள் தளத்தின் டாஷ்போர்டில் உள்ள `Custom Code` பிரிவில் [மூன்றாம் தரப்புக் குறியீட்டைச் சேர்க்கும்போது](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site), குறியீட்டு உள்ளடக்கத்தின் முடிவில் அது ஒத்திவைக்கப்பட்டுள்ளதா அல்லது ஏற்றப்பட்டுள்ளதா என்பதை உறுதிசெய்துகொள்ளவும். உங்கள் தளத்தில் வாய்ப்புள்ள இடங்களில் எல்லாம் மார்க்கெட்டிங் கருவிகளை உட்பொதிக்க Wix [ஒருங்கிணைப்புகளைப்](https://support.wix.com/en/article/about-marketing-integrations) பயன்படுத்தவும். "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "அதிகளவிலான பார்வையாளர்களுக்கு முடிந்தவரை விரைவாகப் பதில்களை வழங்க, CDNகளையும் தற்காலிகச் சேமிப்பையும் Wix பயன்படுத்துகிறது. குறிப்பாக, `Velo` பயன்படுத்தினால் உங்கள் தளத்திற்கு [நீங்களே தற்காலிகச் சேமிப்பை இயக்குவதைப்](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) பரிந்துரைக்கிறோம்."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "உங்கள் தளத்தில் நீங்கள் சேர்த்துள்ள மூன்றாம் தரப்புக் குறியீடுகள் அனைத்தையும் உங்கள் தளத்தின் டாஷ்போர்டில் உள்ள `Custom Code` பிரிவில் சரிபார்த்து, உங்கள் தளத்திற்குத் தேவையான சேவைகளை மட்டுமே வைத்துக்கொள்ளவும். [மேலும் தெரிந்துகொள்ளுங்கள்](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "GIFஐ HTML5 வீடியோவாக உட்பொதிக்க உதவும் சேவையில் அதைப் பதிவேற்றவும்."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "JSONனாக சேமி"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "வியூவரில் திற"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "மதிப்புகள் தோராயமானவை, மாறுபடக்கூடியவை. இந்த அளவீடுகளிலிருந்து நேரடியாக [செயல்திறன் ஸ்கோர் கணக்கிடப்படும்](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "அசல் டிரேஸைக் காட்டு"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "டிரேஸைக் காட்டு"
   },
diff --git a/front_end/third_party/lighthouse/locales/te.json b/front_end/third_party/lighthouse/locales/te.json
index 72e47e8..3375131 100644
--- a/front_end/third_party/lighthouse/locales/te.json
+++ b/front_end/third_party/lighthouse/locales/te.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "'`[aria-*]`' లక్షణాలు వాటి పాత్రలతో సరిపోలాలి"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "ఏదైనా ఎలిమెంట్‌కు యాక్సెస్ చేయదగిన పేరు లేనప్పుడు, స్క్రీన్ రీడర్‌లు దాన్ని సాధారణ పేరుతో బయటకు చదువుతాయి, స్క్రీన్ రీడర్‌లపై ఆధారపడే యూజర్‌లకు దీని వల్ల ఉపయోగం ఉండకుండా పోతుంది. [కమాండ్ ఎలిమెంట్‌లను మరింత యాక్సెస్ చేయదగినవిగా ఎలా చేయాలో తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`, `link`, `menuitem` ఎలిమెంట్‌లు యాక్సెస్ చేయగల పేర్లను కలిగి ఉన్నాయి"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "యాక్సెస్ చేయగల పేర్లు లేని ARIA డైలాగ్ ఎలిమెంట్‌లు స్క్రీన్ రీడర్ యూజర్‌లను ఈ ఎలిమెంట్‌ల ప్రయోజనాన్ని గుర్తించకుండా నిరోధించవచ్చు. [ARIA డైలాగ్ ఎలిమెంట్‌లను వాటికి మరింత యాక్సెస్ ఉండేలా చేయడం ఎలాగో తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "`role=\"dialog\"` లేదా `role=\"alertdialog\"`తో ఉన్న ఎలిమెంట్‌లకు యాక్సెస్ చేయగల పేర్లు లేవు."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "`role=\"dialog\"` లేదా `role=\"alertdialog\"` ఉన్న ఎలిమెంట్‌లు యాక్సెస్ చేయగల పేర్లను కలిగి ఉన్నాయి."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "`<body>` డాక్యుమెంట్‌లో `aria-hidden=\"true\"`‌ను సెట్ చేసినప్పుడు స్క్రీన్ రీడర్‌ల లాంటి సహాయక టెక్నాలజీలు స్థిరంగా పని చేయవు. [డాక్యుమెంట్‌లోని కంటెంట్‌ను `aria-hidden` ఎలా ప్రభావితం చేస్తుందో తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` విలువలు చెల్లుబాటు అయ్యేవి"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "మార్కప్ ద్వారా స్ప్లిట్ చేయబడిన టెక్స్ట్ నోడ్ చుట్టూ `role=text`ను జోడించడం, వాయిస్‌ఓవర్‌ను ఒక పదబంధంగా పరిగణించడాన్ని ఎనేబుల్ చేస్తుంది, కానీ ఎలిమెంట్‌కు చెందిన ఫోకస్ చేయదగిన సబ్-ఎలిమెంట్‌లు ప్రకటించబడవు. [`role=text` అట్రిబ్యూట్ గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "`role=text` అట్రిబ్యూట్ ఉన్న ఎలిమెంట్‌లు ఫోకస్ చేయదగిన డిసెండెంట్‌లను కలిగి ఉంటాయి."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "`role=text` అట్రిబ్యూట్ ఉన్న ఎలిమెంట్స్ ఫోకస్ చేయదగిన డిసెండెంట్‌లను కలిగి ఉండవు."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "ఏదైనా టోగుల్ ఫీల్డ్‌కు యాక్సెస్ చేయదగిన పేరు లేనప్పుడు, స్క్రీన్ రీడర్‌లు దాన్ని సాధారణ పేరుతో బయటకు చదువుతాయి, స్క్రీన్ రీడర్‌లపై ఆధారపడే యూజర్‌లకు దీని వల్ల ఉపయోగం ఉండకుండా పోతుంది. [టోగుల్ ఫీల్డ్‌ల గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA IDలు విభిన్నంగా ఉన్నాయి"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "కంటెంట్ లేని హెడ్డింగ్ లేదా యాక్సెస్ చేయలేని టెక్స్ట్ స్క్రీన్ రీడర్ యూజర్‌లను పేజీ నిర్మాణంపై సమాచారాన్ని యాక్సెస్ చేయకుండా నిరోధిస్తుంది. [హెడ్డింగ్‌ల గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "హెడ్డింగ్ ఎలిమెంట్‌లు కంటెంట్‌ని కలిగి ఉండవు."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "హెడ్డింగ్ ఎలిమెంట్‌లు అన్నీ కంటెంట్‌ను కలిగి ఉంటాయి."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "మొదటి, చివరి లేదా అన్ని లేబుల్స్‌ను ఉపయోగించే స్క్రీన్ రీడర్‌ల వంటి సహాయక టెక్నాలజీలు, పలు లేబుల్స్ ఉండే ఫారమ్ ఫీల్డ్‌లను గందరగోళంగా బయటకు చదివే అవకాశం ఉంది. [ఫారమ్ లేబుల్స్‌ను ఎలా ఉపయోగించాలో తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`[lang]` లక్షణం ఉన్న అదే భాషలో ఉన్న `[xml:lang]` లక్షణాన్ని `<html>` ఎలిమెంట్ కలిగి ఉంది."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "యూజర్‌లకు లింక్ ఉద్దేశ్యాన్ని అర్థం చేసుకోవడంలోను, దానిని ఫాలో అవ్వాలా వద్దా అని నిర్ణయించుకోవడంలోను సహాయపడేందుకు, ఒకే గమ్యస్థానానికి సంబంధించిన లింక్‌లు ఒకే వివరణను కలిగి ఉండాలి. [ఒకేలా ఉండే లింక్‌ల గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "ఒకే విధమైన లింక్‌లకు ఒకే ప్రయోజనం ఉండదు."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "ఒకే విధమైన లింక్‌లకు ఒకే ప్రయోజనం ఉంటుంది."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "సమాచారాత్మక ఎలిమెంట్‌లు చిన్నగా, అలాగే వివరణాత్మక ప్రత్యామ్నాయ టెక్స్ట్‌ను కలిగి ఉండాలి. అలంకార ఎలిమెంట్‌లను ఖాళీ alt లక్షణంతో విస్మరించవచ్చు. [`alt` లక్షణం గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "చిత్ర మూలకాలు '`[alt]`' లక్షణాలను కలిగి ఉన్నాయి"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "స్పష్టమైన, యాక్సెస్ చేయదగిన టెక్స్ట్‌ను ఇన్‌పుట్ బటన్‌లకు జోడించడం ద్వారా స్క్రీన్ రీడర్ యూజర్‌లు ఇన్‌పుట్ బటన్ ప్రయోజనాన్ని తెలుసుకోవడంలో సహాయపడవచ్చు. [ఇన్‌పుట్ బటన్‌ల గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` ఎలిమెంట్‌లు `[alt]` టెక్స్ట్‌ను కలిగి ఉన్నాయి"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "స్క్రీన్ రీడర్‌ల లాంటి సహాయక టెక్నాలజీలు, ఫారమ్ కంట్రోల్స్‌ను సక్రమంగా చదివి వినిపించేలా లేబుల్స్ చూసుకుంటాయి. [ఫారమ్ ఎలిమెంట్ లేబుల్స్ గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "ఫారమ్ మూలకాలు అనుబంధిత లేబుళ్లను కలిగి ఉన్నాయి"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "ఒక ప్రధాన ల్యాండ్‌మార్క్ స్క్రీన్ రీడర్ యూజర్‌లకు వెబ్ పేజీని నావిగేట్ చేయడంలో సహాయపడుతుంది. [ల్యాండ్‌మార్క్‌ల గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "డాక్యుమెంట్‌లో ప్రధాన ల్యాండ్‌మార్క్ లేదు."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "డాక్యుమెంట్ ప్రధాన ల్యాండ్‌మార్క్‌ను కలిగి ఉంది."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "తక్కువ కాంట్రాస్ట్ గల టెక్స్ట్ అనేది చాలా మంది యూజర్‌లు కష్టపడి చదవాల్సి వచ్చేలా లేదా అస్సలు చదవలేనిదిగా ఉంటుంది. గుర్తించదగిన లింక్ టెక్స్ట్ చూపు తక్కువగా ఉన్న యూజర్‌లకు ఎక్స్‌పీరియన్స్‌ను మెరుగుపరుస్తుంది. [లింక్‌లను గుర్తించగలిగేలా చేయడం ఎలాగో తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "లింక్‌లను గుర్తుపట్టేందుకు రంగుపై ఆధారపడవలసి ఉంటుంది."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "రంగుపై ఆధారపడకుండా లింక్‌లను గుర్తుపట్టవచ్చు."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "గుర్తించదగిన, విభిన్నమైన, ఇంకా ఫోకస్ చేయదగిన లింక్ టెక్స్ట్ (అలాగే ఇమేజ్‌లను లింక్‌లుగా ఉపయోగించినప్పుడు వాటి ప్రత్యామ్నాయ టెక్స్ట్) సహాయంతో స్క్రీన్ రీడర్ యూజర్‌లకు నావిగేషన్ అనుభవం మెరుగవుతుంది. [లింక్‌లను యాక్సెస్ చేయదగినవిగా ఎలా చేయాలో తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` ఎలిమెంట్‌లు ప్రత్యామ్నాయ టెక్స్ట్‌ను కలిగి ఉన్నాయి"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "ప్రభావవంతమైన లేబుల్స్ లేని ఫారమ్ ఎలిమెంట్స్ స్క్రీన్ రీడర్ యూజర్‌లకు నిరాశపరిచే ఎక్స్‌పీరియన్స్‌లను క్రియేట్ చేయగలవు. [ `select` ఎలిమెంట్](https://dequeuniversity.com/rules/axe/4.7/select-name) గురించి మరింత తెలుసుకోండి."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "ఎలిమెంట్‌లకు అనుబంధిత లేబుల్ ఎలిమెంట్‌లు లేవు."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "ఎంపిక చేసిన ఎలిమెంట్‌లు అనుబంధిత లేబుల్ ఎలిమెంట్‌లను కలిగి ఉంటాయి."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "0 కంటే పెద్ద విలువ, స్పష్టమైన నావిగేషన్ క్రమాన్ని సూచిస్తుంది. టెక్నికల్‌గా చెల్లుబాటే అయినప్పటికీ, సహాయక టెక్నాలజీలపై ఆధారపడే యూజర్‌లకు ఇది తరచుగా విసుగు తెప్పిస్తూ ఉంటుంది. [`tabindex` లక్షణం గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "ఏ మూలకానికీ సున్నా కంటే పెద్ద ``[tabindex]`` విలువ లేదు"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "టేబుల్స్‌ను నావిగేట్ చేయడం సులభతరం చేసే ఫీచర్‌లను స్క్రీన్ రీడర్‌లు కలిగి ఉన్నాయి. `[colspan]` లక్షణంతో ఉన్న సెల్స్‌కు బదులుగా టేబుల్స్ అసలు క్యాప్షన్ ఎలిమెంట్‌ను ఉపయోగించేలా చూసుకుంటే, అది స్క్రీన్ రీడర్ యూజర్‌ల అనుభవాన్ని మెరుగుపరచవచ్చు. [క్యాప్షన్‌ల గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "క్యాప్షన్‌ను సూచించడానికి `[colspan]` లక్షణంతో ఉన్న సెల్స్‌కు బదలుగా టేబుల్స్ `<caption>`‌ను ఉపయోగిస్తాయి."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "టచ్ టార్గెట్‌లకు తగినంత సైజు, లేదా స్పేసింగ్ లేవు."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "టచ్ టార్గెట్‌లు తగినంత సైజును, స్పేసింగ్‌ను కలిగి ఉంటాయి."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "టేబుల్స్‌ను నావిగేట్ చేయడం సులభతరం చేసే ఫీచర్‌లను స్క్రీన్ రీడర్‌లు కలిగి ఉన్నాయి. పెద్ద టేబుల్ (3 లేదా అంతకంటే ఎక్కువ సెల్స్ వెడల్పు, ఎత్తు ఉన్నది)లోని `<td>` ఎలిమెంట్‌లకు అనుబంధించిన టేబుల్ హెడర్ ఉండేలా చూసుకుంటే, అది స్క్రీన్ రీడర్ యూజర్‌ల అనుభవాన్ని మెరుగుపరచవచ్చు. [టేబుల్ రీడర్‌ల గురించి మరింత తెలుసుకోండి](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "పేజీకి మ్యానిఫెస్ట్ <link> URL లేదు"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "మ్యాచ్ అవుతున్న సర్వీస్ వర్కర్ ఏదీ గుర్తించలేదు. మీరు పేజీని రీలోడ్ చేయాల్సి రావచ్చు లేదా ప్రస్తుత పేజీ కోసం సర్వీస్ వర్కర్ పరిధిలో మానిఫెస్ట్ నుండి పరిధి, ప్రారంభ URL ఉన్నాయో లేదో చూసుకోండి."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "మ్యానిఫెస్ట్‌లో 'start_url' ఫీల్డ్ లేకుండా సర్వీస్ వర్కర్‌ను చెక్ చేయడం సాధ్యపడదు"
   },
@@ -969,7 +1083,7 @@
     "message": "కేవలం Chrome బీటా మరియు Androidలోని స్థిర ఛానెళ్లలో మాత్రమే prefer_related_applicationsకి సపోర్ట్ ఉంది."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "సర్వీస్ వర్కర్ ఉన్నారో, లేదో Lighthouse గుర్తించలేకపోయింది. దయచేసి Chrome కొత్త వెర్షన్‌తో ట్రై చేయండి."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "మ్యానిఫెస్ట్ URL స్కీమ్ ({scheme})కు Androidలో సపోర్ట్ లేదు."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "వీక్షణ పోర్ట్‌లో కనిపించే ఎలిమెంట్‌ల కదలికను క్యుములేటివ్ లేఅవుట్ షిఫ్ట్ కొలుస్తుంది. [క్యుములేటివ్ లేఅవుట్ షిఫ్ట్ కొలమానం గురించి మరింత తెలుసుకోండి](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaction to Next Paint పేజీ ప్రతిస్పందనా తీరును కొలుస్తుంది, అంటే యూజర్ ఇన్‌పుట్‌కు ప్రత్యక్షంగా ప్రతిస్పందించడానికి పేజీకి ఎంత సమయం పడుతుందో కొలుస్తుంది. [Interaction to Next Paint కొలమానం గురించి మరింత తెలుసుకోండి](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "ఫస్ట్ కంటెంట్‌ఫుల్ పెయింట్ అనేది, మొదటి టెక్స్ట్ లేదా ఇమేజ్ పెయింట్ చేయబడిన సమయాన్ని గుర్తిస్తుంది. [ఫస్ట్ కంటెంట్‌ఫుల్ పెయింట్ కొలమానం గురించి మరింత తెలుసుకోండి](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "పేజీకి సంబంధించిన ప్రధాన కంటెంట్ ఎప్పుడు కనిపిస్తుంది అనే దాన్ని ఫస్ట్ మీనింగ్‌ఫుల్ పెయింట్ కొలుస్తుంది. [ఫస్ట్ మీనింగ్‌ఫుల్ పెయింట్ కొలమానం గురించి మరింత తెలుసుకోండి](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaction to Next Paint పేజీ ప్రతిస్పందనా తీరును కొలుస్తుంది, అంటే యూజర్ ఇన్‌పుట్‌కు ప్రత్యక్షంగా ప్రతిస్పందించడానికి పేజీకి ఎంత సమయం పడుతుందో కొలుస్తుంది. [Interaction to Next Paint కొలమానం గురించి మరింత తెలుసుకోండి](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "పూర్తిగా ఇంటరాక్టివ్ అవ్వడానికి పేజీకి ఎంత సమయం పడుతుందో, దాన్నే ఇంటరాక్షన్ టైమ్ అని అంటారు. [ఇంటరాక్షన్ టైమ్ కొలమానం గురించి మరింత తెలుసుకోండి](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "అనేక పేజీ మళ్లింపులను నివారించండి"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "పేజీ రిసోర్స్‌ల పరిమాణానికి, ఇంకా సైజుకు బడ్జెట్‌లను సెట్ చేయడానికి, budget.json ఫైల్‌ను జోడించండి. [పనితీరుకు సంబంధించిన బడ్జెట్‌ల గురించి మరింత తెలుసుకోండి](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 రిక్వెస్ట్ • {byteCount, number, bytes} KiB}other{# రిక్వెస్ట్‌లు • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "రిక్వెస్ట్‌ల సంఖ్యను తగ్గించుకోండి, బదిలీ పరిమాణాలు తక్కువగా ఉండేలా చూసుకోండి"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "సెర్చ్ ఫలితాలలో ఏ URLను చూపాలో కనోనికల్ లింక్‌లు సూచిస్తాయి. [కనోనికల్ లింక్‌ల గురించి మరింత తెలుసుకోండి](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "ప్రారంభ సర్వర్ ప్రతిస్పందన సమయం తక్కువగా ఉంది"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "సర్వీస్ వర్కర్ టెక్నాలజీ అనేది, ఆఫ్‌లైన్ వినియోగం, హోమ్‌స్క్రీన్‌కు జోడించడం, పుష్ నోటిఫికేషన్‌ల లాంటి అనేక ప్రోగ్రెసివ్ వెబ్ యాప్ ఫీచర్‌లను ఉపయోగించే వీలు మీ యాప్‌నకు కల్పిస్తుంది. [సర్వీస్ వర్కర్‌ల గురించి మరింత తెలుసుకోండి](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "ఈ పేజీ ఒక సర్వీస్ వర్కర్ ద్వారా నియంత్రించబడినప్పటికీ, చెల్లుబాటయ్యే JSON ఫార్మాట్‌లో అన్వయించడంలో మానిఫెస్ట్ విఫలమైనందున '`start_url`' ఏదీ కనుగొనబడలేదు"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "ఈ పేజీ ఒక సర్వీస్ వర్కర్ ద్వారా నియంత్రించబడినప్పటికీ, '`start_url`' ({startUrl}) అన్నది సర్వీస్ వర్కర్ పరిధి ({scopeUrl})లో లేదు"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "ఈ పేజీ ఒక సర్వీస్ వర్కర్ ద్వారా నియంత్రించబడినప్పటికీ, మానిఫెస్ట్ ఏదీ పొందనందున '`start_url`' ఏదీ కనుగొనబడలేదు."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "ఈ మూలాధారంలో ఒకటి లేదా అంతకంటే ఎక్కువ సర్వీస్ వర్కర్‌లు ఉన్నప్పటికీ, పేజీ ({pageUrl}) పరిధిలో లేదు."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "పేజీని, '`start_url`'ను నియంత్రించే సర్వీస్ వర్కర్ ఏదీ నమోదు చేయబడలేదు"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "పేజీని, '`start_url`'ను నియంత్రించే సర్వీస్ వర్కర్ నమోదు చేయబడింది"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "థీమ్‌తో కూడిన స్ప్లాష్ స్క్రీన్ వలన, యూజర్‌లు వారి హోమ్‌స్క్రీన్‌ల నుండి మీ యాప్‌ను లాంచ్ చేసినప్పుడు, అధిక క్వాలిటీ గల అనుభవం అందించబడుతుంది. [స్ప్లాష్ స్క్రీన్‌ల గురించి మరింత తెలుసుకోండి](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "ఉత్తమ అభ్యాసాలు"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "[మీ వెబ్ యాప్ యొక్క యాక్సెసిబిలిటీని మెరుగుపరచగల](https://developer.chrome.com/docs/lighthouse/accessibility/) అవకాశాలను ఈ తనిఖీలు హైలైట్ చేస్తాయి. యాక్సెసిబిలిటీ సమస్యలలోని ఒక సబ్‌సెట్‌ను మాత్రమే ఆటోమేటిక్‌గా గుర్తించడం సాధ్యపడుతుంది, కనుక మాన్యువల్ పరీక్ష కూడా చేయాల్సిందిగా సిఫార్సు చేస్తున్నాము."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "ఆటోమేటెడ్ పరీక్ష సాధనం కవర్ చేయని ప్రాంతాలను ఈ అంశాలు పేర్కొంటాయి. [యాక్సెసిబిలిటీ రివ్యూను నిర్వహించడం](https://web.dev/how-to-review/) గురించి మా గైడ్‌లో మరింత తెలుసుకోండి."
@@ -2769,7 +2853,7 @@
     "message": "లేజీ ఇమేజ్‌లను లోడ్ చేయగల [ఒక Drupal మాడ్యూల్](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search)ను ఇన్‌స్టాల్ చేయండి. అలాంటి మాడ్యూల్‌లు, పనితీరును మెరుగుపరచడానికి ఎలాంటి ఆఫ్‌స్క్రీన్ ఇమేజ్‌లను అయినా మినహాయించగల సామర్థ్యాన్ని అందిస్తాయి."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "కీలకమైన CSS, JavaSciptను ఇన్‌లైన్‌లో ఉంచడానికి, లేదా [అధునాతన CSS/JS అగ్రిగేషన్](https://www.drupal.org/project/advagg) మాడ్యూల్ లాంటి JavaScript ద్వారా అస్సెట్‌లను అసమకాలికంగా లోడ్ చేసే అవకాశం ఉండటానికి, మాడ్యూల్‌ను ఉపయోగించడానికి ప్రయత్నించండి. ఈ మాడ్యూల్ ద్వారా అందించబడే ఆప్టిమైజేషన్‌లు మీ సైట్‌ను విడగొట్టవచ్చని గుర్తుంచుకోండి, కనుక మీరు కోడ్‌కు మార్పులు చేయాల్సి రావచ్చు."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "థీమ్‌లు, మాడ్యూల్‌లు, సర్వర్ నిర్దేశాలన్నీ కూడా సర్వర్ ప్రతిస్పందన సమయాన్ని ప్రభావితం చేస్తాయి. చాలా జాగ్రత్తగా ఆప్టిమైజేషన్ మాడ్యూల్‌ను ఎంచుకోవడం, మరియు/లేదా మీ సర్వర్‌ను అప్‌గ్రేడ్ చేయడం ద్వారా, మరింత ఆప్టిమైజ్ చేయబడిన థీమ్‌ను కనుగొనడానికి ప్రయత్నించండి. మీ హోస్టింగ్ సర్వర్‌లు Redis లేదా Memcached లాంటి డేటాబేస్ క్వెరీ సమయాలను తగ్గించడానికి PHP opcode కాషింగ్, మెమరీ-కాషింగ్‌లను ఉపయోగించాలి, అలాగే పేజీలను వేగవంతంగా సిద్ధం చేయడానికి ఆప్టిమైజ్ చేయబడిన అప్లికేషన్ లాజిక్‌ను ఉపయోగించాలి."
@@ -2778,10 +2862,10 @@
     "message": "మీ పేజీలో లోడ్ చేయబడిన ఇమేజ్‌ల సైజ్‌ను తగ్గించడానికి [ప్రతిస్పందనాత్మక ఇమేజ్ స్టయిల్‌ల](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8)ను ఉపయోగించవచ్చు, దాన్ని పరిశీలించండి. మీరు పేజీలో అనేక కంటెంట్ ఐటెమ్‌లను చూపించడానికి వీక్షణలను ఉపయోగిస్తున్నట్లయితే, ఇవ్వబడిన పేజీలో చూపబడే కంటెంట్ ఐటెమ్‌ల సంఖ్యను పరిమితం చేయడానికి పేజీల రూపకల్పనను అమలు చేయవచ్చు, దాన్ని పరిశీలించండి."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "మీరు \"సముదాయ CSS ఫైళ్ల\"ను \"అడ్మినిస్ట్రేషన్ » కాన్ఫిగరేషన్ » డెవలప్మెంట్\" పేజీలో ఎనేబుల్ చేశారని నిర్ధారించుకోండి. మీ CSS స్టయిల్‌లను సంగ్రహించడం, సైజు తగ్గించడం ఇంకా కుదించడం ద్వారా మీ సైట్‌ను వేగవంతం చేయడానికి, మీరు [అదనపు మాడ్యూల్‌ల](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) ద్వారా మరింత అధునాతన సముదాయ ఆప్షన్‌లను కూడా కాన్ఫిగర్ చేయవచ్చు."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "మీరు \"సముదాయ JavaScript ఫైల్స్\"ను \"అడ్మినిస్ట్రేషన్ » కాన్ఫిగరేషన్ » డెవలప్మెంట్\" పేజీలో ఎనేబుల్ చేశారని నిర్ధారించుకోండి. మీ JavaScript అస్సెట్‌లను సంగ్రహించడం, సైజు తగ్గించడం ఇంకా కుదించడం ద్వారా మీ సైట్‌ను వేగవంతం చేయడానికి, మీరు [అదనపు మాడ్యూల్‌ల](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) ద్వారా మరింత అధునాతన సముదాయ ఆప్షన్‌లను కూడా కాన్ఫిగర్ చేయవచ్చు."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "ఉపయోగించని CSS నియమాలను తీసివేయవచ్చు, దాన్ని పరిశీలించండి, సంబంధిత పేజీకి లేదా పేజీలోని భాగానికి అవసరమైన Drupal లైబ్రరీలను మాత్రమే అటాచ్ చేయండి. వివరాల కోసం [Drupal డాక్యుమెంటేషన్ లింక్‌](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library)ను చూడండి. అసంబద్ధమైన CSSను జోడిస్తున్న 'అటాచ్ చేయబడిన' లైబ్రరీలను గుర్తించడానికి, Chrome DevToolsలో [కోడ్ కవరేజీ](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage)ని రన్ చేయడానికి ట్రై చేయండి. మీ Drupal సైట్‌లో CSS సముదాయం డిజేబుల్ చేయబడినప్పుడు అందుకు కారణమైన థీమ్/మాడ్యూల్‌ను, స్టయిల్‌షీట్‌కు చెందిన URL నుండి మీరు గుర్తించవచ్చు. కోడ్ కవరేజీలో ఎక్కువ ఎరుపు రంగు కలిగి ఉన్న లిస్ట్‌లో అనేక స్టయిల్‌షీట్‌లను కలిగి ఉన్న థీమ్/మాడ్యూల్‌ల కోసం చూడండి. నిజంగా థీమ్/మాడ్యూల్‌ను ఆ పేజీలో ఉపయోగించినప్పుడు మాత్రమే స్టయిల్‌షీట్‌కు జత చేయాలి."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "మీ Next.js సర్వర్‌లో కుదింపును ఎనేబుల్ చేయండి. [మరింత తెలుసుకోండి](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "`nuxt/image` కాంపోనెంట్‌ను ఉపయోగించి, `format=\"webp\"`ను సెట్ చేయండి. [మరింత తెలుసుకోండి](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "మీ కాంపొనెంట్‌ల అమలు పనితీరును అంచనా వేయడానికి, ప్రొఫైలర్ API వినియోగించబడే రియాక్ట్ DevTools ప్రొఫైలర్‌ను ఉపయోగించండి. [మరింత తెలుసుకోండి.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "వీడియోలను `VideoBoxes` లోపల ఉంచండి, `Video Masks`ను ఉపయోగించి వాటిని అనుకూలంగా మార్చండి లేదా `Transparent Videos`ను జోడించండి. [మరింత తెలుసుకోండి](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "ఇమేజ్‌లు ఆటోమేటిక్‌గా WebPగా సర్వ్ చేయబడుతున్నాయని నిర్ధారించుకోవడానికి `Wix Media Manager`ను ఉపయోగించి అప్‌లోడ్ చేయండి. మీ సైట్ మీడియాను [ఆప్టిమైజ్ చేయడానికి మరిన్ని మార్గాలను](https://support.wix.com/en/article/site-performance-optimizing-your-media) కనుగొనండి."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "మీ సైట్ డ్యాష్‌బోర్డ్‌లోని `Custom Code`ట్యాబ్‌లో [థర్డ్-పార్టీ కోడ్‌ను జోడించినప్పుడు](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) అది వాయిదా వేయబడిందని లేదా కోడ్ బాడీ చివరిలో లోడ్ చేయబడిందని నిర్ధారించుకోండి. సాధ్యమైన చోట, మీ సైట్‌లో మార్కెటింగ్ సాధనాలను పొందుపరచడానికి Wix [ఇంటిగ్రేషన్‌లను](https://support.wix.com/en/article/about-marketing-integrations) ఉపయోగించండి. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix చాలా మంది సందర్శకులకు వీలైనంత వేగంగా సమాధానాలను అందించడానికి CDNలను, కాషింగ్‌ను ఉపయోగిస్తుంది. మీ సైట్ కోసం [మాన్యువల్‌గా కాషింగ్‌ను ఎనేబుల్ చేయడాన్ని](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) పరిగణించండి, ముఖ్యంగా `Velo`ని ఉపయోగిస్తున్న పక్షంలో."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "మీ సైట్ డ్యాష్‌బోర్డ్‌లోని `Custom Code` ట్యాబ్‌లో మీరు మీ సైట్‌కి జోడించిన ఏదైనా థర్డ్-పార్టీ కోడ్‌ను రివ్యూ చేయండి, మీ సైట్‌కు అవసరమైన సర్వీస్‌లను మాత్రమే ఉంచండి. [మరింత సమాచారాన్ని కనుగొనండి](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "మీ GIFను HTML5 వీడియోగా పొందుపరచడానికి అందుబాటులో ఉండేలా చేసే సర్వీస్‌కు దానిని అప్‌లోడ్ చేయవచ్చు, దాన్ని పరిశీలించండి."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "JSON లాగా సేవ్ చేయండి"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "వ్యూయర్‌లో తెరువు"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "విలువలు కేవలం అంచనా మాత్రమే, ఇవి మారే అవకాశం ఉంది. నేరుగా ఈ కొలమానాల ఆధారంగా [పనితీరు స్కోరు లెక్కించబడుతుంది](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "అసలైన ట్రేస్‌ను చూపించు"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "ట్రేస్‌ను చూపించు"
   },
diff --git a/front_end/third_party/lighthouse/locales/th.json b/front_end/third_party/lighthouse/locales/th.json
index f5d9fb5..78899fa 100644
--- a/front_end/third_party/lighthouse/locales/th.json
+++ b/front_end/third_party/lighthouse/locales/th.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "แอตทริบิวต์ `[aria-*]` ตรงกับบทบาทของตน"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "เมื่อองค์ประกอบไม่มีชื่อที่เข้าถึงได้ โปรแกรมอ่านหน้าจอจะอ่านองค์ประกอบนั้นโดยใช้ชื่อทั่วไป ซึ่งทำให้ผู้ที่ต้องใช้โปรแกรมอ่านหน้าจอใช้องค์ประกอบดังกล่าวไม่ได้ [ดูวิธีทําให้องค์ประกอบคําสั่งเข้าถึงได้ง่ายขึ้น](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "องค์ประกอบ `button`, `link` และ `menuitem` มีชื่อสำหรับการช่วยเหลือพิเศษ"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "องค์ประกอบกล่องโต้ตอบ ARIA ที่ไม่มีชื่อที่เข้าถึงได้อาจทำให้ผู้ใช้โปรแกรมอ่านหน้าจอแยกแยะจุดประสงค์ขององค์ประกอบเหล่านี้ไม่ได้ [ดูวิธีทำให้องค์ประกอบกล่องโต้ตอบ ARIA เข้าถึงได้ง่ายขึ้น](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "องค์ประกอบที่มี `role=\"dialog\"` หรือ `role=\"alertdialog\"` ไม่มีชื่อที่เข้าถึงได้"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "องค์ประกอบที่มี `role=\"dialog\"` หรือ `role=\"alertdialog\"` มีชื่อที่เข้าถึงได้"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "เทคโนโลยีความช่วยเหลือพิเศษ (เช่น โปรแกรมอ่านหน้าจอ) ทำงานไม่สอดคล้องกันเมื่อตั้งค่า `aria-hidden=\"true\"` ในเอกสาร `<body>` [ดูว่า `aria-hidden` ส่งผลอย่างไรต่อส่วนเนื้อหาของเอกสาร](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "ค่า `[role]` ถูกต้อง"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "การเพิ่ม `role=text` รอบโหนดข้อความที่แบ่งตามมาร์กอัปจะทำให้ VoiceOver ถือว่าโหนดเป็น 1 วลี แต่ระบบจะไม่ประกาศองค์ประกอบสืบทอดที่โฟกัสได้ขององค์ประกอบ [ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์ `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "องค์ประกอบที่มีแอตทริบิวต์ `role=text` มีองค์ประกอบสืบทอดที่โฟกัสได้"
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "องค์ประกอบที่มีแอตทริบิวต์ `role=text` ไม่มีองค์ประกอบสืบทอดที่โฟกัสได้"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "เมื่อช่องสลับไม่มีชื่อที่เข้าถึงได้ โปรแกรมอ่านหน้าจอจะอ่านปุ่มนั้นโดยใช้ชื่อทั่วไป ซึ่งทำให้ผู้ที่ต้องใช้โปรแกรมอ่านหน้าจอใช้ช่องสลับดังกล่าวไม่ได้ [ดูข้อมูลเพิ่มเติมเกี่ยวกับช่องสลับ](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ไม่มีรหัส ARIA ที่ซ้ำกัน"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "ส่วนหัวที่ไม่มีเนื้อหาหรือมีข้อความที่ไม่สามารถเข้าถึงได้จะทำให้ผู้ใช้โปรแกรมอ่านหน้าจอไม่สามารถเข้าถึงข้อมูลบนโครงสร้างของหน้าเว็บ [ดูข้อมูลเพิ่มเติมเกี่ยวกับส่วนหัว](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "องค์ประกอบส่วนหัวไม่มีเนื้อหา"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "องค์ประกอบส่วนหัวทั้งหมดมีเนื้อหา"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "ช่องในฟอร์มที่มีป้ายกำกับหลายรายการอาจทำให้เทคโนโลยีความช่วยเหลือพิเศษ (เช่น โปรแกรมอ่านหน้าจอ) สร้างความสับสนให้กับผู้ใช้ได้ โดยอาจอ่านป้ายกำกับแรก ป้ายกำกับสุดท้าย หรืออ่านทุกป้ายกำกับ [ดูวิธีใช้ป้ายกำกับในแบบฟอร์ม](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "องค์ประกอบ `<html>` มีแอตทริบิวต์ `[xml:lang]` ที่มีภาษาฐานเดียวกันกับแอตทริบิวต์ `[lang]`"
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "ลิงก์ที่มีปลายทางเดียวกันควรจะมีคำอธิบายเดียวกัน เพื่อช่วยให้ผู้ใช้เข้าใจวัตถุประสงค์ของลิงก์และตัดสินใจว่าจะคลิกเพื่อไปตามลิงก์หรือไม่ [ดูข้อมูลเพิ่มเติมเกี่ยวกับลิงก์ที่เหมือนกัน](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "ลิงก์ที่เหมือนกันมีวัตถุประสงค์ต่างกัน"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "ลิงก์ที่เหมือนกันมีวัตถุประสงค์เดียวกัน"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "องค์ประกอบเพื่อการให้ข้อมูลควรมีข้อความสำรองที่สั้นกระชับและสื่อความหมาย การใช้แอตทริบิวต์ Alt ที่ว่างเปล่าจะเป็นการเพิกเฉยต่อองค์ประกอบเพื่อการตกแต่ง [ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์ `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "องค์ประกอบรูปภาพมีแอตทริบิวต์ `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "การเพิ่มข้อความช่วยการเข้าถึงซึ่งมองเห็นได้ลงในปุ่มอินพุตอาจช่วยให้ผู้ใช้โปรแกรมอ่านหน้าจอเข้าใจวัตถุประสงค์ของปุ่มอินพุต [ดูข้อมูลเพิ่มเติมเกี่ยวกับปุ่มอินพุต](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "องค์ประกอบ `<input type=\"image\">` มีข้อความ `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "ป้ายกำกับช่วยดูแลให้เทคโนโลยีความช่วยเหลือพิเศษอย่างเช่น โปรแกรมอ่านหน้าจอ อ่านส่วนควบคุมฟอร์มได้อย่างถูกต้อง [ดูข้อมูลเพิ่มเติมเกี่ยวกับป้ายกํากับองค์ประกอบแบบฟอร์ม](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "องค์ประกอบฟอร์มมีป้ายกำกับที่เชื่อมโยงอยู่"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "จุดสังเกตหลัก 1 จุดช่วยให้ผู้ใช้โปรแกรมอ่านหน้าจอไปยังส่วนต่างๆ ของหน้าเว็บได้ [ดูข้อมูลเพิ่มเติมเกี่ยวกับจุดสังเกต](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "เอกสารไม่มีจุดสังเกตหลัก"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "เอกสารมีจุดสังเกตหลัก"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "ข้อความคอนทราสต์ต่ำมักทำให้ผู้ใช้จำนวนมากอ่านได้ยากหรืออ่านไม่ได้เลย ข้อความลิงก์ที่มองเห็นได้ชัดเจนจะช่วยปรับปรุงประสบการณ์การใช้งานให้ดียิ่งขึ้นสำหรับผู้ใช้ที่มีสายตาเลือนราง [ดูวิธีทำให้ลิงก์โดดเด่น](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "ต้องใช้สีจึงจะแยกความแตกต่างของลิงก์ได้"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "แยกความแตกต่างของลิงก์ได้โดยไม่ต้องใช้สี"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "ข้อความลิงก์ (และข้อความสำรองสำหรับรูปภาพเมื่อใช้เป็นลิงก์) ที่แยกแยะได้ ไม่ซ้ำกัน และโฟกัสได้ ช่วยปรับปรุงประสบการณ์การไปยังส่วนต่างๆ สำหรับผู้ใช้โปรแกรมอ่านหน้าจอ [ดูวิธีทำให้ลิงก์เข้าถึงได้](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "องค์ประกอบ `<object>` มีข้อความแสดงแทน"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "องค์ประกอบแบบฟอร์มที่ไม่มีป้ายกำกับที่มีประสิทธิภาพจะสร้างประสบการณ์การใช้งานที่น่าผิดหวังสำหรับผู้ใช้โปรแกรมอ่านหน้าจอ [ดูข้อมูลเพิ่มเติมเกี่ยวกับองค์ประกอบ `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "องค์ประกอบ Select ไม่มีองค์ประกอบป้ายกำกับที่เชื่อมโยง"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "องค์ประกอบ Select มีองค์ประกอบป้ายกำกับที่เกี่ยวข้อง"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "ค่าที่มากกว่า 0 หมายความว่ามีการจัดเรียงการนำทางที่ชัดเจน แม้ว่าการทำงานนี้จะไม่มีปัญหาในทางเทคนิค แต่มักก่อให้เกิดประสบการณ์การใช้งานที่น่าหงุดหงิดสำหรับผู้ใช้เทคโนโลยีความช่วยเหลือพิเศษ [ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์ `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "ไม่มีองค์ประกอบที่มีค่า `[tabindex]` มากกว่า 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "โปรแกรมอ่านหน้าจอมีฟีเจอร์ที่ช่วยให้ไปยังส่วนต่างๆ ของตารางได้ง่ายขึ้น การตรวจสอบว่าตารางใช้องค์ประกอบคำบรรยายจริงแทนเซลล์ที่มีแอตทริบิวต์ `[colspan]` อาจช่วยปรับปรุงประสบการณ์การใช้งานของผู้ใช้โปรแกรมอ่านหน้าจอได้ [ดูข้อมูลเพิ่มเติมเกี่ยวกับคำบรรยาย](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "ตารางใช้ `<caption>` แทนเซลล์ที่มีแอตทริบิวต์ `[colspan]` ในการระบุคำบรรยาย"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "เป้าหมายการสัมผัสไม่มีขนาดหรือระยะห่างที่เพียงพอ"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "เป้าหมายการสัมผัสมีขนาดและระยะห่างที่เพียงพอ"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "โปรแกรมอ่านหน้าจอมีฟีเจอร์ที่ช่วยให้ไปยังส่วนต่างๆ ของตารางได้ง่ายขึ้น การตรวจสอบว่าองค์ประกอบ `<td>` ในตารางขนาดใหญ่ (เซลล์อย่างน้อย 3 เซลล์มีขนาดกว้างและสูง) มีส่วนหัวตารางที่เชื่อมโยงอาจปรับปรุงประสบการณ์การใช้งานของผู้ใช้โปรแกรมอ่านหน้าจอได้ [ดูข้อมูลเพิ่มเติมเกี่ยวกับส่วนหัวของตาราง](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "หน้านี้ไม่มี <link> URL ของไฟล์ Manifest"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "ไม่พบ Service Worker ที่ตรงกัน คุณอาจต้องโหลดหน้านี้ซ้ำหรือตรวจสอบว่าขอบเขตของ Service Worker สำหรับหน้าปัจจุบันครอบคลุมขอบเขตและ URL เริ่มต้นจากไฟล์ Manifest"
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "ตรวจสอบ Service Worker โดยไม่มีช่อง \"start_url\" ในไฟล์ Manifest ไม่ได้"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications ใช้ได้เฉพาะใน Chrome เบต้า และเวอร์ชันเสถียรใน Android เท่านั้น"
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse ระบุไม่ได้ว่ามี Service Worker หรือไม่ โปรดลองใช้ Chrome เวอร์ชันใหม่กว่านี้"
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "รูปแบบ URL ของไฟล์ Manifest ({scheme}) ใช้ไม่ได้ใน Android"
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "การเปลี่ยนเลย์เอาต์สะสมจะวัดการเคลื่อนไหวขององค์ประกอบที่มองเห็นได้ภายในวิวพอร์ต [ดูข้อมูลเพิ่มเติมเกี่ยวกับเมตริก Cumulative Layout Shift](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "การโต้ตอบกับ Next Paint จะวัดการตอบสนองของหน้าเว็บ ซึ่งเป็นระยะเวลาที่หน้าเว็บใช้ในการตอบสนองต่ออินพุตของผู้ใช้ [ดูข้อมูลเพิ่มเติมเกี่ยวกับเมตริก การโต้ตอบกับ Next Paint](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "First Contentful Paint ระบุเวลาที่มีการแสดงผลข้อความหรือรูปภาพครั้งแรก [ดูข้อมูลเพิ่มเติมเกี่ยวกับเมตริก First Contentful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "First Meaningful Paint วัดเมื่อเนื้อหาหลักของหน้าเว็บปรากฏ [ดูข้อมูลเพิ่มเติมเกี่ยวกับเมตริก First Meaningful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "การโต้ตอบกับ Next Paint จะวัดการตอบสนองของหน้าเว็บ ซึ่งเป็นระยะเวลาที่หน้าเว็บใช้ในการตอบสนองต่ออินพุตของผู้ใช้ [ดูข้อมูลเพิ่มเติมเกี่ยวกับเมตริก การโต้ตอบกับ Next Paint](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "เวลาในการตอบสนองคือระยะเวลาที่หน้าเว็บใช้ในการตอบสนองอย่างสมบูรณ์ [ดูข้อมูลเพิ่มเติมเกี่ยวกับเมตริกเวลาในการตอบสนอง](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "หลีกเลี่ยงการเปลี่ยนเส้นทางหลายหน้า"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "หากต้องการตั้งงบประมาณสำหรับจำนวนและขนาดของทรัพยากรหน้า ให้เพิ่มไฟล์ budget.json [ดูข้อมูลเพิ่มเติมเกี่ยวกับงบประมาณด้านประสิทธิภาพ](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 คำขอ • {byteCount, number, bytes} KiB}other{# คำขอ • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "ควบคุมให้จำนวนคำขอมีไม่มากและการโอนมีขนาดเล็ก"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "ลิงก์ Canonical จะบอกถึง URL ที่จะแสดงในผลการค้นหา [ดูข้อมูลเพิ่มเติมเกี่ยวกับลิงก์ Canonical](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "การตอบกลับของเซิร์ฟเวอร์ขณะเริ่มแรกใช้เวลาน้อย"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service Worker เป็นเทคโนโลยีที่ช่วยให้แอปของคุณใช้ฟีเจอร์ของ Progressive Web App ได้หลายฟีเจอร์ เช่น ออฟไลน์ เพิ่มไปยังหน้าจอหลัก และข้อความ Push [ดูข้อมูลเพิ่มเติมเกี่ยวกับ Service Worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "หน้านี้ควบคุมโดย Service Worker แต่ไม่พบ `start_url` เนื่องจากไฟล์ Manifest แยกวิเคราะห์เป็น JSON ที่ถูกต้องไม่ได้"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "หน้านี้ควบคุมโดย Service Worker แต่ `start_url` ({startUrl}) ไม่ได้อยู่ในขอบเขตของ Service Worker นั้น ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "หน้านี้ควบคุมโดย Service Worker แต่ไม่พบ `start_url` เพราะไม่มีการดึงไฟล์ Manifest"
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "ต้นทางนี้มี Service Worker อย่างน้อย 1 ไฟล์ แต่หน้าเว็บ ({pageUrl}) ไม่อยู่ในขอบเขต"
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "ไม่ได้ลงทะเบียน Service Worker ที่ควบคุมหน้าเว็บและ `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "ลงทะเบียน Service Worker ที่ควบคุมหน้าเว็บและ `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "หน้าจอแนะนำที่มีธีมช่วยให้ผู้ใช้ได้รับประสบการณ์ที่มีคุณภาพสูงเมื่อเปิดแอปของคุณจากหน้าจอหลัก [ดูข้อมูลเพิ่มเติมเกี่ยวกับหน้าจอแนะนำ](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "แนวทางปฏิบัติที่ดีที่สุด"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "การตรวจสอบเหล่านี้ไฮไลต์โอกาสในการ[ปรับปรุงการช่วยเหลือพิเศษของเว็บแอป](https://developer.chrome.com/docs/lighthouse/accessibility/) โดยจะตรวจพบอัตโนมัติได้เฉพาะปัญหากลุ่มย่อยด้านการช่วยเหลือพิเศษ เราจึงขอแนะนำให้ตรวจสอบด้วยตนเองด้วย"
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "รายการเหล่านี้จัดการพื้นที่ที่เครื่องมือทดสอบอัตโนมัติไม่ครอบคลุม ดูข้อมูลเพิ่มเติมในคำแนะนำเกี่ยวกับ[การดำเนินการตรวจสอบการช่วยเหลือพิเศษ](https://web.dev/how-to-review/)"
@@ -2769,7 +2853,7 @@
     "message": "ติดตั้ง[โมดูล Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) ที่โหลดรูปภาพแบบ Lazy Loading ได้ โมดูลนี้จะช่วยเลื่อนเวลาโหลดรูปภาพนอกจอภาพเพื่อปรับปรุงประสิทธิภาพ"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "ลองใช้โมดูลเพื่อแทรก CSS และ JavaScript ที่สำคัญในหน้าหรือโมดูลที่อาจโหลดเนื้อหาแบบไม่พร้อมกันผ่าน JavaScript เช่น โมดูล[การรวม CSS/JS ขั้นสูง](https://www.drupal.org/project/advagg) โปรดระวังว่าการเพิ่มประสิทธิภาพโดยโมดูลนี้อาจทำให้เว็บไซต์เสียหาย ซึ่งน่าจะทำให้คุณต้องแก้ไขโค้ด"
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "ข้อกำหนดของธีม โมดูล และเซิร์ฟเวอร์ล้วนส่งผลต่อเวลาในการตอบสนองของเซิร์ฟเวอร์ ลองหาธีมที่เพิ่มประสิทธิภาพมากขึ้น พยายามเลือกโมดูลการเพิ่มประสิทธิภาพด้วยความระมัดระวัง และ/หรืออัปเกรดเซิร์ฟเวอร์ เซิร์ฟเวอร์โฮสติ้งควรใช้ประโยชน์จากการแคช PHP Opcode, การแคชหน่วยความจำเพื่อลดเวลาในการค้นหาฐานข้อมูล เช่น Redis หรือ Memcached รวมถึงตรรกะของแอปพลิเคชันที่เพิ่มประสิทธิภาพเพื่อให้เตรียมความพร้อมของหน้าได้เร็วขึ้น"
@@ -2778,10 +2862,10 @@
     "message": "ลองใช้[สไตล์รูปภาพที่ปรับเปลี่ยนตามพื้นที่โฆษณา](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8)เพื่อลดขนาดของรูปภาพที่โหลดในหน้า หากคุณใช้มุมมองเพื่อดูรายการเนื้อหาหลายรายการในหน้า ให้ลองใช้การใส่เลขหน้าเพื่อจำกัดจำนวนของรายการเนื้อหาที่แสดงในหน้าหนึ่งๆ"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "ตรวจสอบว่าคุณได้เปิดใช้ \"รวมไฟล์ CSS\" ในหน้า \"การดูแลระบบ » การกำหนดค่า » การพัฒนา\" คุณกำหนดค่าตัวเลือกการรวมขั้นสูงยิ่งขึ้นผ่าน[โมดูลเพิ่มเติม](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search)ได้ด้วยเพื่อช่วยให้เว็บไซต์เร็วขึ้นได้ด้วยการเชื่อมโยง การลดขนาด และการบีบอัดสไตล์ CSS"
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "ตรวจสอบว่าคุณได้เปิดใช้ \"รวมไฟล์ JavaScript\" ในหน้า \"การดูแลระบบ » การกำหนดค่า » การพัฒนา\" คุณกำหนดค่าตัวเลือกการรวมขั้นสูงยิ่งขึ้นผ่าน[โมดูลเพิ่มเติม](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search)ได้ด้วยเพื่อช่วยให้เว็บไซต์เร็วขึ้นได้ด้วยการเชื่อมโยง การลดขนาด และการบีบเนื้อหา JavaScript"
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "ลองนำกฎ CSS ที่ไม่ได้ใช้ออกและแนบเฉพาะไลบรารี Drupal ที่จำเป็นลงในหน้าที่เกี่ยวข้องหรือคอมโพเนนต์ในหน้า ดูรายละเอียดได้ที่[ลิงก์เอกสารประกอบของ Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) หากต้องการระบุไลบรารีที่แนบซึ่งเพิ่ม CSS โดยไม่จำเป็น ลองเรียกใช้ [Code Coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) ใน DevTools ของ Chrome คุณระบุธีม/โมดูลที่รับผิดชอบได้จาก URL ของสไตล์ชีตเมื่อปิดใช้การรวม CSS ในเว็บไซต์ Drupal ของคุณ หาธีม/โมดูลที่มีสไตล์ชีตจำนวนมากอยู่ในรายการซึ่งมีสีแดงอยู่จำนวนมากใน Code Coverage ธีม/โมดูลควรเป็นเพียงตัวกำหนดลำดับของสไตล์ชีตเท่านั้นหากใช้ธีม/โมดูลในหน้าจริงๆ"
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "เปิดใช้การบีบอัดในเซิร์ฟเวอร์ Next.js ของคุณ [ดูข้อมูลเพิ่มเติม](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "ใช้คอมโพเนนต์ `nuxt/image` และกำหนด `format=\"webp\"` [ดูข้อมูลเพิ่มเติม](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "ใช้ React DevTools Profiler ซึ่งใช้ประโยชน์จาก Profiler API ในการวัดประสิทธิภาพในการแสดงผลของคอมโพเนนต์ [ดูข้อมูลเพิ่มเติม](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "วางวิดีโอไว้ใน `VideoBoxes` ปรับแต่งโดยใช้ `Video Masks` หรือเพิ่ม `Transparent Videos` [ดูข้อมูลเพิ่มเติม](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "อัปโหลดรูปภาพโดยใช้ `Wix Media Manager` เพื่อให้แสดงเป็นรูปแบบ WebP โดยอัตโนมัติ ดู[วิธีอื่นๆ ในการเพิ่มประสิทธิภาพ](https://support.wix.com/en/article/site-performance-optimizing-your-media)สื่อในเว็บไซต์ของคุณ"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "เมื่อ[เพิ่มโค้ดของบุคคลที่สาม](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site)ในแท็บ `Custom Code` ของแดชบอร์ดเว็บไซต์ ให้ใช้การหน่วงเวลาหรือโหลดโค้ดที่ส่วนท้ายของเนื้อหาโค้ด ใช้[การผสานรวม](https://support.wix.com/en/article/about-marketing-integrations)ของ Wix เพื่อฝังเครื่องมือการตลาดในเว็บไซต์ หากทำได้ "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix ใช้ CDN และการแคชเพื่อแสดงคำตอบโดยเร็วที่สุดสำหรับผู้เข้าชมส่วนใหญ่ พิจารณา[เปิดใช้การแคชด้วยตนเอง](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed)สำหรับเว็บไซต์ของคุณ โดยเฉพาะในกรณีที่ใช้ `Velo`"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "ตรวจสอบโค้ดของบุคคลที่สามที่คุณเพิ่มลงในเว็บไซต์ได้ในแท็บ `Custom Code` ของแดชบอร์ดเว็บไซต์ และเก็บเฉพาะบริการที่จำเป็นสำหรับเว็บไซต์เท่านั้น [ดูข้อมูลเพิ่มเติม](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "ลองอัปโหลด GIF ไปยังบริการซึ่งจะทำให้ใช้ GIF เพื่อฝังเป็นวิดีโอ HTML5 ได้"
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "บันทึกเป็น JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "เปิดในโปรแกรมดู"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "ค่ามาจากการประมาณและอาจแตกต่างกันไป [คะแนนประสิทธิภาพคำนวณ](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)จากเมตริกเหล่านี้โดยตรง"
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "ดูการติดตามดั้งเดิม"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "ดูการติดตาม"
   },
diff --git a/front_end/third_party/lighthouse/locales/tr.json b/front_end/third_party/lighthouse/locales/tr.json
index 7ee26a0..d24e833 100644
--- a/front_end/third_party/lighthouse/locales/tr.json
+++ b/front_end/third_party/lighthouse/locales/tr.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` özellikleri rolleriyle eşleşiyor"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Bir öğenin erişilebilir özellikli adı olmadığında ekran okuyucular tarafından genel adla okunur ve öğe, ekran okuyuculardan yararlanan kullanıcılar için kullanılamaz hale gelir. [Komut öğelerini nasıl daha erişilebilir hale getireceğinizi öğrenin](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`, `link` ve `menuitem` öğelerinin erişilebilir özellikli adları var."
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Erişilebilir özellikli adları olmayan ARIA iletişim öğeleri, ekran okuyucu kullanıcılarının bu öğelerin amacını ayırt etmesini engelleyebilir. [ARIA iletişim öğelerinin nasıl daha erişilebilir hale getirileceğini öğrenin](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "`role=\"dialog\"` veya `role=\"alertdialog\"` içeren öğelerin erişilebilir özellikli adları yok."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "`role=\"dialog\"` veya `role=\"alertdialog\"` içeren öğelerin erişilebilir özellikli adları var."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Ekran okuyucular gibi yardımcı teknolojiler, `aria-hidden=\"true\"` öğesi dokümanın `<body>` kısmında ayarlandığında tutarsız çalışır. [`aria-hidden` öğesinin doküman gövdesini nasıl etkilediğini öğrenin](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` değerleri geçerli"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "İşaretlemeyle bölünmüş bir metin düğümünün etrafına `role=text` eklenmesi, VoiceOver'ın bunu tek bir ifade olarak değerlendirmesini sağlar ancak öğenin odaklanılabilir alt öğeleri duyurulmaz. [`role=text` özelliği hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "`role=text` özelliğine sahip öğelerin odaklanılabilir alt öğeleri var."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "`role=text` özelliğine sahip öğelerin odaklanılabilir alt öğeleri yok."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Bir açma/kapatma alanının erişilebilir özellikli bir adı yoksa ekran okuyucular bu alanı genel adla okuyacağı için bu, ekran okuyuculardan yararlanan kullanıcılar için yararlı olmaz. [Açma/kapatma alanları hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA kimlikleri benzersiz"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "İçeriği olmayan veya metnine erişilemeyen başlıklar, ekran okuyucu kullanıcılarının sayfanın yapısındaki bilgilere erişmesini engeller. [Başlıklar hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "<heading> öğeleri içerik barındırmıyor."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Tüm <heading> öğeleri içerik barındırıyor."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Birden çok etikete sahip form alanları etiketlerin ilkini, sonuncusunu veya tümünü kullanan ekran okuyucular gibi yardımcı teknolojiler tarafından karışıklık yaratacak şekilde okunabilir. [Form etiketlerini nasıl kullanacağınızı öğrenin](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` öğesi, `[lang]` özelliğiyle aynı temel dile sahip bir `[xml:lang]` özelliği içeriyor."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Aynı hedefe sahip bağlantıların açıklaması da aynı olmalıdır. Bu, kullanıcıların bağlantının amacını anlamasına ve onu takip edip etmeyeceğine karar vermesine yardımcı olur. [Özdeş bağlantılar hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Özdeş bağlantılar aynı amaca sahip değil."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Özdeş bağlantılar aynı amaca sahiptir."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Bilgilendirme amaçlı öğelerin hedefi, kısa ve açıklayıcı alternatif metinler olmalıdır. Dekoratif öğeler boş bir alt özelliğiyle yok sayılabilir. [`alt` özelliği hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Resim öğelerinin `[alt]` özellikleri var"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Giriş düğmelerine fark edilebilir ve erişilebilir metin eklemeniz, ekran okuyucu kullanıcılarının giriş düğmesinin amacını anlamalarına yardımcı olabilir. [Giriş düğmeleri hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` öğelerinin `[alt]` metni var"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Etiketler, form kontrollerinin ekran okuyucular gibi yardımcı teknolojiler tarafından düzgün bir şekilde duyurulmasını sağlar. [Form öğesi etiketleri hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Form öğelerinin ilişkili etiketleri var"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Bir tane ana belirgin işaret, ekran okuyucu kullanıcılarının web sayfasında gezinmesine yardımcı olur. [Önemli noktalar hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Dokümanda ana belirgin işaret yok."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Dokümanda ana belirgin işaret var."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Birçok kullanıcı, düşük kontrastlı metni okumakta zorlanır veya okuyamaz. Ayırt edilebilen bağlantı metinleri, az gören kullanıcıların deneyimini iyileştirir. [Bağlantıları nasıl ayırt edilebilir hale getireceğinizi öğrenin](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Bağlantılar renge dayalı olarak ayırt edilebilir."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Bağlantılar, renkten bağımsız olarak ayırt edilebilir."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Ayırt edilebilir, benzersiz ve odaklanılabilir bağlantı metni (ve bağlantı olarak kullanıldığında resimler için alternatif metin), ekran okuyucu kullanıcılarına daha iyi bir gezinme deneyimi sunar. [Bağlantıları nasıl erişilebilir hale getireceğinizi öğrenin](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` öğelerinin alternatif metni var"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Etkili etiket içermeyen <form> öğeleri, ekran okuyucu kullanıcılarının can sıkıcı deneyimler yaşamasına neden olabilir. [`select` öğesi hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "<select> öğelerinin ilişkili <label> öğeleri yok."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "<select> öğelerinin ilişkili <label> öğeleri var."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "0'dan büyük bir değer, açık bir gezinme sıralamasını belirtir. Bu durum teknik olarak geçerli olsa da yardımcı teknolojilerden yararlanan kullanıcıların genellikle sinir bozucu deneyimler yaşamalarına neden olur. [`tabindex` özelliği hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Hiçbir öğe 0'dan büyük `[tabindex]` değeri içermiyor"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Ekran okuyucuların tablolarda daha kolay gezinmeyi sağlayan özellikleri vardır. Tabloların, `[colspan]` özelliğine sahip hücreler yerine gerçek başlık öğesini kullandığından emin olursanız ekran okuyucunun kullanıcılara daha iyi bir deneyim sunmasını sağlayabilirsiniz. [Altyazı hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Tablolar, başlığı belirtmek için `[colspan]` özelliğine sahip hücreler yerine `<caption>` kullanıyor."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Dokunma hedefleri, yeterli boyut veya boşluğa sahip değil."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Dokunma hedefleri, yeterli boyut ve boşluğa sahip."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Ekran okuyucuların tablolarda daha kolay gezinmeyi sağlayan özellikleri vardır. Büyük bir tablodaki (genişlik ve yüksekliği en az 3 hücre olan) `<td>` öğelerinin, ilişkili bir tablo başlığı içerdiğinden emin olursanız ekran okuyucunun kullanıcılara daha iyi bir deneyim sunmasını sağlayabilirsiniz. [Tablo başlıkları hakkında daha fazla bilgi edinin](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Sayfada hiç manifest <link> URL'si yok"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Eşleşen hizmet çalışanı algılanamadı. Sayfayı yeniden yüklemeniz veya mevcut sayfaya ait hizmet çalışanı kapsamının, manifest dosyasındaki kapsamı ve başlangıç URL'sini içerdiğinden emin olmanız gerekir."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Manifest dosyasında \"start_url\" alanı olmadığından hizmet çalışanı kontrol edilemedi"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications, Android'de yalnızca Chrome Beta ve Mevcut ürün kanallarında desteklenir."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse bir hizmet çalışanının mevcut olup olmadığını belirleyemedi. Lütfen Chrome'un daha yeni bir sürümüyle deneyin."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Manifest dosyasının URL şeması ({scheme}) Android'de desteklenmiyor."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulative Layout Shift, görüntü alanı içindeki görünür öğelerin hareketini ölçer. [Cumulative Layout Shift metriği hakkında daha fazla bilgi edinin](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Sonraki Boyamayla Etkileşim, sayfanın tepkisini ve kullanıcı girişine görünür şekilde yanıt vermesinin ne kadar sürdüğünü ölçer. [Sonraki Boyamayla Etkileşim metriği hakkında daha fazla bilgi edinin](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "İlk Zengin İçerikli Boyama, ilk metnin veya resmin boyandığı zamanı işaret eder. [İlk zengin içerikli boyama metriği hakkında daha fazla bilgi edinin](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "İlk Anlamlı Boyama, bir sayfanın ana içeriğinin ne zaman görünür hale geldiğini ölçer. [İlk anlamlı boyama metriği hakkında daha fazla bilgi edinin](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Sonraki Boyamayla Etkileşim, sayfanın tepkisini ve kullanıcı girişine görünür şekilde yanıt vermesinin ne kadar sürdüğünü ölçer. [Sonraki Boyamayla Etkileşim metriği hakkında daha fazla bilgi edinin](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Etkileşime Hazır Olma Süresi, sayfanın tamamen etkileşime hazır hale gelmesi için geçmesi gereken süreyi ifade eder. [Etkileşime Hazır Olma Süresi metriği hakkında daha fazla bilgi edinin](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Birden çok sayfa yönlendirmesini önleyin"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Sayfa kaynaklarının miktarı ve büyüklüğü için bütçeler belirlemek üzere bir budget.json dosyası ekleyin. [Performans bütçeleri hakkında daha fazla bilgi edinin](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 istek • {byteCount, number, bytes} KiB}other{# istek • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "İstek sayısını az ve aktarma boyutlarını küçük tutun"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Standart bağlantılar, arama sonuçlarında hangi URL'nin gösterileceğini belirtir. [Standart bağlantılar hakkında daha fazla bilgi edinin](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "İlk sunucu yanıt süresi kısaydı"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Servis çalışanı, uygulamanızın çevrimdışı çalışma, ana ekrana ekleme ve push bildirimleri gibi pek çok Progresif Web Uygulaması özelliğini kullanmasını sağlayan teknolojidir. [Hizmet çalışanları hakkında daha fazla bilgi edinin](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Sayfa bir hizmet çalışanı tarafından kontrol ediliyor ancak manifest dosyası geçerli JSON olarak ayrışmadığından `start_url` bulunamadı"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Sayfa bir hizmet çalışanı tarafından kontrol ediliyor ancak `start_url` ({startUrl}) öğesi hizmet çalışanının kapsamında ({scopeUrl}) değil"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Bu sayfa bir hizmet çalışanı tarafından yönetiliyor ancak manifest dosyası getirilmediğinden `start_url` öğesi bulunamadı."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Bu kaynak bir veya daha fazla hizmet çalışanına sahip ancak sayfa ({pageUrl}) kapsam içinde değil."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Sayfayı kontrol eden bir hizmet çalışanı ve `start_url` öğesi kaydedilmiyor"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Sayfayı kontrol eden bir hizmet çalışanı ve `start_url` öğesi kaydediliyor"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Temalı başlangıç ekranı, kullanıcılar uygulamanızı ana ekranlarında başlattığında yüksek kaliteli bir deneyim sağlar. [Başlangıç ekranları hakkında daha fazla bilgi edinin](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "En iyi uygulamalar"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Bu kontroller, [web uygulamanızın erişilebilirliğini iyileştirme](https://developer.chrome.com/docs/lighthouse/accessibility/) fırsatlarını ön plana çıkarır. Erişilebilirlik sorunlarının yalnızca bir alt kümesi otomatik olarak algılanabildiğinden manuel test yapılması da önerilir."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Bu öğeler, otomatik test aracının kapsamında yer almayan alanları ele alır. [Erişilebilirlik incelemesi gerçekleştirme](https://web.dev/how-to-review/) hakkında daha fazla bilgiyi rehberimizde bulabilirsiniz."
@@ -2769,7 +2853,7 @@
     "message": "Resimleri geç yükleyebilen [bir Drupal modülü](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) yükleyin. Bu tür modüller, performansı iyileştirmek için ekran dışındaki resimlerin yüklenmesini erteleme özelliği sunar."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "[Advanced CSS/JS Aggregation](https://www.drupal.org/project/advagg) modülü gibi bir modül kullanarak kritik CSS ve JavaScript'leri satır içi yapmayı veya JavaScript ile öğeleri potansiyel olarak eşzamansız bir şekilde yüklemeyi değerlendirin. Bu modülün sağlayacağı optimizasyonların sitenizi bozabileceğine dikkat edin. Bunu engellemek için muhtemelen kodda değişiklik yapmanız gerekecektir."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Temalar, modüller ve sunucu özellikleri öğelerinin tümü sunucunun yanıt süresini etkiler. Bir optimizayon modülünü dikkatle seçerek ve/veya sunucunuzu yeni sürüme geçirerek, daha ileri düzeyde optimize edilmiş bir tema bulmayı düşünün. Barındırma sunucularınız sorgu sürelerini azaltmak için Redis veya Memcached gibi sistemlerin kullandığı PHP işlem kodunu önbelleğe alma, belleği önbelleğe alma tekniklerinden ve sayfaları daha hızlı hazırlamak için optimize edilmiş uygulama mantığından yararlanmalıdır."
@@ -2778,10 +2862,10 @@
     "message": "Sayfanıza yüklenen resimlerin boyutunu azaltmak için [Duyarlı Resim Stilleri](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8)'ni kullanmayı değerlendirin. Bir sayfada birden çok içerik öğesini göstermek için Görünümler'i kullanıyorsanız belirli bir sayfada gösterilen içerik öğelerinin sayısını sınırlamak üzere sayfalara ayırma işlevini uygulamayı değerlendirin."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "\"Administration (Yönetim) » Configuration (Yapılandırma) » Development (Geliştirme)\" sayfasında \"Aggregate CSS files (CSS dosyalarını topla)\" ayarını etkinleştirdiğinizden emin olun. CSS stillerini birleştirerek, küçülterek ve sıkıştırarak sitenizi hızlandırmak için [ek modüller](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) kullanarak daha gelişmiş toplama seçeneklerini de yapılandırabilirsiniz."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "\"Administration (Yönetim) » Configuration (Yapılandırma) » Development (Geliştirme)\" sayfasında \"Aggregate JavaScript files (JavaScript dosyalarını topla)\" ayarını etkinleştirdiğinizden emin olun. JavaScript öğelerinizi birleştirerek, küçülterek ve sıkıştırarak sitenizi hızlandırmak için [ek modüller](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) kullanarak daha gelişmiş toplama seçeneklerini de yapılandırabilirsiniz."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Kullanılmayan CSS kurallarını kaldırmayı ve gerekli Drupal kitaplıklarını yalnızca alakalı sayfaya veya bir sayfadaki alakalı bileşene eklemeyi değerlendirin. Ayrıntılar için [Drupal dokümanları bağlantısına](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) bakın. Gereksiz CSS ilave eden ekli kitaplıkları belirlemek için Chrome Geliştirici Araçları'nda [kod kapsamını](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) çalıştırmayı deneyin. Drupal sitenizde CSS toplama devre dışı bırakıldığında, sorumlu temayı/modülü stil sayfasının URL'sinden belirleyebilirsiniz. Listede çok sayıda stil sayfasına sahip olan ve kod kapsamında çok sayıda kırmızı işaret taşıyan temaları/modülleri arayın. Tema/modül sadece sayfada gerçekten kullanılan bir stil sayfasını kuyruğa almalıdır."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Next.js sunucunuzda sıkıştırmayı etkinleştirin. [Daha fazla bilgi](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "`nuxt/image` bileşenini kullanarak `format=\"webp\"` değerini ayarlayın. [Daha fazla bilgi](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Bileşenlerinizin oluşturma performansını ölçmek için Profil Oluşturucu API'sinden yararlanan React Geliştirme Araçları Profil Oluşturucu'yu kullanın. [Daha fazla bilgi](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Videoları `VideoBoxes` içine yerleştirin, `Video Masks` kullanarak özelleştirin veya `Transparent Videos` ekleyin. [Daha fazla bilgi edinin](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Otomatik olarak WebP biçiminde sunulması için resimleri `Wix Media Manager` kullanarak yükleyin. Sitenizdeki medya içeriklerini [optimize etmenin diğer yollarını](https://support.wix.com/en/article/site-performance-optimizing-your-media) öğrenin."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Sitenizin kontrol panelindeki `Custom Code` sekmesine [üçüncü taraf kodu eklerken](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) kodun ertelendiğinden veya kod gövdesinin sonunda yüklendiğinden emin olun. Mümkün olduğunda Wix'in [entegrasyonlarından](https://support.wix.com/en/article/about-marketing-integrations) yararlanarak sitenize pazarlama araçları yerleştirin. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix çoğu ziyaretçiye mümkün olduğunca hızlı yanıt vermek için CDN'lerden ve önbelleğe alma işlemlerinden yararlanır. Özellikle `Velo` kullanıyorsanız siteniz için [önbelleğe almayı manuel olarak etkinleştirmeyi](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) düşünebilirsiniz."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Sitenizin kontrol panelindeki `Custom Code` sekmesinde sitenize eklediğiniz tüm üçüncü taraf kodlarını inceleyin ve siteniz için gerekli olanlar dışındaki hizmetleri kaldırın. [Daha fazla bilgi edinin](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "GIF dosyanızı, HTML5 videosu olarak yerleştirmek için kullanılabilmesini sağlayacak bir hizmete yüklemeyi düşünün."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "JSON nesnesi olarak kaydet"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Görüntüleyicide aç"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Değerler tahminidir ve değişiklik gösterebilir. [Performance skorunun hesaplanması ](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/), doğrudan bu metriklerle yapılır."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Orijinal İzi Göster"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "İzi Göster"
   },
diff --git a/front_end/third_party/lighthouse/locales/uk.json b/front_end/third_party/lighthouse/locales/uk.json
index 7e5a436..bc297e3 100644
--- a/front_end/third_party/lighthouse/locales/uk.json
+++ b/front_end/third_party/lighthouse/locales/uk.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Атрибути `[aria-*]` відповідають своїм ролям"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Без доступної назви програма зачитує тільки загальну назву (тобто роль або тип) елемента, що незручно для користувачів, які застосовують програми зчитування з екрана. [Дізнайтесь, як зробити командні елементи доступнішими.](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Елементи з ролями `button`, `link` і `menuitem` мають зрозумілі назви для зчитування з екрана"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Якщо елементи вікна ARIA не мають доступних назв, користувачі програм зчитування з екрана не зможуть зрозуміти призначення цих елементів. [Дізнайтесь, як зробити елементи вікон ARIA доступнішими.](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Елементи з атрибутами `role=\"dialog\"` або `role=\"alertdialog\"` не мають доступних назв."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Елементи з атрибутами `role=\"dialog\"` або `role=\"alertdialog\"` мають доступні назви."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Технології для людей з обмеженими можливостями, як-от програми зчитування з екрана, працюють неналежно, коли `aria-hidden=\"true\"` налаштовано в документі `<body>`. [Дізнайтесь, як `aria-hidden` впливає на текст документа.](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Значення `[role]` дійсні"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Якщо додати атрибут `role=text` навколо текстового вузла, розділеного за допомогою розмітки, VoiceOver зможе обробляти його як одну фразу, але не озвучуватиме фокусованих нащадків елемента. [Докладніше про атрибут `role=text`.](https://dequeuniversity.com/rules/axe/4.7/aria-text)"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Елементи з атрибутом `role=text` мають фокусованих нащадків."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Елементи з атрибутом `role=text` не мають фокусованих нащадків."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Без доступної назви програма зачитує тільки загальну назву (тобто роль або тип) перемикача, що незручно для користувачів спеціальних можливостей. [Докладніше про поля для перемикачів.](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Ідентифікатори ARIA унікальні"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Якщо заголовок містить недоступний текст або не містить контенту взагалі, це заважає користувачам програм зчитування з екрана отримувати доступ до структури сторінки. [Докладніше про заголовки.](https://dequeuniversity.com/rules/axe/4.7/empty-heading)"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Елементи <heading> не містять контенту."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Усі елементи <heading> містять контент."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Поля форми з кількома мітками можуть помилково озвучуватися технологіями для людей з обмеженими можливостями (наприклад, програмами зчитування з екрана), які використовують першу, останню або всі мітки. [Дізнайтесь, як використовувати мітки форм.](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Елемент `<html>` містить атрибут `[xml:lang]`, який має таку саму базову мову, що й атрибут `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Посилання, що спрямовують на ту саму сторінку, повинні мати однаковий опис, щоб користувачі могли зрозуміти їх призначення й вирішити, чи слід за ними переходити. [Докладніше про однакові посилання.](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Однакові посилання мають різне призначення."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Однакові посилання мають таке саме призначення."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Інформативні елементи повинні містити короткий, описовий текст заміщення. Декоративні елементи можуть ігноруватись і мати порожній атрибут alt. [Докладніше про атрибут `alt`.](https://dequeuniversity.com/rules/axe/4.7/image-alt)"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Зображення мають атрибути `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Читабельний і зрозумілий текст на кнопках введення дасть користувачам програми зчитування з екрана змогу розпізнати їх призначення. [Докладніше про кнопки введення.](https://dequeuniversity.com/rules/axe/4.7/input-button-name)"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Елементи `<input type=\"image\">` містять текст `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Завдяки міткам технології для людей з обмеженими можливостями, як-от програми зчитування з екрана, правильно озвучують елементи керування формою. [Докладніше про мітки для елементів форми.](https://dequeuniversity.com/rules/axe/4.7/label)"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Елементи форми мають пов’язані мітки"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Один основний орієнтир допомагає користувачам програм зчитування з екрана переходити веб-сторінкою. [Докладніше про орієнтири.](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Документ не містить основного орієнтира."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Документ містить основний орієнтир."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Для багатьох користувачів складно або неможливо читати текст із низькою контрастністю. Помітний текст посилання допомагає користувачам із поганим зором працювати зручніше. [Докладніше про те, як зробити посилання помітними.](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Посилання можна відрізнити лише за кольором."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Посилання можна відрізнити не лише за кольором."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Унікальний і доступний для виділення текст посилання (а також текст заміщення для зображень, коли вони застосовуються як посилання), що можна розпізнати, покращує навігацію для користувачів програм зчитування з екрана. [Дізнайтесь, як зробити посилання доступними.](https://dequeuniversity.com/rules/axe/4.7/link-name)"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Елементи `<object>` містять текст заміщення"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Якщо елементи <form> не мають ефективних міток, користувачам програм зчитування з екрана буде незручно їх заповнювати. [Докладніше про елемент `select`.](https://dequeuniversity.com/rules/axe/4.7/select-name)"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Елементи <select> не мають пов’язаних елементів <label>."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Елементи <select> мають пов’язані елементи міток."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Значення, що перевищує 0, передбачає явне встановлення порядку навігації. Хоча технічно воно дійсне, це часто ускладнює взаємодію для користувачів, які застосовують технології для людей з обмеженими можливостями. [Докладніше про атрибут `tabindex`.](https://dequeuniversity.com/rules/axe/4.7/tabindex)"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Жоден елемент не має значення `[tabindex]`, що перевищує 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Програми зчитування з екрана мають функції, які полегшують навігацію в таблицях. Якщо в таблицях замість клітинок з атрибутом `[colspan]` використовується елемент заголовка, користувачам програми зчитування з екрана може бути зручніше працювати з ними. [Докладніше про заголовки.](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Для позначення заголовків у таблицях замість клітинок з атрибутом `[colspan]` використовується елемент `<caption>`."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Області дотику мають недостатній розмір або інтервали."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Області дотику мають достатній розмір і інтервали."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Програми зчитування з екрана мають функції, які полегшують навігацію в таблицях. Якщо елементи `<td>` у великій таблиці (принаймні 3 клітинки у ширину й висоту) матимуть пов’язаний заголовок таблиці, користувачам програми зчитування з екрана може бути зручніше працювати з нею. [Докладніше про заголовки таблиць.](https://dequeuniversity.com/rules/axe/4.7/td-has-header)"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "На сторінці немає URL-адреси маніфесту в тегах <link>"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Не виявлено відповідного синтаксису Service Worker. Можливо, потрібно перезавантажити сторінку або перевірити, чи область дії синтаксису Service Worker для поточної сторінки включає область дії та початкову URL-адресу з маніфесту."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Не вдалося перевірити синтаксис Service Worker без поля start_url у маніфесті"
   },
@@ -969,7 +1083,7 @@
     "message": "Властивість prefer_related_applications підтримується лише в бета-версії Chrome і стабільних версіях на Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Сервісу Lighthouse не вдалося знайти синтаксис Service Worker. Повторіть спробу в новішій версії Chrome."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Схема URL-адреси маніфесту ({scheme}) не підтримується на Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Сукупне зміщення макета вимірює рух видимих елементів у межах області перегляду. [Докладніше про показник \"Сукупне зміщення макета\".](https://web.dev/cls/)"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Показник Interaction to Next Paint вимірює, наскільки швидко сторінка може відповідати на ввід користувача. [Докладніше про показник Interaction to Next Paint.](https://web.dev/inp/)"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Перша візуалізація контенту показує, коли з’являється текст чи зображення. [Докладніше про показник \"Перша візуалізація контенту\".](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Перше значуще відображення вказує, коли видно основний контент сторінки. [Докладніше про показник \"Перше значуще відображення\".](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Показник Interaction to Next Paint вимірює, наскільки швидко сторінка може відповідати на ввід користувача. [Докладніше про показник Interaction to Next Paint.](https://web.dev/inp/)"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Час до повного завантаження – це період часу, через який сторінка стане повністю інтерактивною. [Докладніше про показник \"Час до повного завантаження\".](https://developer.chrome.com/docs/lighthouse/performance/interactive/)"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Уникайте переспрямувань кількох сторінок"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Щоб установити бюджет відповідно до кількості та розміру ресурсів на сторінці, додайте файл budget.json. [Докладніше про бюджети продуктивності.](https://web.dev/use-lighthouse-for-performance-budgets/)"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 запит • {byteCount, number, bytes} КіБ}one{# запит • {byteCount, number, bytes} КіБ}few{# запити • {byteCount, number, bytes} КіБ}many{# запитів • {byteCount, number, bytes} КіБ}other{# запиту • {byteCount, number, bytes} КіБ}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Не надсилайте багато запитів і передавайте вміст малого розміру"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Канонічні посилання вказують, які URL-адреси відображати в результатах пошуку. [Докладніше про канонічні посилання.](https://developer.chrome.com/docs/lighthouse/seo/canonical/)"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Сервер відповідає швидко"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Синтаксис Service Worker – це технологія, яка дає змогу додатку використовувати багато функцій прогресивного веб-додатка, як-от режим офлайн, додавання на головний екран і push-сповіщення. [Докладніше про синтаксис Service Worker.](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Цією сторінкою керує синтаксис Service Worker, однак `start_url` не знайдено, оскільки не вдалося виконати синтаксичний аналіз маніфесту як дійсного файлу JSON"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Цією сторінкою керує синтаксис Service Worker, однак параметр `start_url` ({startUrl}) перебуває за межами дії служби ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Цією сторінкою керує синтаксис Service Worker, однак `start_url` не знайдено, оскільки маніфест не завантажено."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Це джерело містить один або кілька синтаксисів Service Worker, але сторінка ({pageUrl}) перебуває за межами дії служби."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Немає синтаксису Service Worker, який керує сторінкою та `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Наявний синтаксис Service Worker, який керує сторінкою та `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Тематична заставка покращує взаємодію з користувачами під час запуску додатка з головного екрана. [Докладніше про заставки.](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)"
   },
@@ -1623,7 +1707,7 @@
     "message": "Практичні поради"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Ці перевірки визначають можливості для [покращення доступності веб-додатка](https://developer.chrome.com/docs/lighthouse/accessibility/). Радимо також проводити перевірки вручну, оскільки не всі проблеми з доступністю визначаються автоматично."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Ці елементи опрацьовують області, які не може охопити автоматизований інструмент перевірки. Докладніше читайте в нашому посібнику з [перевірки доступності](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Установіть [модуль Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search), який може відкладено завантажувати зображення. Такі модулі дають змогу відкласти завантаження закадрових зображень для покращення ефективності."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Скористайтеся модулем, щоб вбудувати важливі таблиці CSS і фрагменти JavaScript, або завантажуйте об'єкти асинхронно через JavaScript, як-от модуль [розширеного зведення CSS/JS](https://www.drupal.org/project/advagg). Зауважте, що така оптимізація може порушити роботу сайту, тож доведеться змінити код."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Теми, модулі та характеристики сервера впливають на час відповіді. Спробуйте знайти більш оптимізовану тему, підібрати модуль для оптимізації та/або оновити сервер. Сервери хостингу повинні використовувати кешування коду операції PHP та кешування пам'яті, щоб зменшити час запитів до баз даних, як-от Redis або Memcached, а також оптимізовану логіку додатка для швидшої підготовки сторінок."
@@ -2778,10 +2862,10 @@
     "message": "Застосуйте [стилі адаптивних зображень](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8), щоб зменшити розмір зображень, що завантажуються на сторінці. Якщо для показу кількох елементів контенту на сторінці використовується опція \"Перегляди\", застосуйте поділ на сторінки, щоб обмежити їхню кількість на певній сторінці."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Переконайтеся, що функцію \"Звести файли CSS\" на сторінці \"Керування\" » \"Налаштування\" » \"Розробка\" ввімкнено. За допомогою [додаткових модулів](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) можна також налаштувати інші параметри зведення, щоб пришвидшити свій сайт, поєднуючи, зменшуючи та стискаючи стилі CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Переконайтеся, що функцію \"Звести файли JavaScript\" на сторінці \"Керування\" » \"Налаштування\" » \"Розробка\" ввімкнено. За допомогою [додаткових модулів](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) можна також налаштувати інші параметри зведення, щоб пришвидшити свій сайт, поєднуючи, зменшуючи та стискаючи об'єкти JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Видаліть правила CSS, що не використовуються, і додайте лише потрібні бібліотеки Drupal на відповідну сторінку чи в компонент сторінки. Щоб дізнатися більше, перегляньте [документацію Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) за цим посиланням. Щоб визначити долучені бібліотеки, які додають зайві таблиці CSS, перевірте [покриття коду](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) в Chrome DevTools. Ви можете визначити тему чи модуль через URL-адресу таблиці стилів, коли зведення CSS вимкнено на вашому сайті Drupal. У покритті коду знайдіть теми чи модулі з багатьма таблицями стилів за великим обсягом червоного тексту. Тема чи модуль мають ставити таблицю стилів у чергу, лише коли вона дійсно використовується на сторінці."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Увімкніть стиснення на сервері Next.js. [Докладніше.](https://nextjs.org/docs/api-reference/next.config.js/compression)"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Скористайтеся компонентом `nuxt/image`, щоб налаштувати значення `format=\"webp\"`. [Докладніше](https://image.nuxtjs.org/components/nuxt-img#format)"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Скористайтеся профілювальником React DevTools, який застосовує Profiler API, щоб визначити ефективність обробки ваших компонентів. [Докладніше.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Розмістіть відео всередині контейнерів `VideoBoxes`, налаштуйте їх за допомогою функції `Video Masks` або додайте `Transparent Videos`. [Докладніше.](https://support.wix.com/en/article/wix-video-about-wix-video)"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Завантажуйте зображення за допомогою `Wix Media Manager`, щоб автоматично конвертувати їх у формат WebP. Також перегляньте [інші способи оптимізації](https://support.wix.com/en/article/site-performance-optimizing-your-media) реклами на сайті."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "[Додавши сторонній код](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) на вкладці `Custom Code` інформаційної панелі вашого сайту, переконайтеся, що він завантажується відкладено або наприкінці тіла коду. За можливості використовуйте [інтеграції](https://support.wix.com/en/article/about-marketing-integrations) Wix, щоб вставляти маркетингові інструменти на свій сайт. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix використовує мережі CDN і кешування, щоб якомога швидше надавати відповіді для більшості відвідувачів. Спробуйте [вручну ввімкнути кешування](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) для свого сайту, особливо якщо ви використовуєте `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Перейшовши на вкладку `Custom Code` інформаційної панелі вашого сайту, перегляньте сторонній код, який ви додали на веб-сайт, і збережіть лише потрібні сервіси. [Докладніше.](https://support.wix.com/en/article/site-performance-removing-unused-javascript)"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Спробуйте завантажити анімацію GIF у сервіс, де її можна вставити як відео HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Зберегти як JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Відкрити в засобі перегляду"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Значення приблизні й можуть відрізнятися. [Значення ефективності визначено](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) на основі цих показників."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Переглянути оригінальне трасування"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Переглянути трасування"
   },
diff --git a/front_end/third_party/lighthouse/locales/vi.json b/front_end/third_party/lighthouse/locales/vi.json
index a7e66ad..a422e95 100644
--- a/front_end/third_party/lighthouse/locales/vi.json
+++ b/front_end/third_party/lighthouse/locales/vi.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "Các thuộc tính `[aria-*]` khớp với vai trò tương ứng"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "Khi một phần tử không có tên thành phần hỗ trợ tiếp cận, trình đọc màn hình sẽ gọi phần tử đó bằng một tên gọi chung, dẫn đến việc người dùng trình đọc màn hình không sử dụng được phần tử này. [Tìm hiểu cách giúp các phần tử lệnh dễ tiếp cận hơn](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "Các phần tử `button`, `link` và `menuitem` có tên dễ đọc"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "Các phần tử hộp thoại của ARIA không có tên thành phần hỗ trợ tiếp cận có thể khiến người dùng trình đọc màn hình không phân biệt được mục đích của các phần tử này. [Tìm hiểu cách giúp các phần tử hộp thoại của ARIA dễ tiếp cận hơn](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "Các phần tử có `role=\"dialog\"` hoặc `role=\"alertdialog\"` không có tên thành phần hỗ trợ tiếp cận."
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "Các phần tử có `role=\"dialog\"` hoặc `role=\"alertdialog\"` có tên thành phần hỗ trợ tiếp cận."
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, sẽ hoạt động không nhất quán khi đặt `aria-hidden=\"true\"` trên tài liệu `<body>`. [Tìm hiểu ảnh hưởng của `aria-hidden` đối với phần nội dung của tài liệu](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)."
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "Các giá trị của `[role]` là hợp lệ"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "Nếu bạn thêm `role=text` quanh một nút văn bản được phân tách bằng thẻ đánh dấu, VoiceOver có thể coi nút đó là một cụm từ, nhưng con cháu có thể làm tâm điểm của phần tử này sẽ không được công bố. [Tìm hiểu thêm về thuộc tính `role=text`](https://dequeuniversity.com/rules/axe/4.7/aria-text)."
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "Các phần tử có thuộc tính `role=text` có con cháu có thể làm tâm điểm."
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "Các phần tử có thuộc tính `role=text` không có con cháu có thể làm tâm điểm."
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "Khi một trường chuyển đổi không có tên thành phần hỗ trợ tiếp cận, thì trình đọc màn hình sẽ gọi trường đó bằng tên gọi chung, khiến người dùng trình đọc màn hình không dùng được trường này. [Tìm hiểu thêm về trường chuyển đổi](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)."
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "Mã nhận dạng của Ứng dụng Internet phong phú dễ dùng (ARIA) là duy nhất"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "Tiêu đề không có nội dung hoặc có văn bản khó đọc sẽ khiến người dùng trình đọc màn hình không thể truy cập thông tin trên cấu trúc của trang. [Tìm hiểu thêm về tiêu đề](https://dequeuniversity.com/rules/axe/4.7/empty-heading)."
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Phần tử tiêu đề không chứa nội dung."
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "Tất cả phần tử tiêu đề đều chứa nội dung."
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "Các công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, sử dụng nhãn đầu tiên, nhãn cuối cùng hoặc tất cả các nhãn có thể thông báo nhầm các trường biểu mẫu có nhiều nhãn. [Tìm hiểu cách sử dụng nhãn của biểu mẫu](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)."
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "Phần tử `<html>` sở hữu thuộc tính `[xml:lang]` có cùng ngôn ngữ cơ sở như thuộc tính `[lang]`."
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "Các đường liên kết có cùng một đích đến phải có cùng nội dung mô tả để giúp người dùng hiểu mục đích của đường liên kết và quyết định có nên truy cập hay không. [Tìm hiểu thêm về các đường liên kết giống hệt nhau](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "Các đường liên kết giống hệt nhau không có cùng mục đích."
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "Các đường liên kết giống hệt nhau có cùng mục đích."
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "Các phần tử thông tin nên là đoạn văn bản thay thế ngắn, có tính mô tả. Có thể bỏ qua phần tử trang trí bằng một thuộc tính alt trống. [Tìm hiểu thêm về thuộc tính `alt`](https://dequeuniversity.com/rules/axe/4.7/image-alt)."
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "Các phần tử hình ảnh có thuộc tính `[alt]`"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "Bạn nên thêm văn bản rõ ràng và dễ đọc vào các nút nhập để giúp người dùng trình đọc màn hình hiểu mục đích của nút nhập. [Tìm hiểu thêm về các nút nhập](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "Các thành phần `<input type=\"image\">` có văn bản `[alt]`"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "Các nhãn đảm bảo rằng những công nghệ hỗ trợ, chẳng hạn như trình đọc màn hình, thông báo các biện pháp kiểm soát biểu mẫu đúng cách. [Tìm hiểu thêm về nhãn phần tử biểu mẫu](https://dequeuniversity.com/rules/axe/4.7/label)."
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "Các phần tử biểu mẫu có nhãn liên quan"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "Điểm mốc chính giúp người dùng trình đọc màn hình dễ dàng thao tác trên trang web. [Tìm hiểu thêm về điểm mốc](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)."
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "Tài liệu không có điểm mốc chính."
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "Tài liệu có một điểm mốc chính."
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "Nhiều người dùng gặp khó khăn khi đọc hoặc không thể đọc được văn bản có độ tương phản thấp. Văn bản liên kết rõ ràng sẽ giúp người dùng có thị lực kém dễ đọc hơn. [Tìm hiểu cách giúp các đường liên kết dễ phân biệt](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)."
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "Bạn cần dựa vào màu sắc để phân biệt các đường liên kết."
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "Bạn có thể phân biệt được các đường liên kết mà không cần dựa vào màu sắc."
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "Văn bản liên kết (và văn bản thay thế cho hình ảnh, khi dùng làm phần tử liên kết) có thể thấy rõ, là duy nhất và có thể lấy tiêu điểm sẽ cải thiện trải nghiệm khám phá cho người dùng trình đọc màn hình. [Tìm hiểu cách giúp các phần tử liên kết trở nên dễ tiếp cận](https://dequeuniversity.com/rules/axe/4.7/link-name)."
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "Các thành phần `<object>` có văn bản thay thế"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "Các phần tử biểu mẫu không có nhãn hữu ích có thể khiến người dùng trình đọc màn hình cảm thấy khó chịu. [Tìm hiểu thêm về phần tử `select`](https://dequeuniversity.com/rules/axe/4.7/select-name)."
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Các phần tử lựa chọn không có phần tử nhãn đi kèm."
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Các phần tử lựa chọn có phần tử nhãn liên kết."
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "Giá trị lớn hơn 0 ngụ ý thứ tự điều hướng rõ ràng. Mặc dù hợp lệ về mặt kỹ thuật nhưng điều này thường tạo ra trải nghiệm khó chịu cho những người dùng bị lệ thuộc vào công nghệ hỗ trợ. [Tìm hiểu thêm về thuộc tính `tabindex`](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "Không phần tử nào có giá trị `[tabindex]` lớn hơn 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Các bảng cần sử dụng phần tử chú thích thực tế thay vì các ô có thuộc tính `[colspan]` để người dùng trình đọc màn hình có trải nghiệm tốt hơn. [Tìm hiểu thêm về chú thích](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "Bảng sử dụng `<caption>` thay vì các ô có thuộc tính `[colspan]` để biểu thị chú thích."
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "Đích chạm có kích thước hoặc khoảng giãn cách chưa phù hợp."
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "Đích chạm có kích thước và khoảng giãn cách phù hợp."
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "Trình đọc màn hình có các tính năng giúp người dùng dễ dàng sử dụng bảng hơn. Các phần tử `<td>` trong bảng lớn (chiều rộng và chiều cao từ 3 ô trở lên) cần có tiêu đề bảng liên kết để người dùng trình đọc màn hình có trải nghiệm tốt hơn. [Tìm hiểu thêm về tiêu đề bảng](https://dequeuniversity.com/rules/axe/4.7/td-has-header)."
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "Trang không có URL <link> của tệp kê khai"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "Không phát hiện thấy trình chạy dịch vụ phù hợp. Bạn có thể cần tải lại trang hoặc kiểm tra để đảm bảo rằng phạm vi của trình chạy dịch vụ cho trang hiện tại có bao gồm phạm vi và URL bắt đầu của tệp kê khai."
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "Không thể kiểm tra trình chạy dịch vụ nếu không có trường \"start_url\" trong tệp kê khai"
   },
@@ -969,7 +1083,7 @@
     "message": "Chỉ hỗ trợ prefer_related_applications cho các kênh Chính thức và Thử nghiệm của Chrome trên Android."
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse không xác định được có trình chạy dịch vụ hay không. Vui lòng thử lại bằng một phiên bản Chrome mới hơn."
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Lược đồ URL kê khai ({scheme}) không được hỗ trợ trên Android."
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Điểm số tổng hợp về mức thay đổi bố cục đo lường mức độ dịch chuyển của các phần tử hiển thị trong khung nhìn. [Tìm hiểu thêm về chỉ số Điểm số tổng hợp về mức thay đổi bố cục](https://web.dev/cls/)."
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Hoạt động tương tác với thời gian hiển thị tiếp theo đo lường khả năng phản hồi của trang, thời gian trang cần để phản hồi hoạt động đầu vào của người dùng một cách rõ ràng. [Tìm hiểu thêm về chỉ số Hoạt động tương tác với thời gian hiển thị tiếp theo](https://web.dev/inp/)."
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "Chỉ số Hiển thị nội dung đầu tiên đánh dấu thời điểm hiển thị văn bản hoặc hình ảnh đầu tiên. [Tìm hiểu thêm về chỉ số Hiển thị nội dung đầu tiên](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)."
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "Chỉ số Hiển thị nội dung đầu tiên đo lường thời điểm hiển thị nội dung chính của trang. [Tìm hiểu thêm về chỉ số Hiển thị nội dung đầu tiên](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)."
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Hoạt động tương tác với thời gian hiển thị tiếp theo đo lường khả năng phản hồi của trang, thời gian trang cần để phản hồi hoạt động đầu vào của người dùng một cách rõ ràng. [Tìm hiểu thêm về chỉ số Hoạt động tương tác với thời gian hiển thị tiếp theo](https://web.dev/inp/)."
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "Thời điểm tương tác là khoảng thời gian mà trang cần để trở nên hoàn toàn tương tác. [Tìm hiểu thêm về chỉ số Thời điểm tương tác](https://developer.chrome.com/docs/lighthouse/performance/interactive/)."
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "Tránh chuyển hướng trang nhiều lần"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "Để thiết lập ngân sách cho số lượng và quy mô của tài nguyên trang, hãy thêm tệp budget.json. [Tìm hiểu thêm về ngân sách hiệu suất](https://web.dev/use-lighthouse-for-performance-budgets/)."
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 yêu cầu • {byteCount, number, bytes} KiB}other{# yêu cầu • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "Giảm số lượng yêu cầu và chuyển những tài nguyên có kích thước nhỏ"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "Đường liên kết chính tắc đề xuất URL nào nên hiển thị trong kết quả tìm kiếm. [Tìm hiểu thêm về đường liên kết chính tắc](https://developer.chrome.com/docs/lighthouse/seo/canonical/)."
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "Thời gian phản hồi ban đầu của máy chủ là ngắn"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Trình chạy dịch vụ là công nghệ cho phép ứng dụng của bạn dùng nhiều tính năng của Ứng dụng web tiến bộ, chẳng hạn như hoạt động khi không có mạng, thêm vào màn hình chính và thông báo đẩy. [Tìm hiểu thêm về Trình chạy dịch vụ](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)."
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "Trang này do một trình chạy dịch vụ kiểm soát. Tuy nhiên, không tìm thấy `start_url` vì tệp kê khai không thể phân tích cú pháp thành tệp JSON hợp lệ"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "Trang này do một trình chạy dịch vụ kiểm soát. Tuy nhiên, `start_url` ({startUrl}) không thuộc phạm vi của trình chạy dịch vụ này ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "Trang này do một trình chạy dịch vụ kiểm soát. Tuy nhiên, không tìm thấy `start_url` vì không tìm nạp được tệp kê khai."
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "Nguồn gốc này có một hoặc nhiều trình chạy dịch vụ. Tuy nhiên, trang ({pageUrl}) không thuộc phạm vi của các trình chạy dịch vụ này."
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "Không đăng ký một trình chạy dịch vụ kiểm soát trang và `start_url`"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "Đăng ký một trình chạy dịch vụ kiểm soát trang và `start_url`"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "Màn hình chờ có giao diện giúp đảm bảo người dùng có trải nghiệm chất lượng cao khi chạy ứng dụng từ màn hình chính. [Tìm hiểu thêm về màn hình chờ](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)."
   },
@@ -1623,7 +1707,7 @@
     "message": "Những phương pháp hay nhất"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "Các hoạt động kiểm tra này giúp xác định cơ hội [cải thiện khả năng hỗ trợ tiếp cận của ứng dụng web](https://developer.chrome.com/docs/lighthouse/accessibility/). Các hoạt động này chỉ có thể tự động phát hiện một phần vấn đề liên quan đến khả năng hỗ trợ tiếp cận, do đó, bạn nên kiểm tra cả theo cách thủ công."
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "Các mục này nằm trong vùng không thể sử dụng công cụ kiểm tra tự động. Tìm hiểu thêm trong hướng dẫn của chúng tôi về cách [đánh giá khả năng hỗ trợ tiếp cận](https://web.dev/how-to-review/)."
@@ -2769,7 +2853,7 @@
     "message": "Cài đặt [một mô-đun Drupal](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search) có thể tải từng phần hình ảnh. Những mô-đun như vậy cung cấp khả năng trì hoãn mọi hình ảnh ngoài màn hình nhằm cải thiện hiệu suất."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "Hãy cân nhắc sử dụng một mô-đun cùng dòng với CSS và JavaScript quan trọng, hoặc có khả năng tải không đồng bộ các tài sản qua JavaScript, chẳng hạn như mô-đun [Tổng hợp CSS/JavaScript nâng cao](https://www.drupal.org/project/advagg). Hãy lưu ý rằng những tùy chọn tối ưu hóa mà mô-đun này cung cấp có thể làm hỏng trang web của bạn. Do đó, bạn có thể phải thay đổi mã."
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "Giao diện, mô-đun và thông số máy chủ đều tác động đến thời gian phản hồi của máy chủ. Hãy cân nhắc tìm một giao diện tối ưu hóa hơn, lựa chọn cẩn thận mô-đun tối ưu hóa và/hoặc nâng cấp máy chủ. Các máy chủ lưu trữ nên tận dụng tính năng lưu mã vận hành PHP vào bộ nhớ đệm, tính năng lưu vào bộ nhớ đệm để giảm thiểu số lần truy vấn cơ sở dữ liệu, chẳng hạn như Redis hoặc Memcached, cũng như tận dụng logic của ứng dụng được tối ưu hóa để tải trang nhanh hơn."
@@ -2778,10 +2862,10 @@
     "message": "Hãy cân nhắc sử dụng [Kiểu hình ảnh thích ứng](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8) để giảm kích thước của hình ảnh tải trên trang. Nếu bạn đang sử dụng Views để hiển thị nhiều mục nội dung trên một trang, hãy cân nhắc triển khai quá trình phân trang để giới hạn số mục nội dung hiển thị trên trang cụ thể."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "Đảm bảo bạn đã bật tùy chọn \"Aggregate CSS files\" (Tổng hợp các tệp CSS) trên trang \"Administration » Configuration » Development\" (Quản trị > Cấu hình > Phát triển). Bạn cũng có thể định cấu hình những tùy chọn tổng hợp nâng cao hơn thông qua các [mô-đun bổ sung](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search) để tăng tốc độ của trang web bằng cách ghép nối, giảm kích thước và nén các kiểu CSS."
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "Đảm bảo bạn đã bật tùy chọn \"Aggregate JavaScript files\" (Tổng hợp các tệp JavaScript) trên trang \"Administration » Configuration » Development\" (Quản trị > Cấu hình > Phát triển). Bạn cũng có thể định cấu hình những tùy chọn tổng hợp nâng cao hơn thông qua các [mô-đun bổ sung](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search) để tăng tốc độ của trang web bằng cách ghép nối, giảm kích thước và nén các tài sản JavaScript."
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "Hãy cân nhắc xóa các quy tắc CSS không dùng đến và chỉ đính kèm các thư viện Drupal cần thiết vào trang hoặc thành phần liên quan trên trang. Truy cập vào [đường liên kết đến tài liệu về Drupal](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library) để biết thông tin chi tiết. Để xác định các thư viện đã đính kèm đang thêm CSS không liên quan, hãy thử chạy [phạm vi của mã](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage) trong Chrome DevTools. Bạn có thể xác định giao diện/mô-đun gây ra tình trạng này từ URL của tệp định kiểu khi tính năng tổng hợp CSS bị tắt trên trang web Drupal. Hãy chú ý đến những giao diện/mô-đun có nhiều tệp định kiểu trong danh sách. Những giao diện/mô-đun này có nhiều màu đỏ trong phạm vi của mã. Mỗi giao diện/mô-đun chỉ nên thêm một tệp định kiểu vào hàng đợi nếu tệp định kiểu đó thực sự được sử dụng trên trang."
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "Hãy bật tính năng nén trên máy chủ Next.js của bạn. [Tìm hiểu thêm](https://nextjs.org/docs/api-reference/next.config.js/compression)."
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "Sử dụng thành phần `nuxt/image` và thiết lập `format=\"webp\"`. [Tìm hiểu thêm](https://image.nuxtjs.org/components/nuxt-img#format)."
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "Sử dụng Trình phân tích tài nguyên React DevTools, công cụ dùng API Trình phân tích tài nguyên để đo lường hiệu suất hiển thị của các thành phần. [Tìm hiểu thêm.](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "Đưa video vào `VideoBoxes`, tuỳ chỉnh video bằng `Video Masks` hoặc thêm `Transparent Videos`. [Tìm hiểu thêm](https://support.wix.com/en/article/wix-video-about-wix-video)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "Tải hình ảnh lên bằng cách sử dụng `Wix Media Manager` để đảm bảo hình ảnh tự động được phân phát dưới dạng WebP. Tìm hiểu [các giải pháp khác giúp bạn tối ưu hoá](https://support.wix.com/en/article/site-performance-optimizing-your-media) nội dung nghe nhìn trên trang web."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "Khi bạn [thêm mã của bên thứ ba](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site) vào thẻ `Custom Code` trên trang tổng quan của trang web, hãy đảm bảo mã đó được trì hoãn đến cuối nội dung mã hoặc tải ở cuối nội dung mã. Nếu có thể, hãy sử dụng [nội dung tích hợp](https://support.wix.com/en/article/about-marketing-integrations) của Wix để nhúng các công cụ tiếp thị vào trang web của bạn. "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix sử dụng CDN và chức năng lưu vào bộ nhớ đệm để phân phát phản hồi nhanh nhất có thể cho hầu hết khách truy cập. Bạn có thể [bật chức năng lưu vào bộ nhớ đệm theo cách thủ công](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed) cho trang web của mình, đặc biệt là khi sử dụng `Velo`."
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "Xem lại mã của bên thứ ba (nếu có) mà bạn đã thêm vào thẻ `Custom Code` trên trang tổng quan của trang web và chỉ giữ lại các dịch vụ cần thiết cho trang web của bạn. [Tìm hiểu thêm](https://support.wix.com/en/article/site-performance-removing-unused-javascript)."
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "Hãy cân nhắc tải ảnh GIF lên một dịch vụ để có thể nhúng ảnh đó ở dạng video HTML5."
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "Lưu dưới dạng JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "Mở trong trình xem"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "Các giá trị chỉ là ước tính và có thể thay đổi. [Điểm hiệu quả được tính](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) trực tiếp từ những chỉ số này."
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "Xem dấu vết gốc"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "Xem dấu vết"
   },
diff --git a/front_end/third_party/lighthouse/locales/zh-HK.json b/front_end/third_party/lighthouse/locales/zh-HK.json
index fedb4a7..850e793 100644
--- a/front_end/third_party/lighthouse/locales/zh-HK.json
+++ b/front_end/third_party/lighthouse/locales/zh-HK.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` 屬性與其角色相符"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "如果元素沒有無障礙名稱,螢幕閱讀器只會讀出一般名稱,導致依賴螢幕閱讀器的使用者無法使用該欄位。[瞭解如何讓指令元素更容易使用](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)。"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`、`link` 和 `menuitem` 元素具有無障礙名稱"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "如果 ARIA 對話框元素沒有無障礙名稱,螢幕閱讀器使用者就可能無法分辨這些元素的用途。[瞭解如何讓 ARIA 對話框元素更易用](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)。"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "含有 `role=\"dialog\"` 或 `role=\"alertdialog\"` 的元素沒有無障礙名稱。"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "含有 `role=\"dialog\"` 或 `role=\"alertdialog\"` 的元素具有無障礙名稱。"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "在 `<body>` 文件上設定 `aria-hidden=\"true\"` 時,輔助技術 (例如螢幕閱讀器) 的運作將無法保持一致。[瞭解 `aria-hidden` 如何影響文件內文](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)。"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` 值有效"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "在由標記分割的文字節點前後新增 `role=text`,VoiceOver 就會將其視為一個詞組,但系統不會通知該元素的可聚焦子元素。[進一步瞭解 `role=text` 屬性](https://dequeuniversity.com/rules/axe/4.7/aria-text)。"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "具有 `role=text` 屬性的元素有可聚焦的子元素。"
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "具有 `role=text` 屬性的元素沒有可聚焦的子元素。"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "如果切換欄位沒有無障礙名稱,螢幕閱讀器只會讀出一般名稱,導致依賴螢幕閱讀器的使用者無法使用該欄位。[進一步瞭解切換欄位](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)。"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA ID 沒有重複"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "如果 heading 沒有內容或無障礙設計的文字,螢幕閱讀器使用者就無法存取網頁結構中的資料。[進一步瞭解 headings](https://dequeuniversity.com/rules/axe/4.7/empty-heading)。"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Heading 元素不含任何內容。"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "所有 heading 元素都包含內容。"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "使用第一個、最後一個或所有標籤的螢幕閱讀器等輔助技術,可能無法將包含多個標籤的表格欄位正確讀出。[瞭解如何使用表格標籤](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)。"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` 元素的 `[xml:lang]` 屬性與 `[lang]` 屬性的基本語言相同。"
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "具有相同目的地的連結應提供相同的描述,協助使用者瞭解連結的用途,並決定是否前往。[進一步瞭解相同連結](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)。"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "相同連結的用途不同。"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "相同的連結用途相同。"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "資訊型元素應提供簡短貼切的替代文字。只要將 alt 屬性留空,系統便會忽略該裝飾元素。[進一步瞭解此 `alt` 屬性](https://dequeuniversity.com/rules/axe/4.7/image-alt)。"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "圖片元素具有 `[alt]` 屬性"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "您可以為輸入按鈕新增可識別且可存取的文字,協助螢幕閱讀器使用者瞭解輸入按鈕的用途。[進一步瞭解輸入按鈕](https://dequeuniversity.com/rules/axe/4.7/input-button-name)。"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` 元素具有 `[alt]` 文字"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "標籤可以確保輔助技術 (例如螢幕閱讀器) 正確朗讀表格控制項。[進一步瞭解表格元素標籤](https://dequeuniversity.com/rules/axe/4.7/label)。"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "表格元素具有相關聯的標籤"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "其中一項主要標籤可協助螢幕閱讀器使用者瀏覽網頁。[進一步瞭解標籤](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)。"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "文件不含主要標籤。"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "文件具有主要標籤。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "很多使用者難以閱讀或無法閱讀低對比度的文字。可辨別的連結文字有助改善低視力使用者的體驗。[瞭解如何設定可明確辨別的連結](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "連結需依賴顏色辨別。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "不需依賴顏色亦可明確辨別連結。"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "使用可辨別、不重複且可聚焦的連結文字 (以及連結圖片的替代文字),有助改善螢幕閱讀器使用者的瀏覽體驗。[瞭解如何讓連結更易用](https://dequeuniversity.com/rules/axe/4.7/link-name)。"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` 元素具有替代文字"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "沒有有效標籤的 Form 元素可能對螢幕閱讀器使用者造成困擾。[進一步瞭解 `select` 元素](https://dequeuniversity.com/rules/axe/4.7/select-name)。"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Select 元素沒有相關聯的 label 元素。"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Select 元素具有關聯的 label 元素。"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "如果值大於 0,代表已採用明確的瀏覽排序。雖然此做法在技術上可行,但通常會對依賴輔助技術的使用者造成困擾。[進一步瞭解此 `tabindex` 屬性](https://dequeuniversity.com/rules/axe/4.7/tabindex)。"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "所有元素的 `[tabindex]` 值皆未超過 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "螢幕閱讀器的功能可讓使用者更輕鬆瀏覽表格。如果表格使用實際的標題元素,而非含有 `[colspan]` 屬性的儲存格,或許可提升螢幕閱讀器的使用體驗。[進一步瞭解標題](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)。"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "表格使用 `<caption>` 屬性表示標題,而非使用含有 `[colspan]` 屬性的儲存格。"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "觸控目標的大小或間距不足。"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "觸控目標的大小和間距充足。"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "螢幕閱讀器的功能可讓使用者更輕鬆瀏覽表格。如果大型表格 (寬度和高度為 3 個或以上儲存格) 中的 `<td>` 元素使用相關聯的表格標題,或許可提升螢幕閱讀器的使用體驗。[進一步瞭解表格標題](https://dequeuniversity.com/rules/axe/4.7/td-has-header)。"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "頁面並無資訊清單 <link> 網址"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "未偵測到任何相符的 Service Worker。您可能需要重新載入頁面,或檢查目前頁面的 Service Worker 範圍是否包含資訊清單範圍和起始網址。"
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "由於資訊清單中沒有「start_url」欄位,因此無法檢查 Service Worker"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications 僅支援 Android 裝置上的 Chrome Beta 版本和穩定版。"
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse 無法判斷是否有 Service Worker。請試使較新的 Chrome 版本。"
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Android 不支援資訊清單網址配置 ({scheme})。"
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "「累計版面配置轉移」會測量檢視區內可見元素的移動。[進一步瞭解「累計版面配置轉移」數據](https://web.dev/cls/)。"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "「互動至下一個繪製」會測量網頁回應速度,亦即網頁明顯回應使用者輸入內容所需的時間。[進一步瞭解「互動至下一個繪製」數據](https://web.dev/inp/)。"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "「首次內容繪製時間」標示繪製首個文字/首張圖片的時間。[進一步瞭解「首次內容繪製時間」數據](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)。"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "「首次有效繪製時間」評估頁面主要內容顯示的時間。[進一步瞭解「首次有效繪製時間」數據](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)。"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "「互動至下一個繪製」會測量網頁回應速度,亦即網頁明顯回應使用者輸入內容所需的時間。[進一步瞭解「互動至下一個繪製」數據](https://web.dev/inp/)。"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "「可互動所需時間」是網頁進入完整互動狀態前所花的時間。[進一步瞭解「可互動所需時間」數據](https://developer.chrome.com/docs/lighthouse/performance/interactive/)。"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "避免多次頁面重新導向"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "如要設定網頁資源的數量和大小的預算,請新增 budget.json 檔案。[進一步瞭解效能預算](https://web.dev/use-lighthouse-for-performance-budgets/)。"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 個要求 • {byteCount, number, bytes} KiB}other{# 個要求 • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "降低要求數量並減少傳輸大小"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "標準連結會建議要在搜尋結果中顯示哪個網址。[進一步瞭解標準連結](https://developer.chrome.com/docs/lighthouse/seo/canonical/)。"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "初始伺服器回應時間短暫"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service Worker 技術可讓您的應用程式使用多項漸進式網絡應用程式的功能,例如離線存取、新增到主畫面和推送通知。[進一步瞭解 Service Worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)。"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "此網頁由 Service Worker 控制,但系統無法將資訊清單剖析為有效的 JSON,因此找不到任何 `start_url`"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "此網頁由 Service Worker 控制,但 `start_url` ({startUrl}) 不在 Service Worker 的範圍內 ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "此網頁由 Service Worker 控制,但系統未能擷取任何資訊清單,因此找不到任何 `start_url`。"
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "此來源包含一個或多個 Service Worker,但該頁面 ({pageUrl}) 不在 Service Worker 的範圍內。"
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "未註冊可控制網頁和 `start_url` 的 Service Worker"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "已註冊可控制網頁和 `start_url` 的 Service Worker"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "透過設定啟動畫面的主題,可確保使用者從主畫面啟動您的應用程式時享有優質體驗。[進一步瞭解啟動畫面](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)。"
   },
@@ -1623,7 +1707,7 @@
     "message": "最佳做法"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "這些檢查會提供[網頁應用程式無障礙功能的改善建議](https://developer.chrome.com/docs/lighthouse/accessibility/)。系統只能自動偵測一部分的無障礙功能問題,因此建議您另行手動測試。"
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "這些審核項目會檢查自動化測試工具未涵蓋的區域。詳情請參閱[無障礙功能審查的執行指南](https://web.dev/how-to-review/)。"
@@ -2769,7 +2853,7 @@
     "message": "請安裝可以延遲載入圖片的 [Drupal 模組](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search)。這些模組可延遲載入所有畫面外的圖片,進而提升效能。"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "建議使用模組來內嵌重要的 CSS 和 JavaScript,或透過[進階 CSS/JS 彙整](https://www.drupal.org/project/advagg)模組等 JavaScript 來非同步載入資產。請注意,此模組提供的優化可能令網站無法正常運作,因此您可能需要修改程式碼。"
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "主題、模組和伺服器規格均會影響伺服器回應時間。建議尋找更優化的主題、謹慎選擇優化模組和/或升級伺服器。您的代管伺服器應使用 PHP opcode 快取、記憶體快取來降低資料庫查詢時間 (例如 Redis 或 Memcached),還可優化應用程式邏輯以提升頁面載入速度。"
@@ -2778,10 +2862,10 @@
     "message": "建議使用[回應式圖片樣式](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8)來縮減頁面上載入圖片的大小。如果您使用 Views 在頁面上顯示多個內容項目,建議透過分頁來控制特定頁面上顯示的內容項目數量。"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "請確保您已啟用「管理 » 設定 » 開發」頁面上的「彙整 CSS 檔案」。您亦可透過[額外模組](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search)設定更進階的彙整選項,從而透過串連、縮小及壓縮 CSS 樣式來提升網站速度。"
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "請確保您已啟用「管理 » 設定 » 開發」頁面上的「彙整 JavaScript 檔案」。您亦可透過[額外模組](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search)設定更進階的彙整選項,從而透過串連、縮小及壓縮 JavaScript 資產來提升網站速度。"
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "建議移除未使用的 CSS 規則,並只將需要的 Drupal 程式庫附加至相關頁面或頁面內的組件。查看 [Drupal 文件連結](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library)即可瞭解詳情。如要找出會新增多餘 CSS 的附加程式庫,請嘗試在 Chrome DevTools 中執行[程式碼覆蓋率](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage)。您可在 Drupal 網站上停用 CSS 彙整時,透過樣式表網址找出有問題的主題/模組。請留意清單中包含很多樣式表,且程式碼覆蓋率中有大量紅色標示的主題/模組。主題/模組應只將網頁上實際使用的樣式表加入清單。"
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "請為您的 Next.js 伺服器啟用壓縮功能。[瞭解詳情](https://nextjs.org/docs/api-reference/next.config.js/compression)。"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "請使用 `nuxt/image` 組件並設定 `format=\"webp\"`。[瞭解詳情](https://image.nuxtjs.org/components/nuxt-img#format)。"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "使用 React DevTools Profiler,採用效能分析 API 來測量組件的輸出效能。[瞭解詳情。](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "將影片放在 `VideoBoxes` 中、使用 `Video Masks` 自訂影片,或新增 `Transparent Videos`。[瞭解詳情](https://support.wix.com/en/article/wix-video-about-wix-video)。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "使用 `Wix Media Manager` 上載圖片,確保圖片會自動以 WebP 格式提供。瞭解[更多優化網站媒體的方式](https://support.wix.com/en/article/site-performance-optimizing-your-media)。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "在網站資訊主頁的「`Custom Code`」分頁中[新增第三方程式碼](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site)時,請務必將其延遲或載入至程式碼主體末端。請盡量使用 Wix 的[整合](https://support.wix.com/en/article/about-marketing-integrations)功能,將市場推廣工具嵌入網站。 "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix 會使用 CDN 和快取,盡快為大多數訪客提供回應。建議你為網站[手動啟用快取](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed)功能,特別是使用 `Velo` 時。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "在網站資訊主頁的「`Custom Code`」分頁中,查看你在網站上加入的任何第三方程式碼,只保留網站所需的服務。[查看更多](https://support.wix.com/en/article/site-performance-removing-unused-javascript)。"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "建議將 GIF 上載至可將 GIF 用作 HTML5 影片嵌入的伺服器。"
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "另存為 JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "在檢視器中開啟"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "此為預計值,可能與實際值有所不同。[效能分數將利用這些數據直接計算](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)。"
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "查看原始追蹤記錄"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "檢視追蹤記錄"
   },
diff --git a/front_end/third_party/lighthouse/locales/zh-TW.json b/front_end/third_party/lighthouse/locales/zh-TW.json
index fedac33..a996613 100644
--- a/front_end/third_party/lighthouse/locales/zh-TW.json
+++ b/front_end/third_party/lighthouse/locales/zh-TW.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` 屬性與其角色相符"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "如果元素沒有無障礙元素名稱,螢幕閱讀器只會讀出通用名稱,這樣仰賴螢幕閱讀器的使用者就無法知道這個元素的用途。[瞭解如何讓指令元素更容易使用](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)。"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`、`link` 和 `menuitem` 元素具有可解讀的名稱"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "如果 ARIA 對話方塊元素缺少無障礙元素名稱,螢幕閱讀器使用者就可能無法分辨這些元素的用途。[瞭解如何讓 ARIA 對話方塊元素更易於存取](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)。"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "含有 `role=\"dialog\"` 或 `role=\"alertdialog\"` 的元素缺少無障礙元素名稱。"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "含有 `role=\"dialog\"` 或 `role=\"alertdialog\"` 的元素具有無障礙元素名稱。"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "在 `<body>` 文件上設定 `aria-hidden=\"true\"` 時,輔助技術 (例如螢幕閱讀器) 無法一致地進行作業。[瞭解 `aria-hidden` 對文件內文的影響](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)。"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` 具備有效的值"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "在由標記分割的文字節點前後新增 `role=text`,VoiceOver 就會將其視為一個詞組,但系統不會通知該元素的可聚焦子系。[進一步瞭解 `role=text` 屬性](https://dequeuniversity.com/rules/axe/4.7/aria-text)。"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "具有 `role=text` 屬性的元素具有可聚焦子系。"
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "具有 `role=text` 屬性的元素缺少可聚焦子系。"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "如果沒有可解讀的切換欄位名稱,螢幕閱讀器只會讀出通用名稱,這樣仰賴螢幕閱讀器的使用者就無法知道這個切換欄位的用途。[進一步瞭解切換欄位](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)。"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "沒有重複的 ARIA ID"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "如果 heading 缺少內容或無障礙設計的文字,螢幕閱讀器使用者就無法存取網頁結構中的資訊。[進一步瞭解標題](https://dequeuniversity.com/rules/axe/4.7/empty-heading)。"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "Heading 元素不含任何內容。"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "所有 heading 元素都含有內容。"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "如果表單欄位含有多個標籤,可能會造成螢幕閱讀器等輔助技術無法判斷該讀出第一個、最後一個或所有標籤。[瞭解如何使用表單標籤](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)。"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` 元素的 `[xml:lang]` 屬性與 `[lang]` 屬性的基本語言相同。"
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "具有相同目的地的連結應提供相同的說明,協助使用者瞭解連結的用途,並決定是否前往。[進一步瞭解相同連結](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)。"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "相同連結的用途不同。"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "相同的連結用途相同。"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "說明元素應提供簡短貼切的替代文字。如果是裝飾元素,只要將 alt 屬性留空,系統即會忽略該元素。[進一步瞭解 `alt` 屬性](https://dequeuniversity.com/rules/axe/4.7/image-alt)。"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "圖片元素具有 `[alt]` 屬性"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "你可以為輸入按鈕加上容易識讀的說明文字,協助螢幕閱讀器使用者瞭解輸入按鈕的用途。[進一步瞭解輸入按鈕](https://dequeuniversity.com/rules/axe/4.7/input-button-name)。"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` 元素具有 `[alt]` 文字"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "標籤可確保輔助技術 (例如螢幕閱讀器) 正確朗讀表單控制項。[進一步瞭解表單元素標籤](https://dequeuniversity.com/rules/axe/4.7/label)。"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "表單元素具有相關聯的標籤"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "主要位置標記可協助螢幕閱讀器使用者瀏覽網頁。[進一步瞭解位置標記](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)。"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "文件缺少主要位置標記。"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "文件設有主要位置標記。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "低對比度的文字對許多讀者來說難以閱讀或無法閱讀。可辨別的連結文字有助於改善低視能讀者的使用者體驗。[瞭解如何設定可明確區別的連結](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "連結必須依賴顏色區別。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "就算不依賴顏色,也可以明確區別連結。"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "使用可辨別、未重複且可聚焦的連結文字 (以及連結圖片的替代文字),有助於改善螢幕閱讀器使用者的瀏覽體驗。[瞭解如何讓連結易於存取](https://dequeuniversity.com/rules/axe/4.7/link-name)。"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` 元素具有替代文字"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "如果 Form 元素沒有有效的標籤,螢幕閱讀器使用者可能會感到困擾。[進一步瞭解 `select` 元素](https://dequeuniversity.com/rules/axe/4.7/select-name)。"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "Select 元素沒有相關聯的 label 元素。"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "Select 元素具有相關聯的 label 元素。"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "如果值大於 0,表示採用的是明確的瀏覽排序。雖然這在技術上可行,但經常會對仰賴輔助技術的使用者造成困擾。[進一步瞭解 `tabindex` 屬性](https://dequeuniversity.com/rules/axe/4.7/tabindex)。"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "所有元素的 `[tabindex]` 值皆未超過 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "使用者可運用螢幕閱讀器的功能輕鬆瀏覽表格。如果表格使用實際的標題元素,而非含有 `[colspan]` 屬性的儲存格,或許可以提升螢幕閱讀器的使用體驗。[進一步瞭解標題](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)。"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "表格使用 `<caption>` 屬性表示標題,而非使用含有 `[colspan]` 屬性的儲存格。"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "觸控目標的大小或間距不足。"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "觸控目標的大小和間距充足。"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "使用者可運用螢幕閱讀器的功能輕鬆瀏覽表格。如果大型表格 (寬度和高度為 3 個以上儲存格) 中的 `<td>` 元素使用相關聯的表格標頭,或許可以提升螢幕閱讀器的使用體驗。[進一步瞭解表格標頭](https://dequeuniversity.com/rules/axe/4.7/td-has-header)。"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "網頁沒有資訊清單 <link> 網址"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "未偵測到相符的 Service Worker。你可能需要重新載入網頁,或是檢查目前網頁的 Service Worker 範圍是否涵蓋資訊清單的範圍和開始網址。"
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "資訊清單中沒有「start_url」欄位,因此無法檢查 Service Worker"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications 僅適用於 Android 上的 Chrome Beta 版和穩定版。"
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse 無法判斷是否有 service worker。請嘗試使用較新的 Chrome 版本。"
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "Android 不支援資訊清單網址架構 ({scheme})。"
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "「累計版面配置轉移」指標是用於測量可見元素在可視區域內的移動情形。[進一步瞭解「累計版面配置位移」指標](https://web.dev/cls/)。"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "「與下一個顯示的內容互動」指標的用途是測量網頁回應,也就是網頁明顯回應使用者輸入內容所需的時間。[進一步瞭解「與下一個顯示的內容互動」指標](https://web.dev/inp/)。"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "首次顯示內容所需時間是指瀏覽器首次顯示文字或圖片的時間。[進一步瞭解「首次顯示內容所需時間」指標](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)。"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "畫面首次有效顯示所需時間是指網頁顯示主要內容的時間。[進一步瞭解「畫面首次有效顯示所需時間」指標](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)。"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "「與下一個顯示的內容互動」指標的用途是測量網頁回應,也就是網頁明顯回應使用者輸入內容所需的時間。[進一步瞭解「與下一個顯示的內容互動」指標](https://web.dev/inp/)。"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "互動準備時間是網頁進入完整互動狀態前花費的時間。[進一步瞭解「互動準備時間」指標](https://developer.chrome.com/docs/lighthouse/performance/interactive/)。"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "避免進行多次頁面重新導向"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "如要針對網頁資源的數量和大小設定預算,請新增 budget.json 檔案。[進一步瞭解效能預算](https://web.dev/use-lighthouse-for-performance-budgets/)。"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 個要求 • {byteCount, number, bytes} KiB}other{# 個要求 • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "降低要求數量並減少傳輸大小"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "標準連結可指出要在搜尋結果中顯示哪個網址。[進一步瞭解標準連結](https://developer.chrome.com/docs/lighthouse/seo/canonical/)。"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "初始伺服器回應時間很短"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service Worker 技術可讓你的應用程式使用許多漸進式網頁應用程式的功能,例如離線存取、新增到主畫面,以及推播通知。[進一步瞭解 Service Worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)。"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "此網頁由 Service Worker 所控管,但系統無法將資訊清單剖析為有效的 JSON,因此找不到任何 `start_url`"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "這個網頁由 Service Worker 所控管,但是 `start_url` ({startUrl}) 不在 Service Worker 的範圍內 ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "這個網頁由 Service Worker 所控管,但系統未擷取任何資訊清單,因此找不到任何 `start_url`。"
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "此來源包含一個或多個 Service Worker,但該頁面 ({pageUrl}) 不在 Service Worker 的範圍內。"
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "未註冊可控管網頁和 `start_url` 的 Service Worker"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "已註冊可控管網頁和 `start_url` 的 Service Worker"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "透過設定啟動畫面的主題,可確保使用者從主畫面啟動你的應用程式時享有優質體驗。[進一步瞭解啟動畫面](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)。"
   },
@@ -1623,7 +1707,7 @@
     "message": "最佳做法"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "這些檢查會清楚說明[網頁應用程式無障礙功能的改善建議](https://developer.chrome.com/docs/lighthouse/accessibility/),但系統只能自動偵測一部分的無障礙功能問題,因此建議你另外進行手動測試。"
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "這些稽核項目會檢查自動化測試工具未涵蓋的區域。詳情請參閱[無障礙功能審查的執行指南](https://web.dev/how-to-review/)。"
@@ -2769,7 +2853,7 @@
     "message": "安裝可以延遲載入圖片的 [Drupal 模組](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search)。這類模組可延遲載入所有畫面外的圖片,進而提升效能。"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "建議你使用模組來內嵌重要的 CSS 和 JavaScript,或者透過[進階 CSS/JavaScript 匯總](https://www.drupal.org/project/advagg)模組等 JavaScript,以非同步的方式載入素材資源。請注意,這個模組提供的最佳化設定可能會導致現有網站無法正常運作,因此你可能需要變更程式碼。"
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "主題、模組和伺服器規格都會影響伺服器回應時間。建議你尋找經過最佳化調整的主題、謹慎選擇最佳化模組,並 (或) 升級伺服器。你的代管伺服器應使用 PHP opcode 快取、記憶體快取來降低資料庫查詢時間 (例如 Redis 或 Memcached),並且使用經過最佳化的應用程式邏輯提升頁面載入的速度。"
@@ -2778,10 +2862,10 @@
     "message": "建議你使用[回應式圖片樣式](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8)來縮減頁面上載入圖片的大小。如果你使用 Views 在頁面上顯示多個內容項目,建議你透過分頁來限制特定頁面上顯示的內容項目數量。"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "確保你已啟用 [Administration] » [Configuration] » [Development] 頁面上的 [Aggregate CSS files]。你也可以透過[額外模組](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search)設定更多的進階匯總選項,藉此透過串連、縮小及壓縮 CSS 樣式來提升網站速度。"
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "確保你已啟用 [Administration] » [Configuration] » [Development] 頁面上的 [Aggregate JavaScript files]。你也可以透過[額外模組](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search)設定更多的進階匯總選項,藉此透過串連、縮小及壓縮 JavaScript 素材資源來提升網站速度。"
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "建議你移除未使用的 CSS 規則,並僅將必要的 Drupal 程式庫附加至相關頁面或頁面上的元件。詳情請參閱 [Drupal 說明文件連結](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library)。如要找出會新增多餘 CSS 的附加程式庫,請嘗試在 Chrome DevTools 中執行[程式碼涵蓋率](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage)功能。你可以在 Drupal 網站上停用 CSS 匯總時,透過樣式表網址找出有問題的主題/模組。請留意在清單中包含許多樣式表,且程式碼涵蓋率中有許多紅色標示的主題/模組。主題/模組只應將網頁實際使用的樣式表加入佇列。"
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "請為您的 Next.js 伺服器啟用壓縮功能。[瞭解詳情](https://nextjs.org/docs/api-reference/next.config.js/compression)。"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "請使用 `nuxt/image` 元件並設定 `format=\"webp\"`。[瞭解詳情](https://image.nuxtjs.org/components/nuxt-img#format)。"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "使用 React DevTools Profiler,這項工具會採用 Profiler API 來測量你的元件轉譯效能。[瞭解詳情](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)。"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "將影片置於 `VideoBoxes` 中、使用 `Video Masks` 自訂影片,或新增 `Transparent Videos`。[瞭解詳情](https://support.wix.com/en/article/wix-video-about-wix-video)。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "使用 `Wix Media Manager` 上傳圖片,確保圖片會自動以 WebP 格式提供。瞭解[更多網站媒體最佳化的方式](https://support.wix.com/en/article/site-performance-optimizing-your-media)。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "在網站資訊主頁的「`Custom Code`」分頁中[新增第三方程式碼](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site)時,請務必將其延遲或載入至程式碼主體末端。請盡可能使用 Wix 的[整合](https://support.wix.com/en/article/about-marketing-integrations)功能,將行銷工具嵌入網站。 "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix 會使用 CDN 和快取,盡快為大多數訪客提供回應。建議你為網站[手動啟用快取](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed)功能,特別是使用 `Velo` 時。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "在網站資訊主頁的「`Custom Code`」分頁中,查看你在網站上加入的任何第三方程式碼,只保留網站所需的服務。[瞭解詳情](https://support.wix.com/en/article/site-performance-removing-unused-javascript)。"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "建議您將 GIF 上傳到可將 GIF 做為 HTML5 影片嵌入的服務。"
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "另存為 JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "在檢視器中開啟"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "此為預估值,可能與實際情況有所不同。系統會直接根據這些指標[計算效能分數](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)。"
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "查看原始追蹤記錄"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "查看追蹤記錄"
   },
diff --git a/front_end/third_party/lighthouse/locales/zh.json b/front_end/third_party/lighthouse/locales/zh.json
index 7fdcf48..60cf496 100644
--- a/front_end/third_party/lighthouse/locales/zh.json
+++ b/front_end/third_party/lighthouse/locales/zh.json
@@ -17,6 +17,15 @@
   "core/audits/accessibility/aria-allowed-attr.js | title": {
     "message": "`[aria-*]` 属性与其角色匹配"
   },
+  "core/audits/accessibility/aria-allowed-role.js | description": {
+    "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
+    "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
+  },
+  "core/audits/accessibility/aria-allowed-role.js | title": {
+    "message": "Values assigned to `role=\"\"` are valid ARIA roles."
+  },
   "core/audits/accessibility/aria-command-name.js | description": {
     "message": "如果某个元素没有无障碍名称,屏幕阅读器会将它读为通用名称,这会导致依赖屏幕阅读器的用户无法使用它。[了解如何让命令元素更便于使用](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)。"
   },
@@ -26,6 +35,15 @@
   "core/audits/accessibility/aria-command-name.js | title": {
     "message": "`button`、`link` 和 `menuitem` 元素都有可供访问的名称"
   },
+  "core/audits/accessibility/aria-dialog-name.js | description": {
+    "message": "如果 ARIA 对话框元素缺少无障碍名称,可能会妨碍屏幕阅读器用户理解这些元素的用途。[了解如何让 ARIA 对话框元素更符合无障碍需求](https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name)。"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | failureTitle": {
+    "message": "具有 `role=\"dialog\"` 或 `role=\"alertdialog\"` 的元素缺少无障碍名称。"
+  },
+  "core/audits/accessibility/aria-dialog-name.js | title": {
+    "message": "具有 `role=\"dialog\"` 或 `role=\"alertdialog\"` 的元素均有无障碍名称。"
+  },
   "core/audits/accessibility/aria-hidden-body.js | description": {
     "message": "在文档 `<body>` 上设置 `aria-hidden=\"true\"` 后,辅助技术(如屏幕阅读器)的工作方式不一致。[了解 `aria-hidden` 对文档正文的影响](https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body)。"
   },
@@ -107,6 +125,15 @@
   "core/audits/accessibility/aria-roles.js | title": {
     "message": "`[role]` 值有效"
   },
+  "core/audits/accessibility/aria-text.js | description": {
+    "message": "在一个被标记分隔的文本节点周围添加 `role=text` 后,VoiceOver 会将该文本元素视为一个短语,但不会读出它的可聚焦后代元素。[详细了解 `role=text` 属性](https://dequeuniversity.com/rules/axe/4.7/aria-text)。"
+  },
+  "core/audits/accessibility/aria-text.js | failureTitle": {
+    "message": "具有 `role=text` 属性的元素包含可聚焦后代元素。"
+  },
+  "core/audits/accessibility/aria-text.js | title": {
+    "message": "具有 `role=text` 属性的元素缺少可聚焦后代元素。"
+  },
   "core/audits/accessibility/aria-toggle-field-name.js | description": {
     "message": "如果某个切换字段没有无障碍名称,屏幕阅读器会将它读为通用名称,这会导致依赖屏幕阅读器的用户无法使用它。[详细了解切换字段](https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name)。"
   },
@@ -227,6 +254,15 @@
   "core/audits/accessibility/duplicate-id-aria.js | title": {
     "message": "ARIA ID 都是独一无二的"
   },
+  "core/audits/accessibility/empty-heading.js | description": {
+    "message": "如果标题元素未包含任何内容或包含无法读取的文本,屏幕阅读器用户将难以获取网页的结构信息。[详细了解标题](https://dequeuniversity.com/rules/axe/4.7/empty-heading)。"
+  },
+  "core/audits/accessibility/empty-heading.js | failureTitle": {
+    "message": "标题元素未包含任何内容。"
+  },
+  "core/audits/accessibility/empty-heading.js | title": {
+    "message": "所有标题元素均包含内容。"
+  },
   "core/audits/accessibility/form-field-multiple-labels.js | description": {
     "message": "有多个标签的表单字段可能会被辅助技术(如屏幕阅读器)以令人困惑的方式播报出来,因为这些辅助技术可能会使用第一个标签或最后一个标签,也可能会使用所有标签。[了解如何使用表单标签](https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels)。"
   },
@@ -281,6 +317,15 @@
   "core/audits/accessibility/html-xml-lang-mismatch.js | title": {
     "message": "`<html>` 元素的 `[xml:lang]` 属性与 `[lang]` 属性使用了相同的基本语言。"
   },
+  "core/audits/accessibility/identical-links-same-purpose.js | description": {
+    "message": "指向相同目标位置的链接应具有相同的说明,这有助于用户了解链接的用途并决定是否要访问它。[详细了解相同链接](https://dequeuniversity.com/rules/axe/4.7/identical-links-same-purpose)。"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | failureTitle": {
+    "message": "相同链接的用途不一致。"
+  },
+  "core/audits/accessibility/identical-links-same-purpose.js | title": {
+    "message": "相同链接的用途一致。"
+  },
   "core/audits/accessibility/image-alt.js | description": {
     "message": "说明性元素应力求使用简短的描述性替代文字。未指定 alt 属性的装饰性元素可被忽略。[详细了解 `alt` 属性](https://dequeuniversity.com/rules/axe/4.7/image-alt)。"
   },
@@ -290,6 +335,15 @@
   "core/audits/accessibility/image-alt.js | title": {
     "message": "图片元素具备 `[alt]` 属性"
   },
+  "core/audits/accessibility/image-redundant-alt.js | description": {
+    "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
+    "message": "Image elements have `[alt]` attributes that are redundant text."
+  },
+  "core/audits/accessibility/image-redundant-alt.js | title": {
+    "message": "Image elements do not have `[alt]` attributes that are redundant text."
+  },
   "core/audits/accessibility/input-button-name.js | description": {
     "message": "向输入按钮添加可识别的无障碍文本可帮助屏幕阅读器用户了解输入按钮的用途。[详细了解输入按钮](https://dequeuniversity.com/rules/axe/4.7/input-button-name)。"
   },
@@ -308,6 +362,15 @@
   "core/audits/accessibility/input-image-alt.js | title": {
     "message": "`<input type=\"image\">` 元素有对应的 `[alt]` 文字"
   },
+  "core/audits/accessibility/label-content-name-mismatch.js | description": {
+    "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
+    "message": "Elements with visible text labels do not have matching accessible names."
+  },
+  "core/audits/accessibility/label-content-name-mismatch.js | title": {
+    "message": "Elements with visible text labels have matching accessible names."
+  },
   "core/audits/accessibility/label.js | description": {
     "message": "标签可确保辅助技术(如屏幕阅读器)正确读出表单控件。[详细了解表单元素标签](https://dequeuniversity.com/rules/axe/4.7/label)。"
   },
@@ -317,6 +380,24 @@
   "core/audits/accessibility/label.js | title": {
     "message": "表单元素具有关联的标签"
   },
+  "core/audits/accessibility/landmark-one-main.js | description": {
+    "message": "主要位置标记有助于屏幕阅读器用户浏览网页。[详细了解位置标记](https://dequeuniversity.com/rules/axe/4.7/landmark-one-main)。"
+  },
+  "core/audits/accessibility/landmark-one-main.js | failureTitle": {
+    "message": "文档缺少主要位置标记。"
+  },
+  "core/audits/accessibility/landmark-one-main.js | title": {
+    "message": "文档有一个主要位置标记。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | description": {
+    "message": "对许多用户而言,对比度低的文本都是难以阅读或无法阅读的。清晰可辨的链接文本可改善弱视用户的体验。[了解如何让链接容易辨识](https://dequeuniversity.com/rules/axe/4.7/link-in-text-block)。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | failureTitle": {
+    "message": "必须依赖颜色才能辨识链接。"
+  },
+  "core/audits/accessibility/link-in-text-block.js | title": {
+    "message": "无需依赖颜色即可辨识链接。"
+  },
   "core/audits/accessibility/link-name.js | description": {
     "message": "请确保链接文字(以及用作链接的图片替代文字)可识别、独一无二且可聚焦,这样做会提升屏幕阅读器用户的导航体验。[了解如何使链接可供访问](https://dequeuniversity.com/rules/axe/4.7/link-name)。"
   },
@@ -371,6 +452,24 @@
   "core/audits/accessibility/object-alt.js | title": {
     "message": "`<object>` 元素有对应的替代文字"
   },
+  "core/audits/accessibility/select-name.js | description": {
+    "message": "如果表单元素缺少有效标签,可能会给屏幕阅读器用户带来糟糕的体验。[详细了解 `select` 元素](https://dequeuniversity.com/rules/axe/4.7/select-name)。"
+  },
+  "core/audits/accessibility/select-name.js | failureTitle": {
+    "message": "select 元素缺少关联的标签元素。"
+  },
+  "core/audits/accessibility/select-name.js | title": {
+    "message": "select 元素具有关联的标签元素。"
+  },
+  "core/audits/accessibility/skip-link.js | description": {
+    "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
+  },
+  "core/audits/accessibility/skip-link.js | failureTitle": {
+    "message": "Skip links are not focusable."
+  },
+  "core/audits/accessibility/skip-link.js | title": {
+    "message": "Skip links are focusable."
+  },
   "core/audits/accessibility/tabindex.js | description": {
     "message": "值大于 0 意味着明确的导航顺序。尽管这在技术上可行,但往往会让依赖辅助技术的用户感到沮丧。[详细了解 `tabindex` 属性](https://dequeuniversity.com/rules/axe/4.7/tabindex)。"
   },
@@ -380,6 +479,15 @@
   "core/audits/accessibility/tabindex.js | title": {
     "message": "所有元素的 `[tabindex]` 值都不大于 0"
   },
+  "core/audits/accessibility/table-duplicate-name.js | description": {
+    "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
+  },
+  "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
+    "message": "Tables have the same content in the summary attribute and `<caption>.`"
+  },
+  "core/audits/accessibility/table-duplicate-name.js | title": {
+    "message": "Tables have different content in the summary attribute and `<caption>`."
+  },
   "core/audits/accessibility/table-fake-caption.js | description": {
     "message": "屏幕阅读器提供了更便于用户浏览表格内容的功能。请务必确保表格实际使用了 <caption> 元素(而非带有 `[colspan]` 属性的单元格),这可以提升屏幕阅读器用户的体验。[详细了解表格标题](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)。"
   },
@@ -389,6 +497,15 @@
   "core/audits/accessibility/table-fake-caption.js | title": {
     "message": "表格使用了 `<caption>`(而非带有 `[colspan]` 属性的单元格)来表示表格标题。"
   },
+  "core/audits/accessibility/target-size.js | description": {
+    "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
+  },
+  "core/audits/accessibility/target-size.js | failureTitle": {
+    "message": "触摸目标的尺寸或间距不足。"
+  },
+  "core/audits/accessibility/target-size.js | title": {
+    "message": "触摸目标的尺寸和间距足够大。"
+  },
   "core/audits/accessibility/td-has-header.js | description": {
     "message": "屏幕阅读器提供了更便于用户浏览表格内容的功能。请务必确保大型表格(宽度和高度至少为 3 个单元格)中的 `<td>` 元素具有关联的表格标头,这可以提升屏幕阅读器用户的体验。[详细了解表格标头](https://dequeuniversity.com/rules/axe/4.7/td-has-header)。"
   },
@@ -938,9 +1055,6 @@
   "core/audits/installable-manifest.js | no-manifest": {
     "message": "该网页没有清单 <link> 网址"
   },
-  "core/audits/installable-manifest.js | no-matching-service-worker": {
-    "message": "未检测到任何相符的 Service Worker。您可能需要重新加载网页,或检查当前网页的 Service Worker 范围是否包含清单中的范围和起始网址。"
-  },
   "core/audits/installable-manifest.js | no-url-for-service-worker": {
     "message": "如果清单不含“start_url”字段,则无法检查 Service Worker"
   },
@@ -969,7 +1083,7 @@
     "message": "prefer_related_applications 仅适用于 Android 设备上的 Chrome Beta 版和稳定版。"
   },
   "core/audits/installable-manifest.js | protocol-timeout": {
-    "message": "Lighthouse 无法确定是否有 Service Worker。请在更新版本的 Chrome 中重试。"
+    "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
   },
   "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
     "message": "清单网址的架构 ({scheme}) 在 Android 设备上不受支持。"
@@ -1112,15 +1226,15 @@
   "core/audits/metrics/cumulative-layout-shift.js | description": {
     "message": "Cumulative Layout Shift 旨在衡量可见元素在视口内的移动情况。[详细了解 Cumulative Layout Shift 指标](https://web.dev/cls/)。"
   },
-  "core/audits/metrics/experimental-interaction-to-next-paint.js | description": {
-    "message": "Interaction to Next Paint 用于衡量网页响应速度,即网页需要多久才会明显响应用户输入。[详细了解 Interaction to Next Paint 指标](https://web.dev/inp/)。"
-  },
   "core/audits/metrics/first-contentful-paint.js | description": {
     "message": "First Contentful Paint 标记了绘制出首个文本或首张图片的时间。[详细了解 First Contentful Paint 指标](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/)。"
   },
   "core/audits/metrics/first-meaningful-paint.js | description": {
     "message": "“首次有效绘制时间”测量的是网页主要内容开始对用户显示的时间。[详细了解“首次有效绘制时间”指标](https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/)。"
   },
+  "core/audits/metrics/interaction-to-next-paint.js | description": {
+    "message": "Interaction to Next Paint 用于衡量网页响应速度,即网页需要多久才会明显响应用户输入。[详细了解 Interaction to Next Paint 指标](https://web.dev/inp/)。"
+  },
   "core/audits/metrics/interactive.js | description": {
     "message": "“Time to Interactive”是指网页需要多长时间才能提供完整的交互功能。[详细了解“Time to Interactive”指标](https://developer.chrome.com/docs/lighthouse/performance/interactive/)。"
   },
@@ -1214,15 +1328,6 @@
   "core/audits/redirects.js | title": {
     "message": "避免多次网页重定向"
   },
-  "core/audits/resource-summary.js | description": {
-    "message": "若要根据页面资源的数量和大小设置预算,请添加 budget.json 文件。[详细了解性能预算](https://web.dev/use-lighthouse-for-performance-budgets/)。"
-  },
-  "core/audits/resource-summary.js | displayValue": {
-    "message": "{requestCount,plural, =1{1 项请求 • {byteCount, number, bytes} KiB}other{# 项请求 • {byteCount, number, bytes} KiB}}"
-  },
-  "core/audits/resource-summary.js | title": {
-    "message": "请保持较低的请求数量和较小的传输大小"
-  },
   "core/audits/seo/canonical.js | description": {
     "message": "规范链接用于建议应在搜索结果中显示哪个网址。[详细了解规范链接](https://developer.chrome.com/docs/lighthouse/seo/canonical/)。"
   },
@@ -1412,27 +1517,6 @@
   "core/audits/server-response-time.js | title": {
     "message": "初始服务器响应用时较短"
   },
-  "core/audits/service-worker.js | description": {
-    "message": "Service Worker 是一项技术,可让您的应用使用很多渐进式 Web 应用功能,例如离线、添加到主屏幕和推送通知。[详细了解 Service Worker](https://developer.chrome.com/docs/lighthouse/pwa/service-worker/)。"
-  },
-  "core/audits/service-worker.js | explanationBadManifest": {
-    "message": "此网页由 Service Worker 控制,但由于清单未能解析为有效的 JSON,因此未找到 `start_url`"
-  },
-  "core/audits/service-worker.js | explanationBadStartUrl": {
-    "message": "此网页由 Service Worker 控制,但 `start_url` ({startUrl}) 不在 Service Worker 的控制范围内 ({scopeUrl})"
-  },
-  "core/audits/service-worker.js | explanationNoManifest": {
-    "message": "此网页由 Service Worker 控制,但由于未提取任何清单,因此未找到 `start_url`。"
-  },
-  "core/audits/service-worker.js | explanationOutOfScope": {
-    "message": "此来源有一个或多个 Service Worker,但网页 ({pageUrl}) 不在控制范围内。"
-  },
-  "core/audits/service-worker.js | failureTitle": {
-    "message": "无法注册用于控制网页和 `start_url` 的 Service Worker"
-  },
-  "core/audits/service-worker.js | title": {
-    "message": "注册用于控制网页和 `start_url` 的 Service Worker"
-  },
   "core/audits/splash-screen.js | description": {
     "message": "选定主题的启动画面可确保用户在从主屏幕中启动您的应用时获得优质体验。[详细了解启动画面](https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/)。"
   },
@@ -1623,7 +1707,7 @@
     "message": "最佳做法"
   },
   "core/config/default-config.js | a11yCategoryDescription": {
-    "message": "这些检查会突出显示可[改进您网络应用的无障碍功能](https://developer.chrome.com/docs/lighthouse/accessibility/)的提示。系统只能自动检测到一小部分无障碍功能问题,因此您最好也手动测试一下。"
+    "message": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/how-to-review/) is also encouraged."
   },
   "core/config/default-config.js | a11yCategoryManualDescription": {
     "message": "这些条目旨在检查自动化测试工具未涵盖的方面。如需了解详情,请参阅有关如何[执行无障碍功能审查](https://web.dev/how-to-review/)的指南。"
@@ -2769,7 +2853,7 @@
     "message": "安装可延迟加载图片的 [Drupal 模块](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A67&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=%22lazy+load%22&solrsort=iss_project_release_usage+desc&op=Search)。此类模块能够推迟加载所有的屏幕外图片,进而提高性能。"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | render-blocking-resources": {
-    "message": "建议您使用模块来内嵌重要的 CSS 和 JavaScipt,或通过 JavaScript(例如[高级 CSS/JS 聚合](https://www.drupal.org/project/advagg)模块)异步加载资源。请注意,此模块执行的优化可能会导致您的网站无法正常运行,因此您可能需要更改代码。"
+    "message": "Consider using a module to inline critical CSS and JavaScript, and use the defer attribute for non-critical CSS or JavaScript."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | server-response-time": {
     "message": "主题背景、模块和服务器规格都会影响服务器响应用时。建议您查找更优化的主题背景、仔细选择优化模块并/或升级您的服务器。您的托管服务器应该使用 PHP 运算码缓存、内存缓存(例如 Redis 或 Memcached)来缩短数据库查询时间,并优化应用逻辑以加快网页准备速度。"
@@ -2778,10 +2862,10 @@
     "message": "建议您使用[自适应图片样式](https://www.drupal.org/docs/8/mobile-guide/responsive-images-in-drupal-8)减小在您网页上加载的图片的大小。如果您使用 Views 在网页上显示多个内容项,请考虑实现分页,以限制给定网页上显示的内容项的数量。"
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-css": {
-    "message": "确保您已在“管理 » 配置 » 开发”页面中启用了“聚合 CSS 文件”。您还可以通过[其他模块](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=css+aggregation&solrsort=iss_project_release_usage+desc&op=Search)配置更高级的聚合选项,以通过串联、缩减和压缩您的 CSS 样式来加快您网站的加载速度。"
+    "message": "Ensure you have enabled \"Aggregate CSS files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unminified-javascript": {
-    "message": "确保您已在“管理 » 配置 » 开发”页面中启用了“聚合 JavaScript 文件”。您还可以通过[其他模块](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A123&f%5B3%5D=&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=javascript+aggregation&solrsort=iss_project_release_usage+desc&op=Search)配置更高级的聚合选项,从而通过串联、缩减和压缩您的 JavaScript 资源加快您网站的加载速度。"
+    "message": "Ensure you have enabled \"Aggregate JavaScript files\" in the \"Administration » Configuration » Development\" page.  Ensure your Drupal site is running at least Drupal 10.1 for improved asset aggregation support."
   },
   "node_modules/lighthouse-stack-packs/packs/drupal.js | unused-css-rules": {
     "message": "建议您移除未使用的 CSS 规则,仅将所需的 Drupal 库附加到相关网页或网页中的组件。如需了解详情,请访问 [Drupal 文档链接](https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8-module#library)。若想找出会添加无关 CSS 的附加库,请尝试在 Chrome 开发者工具中运行[代码覆盖率](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage)测试。在 Drupal 网站中停用 CSS 聚合后,您可根据样式表网址找出导致问题的主题背景/模块。请留意列表中哪些主题背景/模块有大量样式表的代码覆盖率偏红。主题背景/模块应该只将网页中确实用到的样式表加入队列。"
@@ -2981,6 +3065,48 @@
   "node_modules/lighthouse-stack-packs/packs/next.js | uses-text-compression": {
     "message": "请在您的 Next.js 服务器上启用压缩功能。[了解详情](https://nextjs.org/docs/api-reference/next.config.js/compression)。"
   },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | dom-size": {
+    "message": "Contact your account manager to enable [`HTML Lazy Load`](https://support.nitropack.io/hc/en-us/articles/17144942904337). Configuring it will prioritize and optimize your page rendering performance."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | font-display": {
+    "message": "Use the [`Override Font Rendering Behavior`](https://support.nitropack.io/hc/en-us/articles/16547358865041) option in NitroPack to set a desired value for the CSS font-display rule."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | modern-image-formats": {
+    "message": "Use [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/16547237162513) to automatically convert your images to WebP."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | offscreen-images": {
+    "message": "Defer offscreen images by enabling [`Automatic Image Lazy Loading`](https://support.nitropack.io/hc/en-us/articles/12457493524369-NitroPack-Lazy-Loading-Feature-for-Images)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | render-blocking-resources": {
+    "message": "Enable [`Remove render-blocking resources`](https://support.nitropack.io/hc/en-us/articles/13820893500049-How-to-Deal-with-Render-Blocking-Resources-in-NitroPack) in NitroPack for faster initial load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | server-response-time": {
+    "message": "Improve server response time and optimize perceived performance by activating [`Instant Load`](https://support.nitropack.io/hc/en-us/articles/16547340617361)."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-css": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your CSS, HTML, and JavaScript files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unminified-javascript": {
+    "message": "Enable [`Minify resources`](https://support.nitropack.io/hc/en-us/articles/360061059394-Minify-Resources) in your Caching settings to reduce the size of your JS, HTML, and CSS files for faster load times."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-css-rules": {
+    "message": "Enable [`Reduce Unused CSS`](https://support.nitropack.io/hc/en-us/articles/360020418457-Reduce-Unused-CSS) to remove CSS rules that are not applicable to this page."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | unused-javascript": {
+    "message": "Configure [`Delayed Scripts`](https://support.nitropack.io/hc/en-us/articles/1500002600942-Delayed-Scripts) in NitroPack to delay loading of scripts until they are needed."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-long-cache-ttl": {
+    "message": "Go to the [`Improve Server Response Time`](https://support.nitropack.io/hc/en-us/articles/1500002321821-Improve-Server-Response-Time) feature in the `Caching` menu and adjust your page cache expiration time to improve loading times and user experience."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-optimized-images": {
+    "message": "Automatically compress, optimize, and convert your images into WebP by enabling the [`Image Optimization`](https://support.nitropack.io/hc/en-us/articles/14177271695121-How-to-serve-images-in-next-gen-formats-using-NitroPack) setting."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-responsive-images": {
+    "message": "Enable [`Adaptive Image Sizing`](https://support.nitropack.io/hc/en-us/articles/10123833029905-How-to-Enable-Adaptive-Image-Sizing-For-Your-Site) to preemptively optimize your images and make them match the dimensions of the containers they’re displayed in across all devices."
+  },
+  "node_modules/lighthouse-stack-packs/packs/nitropack.js | uses-text-compression": {
+    "message": "Use [`Gzip compression`](https://support.nitropack.io/hc/en-us/articles/13229297479313-Enabling-GZIP-compression) in NitroPack to reduce the size of the files that are sent to the browser."
+  },
   "node_modules/lighthouse-stack-packs/packs/nuxt.js | modern-image-formats": {
     "message": "请使用 `nuxt/image` 组件并采用如下设置:`format=\"webp\"`。[了解详情](https://image.nuxtjs.org/components/nuxt-img#format)。"
   },
@@ -3062,6 +3188,21 @@
   "node_modules/lighthouse-stack-packs/packs/react.js | user-timings": {
     "message": "使用 React DevTools Profiler,从而利用 Profiler API 来衡量组件的呈现性能。[了解详情](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html)。"
   },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | efficient-animated-content": {
+    "message": "请将视频放置在 `VideoBoxes` 内,使用`Video Masks`自定义视频,或者添加`Transparent Videos`。[了解详情](https://support.wix.com/en/article/wix-video-about-wix-video)。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | modern-image-formats": {
+    "message": "请使用 `Wix Media Manager` 上传图片,以确保网站能自动以 WebP 格式加载图片。了解网站媒体资源的[更多优化方法](https://support.wix.com/en/article/site-performance-optimizing-your-media)。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | render-blocking-resources": {
+    "message": "在网站信息中心的“`Custom Code`”标签页中[添加第三方代码](https://support.wix.com/en/article/site-performance-using-third-party-code-on-your-site)时,请确保推迟加载或在代码正文的末尾加载该第三方代码。请尽可能使用 Wix 的[集成](https://support.wix.com/en/article/about-marketing-integrations)功能将营销工具嵌入到您的网站中。 "
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | server-response-time": {
+    "message": "Wix 利用 CDN 和缓存,为大多数访问者提供尽可能快速的响应。请考虑为网站[手动启用缓存](https://support.wix.com/en/article/site-performance-caching-pages-to-optimize-loading-speed),尤其是在使用 `Velo` 的情况下。"
+  },
+  "node_modules/lighthouse-stack-packs/packs/wix.js | unused-javascript": {
+    "message": "请在网站信息中心的“`Custom Code`”标签页中查看您已向网站添加的所有第三方代码,并且仅保留对网站必要的服务。[了解详情](https://support.wix.com/en/article/site-performance-removing-unused-javascript)。"
+  },
   "node_modules/lighthouse-stack-packs/packs/wordpress.js | efficient-animated-content": {
     "message": "建议您将 GIF 上传到可让其作为 HTML5 视频嵌入的服务。"
   },
@@ -3167,6 +3308,9 @@
   "report/renderer/report-utils.js | dropdownSaveJSON": {
     "message": "另存为 JSON"
   },
+  "report/renderer/report-utils.js | dropdownViewUnthrottledTrace": {
+    "message": "View Unthrottled Trace"
+  },
   "report/renderer/report-utils.js | dropdownViewer": {
     "message": "在查看器中打开"
   },
@@ -3287,9 +3431,6 @@
   "report/renderer/report-utils.js | varianceDisclaimer": {
     "message": "这些都是估算值,且可能会因时而异。系统会直接基于这些指标来[计算性能得分](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/)。"
   },
-  "report/renderer/report-utils.js | viewOriginalTraceLabel": {
-    "message": "查看原始跟踪记录"
-  },
   "report/renderer/report-utils.js | viewTraceLabel": {
     "message": "查看跟踪记录"
   },
diff --git a/front_end/third_party/lighthouse/report-assets/report-generator.mjs b/front_end/third_party/lighthouse/report-assets/report-generator.mjs
index 4edd79e..541cb29 100644
--- a/front_end/third_party/lighthouse/report-assets/report-generator.mjs
+++ b/front_end/third_party/lighthouse/report-assets/report-generator.mjs
@@ -1,39 +1,95 @@
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('fs'), require('module'), require('url'), require('path')) :
-  typeof define === 'function' && define.amd ? define(['exports', 'fs', 'module', 'url', 'path'], factory) :
-  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.Lighthouse = global.Lighthouse || {}, global.Lighthouse.ReportGenerator = {})));
-}(this, (function (exports) { 'use strict';
+(function(root, factory) {
+  if (typeof define === "function" && define.amd) {
+    define(factory);
+  } else if (typeof module === "object" && module.exports) {
+    module.exports = factory();
+  } else {
+    root.Lighthouse = root.Lighthouse || {}
+    root.Lighthouse.ReportGenerator = factory();
+    root.Lighthouse.ReportGenerator.ReportGenerator = root.Lighthouse.ReportGenerator;
+  }
+}(typeof self !== "undefined" ? self : this, function() {
+  "use strict";
+  var umdExports = (() => {
+  var __defProp = Object.defineProperty;
+  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+  var __getOwnPropNames = Object.getOwnPropertyNames;
+  var __hasOwnProp = Object.prototype.hasOwnProperty;
+  var __export = (target, all) => {
+    for (var name in all)
+      __defProp(target, name, { get: all[name], enumerable: true });
+  };
+  var __copyProps = (to, from, except, desc) => {
+    if (from && typeof from === "object" || typeof from === "function") {
+      for (let key of __getOwnPropNames(from))
+        if (!__hasOwnProp.call(to, key) && key !== except)
+          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+    }
+    return to;
+  };
+  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
 
-  const flowReportAssets = {};
+  // report/generator/report-generator.js
+  var report_generator_exports = {};
+  __export(report_generator_exports, {
+    ReportGenerator: () => ReportGenerator
+  });
 
-  /**
-   * @license Copyright 2018 The Lighthouse Authors. All Rights Reserved.
-   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-   */
+  // replace-modules:/Users/asraine/lighthouse/report/generator/flow-report-assets.js
+  var flowReportAssets = {};
 
-  const REPORT_TEMPLATE = "<!--\n@license\nCopyright 2018 The Lighthouse Authors. All Rights Reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS-IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, minimum-scale=1\">\n  <link rel=\"icon\" href='data:image/svg+xml;utf8,<svg fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><path d=\"m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z\" fill=\"%23F63\"/><path d=\"M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z\" fill=\"%23FFA385\"/><path fill=\"%23FF3\" d=\"M20.5 10h7v7h-7z\"/></svg>'>\n  <title>Lighthouse Report</title>\n  <style>body {margin: 0}</style>\n</head>\n<body>\n  <noscript>Lighthouse report requires JavaScript. Please enable.</noscript>\n\n  <div id=\"lh-log\"></div>\n\n  <script>window.__LIGHTHOUSE_JSON__ = %%LIGHTHOUSE_JSON%%;</script>\n  <script>%%LIGHTHOUSE_JAVASCRIPT%%\n  __initLighthouseReport__();\n  //# sourceURL=compiled-reportrenderer.js\n  </script>\n  <script>console.log('window.__LIGHTHOUSE_JSON__', __LIGHTHOUSE_JSON__);</script>\n</body>\n</html>\n";
-  const REPORT_JAVASCRIPT = "!function(){\"use strict\";\n/**\n   * @license\n   * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */const e={PASS:{label:\"pass\",minScore:.9},AVERAGE:{label:\"average\",minScore:.5},FAIL:{label:\"fail\"},ERROR:{label:\"error\"}},t=[\"com\",\"co\",\"gov\",\"edu\",\"ac\",\"org\",\"go\",\"gob\",\"or\",\"net\",\"in\",\"ne\",\"nic\",\"gouv\",\"web\",\"spb\",\"blog\",\"jus\",\"kiev\",\"mil\",\"wi\",\"qc\",\"ca\",\"bel\",\"on\"];class n{static get RATINGS(){return e}static get PASS_THRESHOLD(){return.9}static get MS_DISPLAY_VALUE(){return\"%10d ms\"}static getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error(\"Could not determine final displayed URL\")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}static getFullPageScreenshot(e){return e.fullPageScreenshot?e.fullPageScreenshot:e.audits[\"full-page-screenshot\"]?.details}static splitMarkdownCodeSpans(e){const t=[],n=e.split(/`(.*?)`/g);for(let e=0;e<n.length;e++){const r=n[e];if(!r)continue;const o=e%2!=0;t.push({isCode:o,text:r})}return t}static splitMarkdownLink(e){const t=[],n=e.split(/\\[([^\\]]+?)\\]\\((https?:\\/\\/.*?)\\)/g);for(;n.length;){const[e,r,o]=n.splice(0,3);e&&t.push({isLink:!1,text:e}),r&&o&&t.push({isLink:!0,text:r,linkHref:o})}return t}static truncate(e,t,n=\"…\"){if(e.length<=t)return e;const r=new Intl.Segmenter(void 0,{granularity:\"grapheme\"}).segment(e)[Symbol.iterator]();let o=0;for(let i=0;i<=t-n.length;i++){const t=r.next();if(t.done)return e;o=t.value.index}for(let t=0;t<n.length;t++)if(r.next().done)return e;return e.slice(0,o)+n}static getURLDisplayName(e,t){const n=void 0!==(t=t||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0}).numPathParts?t.numPathParts:2,r=void 0===t.preserveQuery||t.preserveQuery,o=t.preserveHost||!1;let i;if(\"about:\"===e.protocol||\"data:\"===e.protocol)i=e.href;else{i=e.pathname;const t=i.split(\"/\").filter((e=>e.length));n&&t.length>n&&(i=\"…\"+t.slice(-1*n).join(\"/\")),o&&(i=`${e.host}/${i.replace(/^\\//,\"\")}`),r&&(i=`${i}${e.search}`)}if(\"data:\"!==e.protocol&&(i=i.slice(0,200),i=i.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,\"$1…\"),i=i.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,\"$1…\"),i=i.replace(/(\\d{3})\\d{6,}/g,\"$1…\"),i=i.replace(/\\u2026+/g,\"…\"),i.length>64&&i.includes(\"?\")&&(i=i.replace(/\\?([^=]*)(=)?.*/,\"?$1$2…\"),i.length>64&&(i=i.replace(/\\?.*/,\"?…\")))),i.length>64){const e=i.lastIndexOf(\".\");i=e>=0?i.slice(0,63-(i.length-e))+\"…\"+i.slice(e):i.slice(0,63)+\"…\"}return i}static getChromeExtensionOrigin(e){const t=new URL(e);return t.protocol+\"//\"+t.host}static parseURL(e){const t=new URL(e);return{file:n.getURLDisplayName(t),hostname:t.hostname,origin:\"chrome-extension:\"===t.protocol?n.getChromeExtensionOrigin(e):t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){const n=e.split(\".\").slice(-2);return t.includes(n[0])?\".\"+n.join(\".\"):\".\"+n[n.length-1]}static getRootDomain(e){const t=n.createOrReturnURL(e).hostname,r=n.getTld(t).split(\".\");return t.split(\".\").slice(-r.length).join(\".\")}static filterRelevantLines(e,t,n){if(0===t.length)return e.slice(0,2*n+1);const r=new Set;return(t=t.sort(((e,t)=>(e.lineNumber||0)-(t.lineNumber||0)))).forEach((({lineNumber:e})=>{let t=e-n,o=e+n;for(;t<1;)t++,o++;r.has(t-3-1)&&(t-=3);for(let e=t;e<=o;e++){const t=e;r.add(t)}})),e.filter((e=>r.has(e.lineNumber)))\n/**\n   * @license\n   * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */}}class r{constructor(e,t){this._document=e,this._lighthouseChannel=\"unknown\",this._componentCache=new Map,this.rootEl=t}createElement(e,t){const n=this._document.createElement(e);if(t)for(const e of t.split(/\\s+/))e&&n.classList.add(e);return n}createElementNS(e,t,n){const r=this._document.createElementNS(e,t);if(n)for(const e of n.split(/\\s+/))e&&r.classList.add(e);return r}createFragment(){return this._document.createDocumentFragment()}createTextNode(e){return this._document.createTextNode(e)}createChildOf(e,t,n){const r=this.createElement(t,n);return e.append(r),r}createComponent(e){let t=this._componentCache.get(e);if(t){const e=t.cloneNode(!0);return this.findAll(\"style\",e).forEach((e=>e.remove())),e}return t=function(e,t){switch(t){case\"3pFilter\":return function(e){const t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n    .lh-3p-filter {\\n      color: var(--color-gray-600);\\n      float: right;\\n      padding: 6px var(--stackpack-padding-horizontal);\\n    }\\n    .lh-3p-filter-label, .lh-3p-filter-input {\\n      vertical-align: middle;\\n      user-select: none;\\n    }\\n    .lh-3p-filter-input:disabled + .lh-3p-ui-string {\\n      text-decoration: line-through;\\n    }\\n  \"),t.append(n);const r=e.createElement(\"div\",\"lh-3p-filter\"),o=e.createElement(\"label\",\"lh-3p-filter-label\"),i=e.createElement(\"input\",\"lh-3p-filter-input\");i.setAttribute(\"type\",\"checkbox\"),i.setAttribute(\"checked\",\"\");const a=e.createElement(\"span\",\"lh-3p-ui-string\");a.append(\"Show 3rd party resources\");const l=e.createElement(\"span\",\"lh-3p-filter-count\");return o.append(\" \",i,\" \",a,\" (\",l,\") \"),r.append(\" \",o,\" \"),t.append(r),t}(e);case\"audit\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-audit\"),r=e.createElement(\"details\",\"lh-expandable-details\"),o=e.createElement(\"summary\"),i=e.createElement(\"div\",\"lh-audit__header lh-expandable-details__summary\"),a=e.createElement(\"span\",\"lh-audit__score-icon\"),l=e.createElement(\"span\",\"lh-audit__title-and-text\"),s=e.createElement(\"span\",\"lh-audit__title\"),c=e.createElement(\"span\",\"lh-audit__display-text\");l.append(\" \",s,\" \",c,\" \");const d=e.createElement(\"div\",\"lh-chevron-container\");i.append(\" \",a,\" \",l,\" \",d,\" \"),o.append(\" \",i,\" \");const h=e.createElement(\"div\",\"lh-audit__description\"),p=e.createElement(\"div\",\"lh-audit__stackpacks\");return r.append(\" \",o,\" \",h,\" \",p,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"categoryHeader\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-category-header\"),r=e.createElement(\"div\",\"lh-score__gauge\");r.setAttribute(\"role\",\"heading\"),r.setAttribute(\"aria-level\",\"2\");const o=e.createElement(\"div\",\"lh-category-header__description\");return n.append(\" \",r,\" \",o,\" \"),t.append(n),t}(e);case\"chevron\":return function(e){const t=e.createFragment(),n=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\",\"lh-chevron\");n.setAttribute(\"viewBox\",\"0 0 100 100\");const r=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\",\"lh-chevron__lines\"),o=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\",\"lh-chevron__line lh-chevron__line-left\");o.setAttribute(\"d\",\"M10 50h40\");const i=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\",\"lh-chevron__line lh-chevron__line-right\");return i.setAttribute(\"d\",\"M90 50H50\"),r.append(\" \",o,\" \",i,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"clump\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-audit-group\"),r=e.createElement(\"details\",\"lh-clump\"),o=e.createElement(\"summary\"),i=e.createElement(\"div\",\"lh-audit-group__summary\"),a=e.createElement(\"div\",\"lh-audit-group__header\"),l=e.createElement(\"span\",\"lh-audit-group__title\"),s=e.createElement(\"span\",\"lh-audit-group__itemcount\");a.append(\" \",l,\" \",s,\" \",\" \",\" \");const c=e.createElement(\"div\",\"lh-clump-toggle\"),d=e.createElement(\"span\",\"lh-clump-toggletext--show\"),h=e.createElement(\"span\",\"lh-clump-toggletext--hide\");return c.append(\" \",d,\" \",h,\" \"),i.append(\" \",a,\" \",c,\" \"),o.append(\" \",i,\" \"),r.append(\" \",o,\" \"),n.append(\" \",\" \",r,\" \"),t.append(n),t}(e);case\"crc\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-crc-container\"),r=e.createElement(\"style\");r.append('\\n      .lh-crc .lh-tree-marker {\\n        width: 12px;\\n        height: 26px;\\n        display: block;\\n        float: left;\\n        background-position: top left;\\n      }\\n      .lh-crc .lh-horiz-down {\\n        background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"%23D8D8D8\" fill-rule=\"evenodd\"><path d=\"M16 12v2H-2v-2z\"/><path d=\"M9 12v14H7V12z\"/></g></svg>\\');\\n      }\\n      .lh-crc .lh-right {\\n        background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M16 12v2H0v-2z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>\\');\\n      }\\n      .lh-crc .lh-up-right {\\n        background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v14H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>\\');\\n      }\\n      .lh-crc .lh-vert-right {\\n        background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v27H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>\\');\\n      }\\n      .lh-crc .lh-vert {\\n        background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v26H7z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>\\');\\n      }\\n      .lh-crc .lh-crc-tree {\\n        font-size: 14px;\\n        width: 100%;\\n        overflow-x: auto;\\n      }\\n      .lh-crc .lh-crc-node {\\n        height: 26px;\\n        line-height: 26px;\\n        white-space: nowrap;\\n      }\\n      .lh-crc .lh-crc-node__tree-value {\\n        margin-left: 10px;\\n      }\\n      .lh-crc .lh-crc-node__tree-value div {\\n        display: inline;\\n      }\\n      .lh-crc .lh-crc-node__chain-duration {\\n        font-weight: 700;\\n      }\\n      .lh-crc .lh-crc-initial-nav {\\n        color: #595959;\\n        font-style: italic;\\n      }\\n      .lh-crc__summary-value {\\n        margin-bottom: 10px;\\n      }\\n    ');const o=e.createElement(\"div\"),i=e.createElement(\"div\",\"lh-crc__summary-value\"),a=e.createElement(\"span\",\"lh-crc__longest_duration_label\"),l=e.createElement(\"b\",\"lh-crc__longest_duration\");i.append(\" \",a,\" \",l,\" \"),o.append(\" \",i,\" \");const s=e.createElement(\"div\",\"lh-crc\"),c=e.createElement(\"div\",\"lh-crc-initial-nav\");return s.append(\" \",c,\" \",\" \"),n.append(\" \",r,\" \",o,\" \",s,\" \"),t.append(n),t}(e);case\"crcChain\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-crc-node\"),r=e.createElement(\"span\",\"lh-crc-node__tree-marker\"),o=e.createElement(\"span\",\"lh-crc-node__tree-value\");return n.append(\" \",r,\" \",o,\" \"),t.append(n),t}(e);case\"elementScreenshot\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-element-screenshot\"),r=e.createElement(\"div\",\"lh-element-screenshot__content\"),o=e.createElement(\"div\",\"lh-element-screenshot__image\"),i=e.createElement(\"div\",\"lh-element-screenshot__mask\"),a=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");a.setAttribute(\"height\",\"0\"),a.setAttribute(\"width\",\"0\");const l=e.createElementNS(\"http://www.w3.org/2000/svg\",\"defs\"),s=e.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\");s.setAttribute(\"clipPathUnits\",\"objectBoundingBox\"),l.append(\" \",s,\" \",\" \"),a.append(\" \",l,\" \"),i.append(\" \",a,\" \");const c=e.createElement(\"div\",\"lh-element-screenshot__element-marker\");return o.append(\" \",i,\" \",c,\" \"),r.append(\" \",o,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"footer\":return function(e){const t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n    .lh-footer {\\n      padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);\\n      max-width: var(--report-content-max-width);\\n      margin: 0 auto;\\n    }\\n    .lh-footer .lh-generated {\\n      text-align: center;\\n    }\\n  \"),t.append(n);const r=e.createElement(\"footer\",\"lh-footer\"),o=e.createElement(\"ul\",\"lh-meta__items\");o.append(\" \");const i=e.createElement(\"div\",\"lh-generated\"),a=e.createElement(\"b\");a.append(\"Lighthouse\");const l=e.createElement(\"span\",\"lh-footer__version\"),s=e.createElement(\"a\",\"lh-footer__version_issue\");return s.setAttribute(\"href\",\"https://github.com/GoogleChrome/Lighthouse/issues\"),s.setAttribute(\"target\",\"_blank\"),s.setAttribute(\"rel\",\"noopener\"),s.append(\"File an issue\"),i.append(\" \",\" Generated by \",a,\" \",l,\" | \",s,\" \"),r.append(\" \",o,\" \",i,\" \"),t.append(r),t}(e);case\"fraction\":return function(e){const t=e.createFragment(),n=e.createElement(\"a\",\"lh-fraction__wrapper\"),r=e.createElement(\"div\",\"lh-fraction__content-wrapper\"),o=e.createElement(\"div\",\"lh-fraction__content\"),i=e.createElement(\"div\",\"lh-fraction__background\");o.append(\" \",i,\" \"),r.append(\" \",o,\" \");const a=e.createElement(\"div\",\"lh-fraction__label\");return n.append(\" \",r,\" \",a,\" \"),t.append(n),t}(e);case\"gauge\":return function(e){const t=e.createFragment(),n=e.createElement(\"a\",\"lh-gauge__wrapper\"),r=e.createElement(\"div\",\"lh-gauge__svg-wrapper\"),o=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\",\"lh-gauge\");o.setAttribute(\"viewBox\",\"0 0 120 120\");const i=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-gauge-base\");i.setAttribute(\"r\",\"56\"),i.setAttribute(\"cx\",\"60\"),i.setAttribute(\"cy\",\"60\"),i.setAttribute(\"stroke-width\",\"8\");const a=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-gauge-arc\");a.setAttribute(\"r\",\"56\"),a.setAttribute(\"cx\",\"60\"),a.setAttribute(\"cy\",\"60\"),a.setAttribute(\"stroke-width\",\"8\"),o.append(\" \",i,\" \",a,\" \"),r.append(\" \",o,\" \");const l=e.createElement(\"div\",\"lh-gauge__percentage\"),s=e.createElement(\"div\",\"lh-gauge__label\");return n.append(\" \",\" \",r,\" \",l,\" \",\" \",s,\" \"),t.append(n),t}(e);case\"gaugePwa\":return function(e){const t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n    .lh-gauge--pwa .lh-gauge--pwa__component {\\n      display: none;\\n    }\\n    .lh-gauge--pwa__wrapper:not(.lh-badged--all) .lh-gauge--pwa__logo > path {\\n      /* Gray logo unless everything is passing. */\\n      fill: #B0B0B0;\\n    }\\n\\n    .lh-gauge--pwa__disc {\\n      fill: var(--color-gray-200);\\n    }\\n\\n    .lh-gauge--pwa__logo--primary-color {\\n      fill: #304FFE;\\n    }\\n\\n    .lh-gauge--pwa__logo--secondary-color {\\n      fill: #3D3D3D;\\n    }\\n    .lh-dark .lh-gauge--pwa__logo--secondary-color {\\n      fill: #D8B6B6;\\n    }\\n\\n    /* No passing groups. */\\n    .lh-gauge--pwa__wrapper:not([class*='lh-badged--']) .lh-gauge--pwa__na-line {\\n      display: inline;\\n    }\\n    /* Just optimized. Same n/a line as no passing groups. */\\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-optimized:not(.lh-badged--pwa-installable) .lh-gauge--pwa__na-line {\\n      display: inline;\\n    }\\n\\n    /* Just installable. */\\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-installable .lh-gauge--pwa__installable-badge {\\n      display: inline;\\n    }\\n\\n    /* All passing groups. */\\n    .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {\\n      display: inline;\\n    }\\n  \"),t.append(n);const r=e.createElement(\"a\",\"lh-gauge__wrapper lh-gauge--pwa__wrapper\"),o=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\",\"lh-gauge lh-gauge--pwa\");o.setAttribute(\"viewBox\",\"0 0 60 60\");const i=e.createElementNS(\"http://www.w3.org/2000/svg\",\"defs\"),a=e.createElementNS(\"http://www.w3.org/2000/svg\",\"linearGradient\");a.setAttribute(\"id\",\"lh-gauge--pwa__check-circle__gradient\"),a.setAttribute(\"x1\",\"50%\"),a.setAttribute(\"y1\",\"0%\"),a.setAttribute(\"x2\",\"50%\"),a.setAttribute(\"y2\",\"100%\");const l=e.createElementNS(\"http://www.w3.org/2000/svg\",\"stop\");l.setAttribute(\"stop-color\",\"#00C852\"),l.setAttribute(\"offset\",\"0%\");const s=e.createElementNS(\"http://www.w3.org/2000/svg\",\"stop\");s.setAttribute(\"stop-color\",\"#009688\"),s.setAttribute(\"offset\",\"100%\"),a.append(\" \",l,\" \",s,\" \");const c=e.createElementNS(\"http://www.w3.org/2000/svg\",\"linearGradient\");c.setAttribute(\"id\",\"lh-gauge--pwa__installable__shadow-gradient\"),c.setAttribute(\"x1\",\"76.056%\"),c.setAttribute(\"x2\",\"24.111%\"),c.setAttribute(\"y1\",\"82.995%\"),c.setAttribute(\"y2\",\"24.735%\");const d=e.createElementNS(\"http://www.w3.org/2000/svg\",\"stop\");d.setAttribute(\"stop-color\",\"#A5D6A7\"),d.setAttribute(\"offset\",\"0%\");const h=e.createElementNS(\"http://www.w3.org/2000/svg\",\"stop\");h.setAttribute(\"stop-color\",\"#80CBC4\"),h.setAttribute(\"offset\",\"100%\"),c.append(\" \",d,\" \",h,\" \");const p=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\");p.setAttribute(\"id\",\"lh-gauge--pwa__installable-badge\");const u=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\");u.setAttribute(\"fill\",\"#FFFFFF\"),u.setAttribute(\"cx\",\"10\"),u.setAttribute(\"cy\",\"10\"),u.setAttribute(\"r\",\"10\");const g=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");g.setAttribute(\"fill\",\"#009688\"),g.setAttribute(\"d\",\"M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z\"),p.append(\" \",u,\" \",g,\" \"),i.append(\" \",a,\" \",c,\" \",p,\" \");const m=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\");m.setAttribute(\"stroke\",\"none\"),m.setAttribute(\"fill-rule\",\"nonzero\");const f=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-gauge--pwa__disc\");f.setAttribute(\"cx\",\"30\"),f.setAttribute(\"cy\",\"30\"),f.setAttribute(\"r\",\"30\");const v=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\",\"lh-gauge--pwa__logo\"),b=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\",\"lh-gauge--pwa__logo--secondary-color\");b.setAttribute(\"d\",\"M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z\");const _=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\",\"lh-gauge--pwa__logo--primary-color\");_.setAttribute(\"d\",\"M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z\");const w=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\",\"lh-gauge--pwa__logo--secondary-color\");w.setAttribute(\"fill-rule\",\"nonzero\"),w.setAttribute(\"d\",\"M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z\"),v.append(\" \",b,\" \",_,\" \",w,\" \");const y=e.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\",\"lh-gauge--pwa__component lh-gauge--pwa__na-line\");y.setAttribute(\"fill\",\"#FFFFFF\"),y.setAttribute(\"x\",\"20\"),y.setAttribute(\"y\",\"32\"),y.setAttribute(\"width\",\"20\"),y.setAttribute(\"height\",\"4\"),y.setAttribute(\"rx\",\"2\");const x=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\",\"lh-gauge--pwa__component lh-gauge--pwa__installable-badge\");x.setAttribute(\"transform\",\"translate(20, 29)\");const k=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");k.setAttribute(\"fill\",\"url(#lh-gauge--pwa__installable__shadow-gradient)\"),k.setAttribute(\"d\",\"M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z\");const E=e.createElementNS(\"http://www.w3.org/2000/svg\",\"use\");E.setAttribute(\"href\",\"#lh-gauge--pwa__installable-badge\"),x.append(\" \",k,\" \",E,\" \");const A=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\",\"lh-gauge--pwa__component lh-gauge--pwa__check-circle\");A.setAttribute(\"transform\",\"translate(18, 28)\");const S=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\");S.setAttribute(\"fill\",\"#FFFFFF\"),S.setAttribute(\"cx\",\"12\"),S.setAttribute(\"cy\",\"12\"),S.setAttribute(\"r\",\"12\");const z=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");z.setAttribute(\"fill\",\"url(#lh-gauge--pwa__check-circle__gradient)\"),z.setAttribute(\"d\",\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"),A.append(\" \",S,\" \",z,\" \"),m.append(\" \",\" \",f,\" \",v,\" \",\" \",y,\" \",\" \",x,\" \",\" \",A,\" \"),o.append(\" \",i,\" \",m,\" \");const C=e.createElement(\"div\",\"lh-gauge__label\");return r.append(\" \",o,\" \",C,\" \"),t.append(r),t}(e);case\"heading\":return function(e){const t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n    /* CSS Fireworks. Originally by Eddie Lin\\n       https://codepen.io/paulirish/pen/yEVMbP\\n    */\\n    .lh-pyro {\\n      display: none;\\n      z-index: 1;\\n      pointer-events: none;\\n    }\\n    .lh-score100 .lh-pyro {\\n      display: block;\\n    }\\n    .lh-score100 .lh-lighthouse stop:first-child {\\n      stop-color: hsla(200, 12%, 95%, 0);\\n    }\\n    .lh-score100 .lh-lighthouse stop:last-child {\\n      stop-color: hsla(65, 81%, 76%, 1);\\n    }\\n\\n    .lh-pyro > .lh-pyro-before, .lh-pyro > .lh-pyro-after {\\n      position: absolute;\\n      width: 5px;\\n      height: 5px;\\n      border-radius: 2.5px;\\n      box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;\\n      animation: 1s bang ease-out infinite backwards,  1s gravity ease-in infinite backwards,  5s position linear infinite backwards;\\n      animation-delay: 1s, 1s, 1s;\\n    }\\n\\n    .lh-pyro > .lh-pyro-after {\\n      animation-delay: 2.25s, 2.25s, 2.25s;\\n      animation-duration: 1.25s, 1.25s, 6.25s;\\n    }\\n\\n    @keyframes bang {\\n      to {\\n        opacity: 1;\\n        box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;\\n      }\\n    }\\n    @keyframes gravity {\\n      from {\\n        opacity: 1;\\n      }\\n      to {\\n        transform: translateY(80px);\\n        opacity: 0;\\n      }\\n    }\\n    @keyframes position {\\n      0%, 19.9% {\\n        margin-top: 4%;\\n        margin-left: 47%;\\n      }\\n      20%, 39.9% {\\n        margin-top: 7%;\\n        margin-left: 30%;\\n      }\\n      40%, 59.9% {\\n        margin-top: 6%;\\n        margin-left: 70%;\\n      }\\n      60%, 79.9% {\\n        margin-top: 3%;\\n        margin-left: 20%;\\n      }\\n      80%, 99.9% {\\n        margin-top: 3%;\\n        margin-left: 80%;\\n      }\\n    }\\n  \"),t.append(n);const r=e.createElement(\"div\",\"lh-header-container\"),o=e.createElement(\"div\",\"lh-scores-wrapper-placeholder\");return r.append(\" \",o,\" \"),t.append(r),t}(e);case\"metric\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-metric\"),r=e.createElement(\"div\",\"lh-metric__innerwrap\"),o=e.createElement(\"div\",\"lh-metric__icon\"),i=e.createElement(\"span\",\"lh-metric__title\"),a=e.createElement(\"div\",\"lh-metric__value\"),l=e.createElement(\"div\",\"lh-metric__description\");return r.append(\" \",o,\" \",i,\" \",a,\" \",l,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"opportunity\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-audit lh-audit--load-opportunity\"),r=e.createElement(\"details\",\"lh-expandable-details\"),o=e.createElement(\"summary\"),i=e.createElement(\"div\",\"lh-audit__header\"),a=e.createElement(\"div\",\"lh-load-opportunity__cols\"),l=e.createElement(\"div\",\"lh-load-opportunity__col lh-load-opportunity__col--one\"),s=e.createElement(\"span\",\"lh-audit__score-icon\"),c=e.createElement(\"div\",\"lh-audit__title\");l.append(\" \",s,\" \",c,\" \");const d=e.createElement(\"div\",\"lh-load-opportunity__col lh-load-opportunity__col--two\"),h=e.createElement(\"div\",\"lh-load-opportunity__sparkline\"),p=e.createElement(\"div\",\"lh-sparkline\"),u=e.createElement(\"div\",\"lh-sparkline__bar\");p.append(u),h.append(\" \",p,\" \");const g=e.createElement(\"div\",\"lh-audit__display-text\"),m=e.createElement(\"div\",\"lh-chevron-container\");d.append(\" \",h,\" \",g,\" \",m,\" \"),a.append(\" \",l,\" \",d,\" \"),i.append(\" \",a,\" \"),o.append(\" \",i,\" \");const f=e.createElement(\"div\",\"lh-audit__description\"),v=e.createElement(\"div\",\"lh-audit__stackpacks\");return r.append(\" \",o,\" \",f,\" \",v,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"opportunityHeader\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-load-opportunity__header lh-load-opportunity__cols\"),r=e.createElement(\"div\",\"lh-load-opportunity__col lh-load-opportunity__col--one\"),o=e.createElement(\"div\",\"lh-load-opportunity__col lh-load-opportunity__col--two\");return n.append(\" \",r,\" \",o,\" \"),t.append(n),t}(e);case\"scorescale\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-scorescale\"),r=e.createElement(\"span\",\"lh-scorescale-range lh-scorescale-range--fail\");r.append(\"0–49\");const o=e.createElement(\"span\",\"lh-scorescale-range lh-scorescale-range--average\");o.append(\"50–89\");const i=e.createElement(\"span\",\"lh-scorescale-range lh-scorescale-range--pass\");return i.append(\"90–100\"),n.append(\" \",r,\" \",o,\" \",i,\" \"),t.append(n),t}(e);case\"scoresWrapper\":return function(e){const t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n    .lh-scores-container {\\n      display: flex;\\n      flex-direction: column;\\n      padding: var(--default-padding) 0;\\n      position: relative;\\n      width: 100%;\\n    }\\n\\n    .lh-sticky-header {\\n      --gauge-circle-size: var(--gauge-circle-size-sm);\\n      --plugin-badge-size: 16px;\\n      --plugin-icon-size: 75%;\\n      --gauge-wrapper-width: 60px;\\n      --gauge-percentage-font-size: 13px;\\n      position: fixed;\\n      left: 0;\\n      right: 0;\\n      top: var(--topbar-height);\\n      font-weight: 500;\\n      display: none;\\n      justify-content: center;\\n      background-color: var(--sticky-header-background-color);\\n      border-bottom: 1px solid var(--color-gray-200);\\n      padding-top: var(--score-container-padding);\\n      padding-bottom: 4px;\\n      z-index: 1;\\n      pointer-events: none;\\n    }\\n\\n    .lh-devtools .lh-sticky-header {\\n      /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change `position` to `sticky.` */\\n      position: sticky;\\n    }\\n\\n    .lh-sticky-header--visible {\\n      display: grid;\\n      grid-auto-flow: column;\\n      pointer-events: auto;\\n    }\\n\\n    /* Disable the gauge arc animation for the sticky header, so toggling display: none\\n       does not play the animation. */\\n    .lh-sticky-header .lh-gauge-arc {\\n      animation: none;\\n    }\\n\\n    .lh-sticky-header .lh-gauge__label,\\n    .lh-sticky-header .lh-fraction__label {\\n      display: none;\\n    }\\n\\n    .lh-highlighter {\\n      width: var(--gauge-wrapper-width);\\n      height: 1px;\\n      background-color: var(--highlighter-background-color);\\n      /* Position at bottom of first gauge in sticky header. */\\n      position: absolute;\\n      grid-column: 1;\\n      bottom: -1px;\\n    }\\n\\n    .lh-gauge__wrapper:first-of-type {\\n      contain: none;\\n    }\\n  \"),t.append(n);const r=e.createElement(\"div\",\"lh-scores-wrapper\"),o=e.createElement(\"div\",\"lh-scores-container\"),i=e.createElement(\"div\",\"lh-pyro\"),a=e.createElement(\"div\",\"lh-pyro-before\"),l=e.createElement(\"div\",\"lh-pyro-after\");return i.append(\" \",a,\" \",l,\" \"),o.append(\" \",i,\" \"),r.append(\" \",o,\" \"),t.append(r),t}(e);case\"snippet\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-snippet\"),r=e.createElement(\"style\");return r.append('\\n          :root {\\n            --snippet-highlight-light: #fbf1f2;\\n            --snippet-highlight-dark: #ffd6d8;\\n          }\\n\\n         .lh-snippet__header {\\n          position: relative;\\n          overflow: hidden;\\n          padding: 10px;\\n          border-bottom: none;\\n          color: var(--snippet-color);\\n          background-color: var(--snippet-background-color);\\n          border: 1px solid var(--report-border-color-secondary);\\n        }\\n        .lh-snippet__title {\\n          font-weight: bold;\\n          float: left;\\n        }\\n        .lh-snippet__node {\\n          float: left;\\n          margin-left: 4px;\\n        }\\n        .lh-snippet__toggle-expand {\\n          padding: 1px 7px;\\n          margin-top: -1px;\\n          margin-right: -7px;\\n          float: right;\\n          background: transparent;\\n          border: none;\\n          cursor: pointer;\\n          font-size: 14px;\\n          color: #0c50c7;\\n        }\\n\\n        .lh-snippet__snippet {\\n          overflow: auto;\\n          border: 1px solid var(--report-border-color-secondary);\\n        }\\n        /* Container needed so that all children grow to the width of the scroll container */\\n        .lh-snippet__snippet-inner {\\n          display: inline-block;\\n          min-width: 100%;\\n        }\\n\\n        .lh-snippet:not(.lh-snippet--expanded) .lh-snippet__show-if-expanded {\\n          display: none;\\n        }\\n        .lh-snippet.lh-snippet--expanded .lh-snippet__show-if-collapsed {\\n          display: none;\\n        }\\n\\n        .lh-snippet__line {\\n          background: white;\\n          white-space: pre;\\n          display: flex;\\n        }\\n        .lh-snippet__line:not(.lh-snippet__line--message):first-child {\\n          padding-top: 4px;\\n        }\\n        .lh-snippet__line:not(.lh-snippet__line--message):last-child {\\n          padding-bottom: 4px;\\n        }\\n        .lh-snippet__line--content-highlighted {\\n          background: var(--snippet-highlight-dark);\\n        }\\n        .lh-snippet__line--message {\\n          background: var(--snippet-highlight-light);\\n        }\\n        .lh-snippet__line--message .lh-snippet__line-number {\\n          padding-top: 10px;\\n          padding-bottom: 10px;\\n        }\\n        .lh-snippet__line--message code {\\n          padding: 10px;\\n          padding-left: 5px;\\n          color: var(--color-fail);\\n          font-family: var(--report-font-family);\\n        }\\n        .lh-snippet__line--message code {\\n          white-space: normal;\\n        }\\n        .lh-snippet__line-icon {\\n          padding-top: 10px;\\n          display: none;\\n        }\\n        .lh-snippet__line--message .lh-snippet__line-icon {\\n          display: block;\\n        }\\n        .lh-snippet__line-icon:before {\\n          content: \"\";\\n          display: inline-block;\\n          vertical-align: middle;\\n          margin-right: 4px;\\n          width: var(--score-icon-size);\\n          height: var(--score-icon-size);\\n          background-image: var(--fail-icon-url);\\n        }\\n        .lh-snippet__line-number {\\n          flex-shrink: 0;\\n          width: 40px;\\n          text-align: right;\\n          font-family: monospace;\\n          padding-right: 5px;\\n          margin-right: 5px;\\n          color: var(--color-gray-600);\\n          user-select: none;\\n        }\\n    '),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"snippetContent\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-snippet__snippet\"),r=e.createElement(\"div\",\"lh-snippet__snippet-inner\");return n.append(\" \",r,\" \"),t.append(n),t}(e);case\"snippetHeader\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-snippet__header\"),r=e.createElement(\"div\",\"lh-snippet__title\"),o=e.createElement(\"div\",\"lh-snippet__node\"),i=e.createElement(\"button\",\"lh-snippet__toggle-expand\"),a=e.createElement(\"span\",\"lh-snippet__btn-label-collapse lh-snippet__show-if-expanded\"),l=e.createElement(\"span\",\"lh-snippet__btn-label-expand lh-snippet__show-if-collapsed\");return i.append(\" \",a,\" \",l,\" \"),n.append(\" \",r,\" \",o,\" \",i,\" \"),t.append(n),t}(e);case\"snippetLine\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-snippet__line\"),r=e.createElement(\"div\",\"lh-snippet__line-number\"),o=e.createElement(\"div\",\"lh-snippet__line-icon\"),i=e.createElement(\"code\");return n.append(\" \",r,\" \",o,\" \",i,\" \"),t.append(n),t}(e);case\"styles\":return function(e){const t=e.createFragment(),n=e.createElement(\"style\");return n.append('/**\\n * @license\\n * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \"License\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \"AS-IS\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n/*\\n  Naming convention:\\n\\n  If a variable is used for a specific component: --{component}-{property name}-{modifier}\\n\\n  Both {component} and {property name} should be kebab-case. If the target is the entire page,\\n  use \\'report\\' for the component. The property name should not be abbreviated. Use the\\n  property name the variable is intended for - if it\\'s used for multiple, a common descriptor\\n  is fine (ex: \\'size\\' for a variable applied to \\'width\\' and \\'height\\'). If a variable is shared\\n  across multiple components, either create more variables or just drop the \"{component}-\"\\n  part of the name. Append any modifiers at the end (ex: \\'big\\', \\'dark\\').\\n\\n  For colors: --color-{hue}-{intensity}\\n\\n  {intensity} is the Material Design tag - 700, A700, etc.\\n*/\\n.lh-vars {\\n  /* Palette using Material Design Colors\\n   * https://www.materialui.co/colors */\\n  --color-amber-50: #FFF8E1;\\n  --color-blue-200: #90CAF9;\\n  --color-blue-900: #0D47A1;\\n  --color-blue-A700: #2962FF;\\n  --color-blue-primary: #06f;\\n  --color-cyan-500: #00BCD4;\\n  --color-gray-100: #F5F5F5;\\n  --color-gray-300: #CFCFCF;\\n  --color-gray-200: #E0E0E0;\\n  --color-gray-400: #BDBDBD;\\n  --color-gray-50: #FAFAFA;\\n  --color-gray-500: #9E9E9E;\\n  --color-gray-600: #757575;\\n  --color-gray-700: #616161;\\n  --color-gray-800: #424242;\\n  --color-gray-900: #212121;\\n  --color-gray: #000000;\\n  --color-green-700: #080;\\n  --color-green: #0c6;\\n  --color-lime-400: #D3E156;\\n  --color-orange-50: #FFF3E0;\\n  --color-orange-700: #C33300;\\n  --color-orange: #fa3;\\n  --color-red-700: #c00;\\n  --color-red: #f33;\\n  --color-teal-600: #00897B;\\n  --color-white: #FFFFFF;\\n\\n  /* Context-specific colors */\\n  --color-average-secondary: var(--color-orange-700);\\n  --color-average: var(--color-orange);\\n  --color-fail-secondary: var(--color-red-700);\\n  --color-fail: var(--color-red);\\n  --color-hover: var(--color-gray-50);\\n  --color-informative: var(--color-blue-900);\\n  --color-pass-secondary: var(--color-green-700);\\n  --color-pass: var(--color-green);\\n  --color-not-applicable: var(--color-gray-600);\\n\\n  /* Component variables */\\n  --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));\\n  --audit-explanation-line-height: 16px;\\n  --audit-group-margin-bottom: calc(var(--default-padding) * 6);\\n  --audit-group-padding-vertical: 8px;\\n  --audit-margin-horizontal: 5px;\\n  --audit-padding-vertical: 8px;\\n  --category-padding: calc(var(--default-padding) * 6) var(--edge-gap-padding) calc(var(--default-padding) * 4);\\n  --chevron-line-stroke: var(--color-gray-600);\\n  --chevron-size: 12px;\\n  --default-padding: 8px;\\n  --edge-gap-padding: calc(var(--default-padding) * 4);\\n  --env-item-background-color: var(--color-gray-100);\\n  --env-item-font-size: 28px;\\n  --env-item-line-height: 36px;\\n  --env-item-padding: 10px 0px;\\n  --env-name-min-width: 220px;\\n  --footer-padding-vertical: 16px;\\n  --gauge-circle-size-big: 96px;\\n  --gauge-circle-size: 48px;\\n  --gauge-circle-size-sm: 32px;\\n  --gauge-label-font-size-big: 18px;\\n  --gauge-label-font-size: var(--report-font-size-secondary);\\n  --gauge-label-line-height-big: 24px;\\n  --gauge-label-line-height: var(--report-line-height-secondary);\\n  --gauge-percentage-font-size-big: 38px;\\n  --gauge-percentage-font-size: var(--report-font-size-secondary);\\n  --gauge-wrapper-width: 120px;\\n  --header-line-height: 24px;\\n  --highlighter-background-color: var(--report-text-color);\\n  --icon-square-size: calc(var(--score-icon-size) * 0.88);\\n  --image-preview-size: 48px;\\n  --link-color: var(--color-blue-primary);\\n  --locale-selector-background-color: var(--color-white);\\n  --metric-toggle-lines-fill: #7F7F7F;\\n  --metric-value-font-size: calc(var(--report-font-size) * 1.8);\\n  --metrics-toggle-background-color: var(--color-gray-200);\\n  --plugin-badge-background-color: var(--color-white);\\n  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);\\n  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);\\n  --plugin-icon-size: 65%;\\n  --pwa-icon-margin: 0 var(--default-padding);\\n  --pwa-icon-size: var(--topbar-logo-size);\\n  --report-background-color: #fff;\\n  --report-border-color-secondary: #ebebeb;\\n  --report-font-family-monospace: \\'Roboto Mono\\', \\'Menlo\\', \\'dejavu sans mono\\', \\'Consolas\\', \\'Lucida Console\\', monospace;\\n  --report-font-family: Roboto, Helvetica, Arial, sans-serif;\\n  --report-font-size: 14px;\\n  --report-font-size-secondary: 12px;\\n  --report-icon-size: var(--score-icon-background-size);\\n  --report-line-height: 24px;\\n  --report-line-height-secondary: 20px;\\n  --report-monospace-font-size: calc(var(--report-font-size) * 0.85);\\n  --report-text-color-secondary: var(--color-gray-800);\\n  --report-text-color: var(--color-gray-900);\\n  --report-content-max-width: calc(60 * var(--report-font-size)); /* defaults to 840px */\\n  --report-content-min-width: 360px;\\n  --report-content-max-width-minus-edge-gap: calc(var(--report-content-max-width) - var(--edge-gap-padding) * 2);\\n  --score-container-padding: 8px;\\n  --score-icon-background-size: 24px;\\n  --score-icon-margin-left: 6px;\\n  --score-icon-margin-right: 14px;\\n  --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);\\n  --score-icon-size: 12px;\\n  --score-icon-size-big: 16px;\\n  --screenshot-overlay-background: rgba(0, 0, 0, 0.3);\\n  --section-padding-vertical: calc(var(--default-padding) * 6);\\n  --snippet-background-color: var(--color-gray-50);\\n  --snippet-color: #0938C2;\\n  --sparkline-height: 5px;\\n  --stackpack-padding-horizontal: 10px;\\n  --sticky-header-background-color: var(--report-background-color);\\n  --sticky-header-buffer: calc(var(--topbar-height) + var(--sticky-header-height));\\n  --sticky-header-height: calc(var(--gauge-circle-size-sm) + var(--score-container-padding) * 2);\\n  --table-group-header-background-color: #EEF1F4;\\n  --table-group-header-text-color: var(--color-gray-700);\\n  --table-higlight-background-color: #F5F7FA;\\n  --tools-icon-color: var(--color-gray-600);\\n  --topbar-background-color: var(--color-white);\\n  --topbar-height: 32px;\\n  --topbar-logo-size: 24px;\\n  --topbar-padding: 0 8px;\\n  --toplevel-warning-background-color: hsla(30, 100%, 75%, 10%);\\n  --toplevel-warning-message-text-color: var(--color-average-secondary);\\n  --toplevel-warning-padding: 18px;\\n  --toplevel-warning-text-color: var(--report-text-color);\\n\\n  /* SVGs */\\n  --plugin-icon-url-dark: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23FFFFFF\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>\\');\\n  --plugin-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23757575\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>\\');\\n\\n  --pass-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>check</title><path fill=\"%23178239\" d=\"M24 4C12.95 4 4 12.95 4 24c0 11.04 8.95 20 20 20 11.04 0 20-8.96 20-20 0-11.05-8.96-20-20-20zm-4 30L10 24l2.83-2.83L20 28.34l15.17-15.17L38 16 20 34z\"/></svg>\\');\\n  --average-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>info</title><path fill=\"%23E67700\" d=\"M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z\"/></svg>\\');\\n  --fail-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>warn</title><path fill=\"%23C7221F\" d=\"M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z\"/></svg>\\');\\n  --error-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 3 15\"><title>error</title><path d=\"M0 15H 3V 12H 0V\" fill=\"%23FF4E42\"/><path d=\"M0 9H 3V 0H 0V\" fill=\"%23FF4E42\"/></svg>\\');\\n\\n  --pwa-installable-gray-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"nonzero\"><circle fill=\"%23DAE0E3\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>\\');\\n  --pwa-optimized-gray-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%23DAE0E3\" width=\"24\" height=\"24\" rx=\"12\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/><path d=\"M5 5h14v14H5z\"/></g></svg>\\');\\n\\n  --pwa-installable-gray-url-dark: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"nonzero\"><circle fill=\"%23424242\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>\\');\\n  --pwa-optimized-gray-url-dark: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%23424242\" width=\"24\" height=\"24\" rx=\"12\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/><path d=\"M5 5h14v14H5z\"/></g></svg>\\');\\n\\n  --pwa-installable-color-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-rule=\"nonzero\" fill=\"none\"><circle fill=\"%230CCE6B\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>\\');\\n  --pwa-optimized-color-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%230CCE6B\" width=\"24\" height=\"24\" rx=\"12\"/><path d=\"M5 5h14v14H5z\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/></g></svg>\\');\\n\\n  --swap-locale-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z\"/></svg>\\');\\n}\\n\\n@media not print {\\n  .lh-dark {\\n    /* Pallete */\\n    --color-gray-200: var(--color-gray-800);\\n    --color-gray-300: #616161;\\n    --color-gray-400: var(--color-gray-600);\\n    --color-gray-700: var(--color-gray-400);\\n    --color-gray-50: #757575;\\n    --color-gray-600: var(--color-gray-500);\\n    --color-green-700: var(--color-green);\\n    --color-orange-700: var(--color-orange);\\n    --color-red-700: var(--color-red);\\n    --color-teal-600: var(--color-cyan-500);\\n\\n    /* Context-specific colors */\\n    --color-hover: rgba(0, 0, 0, 0.2);\\n    --color-informative: var(--color-blue-200);\\n\\n    /* Component variables */\\n    --env-item-background-color: #393535;\\n    --link-color: var(--color-blue-200);\\n    --locale-selector-background-color: var(--color-gray-200);\\n    --plugin-badge-background-color: var(--color-gray-800);\\n    --report-background-color: var(--color-gray-900);\\n    --report-border-color-secondary: var(--color-gray-200);\\n    --report-text-color-secondary: var(--color-gray-400);\\n    --report-text-color: var(--color-gray-100);\\n    --snippet-color: var(--color-cyan-500);\\n    --topbar-background-color: var(--color-gray);\\n    --toplevel-warning-background-color: hsl(33deg 14% 18%);\\n    --toplevel-warning-message-text-color: var(--color-orange-700);\\n    --toplevel-warning-text-color: var(--color-gray-100);\\n    --table-group-header-background-color: rgba(186, 196, 206, 0.15);\\n    --table-group-header-text-color: var(--color-gray-100);\\n    --table-higlight-background-color: rgba(186, 196, 206, 0.09);\\n\\n    /* SVGs */\\n    --plugin-icon-url: var(--plugin-icon-url-dark);\\n    --pwa-installable-gray-url: var(--pwa-installable-gray-url-dark);\\n    --pwa-optimized-gray-url: var(--pwa-optimized-gray-url-dark);\\n  }\\n}\\n\\n@media only screen and (max-width: 480px) {\\n  .lh-vars {\\n    --audit-group-margin-bottom: 20px;\\n    --edge-gap-padding: var(--default-padding);\\n    --env-name-min-width: 120px;\\n    --gauge-circle-size-big: 96px;\\n    --gauge-circle-size: 72px;\\n    --gauge-label-font-size-big: 22px;\\n    --gauge-label-font-size: 14px;\\n    --gauge-label-line-height-big: 26px;\\n    --gauge-label-line-height: 20px;\\n    --gauge-percentage-font-size-big: 34px;\\n    --gauge-percentage-font-size: 26px;\\n    --gauge-wrapper-width: 112px;\\n    --header-padding: 16px 0 16px 0;\\n    --image-preview-size: 24px;\\n    --plugin-icon-size: 75%;\\n    --pwa-icon-margin: 0 7px 0 -3px;\\n    --report-font-size: 14px;\\n    --report-line-height: 20px;\\n    --score-icon-margin-left: 2px;\\n    --score-icon-size: 10px;\\n    --topbar-height: 28px;\\n    --topbar-logo-size: 20px;\\n  }\\n\\n  /* Not enough space to adequately show the relative savings bars. */\\n  .lh-sparkline {\\n    display: none;\\n  }\\n}\\n\\n.lh-vars.lh-devtools {\\n  --audit-explanation-line-height: 14px;\\n  --audit-group-margin-bottom: 20px;\\n  --audit-group-padding-vertical: 12px;\\n  --audit-padding-vertical: 4px;\\n  --category-padding: 12px;\\n  --default-padding: 12px;\\n  --env-name-min-width: 120px;\\n  --footer-padding-vertical: 8px;\\n  --gauge-circle-size-big: 72px;\\n  --gauge-circle-size: 64px;\\n  --gauge-label-font-size-big: 22px;\\n  --gauge-label-font-size: 14px;\\n  --gauge-label-line-height-big: 26px;\\n  --gauge-label-line-height: 20px;\\n  --gauge-percentage-font-size-big: 34px;\\n  --gauge-percentage-font-size: 26px;\\n  --gauge-wrapper-width: 97px;\\n  --header-line-height: 20px;\\n  --header-padding: 16px 0 16px 0;\\n  --screenshot-overlay-background: transparent;\\n  --plugin-icon-size: 75%;\\n  --pwa-icon-margin: 0 7px 0 -3px;\\n  --report-font-family-monospace: \\'Menlo\\', \\'dejavu sans mono\\', \\'Consolas\\', \\'Lucida Console\\', monospace;\\n  --report-font-family: \\'.SFNSDisplay-Regular\\', \\'Helvetica Neue\\', \\'Lucida Grande\\', sans-serif;\\n  --report-font-size: 12px;\\n  --report-line-height: 20px;\\n  --score-icon-margin-left: 2px;\\n  --score-icon-size: 10px;\\n  --section-padding-vertical: 8px;\\n}\\n\\n.lh-container:not(.lh-topbar + .lh-container) {\\n  --topbar-height: 0;\\n  --sticky-header-height: 0;\\n  --sticky-header-buffer: 0;\\n}\\n\\n.lh-devtools.lh-root {\\n  height: 100%;\\n}\\n.lh-devtools.lh-root img {\\n  /* Override devtools default \\'min-width: 0\\' so svg without size in a flexbox isn\\'t collapsed. */\\n  min-width: auto;\\n}\\n.lh-devtools .lh-container {\\n  overflow-y: scroll;\\n  height: calc(100% - var(--topbar-height));\\n  /** The .lh-container is the scroll parent in DevTools so we exclude the topbar from the sticky header buffer. */\\n  --sticky-header-buffer: calc(var(--sticky-header-height));\\n}\\n@media print {\\n  .lh-devtools .lh-container {\\n    overflow: unset;\\n  }\\n}\\n.lh-devtools .lh-sticky-header {\\n  /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container` */\\n  top: 0;\\n}\\n.lh-devtools .lh-element-screenshot__overlay {\\n  position: absolute;\\n}\\n\\n@keyframes fadeIn {\\n  0% { opacity: 0;}\\n  100% { opacity: 0.6;}\\n}\\n\\n.lh-root *, .lh-root *::before, .lh-root *::after {\\n  box-sizing: border-box;\\n}\\n\\n.lh-root {\\n  font-family: var(--report-font-family);\\n  font-size: var(--report-font-size);\\n  margin: 0;\\n  line-height: var(--report-line-height);\\n  background: var(--report-background-color);\\n  color: var(--report-text-color);\\n}\\n\\n.lh-root :focus-visible {\\n    outline: -webkit-focus-ring-color auto 3px;\\n}\\n.lh-root summary:focus {\\n    outline: none;\\n    box-shadow: 0 0 0 1px hsl(217, 89%, 61%);\\n}\\n\\n.lh-root [hidden] {\\n  display: none !important;\\n}\\n\\n.lh-root pre {\\n  margin: 0;\\n}\\n\\n.lh-root pre,\\n.lh-root code {\\n  font-family: var(--report-font-family-monospace);\\n}\\n\\n.lh-root details > summary {\\n  cursor: pointer;\\n}\\n\\n.lh-hidden {\\n  display: none !important;\\n}\\n\\n.lh-container {\\n  /*\\n  Text wrapping in the report is so much FUN!\\n  We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely\\n  long non-breakable text (usually URLs) found in:\\n    1. The footer\\n    2. .lh-node (outerHTML)\\n    3. .lh-code\\n\\n  With that sorted, the next challenge is appropriate column sizing and text wrapping inside our\\n  .lh-details tables. Even more fun.\\n    * We don\\'t want table headers (\"Potential Savings (ms)\") to wrap or their column values, but\\n    we\\'d be happy for the URL column to wrap if the URLs are particularly long.\\n    * We want the narrow columns to remain narrow, providing the most column width for URL\\n    * We don\\'t want the table to extend past 100% width.\\n    * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters,\\n      but they do not get any overflow:ellipsis treatment.\\n  */\\n  word-break: break-word;\\n}\\n\\n.lh-audit-group a,\\n.lh-category-header__description a,\\n.lh-audit__description a,\\n.lh-warnings a,\\n.lh-footer a,\\n.lh-table-column--link a {\\n  color: var(--link-color);\\n}\\n\\n.lh-audit__description, .lh-audit__stackpack {\\n  --inner-audit-padding-right: var(--stackpack-padding-horizontal);\\n  padding-left: var(--audit-description-padding-left);\\n  padding-right: var(--inner-audit-padding-right);\\n  padding-top: 8px;\\n  padding-bottom: 8px;\\n}\\n\\n.lh-details {\\n  margin-top: var(--default-padding);\\n  margin-bottom: var(--default-padding);\\n  margin-left: var(--audit-description-padding-left);\\n  /* whatever the .lh-details side margins are */\\n  width: 100%;\\n}\\n\\n.lh-audit__stackpack {\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.lh-audit__stackpack__img {\\n  max-width: 30px;\\n  margin-right: var(--default-padding)\\n}\\n\\n/* Report header */\\n\\n.lh-report-icon {\\n  display: flex;\\n  align-items: center;\\n  padding: 10px 12px;\\n  cursor: pointer;\\n}\\n.lh-report-icon[disabled] {\\n  opacity: 0.3;\\n  pointer-events: none;\\n}\\n\\n.lh-report-icon::before {\\n  content: \"\";\\n  margin: 4px;\\n  background-repeat: no-repeat;\\n  width: var(--report-icon-size);\\n  height: var(--report-icon-size);\\n  opacity: 0.7;\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n.lh-report-icon:hover::before {\\n  opacity: 1;\\n}\\n.lh-dark .lh-report-icon::before {\\n  filter: invert(1);\\n}\\n.lh-report-icon--print::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\"/><path fill=\"none\" d=\"M0 0h24v24H0z\"/></svg>\\');\\n}\\n.lh-report-icon--copy::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/></svg>\\');\\n}\\n.lh-report-icon--open::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z\"/></svg>\\');\\n}\\n.lh-report-icon--download::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\\');\\n}\\n.lh-report-icon--dark::before {\\n  background-image:url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 100 125\"><path d=\"M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z\"/></svg>\\');\\n}\\n.lh-report-icon--treemap::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"black\"><path d=\"M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z\"/></svg>\\');\\n}\\n.lh-report-icon--date::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 11h2v2H7v-2zm14-5v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h1V2h2v2h8V2h2v2h1a2 2 0 012 2zM5 8h14V6H5v2zm14 12V10H5v10h14zm-4-7h2v-2h-2v2zm-4 0h2v-2h-2v2z\"/></svg>\\');\\n}\\n.lh-report-icon--devices::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 6h18V4H4a2 2 0 00-2 2v11H0v3h14v-3H4V6zm19 2h-6a1 1 0 00-1 1v10c0 .6.5 1 1 1h6c.6 0 1-.5 1-1V9c0-.6-.5-1-1-1zm-1 9h-4v-7h4v7z\"/></svg>\\');\\n}\\n.lh-report-icon--world::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm7 6h-3c-.3-1.3-.8-2.5-1.4-3.6A8 8 0 0 1 18.9 8zm-7-4a14 14 0 0 1 2 4h-4a14 14 0 0 1 2-4zM4.3 14a8.2 8.2 0 0 1 0-4h3.3a16.5 16.5 0 0 0 0 4H4.3zm.8 2h3a14 14 0 0 0 1.3 3.6A8 8 0 0 1 5.1 16zm3-8H5a8 8 0 0 1 4.3-3.6L8 8zM12 20a14 14 0 0 1-2-4h4a14 14 0 0 1-2 4zm2.3-6H9.7a14.7 14.7 0 0 1 0-4h4.6a14.6 14.6 0 0 1 0 4zm.3 5.6c.6-1.2 1-2.4 1.4-3.6h3a8 8 0 0 1-4.4 3.6zm1.8-5.6a16.5 16.5 0 0 0 0-4h3.3a8.2 8.2 0 0 1 0 4h-3.3z\"/></svg>\\');\\n}\\n.lh-report-icon--stopwatch::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.1-6.6L20.5 6l-1.4-1.4L17.7 6A9 9 0 0 0 3 13a9 9 0 1 0 16-5.6zm-7 12.6a7 7 0 1 1 0-14 7 7 0 0 1 0 14z\"/></svg>\\');\\n}\\n.lh-report-icon--networkspeed::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.9 5c-.2 0-.3 0-.4.2v.2L10.1 17a2 2 0 0 0-.2 1 2 2 0 0 0 4 .4l2.4-12.9c0-.3-.2-.5-.5-.5zM1 9l2 2c2.9-2.9 6.8-4 10.5-3.6l1.2-2.7C10 3.8 4.7 5.3 1 9zm20 2 2-2a15.4 15.4 0 0 0-5.6-3.6L17 8.2c1.5.7 2.9 1.6 4.1 2.8zm-4 4 2-2a9.9 9.9 0 0 0-2.7-1.9l-.5 3 1.2.9zM5 13l2 2a7.1 7.1 0 0 1 4-2l1.3-2.9C9.7 10.1 7 11 5 13z\"/></svg>\\');\\n}\\n.lh-report-icon--samples-one::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><circle cx=\"7\" cy=\"14\" r=\"3\"/><path d=\"M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/></svg>\\');\\n}\\n.lh-report-icon--samples-many::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/><circle cx=\"7\" cy=\"14\" r=\"3\"/><circle cx=\"11\" cy=\"6\" r=\"3\"/></svg>\\');\\n}\\n.lh-report-icon--chrome::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-50 -50 562 562\"><path d=\"M256 25.6v25.6a204 204 0 0 1 144.8 60 204 204 0 0 1 60 144.8 204 204 0 0 1-60 144.8 204 204 0 0 1-144.8 60 204 204 0 0 1-144.8-60 204 204 0 0 1-60-144.8 204 204 0 0 1 60-144.8 204 204 0 0 1 144.8-60V0a256 256 0 1 0 0 512 256 256 0 0 0 0-512v25.6z\"/><path d=\"M256 179.2v25.6a51.3 51.3 0 0 1 0 102.4 51.3 51.3 0 0 1 0-102.4v-51.2a102.3 102.3 0 1 0-.1 204.7 102.3 102.3 0 0 0 .1-204.7v25.6z\"/><path d=\"M256 204.8h217.6a25.6 25.6 0 0 0 0-51.2H256a25.6 25.6 0 0 0 0 51.2m44.3 76.8L191.5 470.1a25.6 25.6 0 1 0 44.4 25.6l108.8-188.5a25.6 25.6 0 1 0-44.4-25.6m-88.6 0L102.9 93.2a25.7 25.7 0 0 0-35-9.4 25.7 25.7 0 0 0-9.4 35l108.8 188.5a25.7 25.7 0 0 0 35 9.4 25.9 25.9 0 0 0 9.4-35.1\"/></svg>\\');\\n}\\n.lh-report-icon--external::before {\\n  background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.15 11.9a1.01 1.01 0 0 1-.743-.307 1.01 1.01 0 0 1-.306-.743v-7.7c0-.292.102-.54.306-.744a1.01 1.01 0 0 1 .744-.306H7v1.05H3.15v7.7h7.7V7h1.05v3.85c0 .291-.103.54-.307.743a1.01 1.01 0 0 1-.743.307h-7.7Zm2.494-2.8-.743-.744 5.206-5.206H8.401V2.1h3.5v3.5h-1.05V3.893L5.644 9.1Z\"/></svg>\\');\\n}\\n\\n.lh-buttons {\\n  display: flex;\\n  flex-wrap: wrap;\\n  margin: var(--default-padding) 0;\\n}\\n.lh-button {\\n  height: 32px;\\n  border: 1px solid var(--report-border-color-secondary);\\n  border-radius: 3px;\\n  color: var(--link-color);\\n  background-color: var(--report-background-color);\\n  margin: 5px;\\n}\\n\\n.lh-button:first-of-type {\\n  margin-left: 0;\\n}\\n\\n/* Node */\\n.lh-node__snippet {\\n  font-family: var(--report-font-family-monospace);\\n  color: var(--snippet-color);\\n  font-size: var(--report-monospace-font-size);\\n  line-height: 20px;\\n}\\n\\n/* Score */\\n\\n.lh-audit__score-icon {\\n  width: var(--score-icon-size);\\n  height: var(--score-icon-size);\\n  margin: var(--score-icon-margin);\\n}\\n\\n.lh-audit--pass .lh-audit__display-text {\\n  color: var(--color-pass-secondary);\\n}\\n.lh-audit--pass .lh-audit__score-icon,\\n.lh-scorescale-range--pass::before {\\n  border-radius: 100%;\\n  background: var(--color-pass);\\n}\\n\\n.lh-audit--average .lh-audit__display-text {\\n  color: var(--color-average-secondary);\\n}\\n.lh-audit--average .lh-audit__score-icon,\\n.lh-scorescale-range--average::before {\\n  background: var(--color-average);\\n  width: var(--icon-square-size);\\n  height: var(--icon-square-size);\\n}\\n\\n.lh-audit--fail .lh-audit__display-text {\\n  color: var(--color-fail-secondary);\\n}\\n.lh-audit--fail .lh-audit__score-icon,\\n.lh-audit--error .lh-audit__score-icon,\\n.lh-scorescale-range--fail::before {\\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n\\n.lh-audit--error .lh-audit__score-icon,\\n.lh-metric--error .lh-metric__icon {\\n  background-image: var(--error-icon-url);\\n  background-repeat: no-repeat;\\n  background-position: center;\\n  border: none;\\n}\\n\\n.lh-gauge__wrapper--fail .lh-gauge--error {\\n  background-image: var(--error-icon-url);\\n  background-repeat: no-repeat;\\n  background-position: center;\\n  transform: scale(0.5);\\n  top: var(--score-container-padding);\\n}\\n\\n.lh-audit--manual .lh-audit__display-text,\\n.lh-audit--notapplicable .lh-audit__display-text {\\n  color: var(--color-gray-600);\\n}\\n.lh-audit--manual .lh-audit__score-icon,\\n.lh-audit--notapplicable .lh-audit__score-icon {\\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\\n  border-radius: 100%;\\n  background: none;\\n}\\n\\n.lh-audit--informative .lh-audit__display-text {\\n  color: var(--color-gray-600);\\n}\\n\\n.lh-audit--informative .lh-audit__score-icon {\\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\\n  border-radius: 100%;\\n}\\n\\n.lh-audit__description,\\n.lh-audit__stackpack {\\n  color: var(--report-text-color-secondary);\\n}\\n.lh-audit__adorn {\\n  border: 1px solid var(--color-gray-500);\\n  border-radius: 3px;\\n  margin: 0 3px;\\n  padding: 0 2px;\\n  line-height: 1.1;\\n  display: inline-block;\\n  font-size: 90%;\\n  color: var(--report-text-color-secondary);\\n}\\n\\n.lh-category-header__description  {\\n  text-align: center;\\n  color: var(--color-gray-700);\\n  margin: 0px auto;\\n  max-width: 400px;\\n}\\n\\n\\n.lh-audit__display-text,\\n.lh-load-opportunity__sparkline,\\n.lh-chevron-container {\\n  margin: 0 var(--audit-margin-horizontal);\\n}\\n.lh-chevron-container {\\n  margin-right: 0;\\n}\\n\\n.lh-audit__title-and-text {\\n  flex: 1;\\n}\\n\\n.lh-audit__title-and-text code {\\n  color: var(--snippet-color);\\n  font-size: var(--report-monospace-font-size);\\n}\\n\\n/* Prepend display text with em dash separator. But not in Opportunities. */\\n.lh-audit__display-text:not(:empty):before {\\n  content: \\'—\\';\\n  margin-right: var(--audit-margin-horizontal);\\n}\\n.lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before {\\n  display: none;\\n}\\n\\n/* Expandable Details (Audit Groups, Audits) */\\n.lh-audit__header {\\n  display: flex;\\n  align-items: center;\\n  padding: var(--default-padding);\\n}\\n\\n.lh-audit--load-opportunity .lh-audit__header {\\n  display: block;\\n}\\n\\n\\n.lh-metricfilter {\\n  display: grid;\\n  justify-content: end;\\n  align-items: center;\\n  grid-auto-flow: column;\\n  gap: 4px;\\n  color: var(--color-gray-700);\\n}\\n\\n.lh-metricfilter__radio {\\n  /*\\n   * Instead of hiding, position offscreen so it\\'s still accessible to screen readers\\n   * https://bugs.chromium.org/p/chromium/issues/detail?id=1439785\\n   */\\n  position: fixed;\\n  left: -9999px;\\n}\\n.lh-metricfilter input[type=\\'radio\\']:focus-visible + label {\\n  outline: -webkit-focus-ring-color auto 1px;\\n}\\n\\n.lh-metricfilter__label {\\n  display: inline-flex;\\n  padding: 0 4px;\\n  height: 16px;\\n  text-decoration: underline;\\n  align-items: center;\\n  cursor: pointer;\\n  font-size: 90%;\\n}\\n\\n.lh-metricfilter__label--active {\\n  background: var(--color-blue-primary);\\n  color: var(--color-white);\\n  border-radius: 3px;\\n  text-decoration: none;\\n}\\n/* Give the \\'All\\' choice a more muted display */\\n.lh-metricfilter__label--active[for=\"metric-All\"] {\\n  background-color: var(--color-blue-200) !important;\\n  color: black !important;\\n}\\n\\n.lh-metricfilter__text {\\n  margin-right: 8px;\\n}\\n\\n/* If audits are filtered, hide the itemcount for Passed Audits… */\\n.lh-category--filtered .lh-audit-group .lh-audit-group__itemcount {\\n  display: none;\\n}\\n\\n\\n.lh-audit__header:hover {\\n  background-color: var(--color-hover);\\n}\\n\\n/* We want to hide the browser\\'s default arrow marker on summary elements. Admittedly, it\\'s complicated. */\\n.lh-root details > summary {\\n  /* Blink 89+ and Firefox will hide the arrow when display is changed from (new) default of `list-item` to block.  https://chromestatus.com/feature/6730096436051968*/\\n  display: block;\\n}\\n/* Safari and Blink <=88 require using the -webkit-details-marker selector */\\n.lh-root details > summary::-webkit-details-marker {\\n  display: none;\\n}\\n\\n/* Perf Metric */\\n\\n.lh-metrics-container {\\n  display: grid;\\n  grid-auto-rows: 1fr;\\n  grid-template-columns: 1fr 1fr;\\n  grid-column-gap: var(--report-line-height);\\n  margin-bottom: var(--default-padding);\\n}\\n\\n.lh-metric {\\n  border-top: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(-n+2) {\\n  border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-metric__innerwrap {\\n  display: grid;\\n  /**\\n   * Icon -- Metric Name\\n   *      -- Metric Value\\n   */\\n  grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 1fr;\\n  align-items: center;\\n  padding: var(--default-padding);\\n}\\n\\n.lh-metric__details {\\n  order: -1;\\n}\\n\\n.lh-metric__title {\\n  flex: 1;\\n}\\n\\n.lh-calclink {\\n  padding-left: calc(1ex / 3);\\n}\\n\\n.lh-metric__description {\\n  display: none;\\n  grid-column-start: 2;\\n  grid-column-end: 4;\\n  color: var(--report-text-color-secondary);\\n}\\n\\n.lh-metric__value {\\n  font-size: var(--metric-value-font-size);\\n  margin: calc(var(--default-padding) / 2) 0;\\n  white-space: nowrap; /* No wrapping between metric value and the icon */\\n  grid-column-start: 2;\\n}\\n\\n\\n@media screen and (max-width: 535px) {\\n  .lh-metrics-container {\\n    display: block;\\n  }\\n\\n  .lh-metric {\\n    border-bottom: none !important;\\n  }\\n  .lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(1) {\\n    border-bottom: 1px solid var(--report-border-color-secondary) !important;\\n  }\\n\\n  /* Change the grid to 3 columns for narrow viewport. */\\n  .lh-metric__innerwrap {\\n  /**\\n   * Icon -- Metric Name -- Metric Value\\n   */\\n    grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;\\n  }\\n  .lh-metric__value {\\n    justify-self: end;\\n    grid-column-start: unset;\\n  }\\n}\\n\\n/* No-JS toggle switch */\\n/* Keep this selector sync\\'d w/ `magicSelector` in report-ui-features-test.js */\\n .lh-metrics-toggle__input:checked ~ .lh-metrics-container .lh-metric__description {\\n  display: block;\\n}\\n\\n/* TODO get rid of the SVGS and clean up these some more */\\n.lh-metrics-toggle__input {\\n  opacity: 0;\\n  position: absolute;\\n  right: 0;\\n  top: 0px;\\n}\\n\\n.lh-metrics-toggle__input + div > label > .lh-metrics-toggle__labeltext--hide,\\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--show {\\n  display: none;\\n}\\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--hide {\\n  display: inline;\\n}\\n.lh-metrics-toggle__input:focus + div > label {\\n  outline: -webkit-focus-ring-color auto 3px;\\n}\\n\\n.lh-metrics-toggle__label {\\n  cursor: pointer;\\n  font-size: var(--report-font-size-secondary);\\n  line-height: var(--report-line-height-secondary);\\n  color: var(--color-gray-700);\\n}\\n\\n/* Pushes the metric description toggle button to the right. */\\n.lh-audit-group--metrics .lh-audit-group__header {\\n  display: flex;\\n  justify-content: space-between;\\n}\\n\\n.lh-metric__icon,\\n.lh-scorescale-range::before {\\n  content: \\'\\';\\n  width: var(--score-icon-size);\\n  height: var(--score-icon-size);\\n  display: inline-block;\\n  margin: var(--score-icon-margin);\\n}\\n\\n.lh-metric--pass .lh-metric__value {\\n  color: var(--color-pass-secondary);\\n}\\n.lh-metric--pass .lh-metric__icon {\\n  border-radius: 100%;\\n  background: var(--color-pass);\\n}\\n\\n.lh-metric--average .lh-metric__value {\\n  color: var(--color-average-secondary);\\n}\\n.lh-metric--average .lh-metric__icon {\\n  background: var(--color-average);\\n  width: var(--icon-square-size);\\n  height: var(--icon-square-size);\\n}\\n\\n.lh-metric--fail .lh-metric__value {\\n  color: var(--color-fail-secondary);\\n}\\n.lh-metric--fail .lh-metric__icon {\\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n\\n.lh-metric--error .lh-metric__value,\\n.lh-metric--error .lh-metric__description {\\n  color: var(--color-fail-secondary);\\n}\\n\\n/* Perf load opportunity */\\n\\n.lh-load-opportunity__cols {\\n  display: flex;\\n  align-items: flex-start;\\n}\\n\\n.lh-load-opportunity__header .lh-load-opportunity__col {\\n  color: var(--color-gray-600);\\n  display: unset;\\n  line-height: calc(2.3 * var(--report-font-size));\\n}\\n\\n.lh-load-opportunity__col {\\n  display: flex;\\n}\\n\\n.lh-load-opportunity__col--one {\\n  flex: 5;\\n  align-items: center;\\n  margin-right: 2px;\\n}\\n.lh-load-opportunity__col--two {\\n  flex: 4;\\n  text-align: right;\\n}\\n\\n.lh-audit--load-opportunity .lh-audit__display-text {\\n  text-align: right;\\n  flex: 0 0 7.5ch;\\n}\\n\\n\\n/* Sparkline */\\n\\n.lh-load-opportunity__sparkline {\\n  flex: 1;\\n  margin-top: calc((var(--report-line-height) - var(--sparkline-height)) / 2);\\n}\\n\\n.lh-sparkline {\\n  height: var(--sparkline-height);\\n  width: 100%;\\n}\\n\\n.lh-sparkline__bar {\\n  height: 100%;\\n  float: right;\\n}\\n\\n.lh-audit--pass .lh-sparkline__bar {\\n  background: var(--color-pass);\\n}\\n\\n.lh-audit--average .lh-sparkline__bar {\\n  background: var(--color-average);\\n}\\n\\n.lh-audit--fail .lh-sparkline__bar {\\n  background: var(--color-fail);\\n}\\n\\n/* Filmstrip */\\n\\n.lh-filmstrip-container {\\n  /* smaller gap between metrics and filmstrip */\\n  margin: -8px auto 0 auto;\\n}\\n\\n.lh-filmstrip {\\n  display: grid;\\n  justify-content: space-between;\\n  padding-bottom: var(--default-padding);\\n  width: 100%;\\n  grid-template-columns: repeat(auto-fit, 90px);\\n}\\n\\n.lh-filmstrip__frame {\\n  text-align: right;\\n  position: relative;\\n}\\n\\n.lh-filmstrip__thumbnail {\\n  border: 1px solid var(--report-border-color-secondary);\\n  max-height: 150px;\\n  max-width: 120px;\\n}\\n\\n/* Audit */\\n\\n.lh-audit {\\n  border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\n\\n/* Apply border-top to just the first audit. */\\n.lh-audit {\\n  border-top: 1px solid var(--report-border-color-secondary);\\n}\\n.lh-audit ~ .lh-audit {\\n  border-top: none;\\n}\\n\\n\\n.lh-audit--error .lh-audit__display-text {\\n  color: var(--color-fail-secondary);\\n}\\n\\n/* Audit Group */\\n\\n.lh-audit-group {\\n  margin-bottom: var(--audit-group-margin-bottom);\\n  position: relative;\\n}\\n.lh-audit-group--metrics {\\n  margin-bottom: calc(var(--audit-group-margin-bottom) / 2);\\n}\\n\\n.lh-audit-group__header::before {\\n  /* By default, groups don\\'t get an icon */\\n  content: none;\\n  width: var(--pwa-icon-size);\\n  height: var(--pwa-icon-size);\\n  margin: var(--pwa-icon-margin);\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n/* Style the \"over budget\" columns red. */\\n.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(4),\\n.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(5),\\n.lh-audit-group--budgets #timing-budget tbody tr td:nth-child(3) {\\n  color: var(--color-red-700);\\n}\\n\\n/* Align the \"over budget request count\" text to be close to the \"over budget bytes\" column. */\\n.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){\\n  text-align: right;\\n}\\n\\n.lh-audit-group--budgets .lh-details--budget {\\n  width: 100%;\\n  margin: 0 0 var(--default-padding);\\n}\\n\\n.lh-audit-group--pwa-installable .lh-audit-group__header::before {\\n  content: \\'\\';\\n  background-image: var(--pwa-installable-gray-url);\\n}\\n.lh-audit-group--pwa-optimized .lh-audit-group__header::before {\\n  content: \\'\\';\\n  background-image: var(--pwa-optimized-gray-url);\\n}\\n.lh-audit-group--pwa-installable.lh-badged .lh-audit-group__header::before {\\n  background-image: var(--pwa-installable-color-url);\\n}\\n.lh-audit-group--pwa-optimized.lh-badged .lh-audit-group__header::before {\\n  background-image: var(--pwa-optimized-color-url);\\n}\\n\\n.lh-audit-group--metrics .lh-audit-group__summary {\\n  margin-top: 0;\\n  margin-bottom: 0;\\n}\\n\\n.lh-audit-group__summary {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n}\\n\\n.lh-audit-group__header .lh-chevron {\\n  margin-top: calc((var(--report-line-height) - 5px) / 2);\\n}\\n\\n.lh-audit-group__header {\\n  letter-spacing: 0.8px;\\n  padding: var(--default-padding);\\n  padding-left: 0;\\n}\\n\\n.lh-audit-group__header, .lh-audit-group__summary {\\n  font-size: var(--report-font-size-secondary);\\n  line-height: var(--report-line-height-secondary);\\n  color: var(--color-gray-700);\\n}\\n\\n.lh-audit-group__title {\\n  text-transform: uppercase;\\n  font-weight: 500;\\n}\\n\\n.lh-audit-group__itemcount {\\n  color: var(--color-gray-600);\\n}\\n\\n.lh-audit-group__footer {\\n  color: var(--color-gray-600);\\n  display: block;\\n  margin-top: var(--default-padding);\\n}\\n\\n.lh-details,\\n.lh-category-header__description,\\n.lh-load-opportunity__header,\\n.lh-audit-group__footer {\\n  font-size: var(--report-font-size-secondary);\\n  line-height: var(--report-line-height-secondary);\\n}\\n\\n.lh-audit-explanation {\\n  margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);\\n  line-height: var(--audit-explanation-line-height);\\n  display: inline-block;\\n}\\n\\n.lh-audit--fail .lh-audit-explanation {\\n  color: var(--color-fail-secondary);\\n}\\n\\n/* Report */\\n.lh-list > :not(:last-child) {\\n  margin-bottom: calc(var(--default-padding) * 2);\\n}\\n\\n.lh-header-container {\\n  display: block;\\n  margin: 0 auto;\\n  position: relative;\\n  word-wrap: break-word;\\n}\\n\\n.lh-header-container .lh-scores-wrapper {\\n  border-bottom: 1px solid var(--color-gray-200);\\n}\\n\\n\\n.lh-report {\\n  min-width: var(--report-content-min-width);\\n}\\n\\n.lh-exception {\\n  font-size: large;\\n}\\n\\n.lh-code {\\n  white-space: normal;\\n  margin-top: 0;\\n  font-size: var(--report-monospace-font-size);\\n}\\n\\n.lh-warnings {\\n  --item-margin: calc(var(--report-line-height) / 6);\\n  color: var(--color-average-secondary);\\n  margin: var(--audit-padding-vertical) 0;\\n  padding: var(--default-padding)\\n    var(--default-padding)\\n    var(--default-padding)\\n    calc(var(--audit-description-padding-left));\\n  background-color: var(--toplevel-warning-background-color);\\n}\\n.lh-warnings span {\\n  font-weight: bold;\\n}\\n\\n.lh-warnings--toplevel {\\n  --item-margin: calc(var(--header-line-height) / 4);\\n  color: var(--toplevel-warning-text-color);\\n  margin-left: auto;\\n  margin-right: auto;\\n  max-width: var(--report-content-max-width-minus-edge-gap);\\n  padding: var(--toplevel-warning-padding);\\n  border-radius: 8px;\\n}\\n\\n.lh-warnings__msg {\\n  color: var(--toplevel-warning-message-text-color);\\n  margin: 0;\\n}\\n\\n.lh-warnings ul {\\n  margin: 0;\\n}\\n.lh-warnings li {\\n  margin: var(--item-margin) 0;\\n}\\n.lh-warnings li:last-of-type {\\n  margin-bottom: 0;\\n}\\n\\n.lh-scores-header {\\n  display: flex;\\n  flex-wrap: wrap;\\n  justify-content: center;\\n}\\n.lh-scores-header__solo {\\n  padding: 0;\\n  border: 0;\\n}\\n\\n/* Gauge */\\n\\n.lh-gauge__wrapper--pass {\\n  color: var(--color-pass-secondary);\\n  fill: var(--color-pass);\\n  stroke: var(--color-pass);\\n}\\n\\n.lh-gauge__wrapper--average {\\n  color: var(--color-average-secondary);\\n  fill: var(--color-average);\\n  stroke: var(--color-average);\\n}\\n\\n.lh-gauge__wrapper--fail {\\n  color: var(--color-fail-secondary);\\n  fill: var(--color-fail);\\n  stroke: var(--color-fail);\\n}\\n\\n.lh-gauge__wrapper--not-applicable {\\n  color: var(--color-not-applicable);\\n  fill: var(--color-not-applicable);\\n  stroke: var(--color-not-applicable);\\n}\\n\\n.lh-fraction__wrapper .lh-fraction__content::before {\\n  content: \\'\\';\\n  height: var(--score-icon-size);\\n  width: var(--score-icon-size);\\n  margin: var(--score-icon-margin);\\n  display: inline-block;\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__content {\\n  color: var(--color-pass-secondary);\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__background {\\n  background-color: var(--color-pass);\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__content::before {\\n  background-color: var(--color-pass);\\n  border-radius: 50%;\\n}\\n.lh-fraction__wrapper--average .lh-fraction__content {\\n  color: var(--color-average-secondary);\\n}\\n.lh-fraction__wrapper--average .lh-fraction__background,\\n.lh-fraction__wrapper--average .lh-fraction__content::before {\\n  background-color: var(--color-average);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__content {\\n  color: var(--color-fail);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__background {\\n  background-color: var(--color-fail);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__content::before {\\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__content {\\n  color: var(--color-gray-700);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__background {\\n  background-color: var(--color-gray-700);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__content::before {\\n  border-radius: 50%;\\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-700);\\n}\\n\\n.lh-fraction__background {\\n  position: absolute;\\n  height: 100%;\\n  width: 100%;\\n  border-radius: calc(var(--gauge-circle-size) / 2);\\n  opacity: 0.1;\\n  z-index: -1;\\n}\\n\\n.lh-fraction__content-wrapper {\\n  height: var(--gauge-circle-size);\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.lh-fraction__content {\\n  display: flex;\\n  position: relative;\\n  align-items: center;\\n  justify-content: center;\\n  font-size: calc(0.3 * var(--gauge-circle-size));\\n  line-height: calc(0.4 * var(--gauge-circle-size));\\n  width: max-content;\\n  min-width: calc(1.5 * var(--gauge-circle-size));\\n  padding: calc(0.1 * var(--gauge-circle-size)) calc(0.2 * var(--gauge-circle-size));\\n  --score-icon-size: calc(0.21 * var(--gauge-circle-size));\\n  --score-icon-margin: 0 calc(0.15 * var(--gauge-circle-size)) 0 0;\\n}\\n\\n.lh-gauge {\\n  stroke-linecap: round;\\n  width: var(--gauge-circle-size);\\n  height: var(--gauge-circle-size);\\n}\\n\\n.lh-category .lh-gauge {\\n  --gauge-circle-size: var(--gauge-circle-size-big);\\n}\\n\\n.lh-gauge-base {\\n  opacity: 0.1;\\n}\\n\\n.lh-gauge-arc {\\n  fill: none;\\n  transform-origin: 50% 50%;\\n  animation: load-gauge var(--transition-length) ease both;\\n  animation-delay: 250ms;\\n}\\n\\n.lh-gauge__svg-wrapper {\\n  position: relative;\\n  height: var(--gauge-circle-size);\\n}\\n.lh-category .lh-gauge__svg-wrapper,\\n.lh-category .lh-fraction__wrapper {\\n  --gauge-circle-size: var(--gauge-circle-size-big);\\n}\\n\\n/* The plugin badge overlay */\\n.lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\\n  width: var(--plugin-badge-size);\\n  height: var(--plugin-badge-size);\\n  background-color: var(--plugin-badge-background-color);\\n  background-image: var(--plugin-icon-url);\\n  background-repeat: no-repeat;\\n  background-size: var(--plugin-icon-size);\\n  background-position: 58% 50%;\\n  content: \"\";\\n  position: absolute;\\n  right: -6px;\\n  bottom: 0px;\\n  display: block;\\n  z-index: 100;\\n  box-shadow: 0 0 4px rgba(0,0,0,.2);\\n  border-radius: 25%;\\n}\\n.lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\\n  width: var(--plugin-badge-size-big);\\n  height: var(--plugin-badge-size-big);\\n}\\n\\n@keyframes load-gauge {\\n  from { stroke-dasharray: 0 352; }\\n}\\n\\n.lh-gauge__percentage {\\n  width: 100%;\\n  height: var(--gauge-circle-size);\\n  position: absolute;\\n  font-family: var(--report-font-family-monospace);\\n  font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);\\n  line-height: 0;\\n  text-align: center;\\n  top: calc(var(--score-container-padding) + var(--gauge-circle-size) / 2);\\n}\\n\\n.lh-category .lh-gauge__percentage {\\n  --gauge-circle-size: var(--gauge-circle-size-big);\\n  --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);\\n}\\n\\n.lh-gauge__wrapper,\\n.lh-fraction__wrapper {\\n  position: relative;\\n  display: flex;\\n  align-items: center;\\n  flex-direction: column;\\n  text-decoration: none;\\n  padding: var(--score-container-padding);\\n\\n  --transition-length: 1s;\\n\\n  /* Contain the layout style paint & layers during animation*/\\n  contain: content;\\n  will-change: opacity; /* Only using for layer promotion */\\n}\\n\\n.lh-gauge__label,\\n.lh-fraction__label {\\n  font-size: var(--gauge-label-font-size);\\n  font-weight: 500;\\n  line-height: var(--gauge-label-line-height);\\n  margin-top: 10px;\\n  text-align: center;\\n  color: var(--report-text-color);\\n  word-break: keep-all;\\n}\\n\\n/* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */\\n.lh-category .lh-gauge__label,\\n.lh-category .lh-fraction__label {\\n  --gauge-label-font-size: var(--gauge-label-font-size-big);\\n  --gauge-label-line-height: var(--gauge-label-line-height-big);\\n  margin-top: 14px;\\n}\\n\\n.lh-scores-header .lh-gauge__wrapper,\\n.lh-scores-header .lh-fraction__wrapper,\\n.lh-scores-header .lh-gauge--pwa__wrapper,\\n.lh-sticky-header .lh-gauge__wrapper,\\n.lh-sticky-header .lh-fraction__wrapper,\\n.lh-sticky-header .lh-gauge--pwa__wrapper {\\n  width: var(--gauge-wrapper-width);\\n}\\n\\n.lh-scorescale {\\n  display: inline-flex;\\n\\n  gap: calc(var(--default-padding) * 4);\\n  margin: 16px auto 0 auto;\\n  font-size: var(--report-font-size-secondary);\\n  color: var(--color-gray-700);\\n\\n}\\n\\n.lh-scorescale-range {\\n  display: flex;\\n  align-items: center;\\n  font-family: var(--report-font-family-monospace);\\n  white-space: nowrap;\\n}\\n\\n.lh-category-header__finalscreenshot .lh-scorescale {\\n  border: 0;\\n  display: flex;\\n  justify-content: center;\\n}\\n\\n.lh-category-header__finalscreenshot .lh-scorescale-range {\\n  font-family: unset;\\n  font-size: 12px;\\n}\\n\\n.lh-scorescale-wrap {\\n  display: contents;\\n}\\n\\n/* Hide category score gauages if it\\'s a single category report */\\n.lh-header--solo-category .lh-scores-wrapper {\\n  display: none;\\n}\\n\\n\\n.lh-categories {\\n  width: 100%;\\n}\\n\\n.lh-category {\\n  padding: var(--category-padding);\\n  max-width: var(--report-content-max-width);\\n  margin: 0 auto;\\n\\n  scroll-margin-top: var(--sticky-header-buffer);\\n}\\n\\n.lh-category-wrapper {\\n  border-bottom: 1px solid var(--color-gray-200);\\n}\\n.lh-category-wrapper:last-of-type {\\n  border-bottom: 0;\\n}\\n\\n.lh-category-header {\\n  margin-bottom: var(--section-padding-vertical);\\n}\\n\\n.lh-category-header .lh-score__gauge {\\n  max-width: 400px;\\n  width: auto;\\n  margin: 0px auto;\\n}\\n\\n.lh-category-header__finalscreenshot {\\n  display: grid;\\n  grid-template: none / 1fr 1px 1fr;\\n  justify-items: center;\\n  align-items: center;\\n  gap: var(--report-line-height);\\n  min-height: 288px;\\n  margin-bottom: var(--default-padding);\\n}\\n\\n.lh-final-ss-image {\\n  /* constrain the size of the image to not be too large */\\n  max-height: calc(var(--gauge-circle-size-big) * 2.8);\\n  max-width: calc(var(--gauge-circle-size-big) * 3.5);\\n  border: 1px solid var(--color-gray-200);\\n  padding: 4px;\\n  border-radius: 3px;\\n  display: block;\\n}\\n\\n.lh-category-headercol--separator {\\n  background: var(--color-gray-200);\\n  width: 1px;\\n  height: var(--gauge-circle-size-big);\\n}\\n\\n@media screen and (max-width: 780px) {\\n  .lh-category-header__finalscreenshot {\\n    grid-template: 1fr 1fr / none\\n  }\\n  .lh-category-headercol--separator {\\n    display: none;\\n  }\\n}\\n\\n\\n/* 964 fits the min-width of the filmstrip */\\n@media screen and (max-width: 964px) {\\n  .lh-report {\\n    margin-left: 0;\\n    width: 100%;\\n  }\\n}\\n\\n@media print {\\n  body {\\n    -webkit-print-color-adjust: exact; /* print background colors */\\n  }\\n  .lh-container {\\n    display: block;\\n  }\\n  .lh-report {\\n    margin-left: 0;\\n    padding-top: 0;\\n  }\\n  .lh-categories {\\n    margin-top: 0;\\n  }\\n}\\n\\n.lh-table {\\n  position: relative;\\n  border-collapse: separate;\\n  border-spacing: 0;\\n  /* Can\\'t assign padding to table, so shorten the width instead. */\\n  width: calc(100% - var(--audit-description-padding-left) - var(--stackpack-padding-horizontal));\\n  border: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-table thead th {\\n  position: sticky;\\n  top: calc(var(--sticky-header-buffer) + 1em);\\n  z-index: 1;\\n  background-color: var(--report-background-color);\\n  border-bottom: 1px solid var(--report-border-color-secondary);\\n  font-weight: normal;\\n  color: var(--color-gray-600);\\n  /* See text-wrapping comment on .lh-container. */\\n  word-break: normal;\\n}\\n\\n.lh-row--group {\\n  background-color: var(--table-group-header-background-color);\\n}\\n\\n.lh-row--group td {\\n  font-weight: bold;\\n  font-size: 1.05em;\\n  color: var(--table-group-header-text-color);\\n}\\n\\n.lh-row--group td:first-child {\\n  font-weight: normal;\\n}\\n\\n.lh-row--group .lh-text {\\n  color: inherit;\\n  text-decoration: none;\\n  display: inline-block;\\n}\\n\\n.lh-row--group a.lh-link:hover {\\n  text-decoration: underline;\\n}\\n\\n.lh-row--group .lh-audit__adorn {\\n  text-transform: capitalize;\\n  font-weight: normal;\\n  padding: 2px 3px 1px 3px;\\n}\\n\\n.lh-row--group .lh-audit__adorn1p {\\n  color: var(--link-color);\\n  border-color: var(--link-color);\\n}\\n\\n.lh-row--group .lh-report-icon--external::before {\\n  content: \"\";\\n  background-repeat: no-repeat;\\n  width: 14px;\\n  height: 16px;\\n  opacity: 0.7;\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n.lh-row--group .lh-report-icon--external {\\n  display: none;\\n}\\n\\n.lh-row--group:hover .lh-report-icon--external {\\n  display: inline-block;\\n}\\n\\n.lh-dark .lh-report-icon--external::before {\\n  filter: invert(1);\\n}\\n\\n/** Manages indentation of two-level and three-level nested adjacent rows */\\n\\n.lh-row--group ~ [data-entity]:not(.lh-row--group) td:first-child {\\n  padding-left: 20px;\\n}\\n\\n.lh-row--group ~ [data-entity]:not(.lh-row--group) ~ .lh-sub-item-row td:first-child {\\n  padding-left: 40px;\\n}\\n\\n.lh-row--even {\\n  background-color: var(--table-group-header-background-color);\\n}\\n.lh-row--hidden {\\n  display: none;\\n}\\n\\n.lh-table th,\\n.lh-table td {\\n  padding: var(--default-padding);\\n}\\n\\n.lh-table tr {\\n  vertical-align: middle;\\n}\\n\\n.lh-table tr:hover {\\n  background-color: var(--table-higlight-background-color);\\n}\\n\\n/* Looks unnecessary, but mostly for keeping the <th>s left-aligned */\\n.lh-table-column--text,\\n.lh-table-column--source-location,\\n.lh-table-column--url,\\n/* .lh-table-column--thumbnail, */\\n/* .lh-table-column--empty,*/\\n.lh-table-column--code,\\n.lh-table-column--node {\\n  text-align: left;\\n}\\n\\n.lh-table-column--code {\\n  min-width: 100px;\\n}\\n\\n.lh-table-column--bytes,\\n.lh-table-column--timespanMs,\\n.lh-table-column--ms,\\n.lh-table-column--numeric {\\n  text-align: right;\\n  word-break: normal;\\n}\\n\\n\\n\\n.lh-table .lh-table-column--thumbnail {\\n  width: var(--image-preview-size);\\n}\\n\\n.lh-table-column--url {\\n  min-width: 250px;\\n}\\n\\n.lh-table-column--text {\\n  min-width: 80px;\\n}\\n\\n/* Keep columns narrow if they follow the URL column */\\n/* 12% was determined to be a decent narrow width, but wide enough for column headings */\\n.lh-table-column--url + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--ms,\\n.lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs {\\n  width: 12%;\\n}\\n\\n.lh-text__url-host {\\n  display: inline;\\n}\\n\\n.lh-text__url-host {\\n  margin-left: calc(var(--report-font-size) / 2);\\n  opacity: 0.6;\\n  font-size: 90%\\n}\\n\\n.lh-thumbnail {\\n  object-fit: cover;\\n  width: var(--image-preview-size);\\n  height: var(--image-preview-size);\\n  display: block;\\n}\\n\\n.lh-unknown pre {\\n  overflow: scroll;\\n  border: solid 1px var(--color-gray-200);\\n}\\n\\n.lh-text__url > a {\\n  color: inherit;\\n  text-decoration: none;\\n}\\n\\n.lh-text__url > a:hover {\\n  text-decoration: underline dotted #999;\\n}\\n\\n.lh-sub-item-row {\\n  margin-left: 20px;\\n  margin-bottom: 0;\\n  color: var(--color-gray-700);\\n}\\n\\n.lh-sub-item-row td {\\n  padding-top: 4px;\\n  padding-bottom: 4px;\\n  padding-left: 20px;\\n}\\n\\n/* Chevron\\n   https://codepen.io/paulirish/pen/LmzEmK\\n */\\n.lh-chevron {\\n  --chevron-angle: 42deg;\\n  /* Edge doesn\\'t support transform: rotate(calc(...)), so we define it here */\\n  --chevron-angle-right: -42deg;\\n  width: var(--chevron-size);\\n  height: var(--chevron-size);\\n  margin-top: calc((var(--report-line-height) - 12px) / 2);\\n}\\n\\n.lh-chevron__lines {\\n  transition: transform 0.4s;\\n  transform: translateY(var(--report-line-height));\\n}\\n.lh-chevron__line {\\n stroke: var(--chevron-line-stroke);\\n stroke-width: var(--chevron-size);\\n stroke-linecap: square;\\n transform-origin: 50%;\\n transform: rotate(var(--chevron-angle));\\n transition: transform 300ms, stroke 300ms;\\n}\\n\\n.lh-expandable-details .lh-chevron__line-right,\\n.lh-expandable-details[open] .lh-chevron__line-left {\\n transform: rotate(var(--chevron-angle-right));\\n}\\n\\n.lh-expandable-details[open] .lh-chevron__line-right {\\n  transform: rotate(var(--chevron-angle));\\n}\\n\\n\\n.lh-expandable-details[open]  .lh-chevron__lines {\\n transform: translateY(calc(var(--chevron-size) * -1));\\n}\\n\\n.lh-expandable-details[open] {\\n  animation: 300ms openDetails forwards;\\n  padding-bottom: var(--default-padding);\\n}\\n\\n@keyframes openDetails {\\n  from {\\n    outline: 1px solid var(--report-background-color);\\n  }\\n  to {\\n   outline: 1px solid;\\n   box-shadow: 0 2px 4px rgba(0, 0, 0, .24);\\n  }\\n}\\n\\n@media screen and (max-width: 780px) {\\n  /* no black outline if we\\'re not confident the entire table can be displayed within bounds */\\n  .lh-expandable-details[open] {\\n    animation: none;\\n  }\\n}\\n\\n.lh-expandable-details[open] summary, details.lh-clump > summary {\\n  border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\ndetails.lh-clump[open] > summary {\\n  border-bottom-width: 0;\\n}\\n\\n\\n\\ndetails .lh-clump-toggletext--hide,\\ndetails[open] .lh-clump-toggletext--show { display: none; }\\ndetails[open] .lh-clump-toggletext--hide { display: block;}\\n\\n\\n/* Tooltip */\\n.lh-tooltip-boundary {\\n  position: relative;\\n}\\n\\n.lh-tooltip {\\n  position: absolute;\\n  display: none; /* Don\\'t retain these layers when not needed */\\n  opacity: 0;\\n  background: #ffffff;\\n  white-space: pre-line; /* Render newlines in the text */\\n  min-width: 246px;\\n  max-width: 275px;\\n  padding: 15px;\\n  border-radius: 5px;\\n  text-align: initial;\\n  line-height: 1.4;\\n}\\n/* shrink tooltips to not be cutoff on left edge of narrow viewports\\n   45vw is chosen to be ~= width of the left column of metrics\\n*/\\n@media screen and (max-width: 535px) {\\n  .lh-tooltip {\\n    min-width: 45vw;\\n    padding: 3vw;\\n  }\\n}\\n\\n.lh-tooltip-boundary:hover .lh-tooltip {\\n  display: block;\\n  animation: fadeInTooltip 250ms;\\n  animation-fill-mode: forwards;\\n  animation-delay: 850ms;\\n  bottom: 100%;\\n  z-index: 1;\\n  will-change: opacity;\\n  right: 0;\\n  pointer-events: none;\\n}\\n\\n.lh-tooltip::before {\\n  content: \"\";\\n  border: solid transparent;\\n  border-bottom-color: #fff;\\n  border-width: 10px;\\n  position: absolute;\\n  bottom: -20px;\\n  right: 6px;\\n  transform: rotate(180deg);\\n  pointer-events: none;\\n}\\n\\n@keyframes fadeInTooltip {\\n  0% { opacity: 0; }\\n  75% { opacity: 1; }\\n  100% { opacity: 1;  filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; }\\n}\\n\\n/* Element screenshot */\\n.lh-element-screenshot {\\n  float: left;\\n  margin-right: 20px;\\n}\\n.lh-element-screenshot__content {\\n  overflow: hidden;\\n  min-width: 110px;\\n  display: flex;\\n  justify-content: center;\\n  background-color: var(--report-background-color);\\n}\\n.lh-element-screenshot__image {\\n  position: relative;\\n  /* Set by ElementScreenshotRenderer.installFullPageScreenshotCssVariable */\\n  background-image: var(--element-screenshot-url);\\n  outline: 2px solid #777;\\n  background-color: white;\\n  background-repeat: no-repeat;\\n}\\n.lh-element-screenshot__mask {\\n  position: absolute;\\n  background: #555;\\n  opacity: 0.8;\\n}\\n.lh-element-screenshot__element-marker {\\n  position: absolute;\\n  outline: 2px solid var(--color-lime-400);\\n}\\n.lh-element-screenshot__overlay {\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  z-index: 2000; /* .lh-topbar is 1000 */\\n  background: var(--screenshot-overlay-background);\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  cursor: zoom-out;\\n}\\n\\n.lh-element-screenshot__overlay .lh-element-screenshot {\\n  margin-right: 0; /* clearing margin used in thumbnail case */\\n  outline: 1px solid var(--color-gray-700);\\n}\\n\\n.lh-screenshot-overlay--enabled .lh-element-screenshot {\\n  cursor: zoom-out;\\n}\\n.lh-screenshot-overlay--enabled .lh-node .lh-element-screenshot {\\n  cursor: zoom-in;\\n}\\n\\n\\n.lh-meta__items {\\n  --meta-icon-size: calc(var(--report-icon-size) * 0.667);\\n  padding: var(--default-padding);\\n  display: grid;\\n  grid-template-columns: 1fr 1fr 1fr;\\n  background-color: var(--env-item-background-color);\\n  border-radius: 3px;\\n  margin: 0 0 var(--default-padding) 0;\\n  font-size: 12px;\\n  column-gap: var(--default-padding);\\n  color: var(--color-gray-700);\\n}\\n\\n.lh-meta__item {\\n  display: block;\\n  list-style-type: none;\\n  position: relative;\\n  padding: 0 0 0 calc(var(--meta-icon-size) + var(--default-padding) * 2);\\n  cursor: unset; /* disable pointer cursor from report-icon */\\n}\\n\\n.lh-meta__item.lh-tooltip-boundary {\\n  text-decoration: dotted underline var(--color-gray-500);\\n  cursor: help;\\n}\\n\\n.lh-meta__item.lh-report-icon::before {\\n  position: absolute;\\n  left: var(--default-padding);\\n  width: var(--meta-icon-size);\\n  height: var(--meta-icon-size);\\n}\\n\\n.lh-meta__item.lh-report-icon:hover::before {\\n  opacity: 0.7;\\n}\\n\\n.lh-meta__item .lh-tooltip {\\n  color: var(--color-gray-800);\\n}\\n\\n.lh-meta__item .lh-tooltip::before {\\n  right: auto; /* Set the tooltip arrow to the leftside */\\n  left: 6px;\\n}\\n\\n/* Change the grid for narrow viewport. */\\n@media screen and (max-width: 640px) {\\n  .lh-meta__items {\\n    grid-template-columns: 1fr 1fr;\\n  }\\n}\\n@media screen and (max-width: 535px) {\\n  .lh-meta__items {\\n    display: block;\\n  }\\n}\\n\\n\\n/*# sourceURL=report-styles.css */\\n'),t.append(n),t}(e);case\"topbar\":return function(e){const t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n    .lh-topbar {\\n      position: sticky;\\n      top: 0;\\n      left: 0;\\n      right: 0;\\n      z-index: 1000;\\n      display: flex;\\n      align-items: center;\\n      height: var(--topbar-height);\\n      padding: var(--topbar-padding);\\n      font-size: var(--report-font-size-secondary);\\n      background-color: var(--topbar-background-color);\\n      border-bottom: 1px solid var(--color-gray-200);\\n    }\\n\\n    .lh-topbar__logo {\\n      width: var(--topbar-logo-size);\\n      height: var(--topbar-logo-size);\\n      user-select: none;\\n      flex: none;\\n    }\\n\\n    .lh-topbar__url {\\n      margin: var(--topbar-padding);\\n      text-decoration: none;\\n      color: var(--report-text-color);\\n      text-overflow: ellipsis;\\n      overflow: hidden;\\n      white-space: nowrap;\\n    }\\n\\n    .lh-tools {\\n      display: flex;\\n      align-items: center;\\n      margin-left: auto;\\n      will-change: transform;\\n      min-width: var(--report-icon-size);\\n    }\\n    .lh-tools__button {\\n      width: var(--report-icon-size);\\n      min-width: 24px;\\n      height: var(--report-icon-size);\\n      cursor: pointer;\\n      margin-right: 5px;\\n      /* This is actually a button element, but we want to style it like a transparent div. */\\n      display: flex;\\n      background: none;\\n      color: inherit;\\n      border: none;\\n      padding: 0;\\n      font: inherit;\\n      outline: inherit;\\n    }\\n    .lh-tools__button svg {\\n      fill: var(--tools-icon-color);\\n    }\\n    .lh-dark .lh-tools__button svg {\\n      filter: invert(1);\\n    }\\n    .lh-tools__button.lh-active + .lh-tools__dropdown {\\n      opacity: 1;\\n      clip: rect(-1px, 194px, 242px, -3px);\\n      visibility: visible;\\n    }\\n    .lh-tools__dropdown {\\n      position: absolute;\\n      background-color: var(--report-background-color);\\n      border: 1px solid var(--report-border-color);\\n      border-radius: 3px;\\n      padding: calc(var(--default-padding) / 2) 0;\\n      cursor: pointer;\\n      top: 36px;\\n      right: 0;\\n      box-shadow: 1px 1px 3px #ccc;\\n      min-width: 125px;\\n      clip: rect(0, 164px, 0, 0);\\n      visibility: hidden;\\n      opacity: 0;\\n      transition: all 200ms cubic-bezier(0,0,0.2,1);\\n    }\\n    .lh-tools__dropdown a {\\n      color: currentColor;\\n      text-decoration: none;\\n      white-space: nowrap;\\n      padding: 0 6px;\\n      line-height: 2;\\n    }\\n    .lh-tools__dropdown a:hover,\\n    .lh-tools__dropdown a:focus {\\n      background-color: var(--color-gray-200);\\n      outline: none;\\n    }\\n    /* save-gist option hidden in report. */\\n    .lh-tools__dropdown a[data-action='save-gist'] {\\n      display: none;\\n    }\\n\\n    .lh-locale-selector {\\n      width: 100%;\\n      color: var(--report-text-color);\\n      background-color: var(--locale-selector-background-color);\\n      padding: 2px;\\n    }\\n    .lh-tools-locale {\\n      display: flex;\\n      align-items: center;\\n      flex-direction: row-reverse;\\n    }\\n    .lh-tools-locale__selector-wrapper {\\n      transition: opacity 0.15s;\\n      opacity: 0;\\n      max-width: 200px;\\n    }\\n    .lh-button.lh-tool-locale__button {\\n      height: var(--topbar-height);\\n      color: var(--tools-icon-color);\\n      padding: calc(var(--default-padding) / 2);\\n    }\\n    .lh-tool-locale__button.lh-active + .lh-tools-locale__selector-wrapper {\\n      opacity: 1;\\n      clip: rect(-1px, 194px, 242px, -3px);\\n      visibility: visible;\\n      margin: 0 4px;\\n    }\\n\\n    @media screen and (max-width: 964px) {\\n      .lh-tools__dropdown {\\n        right: 0;\\n        left: initial;\\n      }\\n    }\\n    @media print {\\n      .lh-topbar {\\n        position: static;\\n        margin-left: 0;\\n      }\\n\\n      .lh-tools__dropdown {\\n        display: none;\\n      }\\n    }\\n  \"),t.append(n);const r=e.createElement(\"div\",\"lh-topbar\"),o=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\",\"lh-topbar__logo\");o.setAttribute(\"role\",\"img\"),o.setAttribute(\"title\",\"Lighthouse logo\"),o.setAttribute(\"fill\",\"none\"),o.setAttribute(\"xmlns\",\"http://www.w3.org/2000/svg\"),o.setAttribute(\"viewBox\",\"0 0 48 48\");const i=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");i.setAttribute(\"d\",\"m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z\"),i.setAttribute(\"fill\",\"#F63\");const a=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");a.setAttribute(\"d\",\"M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z\"),a.setAttribute(\"fill\",\"#FFA385\");const l=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");l.setAttribute(\"fill\",\"#FF3\"),l.setAttribute(\"d\",\"M20.5 10h7v7h-7z\"),o.append(\" \",i,\" \",a,\" \",l,\" \");const s=e.createElement(\"a\",\"lh-topbar__url\");s.setAttribute(\"href\",\"\"),s.setAttribute(\"target\",\"_blank\"),s.setAttribute(\"rel\",\"noopener\");const c=e.createElement(\"div\",\"lh-tools\"),d=e.createElement(\"div\",\"lh-tools-locale lh-hidden\"),h=e.createElement(\"button\",\"lh-button lh-tool-locale__button\");h.setAttribute(\"id\",\"lh-button__swap-locales\"),h.setAttribute(\"title\",\"Show Language Picker\"),h.setAttribute(\"aria-label\",\"Toggle language picker\"),h.setAttribute(\"aria-haspopup\",\"menu\"),h.setAttribute(\"aria-expanded\",\"false\"),h.setAttribute(\"aria-controls\",\"lh-tools-locale__selector-wrapper\");const p=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");p.setAttribute(\"width\",\"20px\"),p.setAttribute(\"height\",\"20px\"),p.setAttribute(\"viewBox\",\"0 0 24 24\"),p.setAttribute(\"fill\",\"currentColor\");const u=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");u.setAttribute(\"d\",\"M0 0h24v24H0V0z\"),u.setAttribute(\"fill\",\"none\");const g=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");g.setAttribute(\"d\",\"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z\"),p.append(u,g),h.append(\" \",p,\" \");const m=e.createElement(\"div\",\"lh-tools-locale__selector-wrapper\");m.setAttribute(\"id\",\"lh-tools-locale__selector-wrapper\"),m.setAttribute(\"role\",\"menu\"),m.setAttribute(\"aria-labelledby\",\"lh-button__swap-locales\"),m.setAttribute(\"aria-hidden\",\"true\"),m.append(\" \",\" \"),d.append(\" \",h,\" \",m,\" \");const f=e.createElement(\"button\",\"lh-tools__button\");f.setAttribute(\"id\",\"lh-tools-button\"),f.setAttribute(\"title\",\"Tools menu\"),f.setAttribute(\"aria-label\",\"Toggle report tools menu\"),f.setAttribute(\"aria-haspopup\",\"menu\"),f.setAttribute(\"aria-expanded\",\"false\"),f.setAttribute(\"aria-controls\",\"lh-tools-dropdown\");const v=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");v.setAttribute(\"width\",\"100%\"),v.setAttribute(\"height\",\"100%\"),v.setAttribute(\"viewBox\",\"0 0 24 24\");const b=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");b.setAttribute(\"d\",\"M0 0h24v24H0z\"),b.setAttribute(\"fill\",\"none\");const _=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");_.setAttribute(\"d\",\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"),v.append(\" \",b,\" \",_,\" \"),f.append(\" \",v,\" \");const w=e.createElement(\"div\",\"lh-tools__dropdown\");w.setAttribute(\"id\",\"lh-tools-dropdown\"),w.setAttribute(\"role\",\"menu\"),w.setAttribute(\"aria-labelledby\",\"lh-tools-button\");const y=e.createElement(\"a\",\"lh-report-icon lh-report-icon--print\");y.setAttribute(\"role\",\"menuitem\"),y.setAttribute(\"tabindex\",\"-1\"),y.setAttribute(\"href\",\"#\"),y.setAttribute(\"data-i18n\",\"dropdownPrintSummary\"),y.setAttribute(\"data-action\",\"print-summary\");const x=e.createElement(\"a\",\"lh-report-icon lh-report-icon--print\");x.setAttribute(\"role\",\"menuitem\"),x.setAttribute(\"tabindex\",\"-1\"),x.setAttribute(\"href\",\"#\"),x.setAttribute(\"data-i18n\",\"dropdownPrintExpanded\"),x.setAttribute(\"data-action\",\"print-expanded\");const k=e.createElement(\"a\",\"lh-report-icon lh-report-icon--copy\");k.setAttribute(\"role\",\"menuitem\"),k.setAttribute(\"tabindex\",\"-1\"),k.setAttribute(\"href\",\"#\"),k.setAttribute(\"data-i18n\",\"dropdownCopyJSON\"),k.setAttribute(\"data-action\",\"copy\");const E=e.createElement(\"a\",\"lh-report-icon lh-report-icon--download lh-hidden\");E.setAttribute(\"role\",\"menuitem\"),E.setAttribute(\"tabindex\",\"-1\"),E.setAttribute(\"href\",\"#\"),E.setAttribute(\"data-i18n\",\"dropdownSaveHTML\"),E.setAttribute(\"data-action\",\"save-html\");const A=e.createElement(\"a\",\"lh-report-icon lh-report-icon--download\");A.setAttribute(\"role\",\"menuitem\"),A.setAttribute(\"tabindex\",\"-1\"),A.setAttribute(\"href\",\"#\"),A.setAttribute(\"data-i18n\",\"dropdownSaveJSON\"),A.setAttribute(\"data-action\",\"save-json\");const S=e.createElement(\"a\",\"lh-report-icon lh-report-icon--open\");S.setAttribute(\"role\",\"menuitem\"),S.setAttribute(\"tabindex\",\"-1\"),S.setAttribute(\"href\",\"#\"),S.setAttribute(\"data-i18n\",\"dropdownViewer\"),S.setAttribute(\"data-action\",\"open-viewer\");const z=e.createElement(\"a\",\"lh-report-icon lh-report-icon--open\");z.setAttribute(\"role\",\"menuitem\"),z.setAttribute(\"tabindex\",\"-1\"),z.setAttribute(\"href\",\"#\"),z.setAttribute(\"data-i18n\",\"dropdownSaveGist\"),z.setAttribute(\"data-action\",\"save-gist\");const C=e.createElement(\"a\",\"lh-report-icon lh-report-icon--dark\");return C.setAttribute(\"role\",\"menuitem\"),C.setAttribute(\"tabindex\",\"-1\"),C.setAttribute(\"href\",\"#\"),C.setAttribute(\"data-i18n\",\"dropdownDarkTheme\"),C.setAttribute(\"data-action\",\"toggle-dark\"),w.append(\" \",y,\" \",x,\" \",k,\" \",\" \",E,\" \",A,\" \",S,\" \",z,\" \",C,\" \"),c.append(\" \",d,\" \",f,\" \",w,\" \"),r.append(\" \",\" \",o,\" \",s,\" \",c,\" \"),t.append(r),t}(e);case\"warningsToplevel\":return function(e){const t=e.createFragment(),n=e.createElement(\"div\",\"lh-warnings lh-warnings--toplevel\"),r=e.createElement(\"p\",\"lh-warnings__msg\"),o=e.createElement(\"ul\");return n.append(\" \",r,\" \",o,\" \"),t.append(n),t}(e)}throw new Error(\"unexpected component: \"+t)}(this,e),this._componentCache.set(e,t),t.cloneNode(!0)}clearComponentCache(){this._componentCache.clear()}convertMarkdownLinkSnippets(e,t={}){const r=this.createElement(\"span\");for(const o of n.splitMarkdownLink(e)){const e=o.text.includes(\"`\")?this.convertMarkdownCodeSnippets(o.text):o.text;if(!o.isLink){r.append(e);continue}const n=new URL(o.linkHref);([\"https://developers.google.com\",\"https://web.dev\",\"https://developer.chrome.com\"].includes(n.origin)||t.alwaysAppendUtmSource)&&(n.searchParams.set(\"utm_source\",\"lighthouse\"),n.searchParams.set(\"utm_medium\",this._lighthouseChannel));const i=this.createElement(\"a\");i.rel=\"noopener\",i.target=\"_blank\",i.append(e),this.safelySetHref(i,n.href),r.append(i)}return r}safelySetHref(e,t){if((t=t||\"\").startsWith(\"#\"))return void(e.href=t);let n;try{n=new URL(t)}catch(e){}n&&[\"https:\",\"http:\"].includes(n.protocol)&&(e.href=n.href)}safelySetBlobHref(e,t){if(\"text/html\"!==t.type&&\"application/json\"!==t.type)throw new Error(\"Unsupported blob type\");const n=URL.createObjectURL(t);e.href=n}convertMarkdownCodeSnippets(e){const t=this.createElement(\"span\");for(const r of n.splitMarkdownCodeSpans(e))if(r.isCode){const e=this.createElement(\"code\");e.textContent=r.text,t.append(e)}else t.append(this._document.createTextNode(r.text));return t}setLighthouseChannel(e){this._lighthouseChannel=e}document(){return this._document}isDevTools(){return!!this._document.querySelector(\".lh-devtools\")}find(e,t){const n=t.querySelector(e);if(null===n)throw new Error(`query ${e} not found`);return n}findAll(e,t){return Array.from(t.querySelectorAll(e))}fireEventOn(e,t=this._document,n){const r=new CustomEvent(e,n?{detail:n}:void 0);t.dispatchEvent(r)}saveFile(e,t){const n=this.createElement(\"a\");n.download=t,this.safelySetBlobHref(n,e),this._document.body.append(n),n.click(),this._document.body.removeChild(n),setTimeout((()=>URL.revokeObjectURL(n.href)),500)}}\n/**\n   * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */let o=0;class i{static i18n=null;static strings={};static reportJson=null;static apply(e){i.strings={...c,...e.providedStrings},i.i18n=e.i18n,i.reportJson=e.reportJson}static getUniqueSuffix(){return o++}static resetUniqueSuffix(){o=0}}\n/**\n   * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */const a=\"data:image/jpeg;base64,\",l=n.RATINGS;\n/**\n   * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */class s{static prepareReportResult(e){const t=JSON.parse(JSON.stringify(e));!function(e){e.configSettings.locale||(e.configSettings.locale=\"en\"),e.configSettings.formFactor||(e.configSettings.formFactor=e.configSettings.emulatedFormFactor),e.finalDisplayedUrl=n.getFinalDisplayedUrl(e),e.mainDocumentUrl=n.getMainDocumentUrl(e);for(const t of Object.values(e.audits))if(\"not_applicable\"!==t.scoreDisplayMode&&\"not-applicable\"!==t.scoreDisplayMode||(t.scoreDisplayMode=\"notApplicable\"),t.details){if(void 0!==t.details.type&&\"diagnostic\"!==t.details.type||(t.details.type=\"debugdata\"),\"filmstrip\"===t.details.type)for(const e of t.details.items)e.data.startsWith(a)||(e.data=a+e.data);if(\"table\"===t.details.type)for(const e of t.details.headings){const{itemType:t,text:n}=e;void 0!==t&&(e.valueType=t,delete e.itemType),void 0!==n&&(e.label=n,delete e.text);const r=e.subItemsHeading?.itemType;e.subItemsHeading&&void 0!==r&&(e.subItemsHeading.valueType=r,delete e.subItemsHeading.itemType)}if(\"third-party-summary\"===t.id&&(\"opportunity\"===t.details.type||\"table\"===t.details.type)){const{headings:e,items:n}=t.details;if(\"link\"===e[0].valueType){e[0].valueType=\"text\";for(const e of n)\"object\"==typeof e.entity&&\"link\"===e.entity.type&&(e.entity=e.entity.text);t.details.isEntityGrouped=!0}}}const[t]=e.lighthouseVersion.split(\".\").map(Number),r=e.categories.performance;if(t<9&&r){e.categoryGroups||(e.categoryGroups={}),e.categoryGroups.hidden={title:\"\"};for(const e of r.auditRefs)e.group?[\"load-opportunities\",\"diagnostics\"].includes(e.group)&&delete e.group:e.group=\"hidden\"}if(e.environment||(e.environment={benchmarkIndex:0,networkUserAgent:e.userAgent,hostUserAgent:e.userAgent}),e.configSettings.screenEmulation||(e.configSettings.screenEmulation={width:-1,height:-1,deviceScaleFactor:-1,mobile:/mobile/i.test(e.environment.hostUserAgent),disabled:!1}),e.i18n||(e.i18n={}),e.audits[\"full-page-screenshot\"]){const t=e.audits[\"full-page-screenshot\"].details;e.fullPageScreenshot=t?{screenshot:t.screenshot,nodes:t.nodes}:null,delete e.audits[\"full-page-screenshot\"]}}(t);for(const e of Object.values(t.audits))e.details&&(\"opportunity\"!==e.details.type&&\"table\"!==e.details.type||!e.details.isEntityGrouped&&t.entities&&s.classifyEntities(t.entities,e.details));if(\"object\"!=typeof t.categories)throw new Error(\"No categories provided.\");const r=new Map;for(const e of Object.values(t.categories))e.auditRefs.forEach((e=>{e.relevantAudits&&e.relevantAudits.forEach((t=>{const n=r.get(t)||[];n.push(e),r.set(t,n)}))})),e.auditRefs.forEach((e=>{const n=t.audits[e.id];e.result=n,r.has(e.id)&&(e.relevantMetrics=r.get(e.id)),t.stackPacks&&t.stackPacks.forEach((t=>{t.descriptions[e.id]&&(e.stackPacks=e.stackPacks||[],e.stackPacks.push({title:t.title,iconDataURL:t.iconDataURL,description:t.descriptions[e.id]}))}))}));return t}static getUrlLocatorFn(e){const t=e.find((e=>\"url\"===e.valueType))?.key;if(t&&\"string\"==typeof t)return e=>{const n=e[t];if(\"string\"==typeof n)return n};const n=e.find((e=>\"source-location\"===e.valueType))?.key;return n?e=>{const t=e[n];if(\"object\"==typeof t&&\"source-location\"===t.type)return t.url}:void 0}static classifyEntities(e,t){const{items:r,headings:o}=t;if(!r.length||r.some((e=>e.entity)))return;const i=s.getUrlLocatorFn(o);if(i)for(const t of r){const r=i(t);if(!r)continue;let o=\"\";try{o=n.parseURL(r).origin}catch{}if(!o)continue;const a=e.find((e=>e.origins.includes(o)));a&&(t.entity=a.name)}}static getTableItemSortComparator(e){return(t,n)=>{for(const r of e){const e=t[r],o=n[r];if(typeof e==typeof o&&[\"number\",\"string\"].includes(typeof e)||console.warn(`Warning: Attempting to sort unsupported value type: ${r}.`),\"number\"==typeof e&&\"number\"==typeof o&&e!==o)return o-e;if(\"string\"==typeof e&&\"string\"==typeof o&&e!==o)return e.localeCompare(o)}return 0}}static getEmulationDescriptions(e){let t,n,r;const o=e.throttling,a=i.i18n,l=i.strings;switch(e.throttlingMethod){case\"provided\":r=n=t=l.throttlingProvided;break;case\"devtools\":{const{cpuSlowdownMultiplier:e,requestLatencyMs:i}=o;t=a.formatNumber(e)+\"x slowdown (DevTools)\",n=`${a.formatMilliseconds(i)} HTTP RTT, ${a.formatKbps(o.downloadThroughputKbps)} down, ${a.formatKbps(o.uploadThroughputKbps)} up (DevTools)`,r=562.5===i&&o.downloadThroughputKbps===1638.4*.9&&675===o.uploadThroughputKbps?l.runtimeSlow4g:l.runtimeCustom;break}case\"simulate\":{const{cpuSlowdownMultiplier:e,rttMs:i,throughputKbps:s}=o;t=a.formatNumber(e)+\"x slowdown (Simulated)\",n=`${a.formatMilliseconds(i)} TCP RTT, ${a.formatKbps(s)} throughput (Simulated)`,r=150===i&&1638.4===s?l.runtimeSlow4g:l.runtimeCustom;break}default:r=t=n=l.runtimeUnknown}const s=\"devtools\"!==e.channel&&e.screenEmulation.disabled,c=\"devtools\"===e.channel?\"mobile\"===e.formFactor:e.screenEmulation.mobile;let d=l.runtimeMobileEmulation;return s?d=l.runtimeNoEmulation:c||(d=l.runtimeDesktopEmulation),{deviceEmulation:d,screenEmulation:s?void 0:`${e.screenEmulation.width}x${e.screenEmulation.height}, DPR ${e.screenEmulation.deviceScaleFactor}`,cpuThrottling:t,networkThrottling:n,summary:r}}static showAsPassed(e){switch(e.scoreDisplayMode){case\"manual\":case\"notApplicable\":return!0;case\"error\":case\"informative\":return!1;case\"numeric\":case\"binary\":default:return Number(e.score)>=l.PASS.minScore}}static calculateRating(e,t){if(\"manual\"===t||\"notApplicable\"===t)return l.PASS.label;if(\"error\"===t)return l.ERROR.label;if(null===e)return l.FAIL.label;let n=l.FAIL.label;return e>=l.PASS.minScore?n=l.PASS.label:e>=l.AVERAGE.minScore&&(n=l.AVERAGE.label),n}static calculateCategoryFraction(e){let t=0,n=0,r=0,o=0;for(const i of e.auditRefs){const e=s.showAsPassed(i.result);\"hidden\"!==i.group&&\"manual\"!==i.result.scoreDisplayMode&&\"notApplicable\"!==i.result.scoreDisplayMode&&(\"informative\"!==i.result.scoreDisplayMode?(++t,o+=i.weight,e&&n++):e||++r)}return{numPassed:n,numPassableAudits:t,numInformative:r,totalWeight:o}}static isPluginCategory(e){return e.startsWith(\"lighthouse-plugin-\")}static shouldDisplayAsFraction(e){return\"timespan\"===e||\"snapshot\"===e}}const c={varianceDisclaimer:\"Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.\",calculatorLink:\"See calculator.\",showRelevantAudits:\"Show audits relevant to:\",opportunityResourceColumnLabel:\"Opportunity\",opportunitySavingsColumnLabel:\"Estimated Savings\",errorMissingAuditInfo:\"Report error: no audit information\",errorLabel:\"Error!\",warningHeader:\"Warnings: \",warningAuditsGroupTitle:\"Passed audits but with warnings\",passedAuditsGroupTitle:\"Passed audits\",notApplicableAuditsGroupTitle:\"Not applicable\",manualAuditsGroupTitle:\"Additional items to manually check\",toplevelWarningsMessage:\"There were issues affecting this run of Lighthouse:\",crcInitialNavigation:\"Initial Navigation\",crcLongestDurationLabel:\"Maximum critical path latency:\",snippetExpandButtonLabel:\"Expand snippet\",snippetCollapseButtonLabel:\"Collapse snippet\",lsPerformanceCategoryDescription:\"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.\",labDataTitle:\"Lab Data\",thirdPartyResourcesLabel:\"Show 3rd-party resources\",viewTreemapLabel:\"View Treemap\",viewTraceLabel:\"View Trace\",viewOriginalTraceLabel:\"View Original Trace\",dropdownPrintSummary:\"Print Summary\",dropdownPrintExpanded:\"Print Expanded\",dropdownCopyJSON:\"Copy JSON\",dropdownSaveHTML:\"Save as HTML\",dropdownSaveJSON:\"Save as JSON\",dropdownViewer:\"Open in Viewer\",dropdownSaveGist:\"Save as Gist\",dropdownDarkTheme:\"Toggle Dark Theme\",runtimeSettingsDevice:\"Device\",runtimeSettingsNetworkThrottling:\"Network throttling\",runtimeSettingsCPUThrottling:\"CPU throttling\",runtimeSettingsUANetwork:\"User agent (network)\",runtimeSettingsBenchmark:\"Unthrottled CPU/Memory Power\",runtimeSettingsAxeVersion:\"Axe version\",runtimeSettingsScreenEmulation:\"Screen emulation\",footerIssue:\"File an issue\",runtimeNoEmulation:\"No emulation\",runtimeMobileEmulation:\"Emulated Moto G Power\",runtimeDesktopEmulation:\"Emulated Desktop\",runtimeUnknown:\"Unknown\",runtimeSingleLoad:\"Single page load\",runtimeAnalysisWindow:\"Initial page load\",runtimeSingleLoadTooltip:\"This data is taken from a single page load, as opposed to field data summarizing many sessions.\",throttlingProvided:\"Provided by environment\",show:\"Show\",hide:\"Hide\",expandView:\"Expand view\",collapseView:\"Collapse view\",runtimeSlow4g:\"Slow 4G throttling\",runtimeCustom:\"Custom throttling\",firstPartyChipLabel:\"1st party\",openInANewTabTooltip:\"Open in a new tab\",unattributable:\"Unattributable\"};\n/**\n   * @license\n   * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */class d{constructor(e,t){this.dom=e,this.detailsRenderer=t}get _clumpTitles(){return{warning:i.strings.warningAuditsGroupTitle,manual:i.strings.manualAuditsGroupTitle,passed:i.strings.passedAuditsGroupTitle,notApplicable:i.strings.notApplicableAuditsGroupTitle}}renderAudit(e){const t=this.dom.createComponent(\"audit\");return this.populateAuditValues(e,t)}populateAuditValues(e,t){const n=i.strings,r=this.dom.find(\".lh-audit\",t);r.id=e.result.id;const o=e.result.scoreDisplayMode;e.result.displayValue&&(this.dom.find(\".lh-audit__display-text\",r).textContent=e.result.displayValue);const a=this.dom.find(\".lh-audit__title\",r);a.append(this.dom.convertMarkdownCodeSnippets(e.result.title));const l=this.dom.find(\".lh-audit__description\",r);l.append(this.dom.convertMarkdownLinkSnippets(e.result.description));for(const t of e.relevantMetrics||[]){const e=this.dom.createChildOf(l,\"span\",\"lh-audit__adorn\");e.title=\"Relevant to \"+t.result.title,e.textContent=t.acronym||t.id}e.stackPacks&&e.stackPacks.forEach((e=>{const t=this.dom.createElement(\"img\",\"lh-audit__stackpack__img\");t.src=e.iconDataURL,t.alt=e.title;const n=this.dom.convertMarkdownLinkSnippets(e.description,{alwaysAppendUtmSource:!0}),o=this.dom.createElement(\"div\",\"lh-audit__stackpack\");o.append(t,n),this.dom.find(\".lh-audit__stackpacks\",r).append(o)}));const s=this.dom.find(\"details\",r);if(e.result.details){const t=this.detailsRenderer.render(e.result.details);t&&(t.classList.add(\"lh-details\"),s.append(t))}if(this.dom.find(\".lh-chevron-container\",r).append(this._createChevron()),this._setRatingClass(r,e.result.score,o),\"error\"===e.result.scoreDisplayMode){r.classList.add(\"lh-audit--error\");const t=this.dom.find(\".lh-audit__display-text\",r);t.textContent=n.errorLabel,t.classList.add(\"lh-tooltip-boundary\"),this.dom.createChildOf(t,\"div\",\"lh-tooltip lh-tooltip--error\").textContent=e.result.errorMessage||n.errorMissingAuditInfo}else e.result.explanation&&(this.dom.createChildOf(a,\"div\",\"lh-audit-explanation\").textContent=e.result.explanation);const c=e.result.warnings;if(!c||0===c.length)return r;const d=this.dom.find(\"summary\",s),h=this.dom.createChildOf(d,\"div\",\"lh-warnings\");if(this.dom.createChildOf(h,\"span\").textContent=n.warningHeader,1===c.length)h.append(this.dom.createTextNode(c.join(\"\")));else{const e=this.dom.createChildOf(h,\"ul\");for(const t of c)this.dom.createChildOf(e,\"li\").textContent=t}return r}injectFinalScreenshot(e,t,n){const r=t[\"final-screenshot\"];if(!r||\"error\"===r.scoreDisplayMode)return null;if(!r.details||\"screenshot\"!==r.details.type)return null;const o=this.dom.createElement(\"img\",\"lh-final-ss-image\"),i=r.details.data;o.src=i,o.alt=r.title;const a=this.dom.find(\".lh-category .lh-category-header\",e),l=this.dom.createElement(\"div\",\"lh-category-headercol\"),s=this.dom.createElement(\"div\",\"lh-category-headercol lh-category-headercol--separator\"),c=this.dom.createElement(\"div\",\"lh-category-headercol\");l.append(...a.childNodes),l.append(n),c.append(o),a.append(l,s,c),a.classList.add(\"lh-category-header__finalscreenshot\")}_createChevron(){const e=this.dom.createComponent(\"chevron\");return this.dom.find(\"svg.lh-chevron\",e)}_setRatingClass(e,t,n){const r=s.calculateRating(t,n);return e.classList.add(\"lh-audit--\"+n.toLowerCase()),\"informative\"!==n&&e.classList.add(\"lh-audit--\"+r),e}renderCategoryHeader(e,t,n){const r=this.dom.createComponent(\"categoryHeader\"),o=this.dom.find(\".lh-score__gauge\",r),i=this.renderCategoryScore(e,t,n);if(o.append(i),e.description){const t=this.dom.convertMarkdownLinkSnippets(e.description);this.dom.find(\".lh-category-header__description\",r).append(t)}return r}renderAuditGroup(e){const t=this.dom.createElement(\"div\",\"lh-audit-group\"),n=this.dom.createElement(\"div\",\"lh-audit-group__header\");this.dom.createChildOf(n,\"span\",\"lh-audit-group__title\").textContent=e.title,t.append(n);let r=null;return e.description&&(r=this.dom.convertMarkdownLinkSnippets(e.description),r.classList.add(\"lh-audit-group__description\",\"lh-audit-group__footer\"),t.append(r)),[t,r]}_renderGroupedAudits(e,t){const n=new Map,r=\"NotAGroup\";n.set(r,[]);for(const t of e){const e=t.group||r;if(\"hidden\"===e)continue;const o=n.get(e)||[];o.push(t),n.set(e,o)}const o=[];for(const[e,i]of n){if(e===r){for(const e of i)o.push(this.renderAudit(e));continue}const n=t[e],[a,l]=this.renderAuditGroup(n);for(const e of i)a.insertBefore(this.renderAudit(e),l);a.classList.add(\"lh-audit-group--\"+e),o.push(a)}return o}renderUnexpandableClump(e,t){const n=this.dom.createElement(\"div\");return this._renderGroupedAudits(e,t).forEach((e=>n.append(e))),n}renderClump(e,{auditRefs:t,description:n}){const r=this.dom.createComponent(\"clump\"),o=this.dom.find(\".lh-clump\",r);\"warning\"===e&&o.setAttribute(\"open\",\"\");const a=this.dom.find(\".lh-audit-group__header\",o),l=this._clumpTitles[e];this.dom.find(\".lh-audit-group__title\",a).textContent=l,this.dom.find(\".lh-audit-group__itemcount\",o).textContent=`(${t.length})`;const s=t.map(this.renderAudit.bind(this));o.append(...s);const c=this.dom.find(\".lh-audit-group\",r);if(n){const e=this.dom.convertMarkdownLinkSnippets(n);e.classList.add(\"lh-audit-group__description\",\"lh-audit-group__footer\"),c.append(e)}return this.dom.find(\".lh-clump-toggletext--show\",c).textContent=i.strings.show,this.dom.find(\".lh-clump-toggletext--hide\",c).textContent=i.strings.hide,o.classList.add(\"lh-clump--\"+e.toLowerCase()),c}renderCategoryScore(e,t,n){let r;if(r=n&&s.shouldDisplayAsFraction(n.gatherMode)?this.renderCategoryFraction(e):this.renderScoreGauge(e,t),n?.omitLabel&&this.dom.find(\".lh-gauge__label,.lh-fraction__label\",r).remove(),n?.onPageAnchorRendered){const e=this.dom.find(\"a\",r);n.onPageAnchorRendered(e)}return r}renderScoreGauge(e,t){const n=this.dom.createComponent(\"gauge\"),r=this.dom.find(\"a.lh-gauge__wrapper\",n);s.isPluginCategory(e.id)&&r.classList.add(\"lh-gauge__wrapper--plugin\");const o=Number(e.score),a=this.dom.find(\".lh-gauge\",n),l=this.dom.find(\"circle.lh-gauge-arc\",a);l&&this._setGaugeArc(l,o);const c=Math.round(100*o),d=this.dom.find(\"div.lh-gauge__percentage\",n);return d.textContent=c.toString(),null===e.score&&(d.classList.add(\"lh-gauge--error\"),d.textContent=\"\",d.title=i.strings.errorLabel),0===e.auditRefs.length||this.hasApplicableAudits(e)?r.classList.add(\"lh-gauge__wrapper--\"+s.calculateRating(e.score)):(r.classList.add(\"lh-gauge__wrapper--not-applicable\"),d.textContent=\"-\",d.title=i.strings.notApplicableAuditsGroupTitle),this.dom.find(\".lh-gauge__label\",n).textContent=e.title,n}renderCategoryFraction(e){const t=this.dom.createComponent(\"fraction\"),n=this.dom.find(\"a.lh-fraction__wrapper\",t),{numPassed:r,numPassableAudits:o,totalWeight:i}=s.calculateCategoryFraction(e),a=r/o,l=this.dom.find(\".lh-fraction__content\",t),c=this.dom.createElement(\"span\");c.textContent=`${r}/${o}`,l.append(c);let d=s.calculateRating(a);return 0===i&&(d=\"null\"),n.classList.add(\"lh-fraction__wrapper--\"+d),this.dom.find(\".lh-fraction__label\",t).textContent=e.title,t}hasApplicableAudits(e){return e.auditRefs.some((e=>\"notApplicable\"!==e.result.scoreDisplayMode))}_setGaugeArc(e,t){const n=2*Math.PI*Number(e.getAttribute(\"r\")),r=Number(e.getAttribute(\"stroke-width\")),o=.25*r/n;e.style.transform=`rotate(${360*o-90}deg)`;let i=t*n-r/2;0===t&&(e.style.opacity=\"0\"),1===t&&(i=n),e.style.strokeDasharray=`${Math.max(i,0)} ${n}`}_auditHasWarning(e){return Boolean(e.result.warnings?.length)}_getClumpIdForAuditRef(e){const t=e.result.scoreDisplayMode;return\"manual\"===t||\"notApplicable\"===t?t:s.showAsPassed(e.result)?this._auditHasWarning(e)?\"warning\":\"passed\":\"failed\"}render(e,t={},n){const r=this.dom.createElement(\"div\",\"lh-category\");r.id=e.id,r.append(this.renderCategoryHeader(e,t,n));const o=new Map;o.set(\"failed\",[]),o.set(\"warning\",[]),o.set(\"manual\",[]),o.set(\"passed\",[]),o.set(\"notApplicable\",[]);for(const t of e.auditRefs){const e=this._getClumpIdForAuditRef(t),n=o.get(e);n.push(t),o.set(e,n)}for(const e of o.values())e.sort(((e,t)=>t.weight-e.weight));for(const[n,i]of o){if(0===i.length)continue;if(\"failed\"===n){const e=this.renderUnexpandableClump(i,t);e.classList.add(\"lh-clump--failed\"),r.append(e);continue}const o=\"manual\"===n?e.manualDescription:void 0,a=this.renderClump(n,{auditRefs:i,description:o});r.append(a)}return r}}\n/**\n   * @license\n   * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */class h{static initTree(e){let t=0;const n=Object.keys(e);return n.length>0&&(t=e[n[0]].request.startTime),{tree:e,startTime:t,transferSize:0}}static createSegment(e,t,n,r,o,i){const a=e[t],l=Object.keys(e),s=l.indexOf(t)===l.length-1,c=!!a.children&&Object.keys(a.children).length>0,d=Array.isArray(o)?o.slice(0):[];return void 0!==i&&d.push(!i),{node:a,isLastChild:s,hasChildren:c,startTime:n,transferSize:r+a.request.transferSize,treeMarkers:d}}static createChainNode(e,t,n){const r=e.createComponent(\"crcChain\");e.find(\".lh-crc-node\",r).setAttribute(\"title\",t.node.request.url);const o=e.find(\".lh-crc-node__tree-marker\",r);t.treeMarkers.forEach((t=>{const n=t?\"lh-tree-marker lh-vert\":\"lh-tree-marker\";o.append(e.createElement(\"span\",n),e.createElement(\"span\",\"lh-tree-marker\"))}));const a=t.isLastChild?\"lh-tree-marker lh-up-right\":\"lh-tree-marker lh-vert-right\",l=t.hasChildren?\"lh-tree-marker lh-horiz-down\":\"lh-tree-marker lh-right\";o.append(e.createElement(\"span\",a),e.createElement(\"span\",\"lh-tree-marker lh-right\"),e.createElement(\"span\",l));const s=t.node.request.url,c=n.renderTextURL(s),d=e.find(\".lh-crc-node__tree-value\",r);if(d.append(c),!t.hasChildren){const{startTime:n,endTime:r,transferSize:o}=t.node.request,a=e.createElement(\"span\",\"lh-crc-node__chain-duration\");a.textContent=\" - \"+i.i18n.formatMilliseconds(1e3*(r-n))+\", \";const l=e.createElement(\"span\",\"lh-crc-node__chain-duration\");l.textContent=i.i18n.formatBytesToKiB(o,.01),d.append(a,l)}return r}static buildTree(e,t,n,r,o,i){if(r.append(p.createChainNode(e,n,i)),n.node.children)for(const a of Object.keys(n.node.children)){const l=p.createSegment(n.node.children,a,n.startTime,n.transferSize,n.treeMarkers,n.isLastChild);p.buildTree(e,t,l,r,o,i)}}static render(e,t,n){const r=e.createComponent(\"crc\"),o=e.find(\".lh-crc\",r);e.find(\".lh-crc-initial-nav\",r).textContent=i.strings.crcInitialNavigation,e.find(\".lh-crc__longest_duration_label\",r).textContent=i.strings.crcLongestDurationLabel,e.find(\".lh-crc__longest_duration\",r).textContent=i.i18n.formatMilliseconds(t.longestChain.duration);const a=p.initTree(t.chains);for(const i of Object.keys(a.tree)){const l=p.createSegment(a.tree,i,a.startTime,a.transferSize);p.buildTree(e,r,l,o,t,n)}return e.find(\".lh-crc-container\",r)}}const p=h;\n/**\n   * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */function u(e,t,n){return e<t?t:e>n?n:e}class g{static getScreenshotPositions(e,t,n){const r=(i=e).left+i.width/2,o=i.top+i.height/2;var i;const a=u(r-t.width/2,0,n.width-t.width),l=u(o-t.height/2,0,n.height-t.height);return{screenshot:{left:a,top:l},clip:{left:e.left-a,top:e.top-l}}}static renderClipPathInScreenshot(e,t,n,r,o){const a=e.find(\"clipPath\",t),l=\"clip-\"+i.getUniqueSuffix();a.id=l,t.style.clipPath=`url(#${l})`;const s=n.top/o.height,c=s+r.height/o.height,d=n.left/o.width,h=d+r.width/o.width,p=[`0,0             1,0            1,${s}          0,${s}`,`0,${c}     1,${c}    1,1               0,1`,`0,${s}        ${d},${s} ${d},${c} 0,${c}`,`${h},${s} 1,${s}       1,${c}       ${h},${c}`];for(const t of p){const n=e.createElementNS(\"http://www.w3.org/2000/svg\",\"polygon\");n.setAttribute(\"points\",t),a.append(n)}}static installFullPageScreenshot(e,t){e.style.setProperty(\"--element-screenshot-url\",`url('${t.data}')`)}static installOverlayFeature(e){const{dom:t,rootEl:n,overlayContainerEl:r,fullPageScreenshot:o}=e,i=\"lh-screenshot-overlay--enabled\";n.classList.contains(i)||(n.classList.add(i),n.addEventListener(\"click\",(e=>{const n=e.target;if(!n)return;const i=n.closest(\".lh-node > .lh-element-screenshot\");if(!i)return;const a=t.createElement(\"div\",\"lh-element-screenshot__overlay\");r.append(a);const l={width:.95*a.clientWidth,height:.8*a.clientHeight},s={width:Number(i.dataset.rectWidth),height:Number(i.dataset.rectHeight),left:Number(i.dataset.rectLeft),right:Number(i.dataset.rectLeft)+Number(i.dataset.rectWidth),top:Number(i.dataset.rectTop),bottom:Number(i.dataset.rectTop)+Number(i.dataset.rectHeight)},c=g.render(t,o.screenshot,s,l);c?(a.append(c),a.addEventListener(\"click\",(()=>a.remove()))):a.remove()})))}static _computeZoomFactor(e,t){const n={x:t.width/e.width,y:t.height/e.height},r=.75*Math.min(n.x,n.y);return Math.min(1,r)}static render(e,t,n,r){if(!function(e,t){return t.left<=e.width&&0<=t.right&&t.top<=e.height&&0<=t.bottom}(t,n))return null;const o=e.createComponent(\"elementScreenshot\"),i=e.find(\"div.lh-element-screenshot\",o);i.dataset.rectWidth=n.width.toString(),i.dataset.rectHeight=n.height.toString(),i.dataset.rectLeft=n.left.toString(),i.dataset.rectTop=n.top.toString();const a=this._computeZoomFactor(n,r),l={width:r.width/a,height:r.height/a};l.width=Math.min(t.width,l.width),l.height=Math.min(t.height,l.height);const s=l.width*a,c=l.height*a,d=g.getScreenshotPositions(n,l,{width:t.width,height:t.height}),h=e.find(\"div.lh-element-screenshot__image\",i);h.style.width=s+\"px\",h.style.height=c+\"px\",h.style.backgroundPositionY=-d.screenshot.top*a+\"px\",h.style.backgroundPositionX=-d.screenshot.left*a+\"px\",h.style.backgroundSize=`${t.width*a}px ${t.height*a}px`;const p=e.find(\"div.lh-element-screenshot__element-marker\",i);p.style.width=n.width*a+\"px\",p.style.height=n.height*a+\"px\",p.style.left=d.clip.left*a+\"px\",p.style.top=d.clip.top*a+\"px\";const u=e.find(\"div.lh-element-screenshot__mask\",i);return u.style.width=s+\"px\",u.style.height=c+\"px\",g.renderClipPathInScreenshot(e,u,d.clip,n,l),i\n/**\n   * @license\n   * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */}}const m=[\"http://\",\"https://\",\"data:\"],f=[\"bytes\",\"numeric\",\"ms\",\"timespanMs\"];class v{constructor(e,t={}){this._dom=e,this._fullPageScreenshot=t.fullPageScreenshot,this._entities=t.entities}render(e){switch(e.type){case\"filmstrip\":return this._renderFilmstrip(e);case\"list\":return this._renderList(e);case\"table\":case\"opportunity\":return this._renderTable(e);case\"criticalrequestchain\":return h.render(this._dom,e,this);case\"screenshot\":case\"debugdata\":case\"treemap-data\":return null;default:return this._renderUnknown(e.type,e)}}_renderBytes(e){const t=i.i18n.formatBytesToKiB(e.value,e.granularity||.1),n=this._renderText(t);return n.title=i.i18n.formatBytes(e.value),n}_renderMilliseconds(e){let t;return t=\"duration\"===e.displayUnit?i.i18n.formatDuration(e.value):i.i18n.formatMilliseconds(e.value,e.granularity||10),this._renderText(t)}renderTextURL(e){const t=e;let r,o,i;try{const e=n.parseURL(t);r=\"/\"===e.file?e.origin:e.file,o=\"/\"===e.file||\"\"===e.hostname?\"\":`(${e.hostname})`,i=t}catch(e){r=t}const a=this._dom.createElement(\"div\",\"lh-text__url\");if(a.append(this._renderLink({text:r,url:t})),o){const e=this._renderText(o);e.classList.add(\"lh-text__url-host\"),a.append(e)}return i&&(a.title=t,a.dataset.url=t),a}_renderLink(e){const t=this._dom.createElement(\"a\");if(this._dom.safelySetHref(t,e.url),!t.href){const t=this._renderText(e.text);return t.classList.add(\"lh-link\"),t}return t.rel=\"noopener\",t.target=\"_blank\",t.textContent=e.text,t.classList.add(\"lh-link\"),t}_renderText(e){const t=this._dom.createElement(\"div\",\"lh-text\");return t.textContent=e,t}_renderNumeric(e){const t=i.i18n.formatNumber(e.value,e.granularity||.1),n=this._dom.createElement(\"div\",\"lh-numeric\");return n.textContent=t,n}_renderThumbnail(e){const t=this._dom.createElement(\"img\",\"lh-thumbnail\"),n=e;return t.src=n,t.title=n,t.alt=\"\",t}_renderUnknown(e,t){console.error(\"Unknown details type: \"+e,t);const n=this._dom.createElement(\"details\",\"lh-unknown\");return this._dom.createChildOf(n,\"summary\").textContent=`We don't know how to render audit details of type \\`${e}\\`. The Lighthouse version that collected this data is likely newer than the Lighthouse version of the report renderer. Expand for the raw JSON.`,this._dom.createChildOf(n,\"pre\").textContent=JSON.stringify(t,null,2),n}_renderTableValue(e,t){if(null==e)return null;if(\"object\"==typeof e)switch(e.type){case\"code\":return this._renderCode(e.value);case\"link\":return this._renderLink(e);case\"node\":return this.renderNode(e);case\"numeric\":return this._renderNumeric(e);case\"source-location\":return this.renderSourceLocation(e);case\"url\":return this.renderTextURL(e.value);default:return this._renderUnknown(e.type,e)}switch(t.valueType){case\"bytes\":{const n=Number(e);return this._renderBytes({value:n,granularity:t.granularity})}case\"code\":{const t=String(e);return this._renderCode(t)}case\"ms\":{const n={value:Number(e),granularity:t.granularity,displayUnit:t.displayUnit};return this._renderMilliseconds(n)}case\"numeric\":{const n=Number(e);return this._renderNumeric({value:n,granularity:t.granularity})}case\"text\":{const t=String(e);return this._renderText(t)}case\"thumbnail\":{const t=String(e);return this._renderThumbnail(t)}case\"timespanMs\":{const t=Number(e);return this._renderMilliseconds({value:t})}case\"url\":{const t=String(e);return m.some((e=>t.startsWith(e)))?this.renderTextURL(t):this._renderCode(t)}default:return this._renderUnknown(t.valueType,e)}}_getDerivedSubItemsHeading(e){return e.subItemsHeading?{key:e.subItemsHeading.key||\"\",valueType:e.subItemsHeading.valueType||e.valueType,granularity:e.subItemsHeading.granularity||e.granularity,displayUnit:e.subItemsHeading.displayUnit||e.displayUnit,label:\"\"}:null}_renderTableRow(e,t){const n=this._dom.createElement(\"tr\");for(const r of t){if(!r||!r.key){this._dom.createChildOf(n,\"td\",\"lh-table-column--empty\");continue}const t=e[r.key];let o;if(null!=t&&(o=this._renderTableValue(t,r)),o){const e=\"lh-table-column--\"+r.valueType;this._dom.createChildOf(n,\"td\",e).append(o)}else this._dom.createChildOf(n,\"td\",\"lh-table-column--empty\")}return n}_renderTableRowsFromItem(e,t){const n=this._dom.createFragment();if(n.append(this._renderTableRow(e,t)),!e.subItems)return n;const r=t.map(this._getDerivedSubItemsHeading);if(!r.some(Boolean))return n;for(const t of e.subItems.items){const e=this._renderTableRow(t,r);e.classList.add(\"lh-sub-item-row\"),n.append(e)}return n}_adornEntityGroupRow(e){const t=e.dataset.entity;if(!t)return;const n=this._entities?.find((e=>e.name===t));if(!n)return;const r=this._dom.find(\"td\",e);if(n.category){const e=this._dom.createElement(\"span\");e.classList.add(\"lh-audit__adorn\"),e.textContent=n.category,r.append(\" \",e)}if(n.isFirstParty){const e=this._dom.createElement(\"span\");e.classList.add(\"lh-audit__adorn\",\"lh-audit__adorn1p\"),e.textContent=i.strings.firstPartyChipLabel,r.append(\" \",e)}if(n.homepage){const e=this._dom.createElement(\"a\");e.href=n.homepage,e.target=\"_blank\",e.title=i.strings.openInANewTabTooltip,e.classList.add(\"lh-report-icon--external\"),r.append(\" \",e)}}_renderEntityGroupRow(e,t){const n={...t[0]};n.valueType=\"text\";const r=[n,...t.slice(1)],o=this._dom.createFragment();return o.append(this._renderTableRow(e,r)),this._dom.find(\"tr\",o).classList.add(\"lh-row--group\"),o}_getEntityGroupItems(e){const{items:t,headings:n,sortedBy:r}=e;if(!t.length||e.isEntityGrouped||!t.some((e=>e.entity)))return[];const o=new Set(e.skipSumming||[]),a=[];for(const e of n)e.key&&!o.has(e.key)&&f.includes(e.valueType)&&a.push(e.key);const l=n[0].key;if(!l)return[];const c=new Map;for(const e of t){const t=\"string\"==typeof e.entity?e.entity:void 0,n=c.get(t)||{[l]:t||i.strings.unattributable,entity:t};for(const t of a)n[t]=Number(n[t]||0)+Number(e[t]||0);c.set(t,n)}const d=[...c.values()];return r&&d.sort(s.getTableItemSortComparator(r)),d}_renderTable(e){if(!e.items.length)return this._dom.createElement(\"span\");const t=this._dom.createElement(\"table\",\"lh-table\"),n=this._dom.createChildOf(t,\"thead\"),r=this._dom.createChildOf(n,\"tr\");for(const t of e.headings){const e=\"lh-table-column--\"+(t.valueType||\"text\"),n=this._dom.createElement(\"div\",\"lh-text\");n.textContent=t.label,this._dom.createChildOf(r,\"th\",e).append(n)}const o=this._getEntityGroupItems(e),i=this._dom.createChildOf(t,\"tbody\");if(o.length)for(const t of o){const n=\"string\"==typeof t.entity?t.entity:void 0,r=this._renderEntityGroupRow(t,e.headings);for(const t of e.items.filter((e=>e.entity===n)))r.append(this._renderTableRowsFromItem(t,e.headings));const o=this._dom.findAll(\"tr\",r);n&&o.length&&(o.forEach((e=>e.dataset.entity=n)),this._adornEntityGroupRow(o[0])),i.append(r)}else{let t=!0;for(const n of e.items){const r=this._renderTableRowsFromItem(n,e.headings),o=this._dom.findAll(\"tr\",r),a=o[0];if(\"string\"==typeof n.entity&&(a.dataset.entity=n.entity),e.isEntityGrouped&&n.entity)a.classList.add(\"lh-row--group\"),this._adornEntityGroupRow(a);else for(const e of o)e.classList.add(t?\"lh-row--even\":\"lh-row--odd\");t=!t,i.append(r)}}return t}_renderList(e){const t=this._dom.createElement(\"div\",\"lh-list\");return e.items.forEach((e=>{const n=this.render(e);n&&t.append(n)})),t}renderNode(e){const t=this._dom.createElement(\"span\",\"lh-node\");if(e.nodeLabel){const n=this._dom.createElement(\"div\");n.textContent=e.nodeLabel,t.append(n)}if(e.snippet){const n=this._dom.createElement(\"div\");n.classList.add(\"lh-node__snippet\"),n.textContent=e.snippet,t.append(n)}if(e.selector&&(t.title=e.selector),e.path&&t.setAttribute(\"data-path\",e.path),e.selector&&t.setAttribute(\"data-selector\",e.selector),e.snippet&&t.setAttribute(\"data-snippet\",e.snippet),!this._fullPageScreenshot)return t;const n=e.lhId&&this._fullPageScreenshot.nodes[e.lhId];if(!n||0===n.width||0===n.height)return t;const r=g.render(this._dom,this._fullPageScreenshot.screenshot,n,{width:147,height:100});return r&&t.prepend(r),t}renderSourceLocation(e){if(!e.url)return null;const t=`${e.url}:${e.line+1}:${e.column}`;let n,r;if(e.original&&(n=`${e.original.file||\"<unmapped>\"}:${e.original.line+1}:${e.original.column}`),\"network\"===e.urlProvider&&n)r=this._renderLink({url:e.url,text:n}),r.title=\"maps to generated location \"+t;else if(\"network\"!==e.urlProvider||n)if(\"comment\"===e.urlProvider&&n)r=this._renderText(n+\" (from source map)\"),r.title=t+\" (from sourceURL)\";else{if(\"comment\"!==e.urlProvider||n)return null;r=this._renderText(t+\" (from sourceURL)\")}else r=this.renderTextURL(e.url),this._dom.find(\".lh-link\",r).textContent+=`:${e.line+1}:${e.column}`;return r.classList.add(\"lh-source-location\"),r.setAttribute(\"data-source-url\",e.url),r.setAttribute(\"data-source-line\",String(e.line)),r.setAttribute(\"data-source-column\",String(e.column)),r}_renderFilmstrip(e){const t=this._dom.createElement(\"div\",\"lh-filmstrip\");for(const n of e.items){const e=this._dom.createChildOf(t,\"div\",\"lh-filmstrip__frame\"),r=this._dom.createChildOf(e,\"img\",\"lh-filmstrip__thumbnail\");r.src=n.data,r.alt=\"Screenshot\"}return t}_renderCode(e){const t=this._dom.createElement(\"pre\",\"lh-code\");return t.textContent=e,t\n/**\n   * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */}}const b=1048576;class _{constructor(e){\"en-XA\"===e&&(e=\"de\"),this._locale=e,this._cachedNumberFormatters=new Map}_formatNumberWithGranularity(e,t,n={}){if(void 0!==t){const r=-Math.log10(t);Number.isInteger(r)||(console.warn(`granularity of ${t} is invalid. Using 1 instead`),t=1),t<1&&((n={...n}).minimumFractionDigits=n.maximumFractionDigits=Math.ceil(r)),e=Math.round(e/t)*t,Object.is(e,-0)&&(e=0)}else Math.abs(e)<5e-4&&(e=0);let r;const o=[n.minimumFractionDigits,n.maximumFractionDigits,n.style,n.unit,n.unitDisplay,this._locale].join(\"\");return r=this._cachedNumberFormatters.get(o),r||(r=new Intl.NumberFormat(this._locale,n),this._cachedNumberFormatters.set(o,r)),r.format(e).replace(\" \",\" \")}formatNumber(e,t){return this._formatNumberWithGranularity(e,t)}formatInteger(e){return this._formatNumberWithGranularity(e,1)}formatPercent(e){return new Intl.NumberFormat(this._locale,{style:\"percent\"}).format(e)}formatBytesToKiB(e,t){return this._formatNumberWithGranularity(e/1024,t)+\" KiB\"}formatBytesToMiB(e,t){return this._formatNumberWithGranularity(e/b,t)+\" MiB\"}formatBytes(e,t=1){return this._formatNumberWithGranularity(e,t,{style:\"unit\",unit:\"byte\",unitDisplay:\"long\"})}formatBytesWithBestUnit(e,t){return e>=b?this.formatBytesToMiB(e,t):e>=1024?this.formatBytesToKiB(e,t):this._formatNumberWithGranularity(e,t,{style:\"unit\",unit:\"byte\",unitDisplay:\"narrow\"})}formatKbps(e,t){return this._formatNumberWithGranularity(e,t,{style:\"unit\",unit:\"kilobit-per-second\",unitDisplay:\"short\"})}formatMilliseconds(e,t){return this._formatNumberWithGranularity(e,t,{style:\"unit\",unit:\"millisecond\",unitDisplay:\"short\"})}formatSeconds(e,t){return this._formatNumberWithGranularity(e/1e3,t,{style:\"unit\",unit:\"second\",unitDisplay:\"narrow\"})}formatDateTime(e){const t={month:\"short\",day:\"numeric\",year:\"numeric\",hour:\"numeric\",minute:\"numeric\",timeZoneName:\"short\"};let n;try{n=new Intl.DateTimeFormat(this._locale,t)}catch(e){t.timeZone=\"UTC\",n=new Intl.DateTimeFormat(this._locale,t)}return n.format(new Date(e))}formatDuration(e){let t=e/1e3;if(0===Math.round(t))return\"None\";const n=[],r={day:86400,hour:3600,minute:60,second:1};return Object.keys(r).forEach((e=>{const o=r[e],i=Math.floor(t/o);if(i>0){t-=i*o;const r=this._formatNumberWithGranularity(i,1,{style:\"unit\",unit:e,unitDisplay:\"narrow\"});n.push(r)}})),n.join(\" \")\n/**\n   * @license\n   * Copyright 2018 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */}}class w extends d{_renderMetric(e){const t=this.dom.createComponent(\"metric\"),n=this.dom.find(\".lh-metric\",t);n.id=e.result.id;const r=s.calculateRating(e.result.score,e.result.scoreDisplayMode);n.classList.add(\"lh-metric--\"+r),this.dom.find(\".lh-metric__title\",t).textContent=e.result.title;const o=this.dom.find(\".lh-metric__value\",t);o.textContent=e.result.displayValue||\"\";const i=this.dom.find(\".lh-metric__description\",t);return i.append(this.dom.convertMarkdownLinkSnippets(e.result.description)),\"error\"===e.result.scoreDisplayMode?(i.textContent=\"\",o.textContent=\"Error!\",this.dom.createChildOf(i,\"span\").textContent=e.result.errorMessage||\"Report error: no metric information\"):\"notApplicable\"===e.result.scoreDisplayMode&&(o.textContent=\"--\"),n}_renderOpportunity(e,t){const n=this.dom.createComponent(\"opportunity\"),r=this.populateAuditValues(e,n);if(r.id=e.result.id,!e.result.details||\"error\"===e.result.scoreDisplayMode)return r;const o=e.result.details;if(void 0===o.overallSavingsMs)return r;const a=this.dom.find(\"span.lh-audit__display-text, div.lh-audit__display-text\",r),l=o.overallSavingsMs/t*100+\"%\";if(this.dom.find(\"div.lh-sparkline__bar\",r).style.width=l,a.textContent=i.i18n.formatSeconds(o.overallSavingsMs,.01),e.result.displayValue){const t=e.result.displayValue;this.dom.find(\"div.lh-load-opportunity__sparkline\",r).title=t,a.title=t}return r}_getWastedMs(e){if(e.result.details){const t=e.result.details;if(\"number\"!=typeof t.overallSavingsMs)throw new Error(\"non-opportunity details passed to _getWastedMs\");return t.overallSavingsMs}return Number.MIN_VALUE}_getScoringCalculatorHref(e){const t=e.filter((e=>\"metrics\"===e.group)),n=e.find((e=>\"interactive\"===e.id)),r=e.find((e=>\"first-cpu-idle\"===e.id)),o=e.find((e=>\"first-meaningful-paint\"===e.id));n&&t.push(n),r&&t.push(r),o&&t.push(o);const a=[...t.map((e=>{let t;var n;return\"number\"==typeof e.result.numericValue?(t=\"cumulative-layout-shift\"===e.id?(n=e.result.numericValue,Math.round(100*n)/100):Math.round(e.result.numericValue),t=t.toString()):t=\"null\",[e.acronym||e.id,t]}))];i.reportJson&&(a.push([\"device\",i.reportJson.configSettings.formFactor]),a.push([\"version\",i.reportJson.lighthouseVersion]));const l=new URLSearchParams(a),s=new URL(\"https://googlechrome.github.io/lighthouse/scorecalc/\");return s.hash=l.toString(),s.href}_classifyPerformanceAudit(e){return e.group?null:void 0!==e.result.details?.overallSavingsMs?\"load-opportunity\":\"diagnostic\"}render(e,t,n){const r=i.strings,o=this.dom.createElement(\"div\",\"lh-category\");o.id=e.id,o.append(this.renderCategoryHeader(e,t,n));const a=e.auditRefs.filter((e=>\"metrics\"===e.group));if(a.length){const[n,l]=this.renderAuditGroup(t.metrics),s=this.dom.createElement(\"input\",\"lh-metrics-toggle__input\"),c=\"lh-metrics-toggle\"+i.getUniqueSuffix();s.setAttribute(\"aria-label\",\"Toggle the display of metric descriptions\"),s.type=\"checkbox\",s.id=c,n.prepend(s);const d=this.dom.find(\".lh-audit-group__header\",n),h=this.dom.createChildOf(d,\"label\",\"lh-metrics-toggle__label\");h.htmlFor=c;const p=this.dom.createChildOf(h,\"span\",\"lh-metrics-toggle__labeltext--show\"),u=this.dom.createChildOf(h,\"span\",\"lh-metrics-toggle__labeltext--hide\");p.textContent=i.strings.expandView,u.textContent=i.strings.collapseView;const g=this.dom.createElement(\"div\",\"lh-metrics-container\");if(n.insertBefore(g,l),a.forEach((e=>{g.append(this._renderMetric(e))})),o.querySelector(\".lh-gauge__wrapper\")){const t=this.dom.find(\".lh-category-header__description\",o),n=this.dom.createChildOf(t,\"div\",\"lh-metrics__disclaimer\"),i=this.dom.convertMarkdownLinkSnippets(r.varianceDisclaimer);n.append(i);const a=this.dom.createChildOf(n,\"a\",\"lh-calclink\");a.target=\"_blank\",a.textContent=r.calculatorLink,this.dom.safelySetHref(a,this._getScoringCalculatorHref(e.auditRefs))}n.classList.add(\"lh-audit-group--metrics\"),o.append(n)}const l=this.dom.createChildOf(o,\"div\",\"lh-filmstrip-container\"),c=e.auditRefs.find((e=>\"screenshot-thumbnails\"===e.id))?.result;if(c?.details){l.id=c.id;const e=this.detailsRenderer.render(c.details);e&&l.append(e)}const d=e.auditRefs.filter((e=>\"load-opportunity\"===this._classifyPerformanceAudit(e))).filter((e=>!s.showAsPassed(e.result))).sort(((e,t)=>this._getWastedMs(t)-this._getWastedMs(e))),h=a.filter((e=>!!e.relevantAudits));if(h.length&&this.renderMetricAuditFilter(h,o),d.length){const e=2e3,n=d.map((e=>this._getWastedMs(e))),i=Math.max(...n),a=Math.max(1e3*Math.ceil(i/1e3),e),[l,s]=this.renderAuditGroup(t[\"load-opportunities\"]),c=this.dom.createComponent(\"opportunityHeader\");this.dom.find(\".lh-load-opportunity__col--one\",c).textContent=r.opportunityResourceColumnLabel,this.dom.find(\".lh-load-opportunity__col--two\",c).textContent=r.opportunitySavingsColumnLabel;const h=this.dom.find(\".lh-load-opportunity__header\",c);l.insertBefore(h,s),d.forEach((e=>l.insertBefore(this._renderOpportunity(e,a),s))),l.classList.add(\"lh-audit-group--load-opportunities\"),o.append(l)}const p=e.auditRefs.filter((e=>\"diagnostic\"===this._classifyPerformanceAudit(e))).filter((e=>!s.showAsPassed(e.result))).sort(((e,t)=>(\"informative\"===e.result.scoreDisplayMode?100:Number(e.result.score))-(\"informative\"===t.result.scoreDisplayMode?100:Number(t.result.score))));if(p.length){const[e,n]=this.renderAuditGroup(t.diagnostics);p.forEach((t=>e.insertBefore(this.renderAudit(t),n))),e.classList.add(\"lh-audit-group--diagnostics\"),o.append(e)}const u=e.auditRefs.filter((e=>this._classifyPerformanceAudit(e)&&s.showAsPassed(e.result)));if(!u.length)return o;const g={auditRefs:u,groupDefinitions:t},m=this.renderClump(\"passed\",g);o.append(m);const f=[];if([\"performance-budget\",\"timing-budget\"].forEach((t=>{const n=e.auditRefs.find((e=>e.id===t));if(n?.result.details){const e=this.detailsRenderer.render(n.result.details);e&&(e.id=t,e.classList.add(\"lh-details\",\"lh-details--budget\",\"lh-audit\"),f.push(e))}})),f.length>0){const[e,n]=this.renderAuditGroup(t.budgets);f.forEach((t=>e.insertBefore(t,n))),e.classList.add(\"lh-audit-group--budgets\"),o.append(e)}return o}renderMetricAuditFilter(e,t){const n=this.dom.createElement(\"div\",\"lh-metricfilter\");this.dom.createChildOf(n,\"span\",\"lh-metricfilter__text\").textContent=i.strings.showRelevantAudits;const r=[{acronym:\"All\"},...e],o=i.getUniqueSuffix();for(const e of r){const r=`metric-${e.acronym}-${o}`,i=this.dom.createChildOf(n,\"input\",\"lh-metricfilter__radio\");i.type=\"radio\",i.name=\"metricsfilter-\"+o,i.id=r;const a=this.dom.createChildOf(n,\"label\",\"lh-metricfilter__label\");a.htmlFor=r,a.title=e.result?.title,a.textContent=e.acronym||e.id,\"All\"===e.acronym&&(i.checked=!0,a.classList.add(\"lh-metricfilter__label--active\")),t.append(n),i.addEventListener(\"input\",(n=>{for(const e of t.querySelectorAll(\"label.lh-metricfilter__label\"))e.classList.toggle(\"lh-metricfilter__label--active\",e.htmlFor===r);t.classList.toggle(\"lh-category--filtered\",\"All\"!==e.acronym);for(const n of t.querySelectorAll(\"div.lh-audit\"))\"All\"!==e.acronym?(n.hidden=!0,e.relevantAudits&&e.relevantAudits.includes(n.id)&&(n.hidden=!1)):n.hidden=!1;const o=t.querySelectorAll(\"div.lh-audit-group, details.lh-audit-group\");for(const e of o){e.hidden=!1;const t=Array.from(e.querySelectorAll(\"div.lh-audit\")),n=!!t.length&&t.every((e=>e.hidden));e.hidden=n}}))}}}\n/**\n   * @license\n   * Copyright 2018 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */class y extends d{render(e,t={}){const n=this.dom.createElement(\"div\",\"lh-category\");n.id=e.id,n.append(this.renderCategoryHeader(e,t));const r=e.auditRefs,o=r.filter((e=>\"manual\"!==e.result.scoreDisplayMode)),i=this._renderAudits(o,t);n.append(i);const a=r.filter((e=>\"manual\"===e.result.scoreDisplayMode)),l=this.renderClump(\"manual\",{auditRefs:a,description:e.manualDescription});return n.append(l),n}renderCategoryScore(e,t){if(null===e.score)return super.renderScoreGauge(e,t);const n=this.dom.createComponent(\"gaugePwa\"),r=this.dom.find(\"a.lh-gauge--pwa__wrapper\",n),o=n.querySelector(\"svg\");if(!o)throw new Error(\"no SVG element found in PWA score gauge template\");y._makeSvgReferencesUnique(o);const i=this._getGroupIds(e.auditRefs),a=this._getPassingGroupIds(e.auditRefs);if(a.size===i.size)r.classList.add(\"lh-badged--all\");else for(const e of a)r.classList.add(\"lh-badged--\"+e);return this.dom.find(\".lh-gauge__label\",n).textContent=e.title,r.title=this._getGaugeTooltip(e.auditRefs,t),n}_getGroupIds(e){const t=e.map((e=>e.group)).filter((e=>!!e));return new Set(t)}_getPassingGroupIds(e){const t=this._getGroupIds(e);for(const n of e)!s.showAsPassed(n.result)&&n.group&&t.delete(n.group);return t}_getGaugeTooltip(e,t){const n=this._getGroupIds(e),r=[];for(const o of n){const n=e.filter((e=>e.group===o)),i=n.length,a=n.filter((e=>s.showAsPassed(e.result))).length,l=t[o].title;r.push(`${l}: ${a}/${i}`)}return r.join(\", \")}_renderAudits(e,t){const n=this.renderUnexpandableClump(e,t),r=this._getPassingGroupIds(e);for(const e of r)this.dom.find(\".lh-audit-group--\"+e,n).classList.add(\"lh-badged\");return n}static _makeSvgReferencesUnique(e){const t=e.querySelector(\"defs\");if(!t)return;const n=i.getUniqueSuffix(),r=t.querySelectorAll(\"[id]\");for(const t of r){const r=t.id,o=`${r}-${n}`;t.id=o;const i=e.querySelectorAll(`use[href=\"#${r}\"]`);for(const e of i)e.setAttribute(\"href\",\"#\"+o);const a=e.querySelectorAll(`[fill=\"url(#${r})\"]`);for(const e of a)e.setAttribute(\"fill\",`url(#${o})`)}}}\n/**\n   * @license\n   * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   *\n   * Dummy text for ensuring report robustness: <\\/script> pre$`post %%LIGHTHOUSE_JSON%%\n   * (this is handled by terser)\n   */class x{constructor(e){this._dom=e,this._opts={}}renderReport(e,t,n){if(!this._dom.rootEl&&t){console.warn(\"Please adopt the new report API in renderer/api.js.\");const e=t.closest(\".lh-root\");e?this._dom.rootEl=e:(t.classList.add(\"lh-root\",\"lh-vars\"),this._dom.rootEl=t)}else this._dom.rootEl&&t&&(this._dom.rootEl=t);n&&(this._opts=n),this._dom.setLighthouseChannel(e.configSettings.channel||\"unknown\");const r=s.prepareReportResult(e);return this._dom.rootEl.textContent=\"\",this._dom.rootEl.append(this._renderReport(r)),this._dom.rootEl}_renderReportTopbar(e){const t=this._dom.createComponent(\"topbar\"),n=this._dom.find(\"a.lh-topbar__url\",t);return n.textContent=e.finalDisplayedUrl,n.title=e.finalDisplayedUrl,this._dom.safelySetHref(n,e.finalDisplayedUrl),t}_renderReportHeader(){const e=this._dom.createComponent(\"heading\"),t=this._dom.createComponent(\"scoresWrapper\");return this._dom.find(\".lh-scores-wrapper-placeholder\",e).replaceWith(t),e}_renderReportFooter(e){const t=this._dom.createComponent(\"footer\");return this._renderMetaBlock(e,t),this._dom.find(\".lh-footer__version_issue\",t).textContent=i.strings.footerIssue,this._dom.find(\".lh-footer__version\",t).textContent=e.lighthouseVersion,t}_renderMetaBlock(e,t){const n=s.getEmulationDescriptions(e.configSettings||{}),r=e.userAgent.match(/(\\w*Chrome\\/[\\d.]+)/),o=Array.isArray(r)?r[1].replace(\"/\",\" \").replace(\"Chrome\",\"Chromium\"):\"Chromium\",a=e.configSettings.channel,l=e.environment.benchmarkIndex.toFixed(0),c=e.environment.credits?.[\"axe-core\"],d=[`${i.strings.runtimeSettingsBenchmark}: ${l}`,`${i.strings.runtimeSettingsCPUThrottling}: ${n.cpuThrottling}`];n.screenEmulation&&d.push(`${i.strings.runtimeSettingsScreenEmulation}: ${n.screenEmulation}`),c&&d.push(`${i.strings.runtimeSettingsAxeVersion}: ${c}`);const h=[[\"date\",\"Captured at \"+i.i18n.formatDateTime(e.fetchTime)],[\"devices\",`${n.deviceEmulation} with Lighthouse ${e.lighthouseVersion}`,d.join(\"\\n\")],[\"samples-one\",i.strings.runtimeSingleLoad,i.strings.runtimeSingleLoadTooltip],[\"stopwatch\",i.strings.runtimeAnalysisWindow],[\"networkspeed\",\"\"+n.summary,`${i.strings.runtimeSettingsNetworkThrottling}: ${n.networkThrottling}`],[\"chrome\",\"Using \"+o+(a?\" with \"+a:\"\"),`${i.strings.runtimeSettingsUANetwork}: \"${e.environment.networkUserAgent}\"`]],p=this._dom.find(\".lh-meta__items\",t);for(const[e,t,n]of h){const r=this._dom.createChildOf(p,\"li\",\"lh-meta__item\");r.textContent=t,n&&(r.classList.add(\"lh-tooltip-boundary\"),this._dom.createChildOf(r,\"div\",\"lh-tooltip\").textContent=n),r.classList.add(\"lh-report-icon\",\"lh-report-icon--\"+e)}}_renderReportWarnings(e){if(!e.runWarnings||0===e.runWarnings.length)return this._dom.createElement(\"div\");const t=this._dom.createComponent(\"warningsToplevel\");this._dom.find(\".lh-warnings__msg\",t).textContent=i.strings.toplevelWarningsMessage;const n=[];for(const t of e.runWarnings){const e=this._dom.createElement(\"li\");e.append(this._dom.convertMarkdownLinkSnippets(t)),n.push(e)}return this._dom.find(\"ul\",t).append(...n),t}_renderScoreGauges(e,t,n){const r=[],o=[],i=[];for(const a of Object.values(e.categories)){const l=n[a.id]||t,c=l.renderCategoryScore(a,e.categoryGroups||{},{gatherMode:e.gatherMode}),d=this._dom.find(\"a.lh-gauge__wrapper, a.lh-fraction__wrapper\",c);d&&(this._dom.safelySetHref(d,\"#\"+a.id),d.addEventListener(\"click\",(e=>{if(!d.matches('[href^=\"#\"]'))return;const t=d.getAttribute(\"href\"),n=this._dom.rootEl;if(!t||!n)return;const r=this._dom.find(t,n);e.preventDefault(),r.scrollIntoView()})),this._opts.onPageAnchorRendered?.(d)),s.isPluginCategory(a.id)?i.push(c):l.renderCategoryScore===t.renderCategoryScore?r.push(c):o.push(c)}return[...r,...o,...i]}_renderReport(e){i.apply({providedStrings:e.i18n.rendererFormattedStrings,i18n:new _(e.configSettings.locale),reportJson:e});const t=new v(this._dom,{fullPageScreenshot:e.fullPageScreenshot??void 0,entities:e.entities}),n=new d(this._dom,t),r={performance:new w(this._dom,t),pwa:new y(this._dom,t)},o=this._dom.createElement(\"div\");o.append(this._renderReportHeader());const a=this._dom.createElement(\"div\",\"lh-container\"),l=this._dom.createElement(\"div\",\"lh-report\");let s;l.append(this._renderReportWarnings(e)),1===Object.keys(e.categories).length?o.classList.add(\"lh-header--solo-category\"):s=this._dom.createElement(\"div\",\"lh-scores-header\");const c=this._dom.createElement(\"div\");if(c.classList.add(\"lh-scorescale-wrap\"),c.append(this._dom.createComponent(\"scorescale\")),s){const t=this._dom.find(\".lh-scores-container\",o);s.append(...this._renderScoreGauges(e,n,r)),t.append(s,c);const i=this._dom.createElement(\"div\",\"lh-sticky-header\");i.append(...this._renderScoreGauges(e,n,r)),a.append(i)}const h=this._dom.createElement(\"div\",\"lh-categories\");l.append(h);const p={gatherMode:e.gatherMode};for(const t of Object.values(e.categories)){const o=r[t.id]||n;o.dom.createChildOf(h,\"div\",\"lh-category-wrapper\").append(o.render(t,e.categoryGroups,p))}n.injectFinalScreenshot(h,e.audits,c);const u=this._dom.createFragment();return this._opts.omitGlobalStyles||u.append(this._dom.createComponent(\"styles\")),this._opts.omitTopbar||u.append(this._renderReportTopbar(e)),u.append(a),l.append(this._renderReportFooter(e)),a.append(o,l),e.fullPageScreenshot&&g.installFullPageScreenshot(this._dom.rootEl,e.fullPageScreenshot.screenshot),u\n/**\n   * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */}}function k(e,t){const n=e.rootEl;void 0===t?n.classList.toggle(\"lh-dark\"):n.classList.toggle(\"lh-dark\",t)}\n/**\n   * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */const E=\"undefined\"!=typeof btoa?btoa:e=>Buffer.from(e).toString(\"base64\"),A=(\"undefined\"!=typeof atob&&atob,async function(e,t){let n=(new TextEncoder).encode(e);if(t.gzip)if(\"undefined\"!=typeof CompressionStream){const e=new CompressionStream(\"gzip\"),t=e.writable.getWriter();t.write(n),t.close();const r=await new Response(e.readable).arrayBuffer();n=new Uint8Array(r)}else n=window.pako.gzip(e);let r=\"\";for(let e=0;e<n.length;e+=5e3)r+=String.fromCharCode(...n.subarray(e,e+5e3));return E(r)});\n/**\n   * @license\n   * Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */\nfunction S(){const e=window.location.host.endsWith(\".vercel.app\"),t=new URLSearchParams(window.location.search).has(\"dev\");return e?`https://${window.location.host}/gh-pages`:t?\"http://localhost:7333\":\"https://googlechrome.github.io/lighthouse\"}function z(e){const t=e.generatedTime,n=e.fetchTime||t;return`${e.lighthouseVersion}-${e.finalDisplayedUrl}-${n}`}async function C(e,t,n){const r=new URL(t),o=Boolean(window.CompressionStream);r.hash=await A(JSON.stringify(e),{gzip:o}),o&&r.searchParams.set(\"gzip\",\"1\"),window.open(r.toString(),n)}\n/**\n   * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */\nclass L{constructor(e){this._dom=e,this._toggleEl,this._menuEl,this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onToggleClick=this.onToggleClick.bind(this),this.onToggleKeydown=this.onToggleKeydown.bind(this),this.onMenuFocusOut=this.onMenuFocusOut.bind(this),this.onMenuKeydown=this.onMenuKeydown.bind(this),this._getNextMenuItem=this._getNextMenuItem.bind(this),this._getNextSelectableNode=this._getNextSelectableNode.bind(this),this._getPreviousMenuItem=this._getPreviousMenuItem.bind(this)}setup(e){this._toggleEl=this._dom.find(\".lh-topbar button.lh-tools__button\",this._dom.rootEl),this._toggleEl.addEventListener(\"click\",this.onToggleClick),this._toggleEl.addEventListener(\"keydown\",this.onToggleKeydown),this._menuEl=this._dom.find(\".lh-topbar div.lh-tools__dropdown\",this._dom.rootEl),this._menuEl.addEventListener(\"keydown\",this.onMenuKeydown),this._menuEl.addEventListener(\"click\",e)}close(){this._toggleEl.classList.remove(\"lh-active\"),this._toggleEl.setAttribute(\"aria-expanded\",\"false\"),this._menuEl.contains(this._dom.document().activeElement)&&this._toggleEl.focus(),this._menuEl.removeEventListener(\"focusout\",this.onMenuFocusOut),this._dom.document().removeEventListener(\"keydown\",this.onDocumentKeyDown)}open(e){this._toggleEl.classList.contains(\"lh-active\")?e.focus():this._menuEl.addEventListener(\"transitionend\",(()=>{e.focus()}),{once:!0}),this._toggleEl.classList.add(\"lh-active\"),this._toggleEl.setAttribute(\"aria-expanded\",\"true\"),this._menuEl.addEventListener(\"focusout\",this.onMenuFocusOut),this._dom.document().addEventListener(\"keydown\",this.onDocumentKeyDown)}onToggleClick(e){e.preventDefault(),e.stopImmediatePropagation(),this._toggleEl.classList.contains(\"lh-active\")?this.close():this.open(this._getNextMenuItem())}onToggleKeydown(e){switch(e.code){case\"ArrowUp\":e.preventDefault(),this.open(this._getPreviousMenuItem());break;case\"ArrowDown\":case\"Enter\":case\" \":e.preventDefault(),this.open(this._getNextMenuItem())}}onMenuKeydown(e){const t=e.target;switch(e.code){case\"ArrowUp\":e.preventDefault(),this._getPreviousMenuItem(t).focus();break;case\"ArrowDown\":e.preventDefault(),this._getNextMenuItem(t).focus();break;case\"Home\":e.preventDefault(),this._getNextMenuItem().focus();break;case\"End\":e.preventDefault(),this._getPreviousMenuItem().focus()}}onDocumentKeyDown(e){27===e.keyCode&&this.close()}onMenuFocusOut(e){const t=e.relatedTarget;this._menuEl.contains(t)||this.close()}_getNextSelectableNode(e,t){const n=e.filter((e=>e instanceof HTMLElement&&!e.hasAttribute(\"disabled\")&&\"none\"!==window.getComputedStyle(e).display));let r=t?n.indexOf(t)+1:0;return r>=n.length&&(r=0),n[r]}_getNextMenuItem(e){const t=Array.from(this._menuEl.childNodes);return this._getNextSelectableNode(t,e)}_getPreviousMenuItem(e){const t=Array.from(this._menuEl.childNodes).reverse();return this._getNextSelectableNode(t,e)}}\n/**\n   * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */class M{constructor(e,t){this.lhr,this._reportUIFeatures=e,this._dom=t,this._dropDownMenu=new L(this._dom),this._copyAttempt=!1,this.topbarEl,this.categoriesEl,this.stickyHeaderEl,this.highlightEl,this.onDropDownMenuClick=this.onDropDownMenuClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onCopy=this.onCopy.bind(this),this.collapseAllDetails=this.collapseAllDetails.bind(this)}enable(e){this.lhr=e,this._dom.rootEl.addEventListener(\"keyup\",this.onKeyUp),this._dom.document().addEventListener(\"copy\",this.onCopy),this._dropDownMenu.setup(this.onDropDownMenuClick),this._setUpCollapseDetailsAfterPrinting(),this._dom.find(\".lh-topbar__logo\",this._dom.rootEl).addEventListener(\"click\",(()=>k(this._dom))),this._setupStickyHeader()}onDropDownMenuClick(e){e.preventDefault();const t=e.target;if(t&&t.hasAttribute(\"data-action\")){switch(t.getAttribute(\"data-action\")){case\"copy\":this.onCopyButtonClick();break;case\"print-summary\":this.collapseAllDetails(),this._print();break;case\"print-expanded\":this.expandAllDetails(),this._print();break;case\"save-json\":{const e=JSON.stringify(this.lhr,null,2);this._reportUIFeatures._saveFile(new Blob([e],{type:\"application/json\"}));break}case\"save-html\":{const t=this._reportUIFeatures.getReportHtml();try{this._reportUIFeatures._saveFile(new Blob([t],{type:\"text/html\"}))}catch(e){this._dom.fireEventOn(\"lh-log\",this._dom.document(),{cmd:\"error\",msg:\"Could not export as HTML. \"+e.message})}break}case\"open-viewer\":this._dom.isDevTools()?async function(e){const t=\"viewer-\"+z(e),n=S()+\"/viewer/\";await C({lhr:e},n,t)}(this.lhr):async function(e){const t=\"viewer-\"+z(e);!function(e,t,n){const r=new URL(t).origin;window.addEventListener(\"message\",(function t(n){n.origin===r&&o&&n.data.opened&&(o.postMessage(e,r),window.removeEventListener(\"message\",t))}));const o=window.open(t,n)}({lhr:e},S()+\"/viewer/\",t)}(this.lhr);break;case\"save-gist\":this._reportUIFeatures.saveAsGist();break;case\"toggle-dark\":k(this._dom)}this._dropDownMenu.close()}}onCopy(e){this._copyAttempt&&e.clipboardData&&(e.preventDefault(),e.clipboardData.setData(\"text/plain\",JSON.stringify(this.lhr,null,2)),this._dom.fireEventOn(\"lh-log\",this._dom.document(),{cmd:\"log\",msg:\"Report JSON copied to clipboard\"})),this._copyAttempt=!1}onCopyButtonClick(){this._dom.fireEventOn(\"lh-analytics\",this._dom.document(),{cmd:\"send\",fields:{hitType:\"event\",eventCategory:\"report\",eventAction:\"copy\"}});try{this._dom.document().queryCommandSupported(\"copy\")&&(this._copyAttempt=!0,this._dom.document().execCommand(\"copy\")||(this._copyAttempt=!1,this._dom.fireEventOn(\"lh-log\",this._dom.document(),{cmd:\"warn\",msg:\"Your browser does not support copy to clipboard.\"})))}catch(e){this._copyAttempt=!1,this._dom.fireEventOn(\"lh-log\",this._dom.document(),{cmd:\"log\",msg:e.message})}}onKeyUp(e){(e.ctrlKey||e.metaKey)&&80===e.keyCode&&this._dropDownMenu.close()}expandAllDetails(){this._dom.findAll(\".lh-categories details\",this._dom.rootEl).map((e=>e.open=!0))}collapseAllDetails(){this._dom.findAll(\".lh-categories details\",this._dom.rootEl).map((e=>e.open=!1))}_print(){this._reportUIFeatures._opts.onPrintOverride?this._reportUIFeatures._opts.onPrintOverride(this._dom.rootEl):self.print()}resetUIState(){this._dropDownMenu.close()}_getScrollParent(e){const{overflowY:t}=window.getComputedStyle(e);return\"visible\"!==t&&\"hidden\"!==t?e:e.parentElement?this._getScrollParent(e.parentElement):document}_setUpCollapseDetailsAfterPrinting(){\"onbeforeprint\"in self?self.addEventListener(\"afterprint\",this.collapseAllDetails):self.matchMedia(\"print\").addListener((e=>{e.matches?this.expandAllDetails():this.collapseAllDetails()}))}_setupStickyHeader(){this.topbarEl=this._dom.find(\"div.lh-topbar\",this._dom.rootEl),this.categoriesEl=this._dom.find(\"div.lh-categories\",this._dom.rootEl),window.requestAnimationFrame((()=>window.requestAnimationFrame((()=>{try{this.stickyHeaderEl=this._dom.find(\"div.lh-sticky-header\",this._dom.rootEl)}catch{return}this.highlightEl=this._dom.createChildOf(this.stickyHeaderEl,\"div\",\"lh-highlighter\");const e=this._getScrollParent(this._dom.find(\".lh-container\",this._dom.rootEl));e.addEventListener(\"scroll\",(()=>this._updateStickyHeader()));const t=e instanceof window.Document?document.documentElement:e;new window.ResizeObserver((()=>this._updateStickyHeader())).observe(t)}))))}_updateStickyHeader(){if(!this.stickyHeaderEl)return;const e=this.topbarEl.getBoundingClientRect().bottom>=this.categoriesEl.getBoundingClientRect().top,t=Array.from(this._dom.rootEl.querySelectorAll(\".lh-category\")).filter((e=>e.getBoundingClientRect().top-window.innerHeight/2<0)),n=t.length>0?t.length-1:0,r=this.stickyHeaderEl.querySelectorAll(\".lh-gauge__wrapper, .lh-fraction__wrapper\"),o=r[n],i=r[0].getBoundingClientRect().left,a=o.getBoundingClientRect().left-i;this.highlightEl.style.transform=`translate(${a}px)`,this.stickyHeaderEl.classList.toggle(\"lh-sticky-header--visible\",e)}}\n/**\n   * @license Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */\n/**\n   * @license\n   * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */\nclass F{constructor(e,t={}){this.json,this._dom=e,this._opts=t,this._topbar=t.omitTopbar?null:new M(this,e),this.onMediaQueryChange=this.onMediaQueryChange.bind(this)}initFeatures(e){this.json=e,this._fullPageScreenshot=n.getFullPageScreenshot(e),this._topbar&&(this._topbar.enable(e),this._topbar.resetUIState()),this._setupMediaQueryListeners(),this._setupThirdPartyFilter(),this._setupElementScreenshotOverlay(this._dom.rootEl);const t=this._dom.isDevTools()||this._opts.disableDarkMode||this._opts.disableAutoDarkModeAndFireworks;!t&&window.matchMedia(\"(prefers-color-scheme: dark)\").matches&&k(this._dom,!0);const r=[\"performance\",\"accessibility\",\"best-practices\",\"seo\"].every((t=>{const n=e.categories[t];return n&&1===n.score})),o=this._opts.disableFireworks||this._opts.disableAutoDarkModeAndFireworks;r&&!o&&(this._enableFireworks(),t||k(this._dom,!0)),e.categories.performance&&e.categories.performance.auditRefs.some((t=>Boolean(\"metrics\"===t.group&&e.audits[t.id].errorMessage)))&&(this._dom.find(\"input.lh-metrics-toggle__input\",this._dom.rootEl).checked=!0),this.json.audits[\"script-treemap-data\"]&&this.json.audits[\"script-treemap-data\"].details&&this.addButton({text:i.strings.viewTreemapLabel,icon:\"treemap\",onClick:()=>function(e){if(!e.audits[\"script-treemap-data\"].details)throw new Error(\"no script treemap data found\");C({lhr:{mainDocumentUrl:e.mainDocumentUrl,finalUrl:e.finalUrl,finalDisplayedUrl:e.finalDisplayedUrl,audits:{\"script-treemap-data\":e.audits[\"script-treemap-data\"]},configSettings:{locale:e.configSettings.locale}}},S()+\"/treemap/\",\"treemap-\"+z(e))}(this.json)}),this._opts.onViewTrace&&this.addButton({text:\"simulate\"===e.configSettings.throttlingMethod?i.strings.viewOriginalTraceLabel:i.strings.viewTraceLabel,onClick:()=>this._opts.onViewTrace?.()}),this._opts.getStandaloneReportHTML&&this._dom.find('a[data-action=\"save-html\"]',this._dom.rootEl).classList.remove(\"lh-hidden\");for(const e of this._dom.findAll(\"[data-i18n]\",this._dom.rootEl)){const t=e.getAttribute(\"data-i18n\");e.textContent=i.strings[t]}}addButton(e){const t=this._dom.rootEl.querySelector(\".lh-audit-group--metrics\");if(!t)return;let n=t.querySelector(\".lh-buttons\");n||(n=this._dom.createChildOf(t,\"div\",\"lh-buttons\"));const r=[\"lh-button\"];e.icon&&(r.push(\"lh-report-icon\"),r.push(\"lh-report-icon--\"+e.icon));const o=this._dom.createChildOf(n,\"button\",r.join(\" \"));return o.textContent=e.text,o.addEventListener(\"click\",e.onClick),o}resetUIState(){this._topbar&&this._topbar.resetUIState()}getReportHtml(){if(!this._opts.getStandaloneReportHTML)throw new Error(\"`getStandaloneReportHTML` is not set\");return this.resetUIState(),this._opts.getStandaloneReportHTML()}saveAsGist(){throw new Error(\"Cannot save as gist from base report\")}_enableFireworks(){this._dom.find(\".lh-scores-container\",this._dom.rootEl).classList.add(\"lh-score100\")}_setupMediaQueryListeners(){const e=self.matchMedia(\"(max-width: 500px)\");e.addListener(this.onMediaQueryChange),this.onMediaQueryChange(e)}_resetUIState(){this._topbar&&this._topbar.resetUIState()}onMediaQueryChange(e){this._dom.rootEl.classList.toggle(\"lh-narrow\",e.matches)}_setupThirdPartyFilter(){const e=[\"uses-rel-preconnect\",\"third-party-facades\"],t=[\"legacy-javascript\"];Array.from(this._dom.rootEl.querySelectorAll(\"table.lh-table\")).filter((e=>e.querySelector(\"td.lh-table-column--url, td.lh-table-column--source-location\"))).filter((t=>{const n=t.closest(\".lh-audit\");if(!n)throw new Error(\".lh-table not within audit\");return!e.includes(n.id)})).forEach((e=>{const r=function(e){return Array.from(e.tBodies[0].rows)}(e),o=r.filter((e=>!e.classList.contains(\"lh-sub-item-row\"))),a=this._getThirdPartyRows(o,n.getFinalDisplayedUrl(this.json)),l=r.some((e=>e.classList.contains(\"lh-row--even\"))),s=this._dom.createComponent(\"3pFilter\"),c=this._dom.find(\"input\",s);c.addEventListener(\"change\",(e=>{const t=e.target instanceof HTMLInputElement&&!e.target.checked;let n=!0,r=o[0];for(;r;){const e=t&&a.includes(r);do{r.classList.toggle(\"lh-row--hidden\",e),l&&(r.classList.toggle(\"lh-row--even\",!e&&n),r.classList.toggle(\"lh-row--odd\",!e&&!n)),r=r.nextElementSibling}while(r&&r.classList.contains(\"lh-sub-item-row\"));e||(n=!n)}}));const d=a.filter((e=>!e.classList.contains(\"lh-row--group\"))).length;this._dom.find(\".lh-3p-filter-count\",s).textContent=\"\"+d,this._dom.find(\".lh-3p-ui-string\",s).textContent=i.strings.thirdPartyResourcesLabel;const h=a.length===o.length,p=!a.length;if((h||p)&&(this._dom.find(\"div.lh-3p-filter\",s).hidden=!0),!e.parentNode)return;e.parentNode.insertBefore(s,e);const u=e.closest(\".lh-audit\");if(!u)throw new Error(\".lh-table not within audit\");t.includes(u.id)&&!h&&c.click()}))}_setupElementScreenshotOverlay(e){this._fullPageScreenshot&&g.installOverlayFeature({dom:this._dom,rootEl:e,overlayContainerEl:e,fullPageScreenshot:this._fullPageScreenshot})}_getThirdPartyRows(e,t){const r=n.getRootDomain(t),o=this.json.entities?.find((e=>!0===e.isFirstParty))?.name,i=[];for(const t of e){if(o){if(!t.dataset.entity||t.dataset.entity===o)continue}else{const e=t.querySelector(\"div.lh-text__url\");if(!e)continue;const o=e.dataset.url;if(!o)continue;if(n.getRootDomain(o)===r)continue}i.push(t)}return i}_saveFile(e){const t=e.type.match(\"json\")?\".json\":\".html\",r=function(e){return function(e,t){const n=t?new Date(t):new Date,r=n.toLocaleTimeString(\"en-US\",{hour12:!1}),o=n.toLocaleDateString(\"en-US\",{year:\"numeric\",month:\"2-digit\",day:\"2-digit\"}).split(\"/\");return o.unshift(o.pop()),`${e}_${o.join(\"-\")}_${r}`.replace(/[/?<>\\\\:*|\"]/g,\"-\")}(new URL(e.finalDisplayedUrl).hostname,e.fetchTime)}({finalDisplayedUrl:n.getFinalDisplayedUrl(this.json),fetchTime:this.json.fetchTime})+t;this._opts.onSaveFileOverride?this._opts.onSaveFileOverride(e,r):this._dom.saveFile(e,r)}}\n/**\n   * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */\n/**\n   * @license\n   * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   *      http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS-IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   */class T{constructor(e){this.el=e;const t=document.createElement(\"style\");if(t.textContent=\"\\n      #lh-log {\\n        position: fixed;\\n        background-color: #323232;\\n        color: #fff;\\n        min-height: 48px;\\n        min-width: 288px;\\n        padding: 16px 24px;\\n        box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\\n        border-radius: 2px;\\n        margin: 12px;\\n        font-size: 14px;\\n        cursor: default;\\n        transition: transform 0.3s, opacity 0.3s;\\n        transform: translateY(100px);\\n        opacity: 0;\\n        bottom: 0;\\n        left: 0;\\n        z-index: 3;\\n        display: flex;\\n        flex-direction: row;\\n        justify-content: center;\\n        align-items: center;\\n      }\\n      \\n      #lh-log.lh-show {\\n        opacity: 1;\\n        transform: translateY(0);\\n      }\\n    \",!this.el.parentNode)throw new Error(\"element needs to be in the DOM\");this.el.parentNode.insertBefore(t,this.el),this._id=void 0}log(e,t=!0){this._id&&clearTimeout(this._id),this.el.textContent=e,this.el.classList.add(\"lh-show\"),t&&(this._id=setTimeout((()=>{this.el.classList.remove(\"lh-show\")}),7e3))}warn(e){this.log(\"Warning: \"+e)}error(e){this.log(e),setTimeout((()=>{throw new Error(e)}),0)}hide(){this._id&&clearTimeout(this._id),this.el.classList.remove(\"lh-show\")\n/**\n   * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n   */}}window.__initLighthouseReport__=function(){const e=function(e,t={}){const n=document.createElement(\"article\");n.classList.add(\"lh-root\",\"lh-vars\");const o=new r(n.ownerDocument,n);return new x(o).renderReport(e,n,t),new F(o,t).initFeatures(e),n}(window.__LIGHTHOUSE_JSON__,{getStandaloneReportHTML:()=>document.documentElement.outerHTML});document.body.append(e),document.addEventListener(\"lh-analytics\",(e=>{window.ga&&ga(e.detail.cmd,e.detail.fields)})),document.addEventListener(\"lh-log\",(e=>{const t=document.querySelector(\"div#lh-log\");if(!t)return;const n=new T(t),r=e.detail;switch(r.cmd){case\"log\":n.log(r.msg);break;case\"warn\":n.warn(r.msg);break;case\"error\":n.error(r.msg);break;case\"hide\":n.hide()}}))}}();";
+  // report/generator/report-assets.js
+  var REPORT_TEMPLATE = `<!--
+@license
+Copyright 2018 The Lighthouse Authors. All Rights Reserved.
 
-  const reportAssets = {
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS-IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
+  <link rel="icon" href='data:image/svg+xml;utf8,<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z" fill="%23F63"/><path d="M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z" fill="%23FFA385"/><path fill="%23FF3" d="M20.5 10h7v7h-7z"/></svg>'>
+  <title>Lighthouse Report</title>
+  <style>body {margin: 0}</style>
+</head>
+<body>
+  <noscript>Lighthouse report requires JavaScript. Please enable.</noscript>
+
+  <div id="lh-log"></div>
+
+  <script>window.__LIGHTHOUSE_JSON__ = %%LIGHTHOUSE_JSON%%;<\/script>
+  <script>%%LIGHTHOUSE_JAVASCRIPT%%
+  __initLighthouseReport__();
+  //# sourceURL=compiled-reportrenderer.js
+  <\/script>
+  <script>console.log('window.__LIGHTHOUSE_JSON__', __LIGHTHOUSE_JSON__);<\/script>
+</body>
+</html>
+`;
+  var REPORT_JAVASCRIPT = '"use strict";(()=>{var e="\u2026",t={PASS:{label:"pass",minScore:.9},AVERAGE:{label:"average",minScore:.5},FAIL:{label:"fail"},ERROR:{label:"error"}},n=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"],r=class r{static get RATINGS(){return t}static get PASS_THRESHOLD(){return.9}static get MS_DISPLAY_VALUE(){return"%10d\xA0ms"}static getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error("Could not determine final displayed URL")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}static getFullPageScreenshot(e){return e.fullPageScreenshot?e.fullPageScreenshot:e.audits["full-page-screenshot"]?.details}static splitMarkdownCodeSpans(e){let t=[],n=e.split(/`(.*?)`/g);for(let e=0;e<n.length;e++){let r=n[e];if(!r)continue;let i=e%2!=0;t.push({isCode:i,text:r})}return t}static splitMarkdownLink(e){let t=[],n=e.split(/\\[([^\\]]+?)\\]\\((https?:\\/\\/.*?)\\)/g);for(;n.length;){let[e,r,i]=n.splice(0,3);e&&t.push({isLink:!1,text:e}),r&&i&&t.push({isLink:!0,text:r,linkHref:i})}return t}static truncate(e,t,n="\u2026"){if(e.length<=t)return e;let r=new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(e)[Symbol.iterator](),i=0;for(let a=0;a<=t-n.length;a++){let t=r.next();if(t.done)return e;i=t.value.index}for(let t=0;t<n.length;t++)if(r.next().done)return e;return e.slice(0,i)+n}static getURLDisplayName(t,n){let r,i=void 0!==(n=n||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0}).numPathParts?n.numPathParts:2,a=void 0===n.preserveQuery||n.preserveQuery,o=n.preserveHost||!1;if("about:"===t.protocol||"data:"===t.protocol)r=t.href;else{r=t.pathname;let n=r.split("/").filter((e=>e.length));i&&n.length>i&&(r=e+n.slice(-1*i).join("/")),o&&(r=`${t.host}/${r.replace(/^\\//,"")}`),a&&(r=`${r}${t.search}`)}if("data:"!==t.protocol&&(r=r.slice(0,200),r=r.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,`$1${e}`),r=r.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,`$1${e}`),r=r.replace(/(\\d{3})\\d{6,}/g,`$1${e}`),r=r.replace(/\\u2026+/g,e),r.length>64&&r.includes("?")&&(r=r.replace(/\\?([^=]*)(=)?.*/,`?$1$2${e}`),r.length>64&&(r=r.replace(/\\?.*/,`?${e}`)))),r.length>64){let t=r.lastIndexOf(".");r=t>=0?r.slice(0,63-(r.length-t))+`${e}${r.slice(t)}`:r.slice(0,63)+e}return r}static getChromeExtensionOrigin(e){let t=new URL(e);return t.protocol+"//"+t.host}static parseURL(e){let t=new URL(e);return{file:r.getURLDisplayName(t),hostname:t.hostname,origin:"chrome-extension:"===t.protocol?r.getChromeExtensionOrigin(e):t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){let t=e.split(".").slice(-2);return n.includes(t[0])?`.${t.join(".")}`:`.${t[t.length-1]}`}static getRootDomain(e){let t=r.createOrReturnURL(e).hostname,n=r.getTld(t).split(".");return t.split(".").slice(-n.length).join(".")}static filterRelevantLines(e,t,n){if(0===t.length)return e.slice(0,2*n+1);let r=new Set;return(t=t.sort(((e,t)=>(e.lineNumber||0)-(t.lineNumber||0)))).forEach((({lineNumber:e})=>{let t=e-n,i=e+n;for(;t<1;)t++,i++;r.has(t-3-1)&&(t-=3);for(let e=t;e<=i;e++){let t=e;r.add(t)}})),e.filter((e=>r.has(e.lineNumber)))}};var i=class{constructor(e,t){this._document=e,this._lighthouseChannel="unknown",this._componentCache=new Map,this.rootEl=t}createElement(e,t){let n=this._document.createElement(e);if(t)for(let e of t.split(/\\s+/))e&&n.classList.add(e);return n}createElementNS(e,t,n){let r=this._document.createElementNS(e,t);if(n)for(let e of n.split(/\\s+/))e&&r.classList.add(e);return r}createFragment(){return this._document.createDocumentFragment()}createTextNode(e){return this._document.createTextNode(e)}createChildOf(e,t,n){let r=this.createElement(t,n);return e.append(r),r}createComponent(e){let t=this._componentCache.get(e);if(t){let e=t.cloneNode(!0);return this.findAll("style",e).forEach((e=>e.remove())),e}return t=function(e,t){switch(t){case"3pFilter":return function(e){let t=e.createFragment(),n=e.createElement("style");n.append("\\n    .lh-3p-filter {\\n      color: var(--color-gray-600);\\n      float: right;\\n      padding: 6px var(--stackpack-padding-horizontal);\\n    }\\n    .lh-3p-filter-label, .lh-3p-filter-input {\\n      vertical-align: middle;\\n      user-select: none;\\n    }\\n    .lh-3p-filter-input:disabled + .lh-3p-ui-string {\\n      text-decoration: line-through;\\n    }\\n  "),t.append(n);let r=e.createElement("div","lh-3p-filter"),i=e.createElement("label","lh-3p-filter-label"),a=e.createElement("input","lh-3p-filter-input");a.setAttribute("type","checkbox"),a.setAttribute("checked","");let o=e.createElement("span","lh-3p-ui-string");o.append("Show 3rd party resources");let l=e.createElement("span","lh-3p-filter-count");return i.append(" ",a," ",o," (",l,") "),r.append(" ",i," "),t.append(r),t}(e);case"audit":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-audit"),r=e.createElement("details","lh-expandable-details"),i=e.createElement("summary"),a=e.createElement("div","lh-audit__header lh-expandable-details__summary"),o=e.createElement("span","lh-audit__score-icon"),l=e.createElement("span","lh-audit__title-and-text"),s=e.createElement("span","lh-audit__title"),d=e.createElement("span","lh-audit__display-text");l.append(" ",s," ",d," ");let c=e.createElement("div","lh-chevron-container");a.append(" ",o," ",l," ",c," "),i.append(" ",a," ");let h=e.createElement("div","lh-audit__description"),p=e.createElement("div","lh-audit__stackpacks");return r.append(" ",i," ",h," ",p," "),n.append(" ",r," "),t.append(n),t}(e);case"categoryHeader":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-category-header"),r=e.createElement("div","lh-score__gauge");r.setAttribute("role","heading"),r.setAttribute("aria-level","2");let i=e.createElement("div","lh-category-header__description");return n.append(" ",r," ",i," "),t.append(n),t}(e);case"chevron":return function(e){let t=e.createFragment(),n=e.createElementNS("http://www.w3.org/2000/svg","svg","lh-chevron");n.setAttribute("viewBox","0 0 100 100");let r=e.createElementNS("http://www.w3.org/2000/svg","g","lh-chevron__lines"),i=e.createElementNS("http://www.w3.org/2000/svg","path","lh-chevron__line lh-chevron__line-left");i.setAttribute("d","M10 50h40");let a=e.createElementNS("http://www.w3.org/2000/svg","path","lh-chevron__line lh-chevron__line-right");return a.setAttribute("d","M90 50H50"),r.append(" ",i," ",a," "),n.append(" ",r," "),t.append(n),t}(e);case"clump":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-audit-group"),r=e.createElement("details","lh-clump"),i=e.createElement("summary"),a=e.createElement("div","lh-audit-group__summary"),o=e.createElement("div","lh-audit-group__header"),l=e.createElement("span","lh-audit-group__title"),s=e.createElement("span","lh-audit-group__itemcount");o.append(" ",l," ",s," "," "," ");let d=e.createElement("div","lh-clump-toggle"),c=e.createElement("span","lh-clump-toggletext--show"),h=e.createElement("span","lh-clump-toggletext--hide");return d.append(" ",c," ",h," "),a.append(" ",o," ",d," "),i.append(" ",a," "),r.append(" ",i," "),n.append(" "," ",r," "),t.append(n),t}(e);case"crc":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-crc-container"),r=e.createElement("style");r.append(\'\\n      .lh-crc .lh-tree-marker {\\n        width: 12px;\\n        height: 26px;\\n        display: block;\\n        float: left;\\n        background-position: top left;\\n      }\\n      .lh-crc .lh-horiz-down {\\n        background: url(\\\'data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><g fill="%23D8D8D8" fill-rule="evenodd"><path d="M16 12v2H-2v-2z"/><path d="M9 12v14H7V12z"/></g></svg>\\\');\\n      }\\n      .lh-crc .lh-right {\\n        background: url(\\\'data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M16 12v2H0v-2z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>\\\');\\n      }\\n      .lh-crc .lh-up-right {\\n        background: url(\\\'data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v14H7zm2 12h7v2H9z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>\\\');\\n      }\\n      .lh-crc .lh-vert-right {\\n        background: url(\\\'data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v27H7zm2 12h7v2H9z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>\\\');\\n      }\\n      .lh-crc .lh-vert {\\n        background: url(\\\'data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v26H7z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>\\\');\\n      }\\n      .lh-crc .lh-crc-tree {\\n        font-size: 14px;\\n        width: 100%;\\n        overflow-x: auto;\\n      }\\n      .lh-crc .lh-crc-node {\\n        height: 26px;\\n        line-height: 26px;\\n        white-space: nowrap;\\n      }\\n      .lh-crc .lh-crc-node__tree-value {\\n        margin-left: 10px;\\n      }\\n      .lh-crc .lh-crc-node__tree-value div {\\n        display: inline;\\n      }\\n      .lh-crc .lh-crc-node__chain-duration {\\n        font-weight: 700;\\n      }\\n      .lh-crc .lh-crc-initial-nav {\\n        color: #595959;\\n        font-style: italic;\\n      }\\n      .lh-crc__summary-value {\\n        margin-bottom: 10px;\\n      }\\n    \');let i=e.createElement("div"),a=e.createElement("div","lh-crc__summary-value"),o=e.createElement("span","lh-crc__longest_duration_label"),l=e.createElement("b","lh-crc__longest_duration");a.append(" ",o," ",l," "),i.append(" ",a," ");let s=e.createElement("div","lh-crc"),d=e.createElement("div","lh-crc-initial-nav");return s.append(" ",d," "," "),n.append(" ",r," ",i," ",s," "),t.append(n),t}(e);case"crcChain":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-crc-node"),r=e.createElement("span","lh-crc-node__tree-marker"),i=e.createElement("span","lh-crc-node__tree-value");return n.append(" ",r," ",i," "),t.append(n),t}(e);case"elementScreenshot":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-element-screenshot"),r=e.createElement("div","lh-element-screenshot__content"),i=e.createElement("div","lh-element-screenshot__image"),a=e.createElement("div","lh-element-screenshot__mask"),o=e.createElementNS("http://www.w3.org/2000/svg","svg");o.setAttribute("height","0"),o.setAttribute("width","0");let l=e.createElementNS("http://www.w3.org/2000/svg","defs"),s=e.createElementNS("http://www.w3.org/2000/svg","clipPath");s.setAttribute("clipPathUnits","objectBoundingBox"),l.append(" ",s," "," "),o.append(" ",l," "),a.append(" ",o," ");let d=e.createElement("div","lh-element-screenshot__element-marker");return i.append(" ",a," ",d," "),r.append(" ",i," "),n.append(" ",r," "),t.append(n),t}(e);case"footer":return function(e){let t=e.createFragment(),n=e.createElement("style");n.append("\\n    .lh-footer {\\n      padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);\\n      max-width: var(--report-content-max-width);\\n      margin: 0 auto;\\n    }\\n    .lh-footer .lh-generated {\\n      text-align: center;\\n    }\\n  "),t.append(n);let r=e.createElement("footer","lh-footer"),i=e.createElement("ul","lh-meta__items");i.append(" ");let a=e.createElement("div","lh-generated"),o=e.createElement("b");o.append("Lighthouse");let l=e.createElement("span","lh-footer__version"),s=e.createElement("a","lh-footer__version_issue");return s.setAttribute("href","https://github.com/GoogleChrome/Lighthouse/issues"),s.setAttribute("target","_blank"),s.setAttribute("rel","noopener"),s.append("File an issue"),a.append(" "," Generated by ",o," ",l," | ",s," "),r.append(" ",i," ",a," "),t.append(r),t}(e);case"fraction":return function(e){let t=e.createFragment(),n=e.createElement("a","lh-fraction__wrapper"),r=e.createElement("div","lh-fraction__content-wrapper"),i=e.createElement("div","lh-fraction__content"),a=e.createElement("div","lh-fraction__background");i.append(" ",a," "),r.append(" ",i," ");let o=e.createElement("div","lh-fraction__label");return n.append(" ",r," ",o," "),t.append(n),t}(e);case"gauge":return function(e){let t=e.createFragment(),n=e.createElement("a","lh-gauge__wrapper"),r=e.createElement("div","lh-gauge__svg-wrapper"),i=e.createElementNS("http://www.w3.org/2000/svg","svg","lh-gauge");i.setAttribute("viewBox","0 0 120 120");let a=e.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge-base");a.setAttribute("r","56"),a.setAttribute("cx","60"),a.setAttribute("cy","60"),a.setAttribute("stroke-width","8");let o=e.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge-arc");o.setAttribute("r","56"),o.setAttribute("cx","60"),o.setAttribute("cy","60"),o.setAttribute("stroke-width","8"),i.append(" ",a," ",o," "),r.append(" ",i," ");let l=e.createElement("div","lh-gauge__percentage"),s=e.createElement("div","lh-gauge__label");return n.append(" "," ",r," ",l," "," ",s," "),t.append(n),t}(e);case"gaugePwa":return function(e){let t=e.createFragment(),n=e.createElement("style");n.append("\\n    .lh-gauge--pwa .lh-gauge--pwa__component {\\n      display: none;\\n    }\\n    .lh-gauge--pwa__wrapper:not(.lh-badged--all) .lh-gauge--pwa__logo > path {\\n      /* Gray logo unless everything is passing. */\\n      fill: #B0B0B0;\\n    }\\n\\n    .lh-gauge--pwa__disc {\\n      fill: var(--color-gray-200);\\n    }\\n\\n    .lh-gauge--pwa__logo--primary-color {\\n      fill: #304FFE;\\n    }\\n\\n    .lh-gauge--pwa__logo--secondary-color {\\n      fill: #3D3D3D;\\n    }\\n    .lh-dark .lh-gauge--pwa__logo--secondary-color {\\n      fill: #D8B6B6;\\n    }\\n\\n    /* No passing groups. */\\n    .lh-gauge--pwa__wrapper:not([class*=\'lh-badged--\']) .lh-gauge--pwa__na-line {\\n      display: inline;\\n    }\\n    /* Just optimized. Same n/a line as no passing groups. */\\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-optimized:not(.lh-badged--pwa-installable) .lh-gauge--pwa__na-line {\\n      display: inline;\\n    }\\n\\n    /* Just installable. */\\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-installable .lh-gauge--pwa__installable-badge {\\n      display: inline;\\n    }\\n\\n    /* All passing groups. */\\n    .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {\\n      display: inline;\\n    }\\n  "),t.append(n);let r=e.createElement("a","lh-gauge__wrapper lh-gauge--pwa__wrapper"),i=e.createElementNS("http://www.w3.org/2000/svg","svg","lh-gauge lh-gauge--pwa");i.setAttribute("viewBox","0 0 60 60");let a=e.createElementNS("http://www.w3.org/2000/svg","defs"),o=e.createElementNS("http://www.w3.org/2000/svg","linearGradient");o.setAttribute("id","lh-gauge--pwa__check-circle__gradient"),o.setAttribute("x1","50%"),o.setAttribute("y1","0%"),o.setAttribute("x2","50%"),o.setAttribute("y2","100%");let l=e.createElementNS("http://www.w3.org/2000/svg","stop");l.setAttribute("stop-color","#00C852"),l.setAttribute("offset","0%");let s=e.createElementNS("http://www.w3.org/2000/svg","stop");s.setAttribute("stop-color","#009688"),s.setAttribute("offset","100%"),o.append(" ",l," ",s," ");let d=e.createElementNS("http://www.w3.org/2000/svg","linearGradient");d.setAttribute("id","lh-gauge--pwa__installable__shadow-gradient"),d.setAttribute("x1","76.056%"),d.setAttribute("x2","24.111%"),d.setAttribute("y1","82.995%"),d.setAttribute("y2","24.735%");let c=e.createElementNS("http://www.w3.org/2000/svg","stop");c.setAttribute("stop-color","#A5D6A7"),c.setAttribute("offset","0%");let h=e.createElementNS("http://www.w3.org/2000/svg","stop");h.setAttribute("stop-color","#80CBC4"),h.setAttribute("offset","100%"),d.append(" ",c," ",h," ");let p=e.createElementNS("http://www.w3.org/2000/svg","g");p.setAttribute("id","lh-gauge--pwa__installable-badge");let u=e.createElementNS("http://www.w3.org/2000/svg","circle");u.setAttribute("fill","#FFFFFF"),u.setAttribute("cx","10"),u.setAttribute("cy","10"),u.setAttribute("r","10");let g=e.createElementNS("http://www.w3.org/2000/svg","path");g.setAttribute("fill","#009688"),g.setAttribute("d","M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"),p.append(" ",u," ",g," "),a.append(" ",o," ",d," ",p," ");let m=e.createElementNS("http://www.w3.org/2000/svg","g");m.setAttribute("stroke","none"),m.setAttribute("fill-rule","nonzero");let f=e.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge--pwa__disc");f.setAttribute("cx","30"),f.setAttribute("cy","30"),f.setAttribute("r","30");let v=e.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__logo"),b=e.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--secondary-color");b.setAttribute("d","M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z");let _=e.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--primary-color");_.setAttribute("d","M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z");let w=e.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--secondary-color");w.setAttribute("fill-rule","nonzero"),w.setAttribute("d","M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"),v.append(" ",b," ",_," ",w," ");let y=e.createElementNS("http://www.w3.org/2000/svg","rect","lh-gauge--pwa__component lh-gauge--pwa__na-line");y.setAttribute("fill","#FFFFFF"),y.setAttribute("x","20"),y.setAttribute("y","32"),y.setAttribute("width","20"),y.setAttribute("height","4"),y.setAttribute("rx","2");let x=e.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__component lh-gauge--pwa__installable-badge");x.setAttribute("transform","translate(20, 29)");let k=e.createElementNS("http://www.w3.org/2000/svg","path");k.setAttribute("fill","url(#lh-gauge--pwa__installable__shadow-gradient)"),k.setAttribute("d","M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z");let E=e.createElementNS("http://www.w3.org/2000/svg","use");E.setAttribute("href","#lh-gauge--pwa__installable-badge"),x.append(" ",k," ",E," ");let A=e.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__component lh-gauge--pwa__check-circle");A.setAttribute("transform","translate(18, 28)");let S=e.createElementNS("http://www.w3.org/2000/svg","circle");S.setAttribute("fill","#FFFFFF"),S.setAttribute("cx","12"),S.setAttribute("cy","12"),S.setAttribute("r","12");let z=e.createElementNS("http://www.w3.org/2000/svg","path");z.setAttribute("fill","url(#lh-gauge--pwa__check-circle__gradient)"),z.setAttribute("d","M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"),A.append(" ",S," ",z," "),m.append(" "," ",f," ",v," "," ",y," "," ",x," "," ",A," "),i.append(" ",a," ",m," ");let C=e.createElement("div","lh-gauge__label");return r.append(" ",i," ",C," "),t.append(r),t}(e);case"heading":return function(e){let t=e.createFragment(),n=e.createElement("style");n.append("\\n    /* CSS Fireworks. Originally by Eddie Lin\\n       https://codepen.io/paulirish/pen/yEVMbP\\n    */\\n    .lh-pyro {\\n      display: none;\\n      z-index: 1;\\n      pointer-events: none;\\n    }\\n    .lh-score100 .lh-pyro {\\n      display: block;\\n    }\\n    .lh-score100 .lh-lighthouse stop:first-child {\\n      stop-color: hsla(200, 12%, 95%, 0);\\n    }\\n    .lh-score100 .lh-lighthouse stop:last-child {\\n      stop-color: hsla(65, 81%, 76%, 1);\\n    }\\n\\n    .lh-pyro > .lh-pyro-before, .lh-pyro > .lh-pyro-after {\\n      position: absolute;\\n      width: 5px;\\n      height: 5px;\\n      border-radius: 2.5px;\\n      box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;\\n      animation: 1s bang ease-out infinite backwards,  1s gravity ease-in infinite backwards,  5s position linear infinite backwards;\\n      animation-delay: 1s, 1s, 1s;\\n    }\\n\\n    .lh-pyro > .lh-pyro-after {\\n      animation-delay: 2.25s, 2.25s, 2.25s;\\n      animation-duration: 1.25s, 1.25s, 6.25s;\\n    }\\n\\n    @keyframes bang {\\n      to {\\n        opacity: 1;\\n        box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;\\n      }\\n    }\\n    @keyframes gravity {\\n      from {\\n        opacity: 1;\\n      }\\n      to {\\n        transform: translateY(80px);\\n        opacity: 0;\\n      }\\n    }\\n    @keyframes position {\\n      0%, 19.9% {\\n        margin-top: 4%;\\n        margin-left: 47%;\\n      }\\n      20%, 39.9% {\\n        margin-top: 7%;\\n        margin-left: 30%;\\n      }\\n      40%, 59.9% {\\n        margin-top: 6%;\\n        margin-left: 70%;\\n      }\\n      60%, 79.9% {\\n        margin-top: 3%;\\n        margin-left: 20%;\\n      }\\n      80%, 99.9% {\\n        margin-top: 3%;\\n        margin-left: 80%;\\n      }\\n    }\\n  "),t.append(n);let r=e.createElement("div","lh-header-container"),i=e.createElement("div","lh-scores-wrapper-placeholder");return r.append(" ",i," "),t.append(r),t}(e);case"metric":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-metric"),r=e.createElement("div","lh-metric__innerwrap"),i=e.createElement("div","lh-metric__icon"),a=e.createElement("span","lh-metric__title"),o=e.createElement("div","lh-metric__value"),l=e.createElement("div","lh-metric__description");return r.append(" ",i," ",a," ",o," ",l," "),n.append(" ",r," "),t.append(n),t}(e);case"opportunity":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-audit lh-audit--load-opportunity"),r=e.createElement("details","lh-expandable-details"),i=e.createElement("summary"),a=e.createElement("div","lh-audit__header"),o=e.createElement("div","lh-load-opportunity__cols"),l=e.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--one"),s=e.createElement("span","lh-audit__score-icon"),d=e.createElement("div","lh-audit__title");l.append(" ",s," ",d," ");let c=e.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--two"),h=e.createElement("div","lh-load-opportunity__sparkline"),p=e.createElement("div","lh-sparkline"),u=e.createElement("div","lh-sparkline__bar");p.append(u),h.append(" ",p," ");let g=e.createElement("div","lh-audit__display-text"),m=e.createElement("div","lh-chevron-container");c.append(" ",h," ",g," ",m," "),o.append(" ",l," ",c," "),a.append(" ",o," "),i.append(" ",a," ");let f=e.createElement("div","lh-audit__description"),v=e.createElement("div","lh-audit__stackpacks");return r.append(" ",i," ",f," ",v," "),n.append(" ",r," "),t.append(n),t}(e);case"opportunityHeader":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-load-opportunity__header lh-load-opportunity__cols"),r=e.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--one"),i=e.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--two");return n.append(" ",r," ",i," "),t.append(n),t}(e);case"scorescale":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-scorescale"),r=e.createElement("span","lh-scorescale-range lh-scorescale-range--fail");r.append("0\u201349");let i=e.createElement("span","lh-scorescale-range lh-scorescale-range--average");i.append("50\u201389");let a=e.createElement("span","lh-scorescale-range lh-scorescale-range--pass");return a.append("90\u2013100"),n.append(" ",r," ",i," ",a," "),t.append(n),t}(e);case"scoresWrapper":return function(e){let t=e.createFragment(),n=e.createElement("style");n.append("\\n    .lh-scores-container {\\n      display: flex;\\n      flex-direction: column;\\n      padding: var(--default-padding) 0;\\n      position: relative;\\n      width: 100%;\\n    }\\n\\n    .lh-sticky-header {\\n      --gauge-circle-size: var(--gauge-circle-size-sm);\\n      --plugin-badge-size: 16px;\\n      --plugin-icon-size: 75%;\\n      --gauge-wrapper-width: 60px;\\n      --gauge-percentage-font-size: 13px;\\n      position: fixed;\\n      left: 0;\\n      right: 0;\\n      top: var(--topbar-height);\\n      font-weight: 500;\\n      display: none;\\n      justify-content: center;\\n      background-color: var(--sticky-header-background-color);\\n      border-bottom: 1px solid var(--color-gray-200);\\n      padding-top: var(--score-container-padding);\\n      padding-bottom: 4px;\\n      z-index: 1;\\n      pointer-events: none;\\n    }\\n\\n    .lh-devtools .lh-sticky-header {\\n      /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change `position` to `sticky.` */\\n      position: sticky;\\n    }\\n\\n    .lh-sticky-header--visible {\\n      display: grid;\\n      grid-auto-flow: column;\\n      pointer-events: auto;\\n    }\\n\\n    /* Disable the gauge arc animation for the sticky header, so toggling display: none\\n       does not play the animation. */\\n    .lh-sticky-header .lh-gauge-arc {\\n      animation: none;\\n    }\\n\\n    .lh-sticky-header .lh-gauge__label,\\n    .lh-sticky-header .lh-fraction__label {\\n      display: none;\\n    }\\n\\n    .lh-highlighter {\\n      width: var(--gauge-wrapper-width);\\n      height: 1px;\\n      background-color: var(--highlighter-background-color);\\n      /* Position at bottom of first gauge in sticky header. */\\n      position: absolute;\\n      grid-column: 1;\\n      bottom: -1px;\\n    }\\n\\n    .lh-gauge__wrapper:first-of-type {\\n      contain: none;\\n    }\\n  "),t.append(n);let r=e.createElement("div","lh-scores-wrapper"),i=e.createElement("div","lh-scores-container"),a=e.createElement("div","lh-pyro"),o=e.createElement("div","lh-pyro-before"),l=e.createElement("div","lh-pyro-after");return a.append(" ",o," ",l," "),i.append(" ",a," "),r.append(" ",i," "),t.append(r),t}(e);case"snippet":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-snippet"),r=e.createElement("style");return r.append(\'\\n          :root {\\n            --snippet-highlight-light: #fbf1f2;\\n            --snippet-highlight-dark: #ffd6d8;\\n          }\\n\\n         .lh-snippet__header {\\n          position: relative;\\n          overflow: hidden;\\n          padding: 10px;\\n          border-bottom: none;\\n          color: var(--snippet-color);\\n          background-color: var(--snippet-background-color);\\n          border: 1px solid var(--report-border-color-secondary);\\n        }\\n        .lh-snippet__title {\\n          font-weight: bold;\\n          float: left;\\n        }\\n        .lh-snippet__node {\\n          float: left;\\n          margin-left: 4px;\\n        }\\n        .lh-snippet__toggle-expand {\\n          padding: 1px 7px;\\n          margin-top: -1px;\\n          margin-right: -7px;\\n          float: right;\\n          background: transparent;\\n          border: none;\\n          cursor: pointer;\\n          font-size: 14px;\\n          color: #0c50c7;\\n        }\\n\\n        .lh-snippet__snippet {\\n          overflow: auto;\\n          border: 1px solid var(--report-border-color-secondary);\\n        }\\n        /* Container needed so that all children grow to the width of the scroll container */\\n        .lh-snippet__snippet-inner {\\n          display: inline-block;\\n          min-width: 100%;\\n        }\\n\\n        .lh-snippet:not(.lh-snippet--expanded) .lh-snippet__show-if-expanded {\\n          display: none;\\n        }\\n        .lh-snippet.lh-snippet--expanded .lh-snippet__show-if-collapsed {\\n          display: none;\\n        }\\n\\n        .lh-snippet__line {\\n          background: white;\\n          white-space: pre;\\n          display: flex;\\n        }\\n        .lh-snippet__line:not(.lh-snippet__line--message):first-child {\\n          padding-top: 4px;\\n        }\\n        .lh-snippet__line:not(.lh-snippet__line--message):last-child {\\n          padding-bottom: 4px;\\n        }\\n        .lh-snippet__line--content-highlighted {\\n          background: var(--snippet-highlight-dark);\\n        }\\n        .lh-snippet__line--message {\\n          background: var(--snippet-highlight-light);\\n        }\\n        .lh-snippet__line--message .lh-snippet__line-number {\\n          padding-top: 10px;\\n          padding-bottom: 10px;\\n        }\\n        .lh-snippet__line--message code {\\n          padding: 10px;\\n          padding-left: 5px;\\n          color: var(--color-fail);\\n          font-family: var(--report-font-family);\\n        }\\n        .lh-snippet__line--message code {\\n          white-space: normal;\\n        }\\n        .lh-snippet__line-icon {\\n          padding-top: 10px;\\n          display: none;\\n        }\\n        .lh-snippet__line--message .lh-snippet__line-icon {\\n          display: block;\\n        }\\n        .lh-snippet__line-icon:before {\\n          content: "";\\n          display: inline-block;\\n          vertical-align: middle;\\n          margin-right: 4px;\\n          width: var(--score-icon-size);\\n          height: var(--score-icon-size);\\n          background-image: var(--fail-icon-url);\\n        }\\n        .lh-snippet__line-number {\\n          flex-shrink: 0;\\n          width: 40px;\\n          text-align: right;\\n          font-family: monospace;\\n          padding-right: 5px;\\n          margin-right: 5px;\\n          color: var(--color-gray-600);\\n          user-select: none;\\n        }\\n    \'),n.append(" ",r," "),t.append(n),t}(e);case"snippetContent":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-snippet__snippet"),r=e.createElement("div","lh-snippet__snippet-inner");return n.append(" ",r," "),t.append(n),t}(e);case"snippetHeader":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-snippet__header"),r=e.createElement("div","lh-snippet__title"),i=e.createElement("div","lh-snippet__node"),a=e.createElement("button","lh-snippet__toggle-expand"),o=e.createElement("span","lh-snippet__btn-label-collapse lh-snippet__show-if-expanded"),l=e.createElement("span","lh-snippet__btn-label-expand lh-snippet__show-if-collapsed");return a.append(" ",o," ",l," "),n.append(" ",r," ",i," ",a," "),t.append(n),t}(e);case"snippetLine":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-snippet__line"),r=e.createElement("div","lh-snippet__line-number"),i=e.createElement("div","lh-snippet__line-icon"),a=e.createElement("code");return n.append(" ",r," ",i," ",a," "),t.append(n),t}(e);case"styles":return function(e){let t=e.createFragment(),n=e.createElement("style");return n.append(\'/**\\n * @license\\n * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\\n *\\n * Licensed under the Apache License, Version 2.0 (the "License");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an "AS-IS" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n/*\\n  Naming convention:\\n\\n  If a variable is used for a specific component: --{component}-{property name}-{modifier}\\n\\n  Both {component} and {property name} should be kebab-case. If the target is the entire page,\\n  use \\\'report\\\' for the component. The property name should not be abbreviated. Use the\\n  property name the variable is intended for - if it\\\'s used for multiple, a common descriptor\\n  is fine (ex: \\\'size\\\' for a variable applied to \\\'width\\\' and \\\'height\\\'). If a variable is shared\\n  across multiple components, either create more variables or just drop the "{component}-"\\n  part of the name. Append any modifiers at the end (ex: \\\'big\\\', \\\'dark\\\').\\n\\n  For colors: --color-{hue}-{intensity}\\n\\n  {intensity} is the Material Design tag - 700, A700, etc.\\n*/\\n.lh-vars {\\n  /* Palette using Material Design Colors\\n   * https://www.materialui.co/colors */\\n  --color-amber-50: #FFF8E1;\\n  --color-blue-200: #90CAF9;\\n  --color-blue-900: #0D47A1;\\n  --color-blue-A700: #2962FF;\\n  --color-blue-primary: #06f;\\n  --color-cyan-500: #00BCD4;\\n  --color-gray-100: #F5F5F5;\\n  --color-gray-300: #CFCFCF;\\n  --color-gray-200: #E0E0E0;\\n  --color-gray-400: #BDBDBD;\\n  --color-gray-50: #FAFAFA;\\n  --color-gray-500: #9E9E9E;\\n  --color-gray-600: #757575;\\n  --color-gray-700: #616161;\\n  --color-gray-800: #424242;\\n  --color-gray-900: #212121;\\n  --color-gray: #000000;\\n  --color-green-700: #080;\\n  --color-green: #0c6;\\n  --color-lime-400: #D3E156;\\n  --color-orange-50: #FFF3E0;\\n  --color-orange-700: #C33300;\\n  --color-orange: #fa3;\\n  --color-red-700: #c00;\\n  --color-red: #f33;\\n  --color-teal-600: #00897B;\\n  --color-white: #FFFFFF;\\n\\n  /* Context-specific colors */\\n  --color-average-secondary: var(--color-orange-700);\\n  --color-average: var(--color-orange);\\n  --color-fail-secondary: var(--color-red-700);\\n  --color-fail: var(--color-red);\\n  --color-hover: var(--color-gray-50);\\n  --color-informative: var(--color-blue-900);\\n  --color-pass-secondary: var(--color-green-700);\\n  --color-pass: var(--color-green);\\n  --color-not-applicable: var(--color-gray-600);\\n\\n  /* Component variables */\\n  --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));\\n  --audit-explanation-line-height: 16px;\\n  --audit-group-margin-bottom: calc(var(--default-padding) * 6);\\n  --audit-group-padding-vertical: 8px;\\n  --audit-margin-horizontal: 5px;\\n  --audit-padding-vertical: 8px;\\n  --category-padding: calc(var(--default-padding) * 6) var(--edge-gap-padding) calc(var(--default-padding) * 4);\\n  --chevron-line-stroke: var(--color-gray-600);\\n  --chevron-size: 12px;\\n  --default-padding: 8px;\\n  --edge-gap-padding: calc(var(--default-padding) * 4);\\n  --env-item-background-color: var(--color-gray-100);\\n  --env-item-font-size: 28px;\\n  --env-item-line-height: 36px;\\n  --env-item-padding: 10px 0px;\\n  --env-name-min-width: 220px;\\n  --footer-padding-vertical: 16px;\\n  --gauge-circle-size-big: 96px;\\n  --gauge-circle-size: 48px;\\n  --gauge-circle-size-sm: 32px;\\n  --gauge-label-font-size-big: 18px;\\n  --gauge-label-font-size: var(--report-font-size-secondary);\\n  --gauge-label-line-height-big: 24px;\\n  --gauge-label-line-height: var(--report-line-height-secondary);\\n  --gauge-percentage-font-size-big: 38px;\\n  --gauge-percentage-font-size: var(--report-font-size-secondary);\\n  --gauge-wrapper-width: 120px;\\n  --header-line-height: 24px;\\n  --highlighter-background-color: var(--report-text-color);\\n  --icon-square-size: calc(var(--score-icon-size) * 0.88);\\n  --image-preview-size: 48px;\\n  --link-color: var(--color-blue-primary);\\n  --locale-selector-background-color: var(--color-white);\\n  --metric-toggle-lines-fill: #7F7F7F;\\n  --metric-value-font-size: calc(var(--report-font-size) * 1.8);\\n  --metrics-toggle-background-color: var(--color-gray-200);\\n  --plugin-badge-background-color: var(--color-white);\\n  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);\\n  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);\\n  --plugin-icon-size: 65%;\\n  --pwa-icon-margin: 0 var(--default-padding);\\n  --pwa-icon-size: var(--topbar-logo-size);\\n  --report-background-color: #fff;\\n  --report-border-color-secondary: #ebebeb;\\n  --report-font-family-monospace: \\\'Roboto Mono\\\', \\\'Menlo\\\', \\\'dejavu sans mono\\\', \\\'Consolas\\\', \\\'Lucida Console\\\', monospace;\\n  --report-font-family: Roboto, Helvetica, Arial, sans-serif;\\n  --report-font-size: 14px;\\n  --report-font-size-secondary: 12px;\\n  --report-icon-size: var(--score-icon-background-size);\\n  --report-line-height: 24px;\\n  --report-line-height-secondary: 20px;\\n  --report-monospace-font-size: calc(var(--report-font-size) * 0.85);\\n  --report-text-color-secondary: var(--color-gray-800);\\n  --report-text-color: var(--color-gray-900);\\n  --report-content-max-width: calc(60 * var(--report-font-size)); /* defaults to 840px */\\n  --report-content-min-width: 360px;\\n  --report-content-max-width-minus-edge-gap: calc(var(--report-content-max-width) - var(--edge-gap-padding) * 2);\\n  --score-container-padding: 8px;\\n  --score-icon-background-size: 24px;\\n  --score-icon-margin-left: 6px;\\n  --score-icon-margin-right: 14px;\\n  --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);\\n  --score-icon-size: 12px;\\n  --score-icon-size-big: 16px;\\n  --screenshot-overlay-background: rgba(0, 0, 0, 0.3);\\n  --section-padding-vertical: calc(var(--default-padding) * 6);\\n  --snippet-background-color: var(--color-gray-50);\\n  --snippet-color: #0938C2;\\n  --sparkline-height: 5px;\\n  --stackpack-padding-horizontal: 10px;\\n  --sticky-header-background-color: var(--report-background-color);\\n  --sticky-header-buffer: calc(var(--topbar-height) + var(--sticky-header-height));\\n  --sticky-header-height: calc(var(--gauge-circle-size-sm) + var(--score-container-padding) * 2);\\n  --table-group-header-background-color: #EEF1F4;\\n  --table-group-header-text-color: var(--color-gray-700);\\n  --table-higlight-background-color: #F5F7FA;\\n  --tools-icon-color: var(--color-gray-600);\\n  --topbar-background-color: var(--color-white);\\n  --topbar-height: 32px;\\n  --topbar-logo-size: 24px;\\n  --topbar-padding: 0 8px;\\n  --toplevel-warning-background-color: hsla(30, 100%, 75%, 10%);\\n  --toplevel-warning-message-text-color: var(--color-average-secondary);\\n  --toplevel-warning-padding: 18px;\\n  --toplevel-warning-text-color: var(--report-text-color);\\n\\n  /* SVGs */\\n  --plugin-icon-url-dark: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="%23FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></svg>\\\');\\n  --plugin-icon-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="%23757575"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></svg>\\\');\\n\\n  --pass-icon-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>check</title><path fill="%23178239" d="M24 4C12.95 4 4 12.95 4 24c0 11.04 8.95 20 20 20 11.04 0 20-8.96 20-20 0-11.05-8.96-20-20-20zm-4 30L10 24l2.83-2.83L20 28.34l15.17-15.17L38 16 20 34z"/></svg>\\\');\\n  --average-icon-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>info</title><path fill="%23E67700" d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z"/></svg>\\\');\\n  --fail-icon-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>warn</title><path fill="%23C7221F" d="M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z"/></svg>\\\');\\n  --error-icon-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3 15"><title>error</title><path d="M0 15H 3V 12H 0V" fill="%23FF4E42"/><path d="M0 9H 3V 0H 0V" fill="%23FF4E42"/></svg>\\\');\\n\\n  --pwa-installable-gray-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23DAE0E3" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>\\\');\\n  --pwa-optimized-gray-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23DAE0E3" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>\\\');\\n\\n  --pwa-installable-gray-url-dark: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23424242" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>\\\');\\n  --pwa-optimized-gray-url-dark: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23424242" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>\\\');\\n\\n  --pwa-installable-color-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><circle fill="%230CCE6B" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>\\\');\\n  --pwa-optimized-color-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%230CCE6B" width="24" height="24" rx="12"/><path d="M5 5h14v14H5z"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/></g></svg>\\\');\\n\\n  --swap-locale-icon-url: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></svg>\\\');\\n}\\n\\n@media not print {\\n  .lh-dark {\\n    /* Pallete */\\n    --color-gray-200: var(--color-gray-800);\\n    --color-gray-300: #616161;\\n    --color-gray-400: var(--color-gray-600);\\n    --color-gray-700: var(--color-gray-400);\\n    --color-gray-50: #757575;\\n    --color-gray-600: var(--color-gray-500);\\n    --color-green-700: var(--color-green);\\n    --color-orange-700: var(--color-orange);\\n    --color-red-700: var(--color-red);\\n    --color-teal-600: var(--color-cyan-500);\\n\\n    /* Context-specific colors */\\n    --color-hover: rgba(0, 0, 0, 0.2);\\n    --color-informative: var(--color-blue-200);\\n\\n    /* Component variables */\\n    --env-item-background-color: #393535;\\n    --link-color: var(--color-blue-200);\\n    --locale-selector-background-color: var(--color-gray-200);\\n    --plugin-badge-background-color: var(--color-gray-800);\\n    --report-background-color: var(--color-gray-900);\\n    --report-border-color-secondary: var(--color-gray-200);\\n    --report-text-color-secondary: var(--color-gray-400);\\n    --report-text-color: var(--color-gray-100);\\n    --snippet-color: var(--color-cyan-500);\\n    --topbar-background-color: var(--color-gray);\\n    --toplevel-warning-background-color: hsl(33deg 14% 18%);\\n    --toplevel-warning-message-text-color: var(--color-orange-700);\\n    --toplevel-warning-text-color: var(--color-gray-100);\\n    --table-group-header-background-color: rgba(186, 196, 206, 0.15);\\n    --table-group-header-text-color: var(--color-gray-100);\\n    --table-higlight-background-color: rgba(186, 196, 206, 0.09);\\n\\n    /* SVGs */\\n    --plugin-icon-url: var(--plugin-icon-url-dark);\\n    --pwa-installable-gray-url: var(--pwa-installable-gray-url-dark);\\n    --pwa-optimized-gray-url: var(--pwa-optimized-gray-url-dark);\\n  }\\n}\\n\\n@media only screen and (max-width: 480px) {\\n  .lh-vars {\\n    --audit-group-margin-bottom: 20px;\\n    --edge-gap-padding: var(--default-padding);\\n    --env-name-min-width: 120px;\\n    --gauge-circle-size-big: 96px;\\n    --gauge-circle-size: 72px;\\n    --gauge-label-font-size-big: 22px;\\n    --gauge-label-font-size: 14px;\\n    --gauge-label-line-height-big: 26px;\\n    --gauge-label-line-height: 20px;\\n    --gauge-percentage-font-size-big: 34px;\\n    --gauge-percentage-font-size: 26px;\\n    --gauge-wrapper-width: 112px;\\n    --header-padding: 16px 0 16px 0;\\n    --image-preview-size: 24px;\\n    --plugin-icon-size: 75%;\\n    --pwa-icon-margin: 0 7px 0 -3px;\\n    --report-font-size: 14px;\\n    --report-line-height: 20px;\\n    --score-icon-margin-left: 2px;\\n    --score-icon-size: 10px;\\n    --topbar-height: 28px;\\n    --topbar-logo-size: 20px;\\n  }\\n\\n  /* Not enough space to adequately show the relative savings bars. */\\n  .lh-sparkline {\\n    display: none;\\n  }\\n}\\n\\n.lh-vars.lh-devtools {\\n  --audit-explanation-line-height: 14px;\\n  --audit-group-margin-bottom: 20px;\\n  --audit-group-padding-vertical: 12px;\\n  --audit-padding-vertical: 4px;\\n  --category-padding: 12px;\\n  --default-padding: 12px;\\n  --env-name-min-width: 120px;\\n  --footer-padding-vertical: 8px;\\n  --gauge-circle-size-big: 72px;\\n  --gauge-circle-size: 64px;\\n  --gauge-label-font-size-big: 22px;\\n  --gauge-label-font-size: 14px;\\n  --gauge-label-line-height-big: 26px;\\n  --gauge-label-line-height: 20px;\\n  --gauge-percentage-font-size-big: 34px;\\n  --gauge-percentage-font-size: 26px;\\n  --gauge-wrapper-width: 97px;\\n  --header-line-height: 20px;\\n  --header-padding: 16px 0 16px 0;\\n  --screenshot-overlay-background: transparent;\\n  --plugin-icon-size: 75%;\\n  --pwa-icon-margin: 0 7px 0 -3px;\\n  --report-font-family-monospace: \\\'Menlo\\\', \\\'dejavu sans mono\\\', \\\'Consolas\\\', \\\'Lucida Console\\\', monospace;\\n  --report-font-family: \\\'.SFNSDisplay-Regular\\\', \\\'Helvetica Neue\\\', \\\'Lucida Grande\\\', sans-serif;\\n  --report-font-size: 12px;\\n  --report-line-height: 20px;\\n  --score-icon-margin-left: 2px;\\n  --score-icon-size: 10px;\\n  --section-padding-vertical: 8px;\\n}\\n\\n.lh-container:not(.lh-topbar + .lh-container) {\\n  --topbar-height: 0;\\n  --sticky-header-height: 0;\\n  --sticky-header-buffer: 0;\\n}\\n\\n.lh-devtools.lh-root {\\n  height: 100%;\\n}\\n.lh-devtools.lh-root img {\\n  /* Override devtools default \\\'min-width: 0\\\' so svg without size in a flexbox isn\\\'t collapsed. */\\n  min-width: auto;\\n}\\n.lh-devtools .lh-container {\\n  overflow-y: scroll;\\n  height: calc(100% - var(--topbar-height));\\n  /** The .lh-container is the scroll parent in DevTools so we exclude the topbar from the sticky header buffer. */\\n  --sticky-header-buffer: calc(var(--sticky-header-height));\\n}\\n@media print {\\n  .lh-devtools .lh-container {\\n    overflow: unset;\\n  }\\n}\\n.lh-devtools .lh-sticky-header {\\n  /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container` */\\n  top: 0;\\n}\\n.lh-devtools .lh-element-screenshot__overlay {\\n  position: absolute;\\n}\\n\\n@keyframes fadeIn {\\n  0% { opacity: 0;}\\n  100% { opacity: 0.6;}\\n}\\n\\n.lh-root *, .lh-root *::before, .lh-root *::after {\\n  box-sizing: border-box;\\n}\\n\\n.lh-root {\\n  font-family: var(--report-font-family);\\n  font-size: var(--report-font-size);\\n  margin: 0;\\n  line-height: var(--report-line-height);\\n  background: var(--report-background-color);\\n  color: var(--report-text-color);\\n}\\n\\n.lh-root :focus-visible {\\n    outline: -webkit-focus-ring-color auto 3px;\\n}\\n.lh-root summary:focus {\\n    outline: none;\\n    box-shadow: 0 0 0 1px hsl(217, 89%, 61%);\\n}\\n\\n.lh-root [hidden] {\\n  display: none !important;\\n}\\n\\n.lh-root pre {\\n  margin: 0;\\n}\\n\\n.lh-root pre,\\n.lh-root code {\\n  font-family: var(--report-font-family-monospace);\\n}\\n\\n.lh-root details > summary {\\n  cursor: pointer;\\n}\\n\\n.lh-hidden {\\n  display: none !important;\\n}\\n\\n.lh-container {\\n  /*\\n  Text wrapping in the report is so much FUN!\\n  We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely\\n  long non-breakable text (usually URLs) found in:\\n    1. The footer\\n    2. .lh-node (outerHTML)\\n    3. .lh-code\\n\\n  With that sorted, the next challenge is appropriate column sizing and text wrapping inside our\\n  .lh-details tables. Even more fun.\\n    * We don\\\'t want table headers ("Potential Savings (ms)") to wrap or their column values, but\\n    we\\\'d be happy for the URL column to wrap if the URLs are particularly long.\\n    * We want the narrow columns to remain narrow, providing the most column width for URL\\n    * We don\\\'t want the table to extend past 100% width.\\n    * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters,\\n      but they do not get any overflow:ellipsis treatment.\\n  */\\n  word-break: break-word;\\n}\\n\\n.lh-audit-group a,\\n.lh-category-header__description a,\\n.lh-audit__description a,\\n.lh-warnings a,\\n.lh-footer a,\\n.lh-table-column--link a {\\n  color: var(--link-color);\\n}\\n\\n.lh-audit__description, .lh-audit__stackpack {\\n  --inner-audit-padding-right: var(--stackpack-padding-horizontal);\\n  padding-left: var(--audit-description-padding-left);\\n  padding-right: var(--inner-audit-padding-right);\\n  padding-top: 8px;\\n  padding-bottom: 8px;\\n}\\n\\n.lh-details {\\n  margin-top: var(--default-padding);\\n  margin-bottom: var(--default-padding);\\n  margin-left: var(--audit-description-padding-left);\\n  /* whatever the .lh-details side margins are */\\n  width: 100%;\\n}\\n\\n.lh-audit__stackpack {\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.lh-audit__stackpack__img {\\n  max-width: 30px;\\n  margin-right: var(--default-padding)\\n}\\n\\n/* Report header */\\n\\n.lh-report-icon {\\n  display: flex;\\n  align-items: center;\\n  padding: 10px 12px;\\n  cursor: pointer;\\n}\\n.lh-report-icon[disabled] {\\n  opacity: 0.3;\\n  pointer-events: none;\\n}\\n\\n.lh-report-icon::before {\\n  content: "";\\n  margin: 4px;\\n  background-repeat: no-repeat;\\n  width: var(--report-icon-size);\\n  height: var(--report-icon-size);\\n  opacity: 0.7;\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n.lh-report-icon:hover::before {\\n  opacity: 1;\\n}\\n.lh-dark .lh-report-icon::before {\\n  filter: invert(1);\\n}\\n.lh-report-icon--print::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/><path fill="none" d="M0 0h24v24H0z"/></svg>\\\');\\n}\\n.lh-report-icon--copy::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>\\\');\\n}\\n.lh-report-icon--open::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"/></svg>\\\');\\n}\\n.lh-report-icon--download::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>\\\');\\n}\\n.lh-report-icon--dark::before {\\n  background-image:url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 100 125"><path d="M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z"/></svg>\\\');\\n}\\n.lh-report-icon--treemap::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="black"><path d="M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z"/></svg>\\\');\\n}\\n.lh-report-icon--date::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 11h2v2H7v-2zm14-5v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h1V2h2v2h8V2h2v2h1a2 2 0 012 2zM5 8h14V6H5v2zm14 12V10H5v10h14zm-4-7h2v-2h-2v2zm-4 0h2v-2h-2v2z"/></svg>\\\');\\n}\\n.lh-report-icon--devices::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 6h18V4H4a2 2 0 00-2 2v11H0v3h14v-3H4V6zm19 2h-6a1 1 0 00-1 1v10c0 .6.5 1 1 1h6c.6 0 1-.5 1-1V9c0-.6-.5-1-1-1zm-1 9h-4v-7h4v7z"/></svg>\\\');\\n}\\n.lh-report-icon--world::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm7 6h-3c-.3-1.3-.8-2.5-1.4-3.6A8 8 0 0 1 18.9 8zm-7-4a14 14 0 0 1 2 4h-4a14 14 0 0 1 2-4zM4.3 14a8.2 8.2 0 0 1 0-4h3.3a16.5 16.5 0 0 0 0 4H4.3zm.8 2h3a14 14 0 0 0 1.3 3.6A8 8 0 0 1 5.1 16zm3-8H5a8 8 0 0 1 4.3-3.6L8 8zM12 20a14 14 0 0 1-2-4h4a14 14 0 0 1-2 4zm2.3-6H9.7a14.7 14.7 0 0 1 0-4h4.6a14.6 14.6 0 0 1 0 4zm.3 5.6c.6-1.2 1-2.4 1.4-3.6h3a8 8 0 0 1-4.4 3.6zm1.8-5.6a16.5 16.5 0 0 0 0-4h3.3a8.2 8.2 0 0 1 0 4h-3.3z"/></svg>\\\');\\n}\\n.lh-report-icon--stopwatch::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.1-6.6L20.5 6l-1.4-1.4L17.7 6A9 9 0 0 0 3 13a9 9 0 1 0 16-5.6zm-7 12.6a7 7 0 1 1 0-14 7 7 0 0 1 0 14z"/></svg>\\\');\\n}\\n.lh-report-icon--networkspeed::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.9 5c-.2 0-.3 0-.4.2v.2L10.1 17a2 2 0 0 0-.2 1 2 2 0 0 0 4 .4l2.4-12.9c0-.3-.2-.5-.5-.5zM1 9l2 2c2.9-2.9 6.8-4 10.5-3.6l1.2-2.7C10 3.8 4.7 5.3 1 9zm20 2 2-2a15.4 15.4 0 0 0-5.6-3.6L17 8.2c1.5.7 2.9 1.6 4.1 2.8zm-4 4 2-2a9.9 9.9 0 0 0-2.7-1.9l-.5 3 1.2.9zM5 13l2 2a7.1 7.1 0 0 1 4-2l1.3-2.9C9.7 10.1 7 11 5 13z"/></svg>\\\');\\n}\\n.lh-report-icon--samples-one::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="7" cy="14" r="3"/><path d="M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>\\\');\\n}\\n.lh-report-icon--samples-many::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/><circle cx="7" cy="14" r="3"/><circle cx="11" cy="6" r="3"/></svg>\\\');\\n}\\n.lh-report-icon--chrome::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="-50 -50 562 562"><path d="M256 25.6v25.6a204 204 0 0 1 144.8 60 204 204 0 0 1 60 144.8 204 204 0 0 1-60 144.8 204 204 0 0 1-144.8 60 204 204 0 0 1-144.8-60 204 204 0 0 1-60-144.8 204 204 0 0 1 60-144.8 204 204 0 0 1 144.8-60V0a256 256 0 1 0 0 512 256 256 0 0 0 0-512v25.6z"/><path d="M256 179.2v25.6a51.3 51.3 0 0 1 0 102.4 51.3 51.3 0 0 1 0-102.4v-51.2a102.3 102.3 0 1 0-.1 204.7 102.3 102.3 0 0 0 .1-204.7v25.6z"/><path d="M256 204.8h217.6a25.6 25.6 0 0 0 0-51.2H256a25.6 25.6 0 0 0 0 51.2m44.3 76.8L191.5 470.1a25.6 25.6 0 1 0 44.4 25.6l108.8-188.5a25.6 25.6 0 1 0-44.4-25.6m-88.6 0L102.9 93.2a25.7 25.7 0 0 0-35-9.4 25.7 25.7 0 0 0-9.4 35l108.8 188.5a25.7 25.7 0 0 0 35 9.4 25.9 25.9 0 0 0 9.4-35.1"/></svg>\\\');\\n}\\n.lh-report-icon--external::before {\\n  background-image: url(\\\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><path d="M3.15 11.9a1.01 1.01 0 0 1-.743-.307 1.01 1.01 0 0 1-.306-.743v-7.7c0-.292.102-.54.306-.744a1.01 1.01 0 0 1 .744-.306H7v1.05H3.15v7.7h7.7V7h1.05v3.85c0 .291-.103.54-.307.743a1.01 1.01 0 0 1-.743.307h-7.7Zm2.494-2.8-.743-.744 5.206-5.206H8.401V2.1h3.5v3.5h-1.05V3.893L5.644 9.1Z"/></svg>\\\');\\n}\\n\\n.lh-buttons {\\n  display: flex;\\n  flex-wrap: wrap;\\n  margin: var(--default-padding) 0;\\n}\\n.lh-button {\\n  height: 32px;\\n  border: 1px solid var(--report-border-color-secondary);\\n  border-radius: 3px;\\n  color: var(--link-color);\\n  background-color: var(--report-background-color);\\n  margin: 5px;\\n}\\n\\n.lh-button:first-of-type {\\n  margin-left: 0;\\n}\\n\\n/* Node */\\n.lh-node__snippet {\\n  font-family: var(--report-font-family-monospace);\\n  color: var(--snippet-color);\\n  font-size: var(--report-monospace-font-size);\\n  line-height: 20px;\\n}\\n\\n/* Score */\\n\\n.lh-audit__score-icon {\\n  width: var(--score-icon-size);\\n  height: var(--score-icon-size);\\n  margin: var(--score-icon-margin);\\n}\\n\\n.lh-audit--pass .lh-audit__display-text {\\n  color: var(--color-pass-secondary);\\n}\\n.lh-audit--pass .lh-audit__score-icon,\\n.lh-scorescale-range--pass::before {\\n  border-radius: 100%;\\n  background: var(--color-pass);\\n}\\n\\n.lh-audit--average .lh-audit__display-text {\\n  color: var(--color-average-secondary);\\n}\\n.lh-audit--average .lh-audit__score-icon,\\n.lh-scorescale-range--average::before {\\n  background: var(--color-average);\\n  width: var(--icon-square-size);\\n  height: var(--icon-square-size);\\n}\\n\\n.lh-audit--fail .lh-audit__display-text {\\n  color: var(--color-fail-secondary);\\n}\\n.lh-audit--fail .lh-audit__score-icon,\\n.lh-audit--error .lh-audit__score-icon,\\n.lh-scorescale-range--fail::before {\\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n\\n.lh-audit--error .lh-audit__score-icon,\\n.lh-metric--error .lh-metric__icon {\\n  background-image: var(--error-icon-url);\\n  background-repeat: no-repeat;\\n  background-position: center;\\n  border: none;\\n}\\n\\n.lh-gauge__wrapper--fail .lh-gauge--error {\\n  background-image: var(--error-icon-url);\\n  background-repeat: no-repeat;\\n  background-position: center;\\n  transform: scale(0.5);\\n  top: var(--score-container-padding);\\n}\\n\\n.lh-audit--manual .lh-audit__display-text,\\n.lh-audit--notapplicable .lh-audit__display-text {\\n  color: var(--color-gray-600);\\n}\\n.lh-audit--manual .lh-audit__score-icon,\\n.lh-audit--notapplicable .lh-audit__score-icon {\\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\\n  border-radius: 100%;\\n  background: none;\\n}\\n\\n.lh-audit--informative .lh-audit__display-text {\\n  color: var(--color-gray-600);\\n}\\n\\n.lh-audit--informative .lh-audit__score-icon {\\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\\n  border-radius: 100%;\\n}\\n\\n.lh-audit__description,\\n.lh-audit__stackpack {\\n  color: var(--report-text-color-secondary);\\n}\\n.lh-audit__adorn {\\n  border: 1px solid var(--color-gray-500);\\n  border-radius: 3px;\\n  margin: 0 3px;\\n  padding: 0 2px;\\n  line-height: 1.1;\\n  display: inline-block;\\n  font-size: 90%;\\n  color: var(--report-text-color-secondary);\\n}\\n\\n.lh-category-header__description  {\\n  text-align: center;\\n  color: var(--color-gray-700);\\n  margin: 0px auto;\\n  max-width: 400px;\\n}\\n\\n\\n.lh-audit__display-text,\\n.lh-load-opportunity__sparkline,\\n.lh-chevron-container {\\n  margin: 0 var(--audit-margin-horizontal);\\n}\\n.lh-chevron-container {\\n  margin-right: 0;\\n}\\n\\n.lh-audit__title-and-text {\\n  flex: 1;\\n}\\n\\n.lh-audit__title-and-text code {\\n  color: var(--snippet-color);\\n  font-size: var(--report-monospace-font-size);\\n}\\n\\n/* Prepend display text with em dash separator. But not in Opportunities. */\\n.lh-audit__display-text:not(:empty):before {\\n  content: \\\'\u2014\\\';\\n  margin-right: var(--audit-margin-horizontal);\\n}\\n.lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before {\\n  display: none;\\n}\\n\\n/* Expandable Details (Audit Groups, Audits) */\\n.lh-audit__header {\\n  display: flex;\\n  align-items: center;\\n  padding: var(--default-padding);\\n}\\n\\n.lh-audit--load-opportunity .lh-audit__header {\\n  display: block;\\n}\\n\\n\\n.lh-metricfilter {\\n  display: grid;\\n  justify-content: end;\\n  align-items: center;\\n  grid-auto-flow: column;\\n  gap: 4px;\\n  color: var(--color-gray-700);\\n}\\n\\n.lh-metricfilter__radio {\\n  /*\\n   * Instead of hiding, position offscreen so it\\\'s still accessible to screen readers\\n   * https://bugs.chromium.org/p/chromium/issues/detail?id=1439785\\n   */\\n  position: fixed;\\n  left: -9999px;\\n}\\n.lh-metricfilter input[type=\\\'radio\\\']:focus-visible + label {\\n  outline: -webkit-focus-ring-color auto 1px;\\n}\\n\\n.lh-metricfilter__label {\\n  display: inline-flex;\\n  padding: 0 4px;\\n  height: 16px;\\n  text-decoration: underline;\\n  align-items: center;\\n  cursor: pointer;\\n  font-size: 90%;\\n}\\n\\n.lh-metricfilter__label--active {\\n  background: var(--color-blue-primary);\\n  color: var(--color-white);\\n  border-radius: 3px;\\n  text-decoration: none;\\n}\\n/* Give the \\\'All\\\' choice a more muted display */\\n.lh-metricfilter__label--active[for="metric-All"] {\\n  background-color: var(--color-blue-200) !important;\\n  color: black !important;\\n}\\n\\n.lh-metricfilter__text {\\n  margin-right: 8px;\\n}\\n\\n/* If audits are filtered, hide the itemcount for Passed Audits\u2026 */\\n.lh-category--filtered .lh-audit-group .lh-audit-group__itemcount {\\n  display: none;\\n}\\n\\n\\n.lh-audit__header:hover {\\n  background-color: var(--color-hover);\\n}\\n\\n/* We want to hide the browser\\\'s default arrow marker on summary elements. Admittedly, it\\\'s complicated. */\\n.lh-root details > summary {\\n  /* Blink 89+ and Firefox will hide the arrow when display is changed from (new) default of `list-item` to block.  https://chromestatus.com/feature/6730096436051968*/\\n  display: block;\\n}\\n/* Safari and Blink <=88 require using the -webkit-details-marker selector */\\n.lh-root details > summary::-webkit-details-marker {\\n  display: none;\\n}\\n\\n/* Perf Metric */\\n\\n.lh-metrics-container {\\n  display: grid;\\n  grid-auto-rows: 1fr;\\n  grid-template-columns: 1fr 1fr;\\n  grid-column-gap: var(--report-line-height);\\n  margin-bottom: var(--default-padding);\\n}\\n\\n.lh-metric {\\n  border-top: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(-n+2) {\\n  border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-metric__innerwrap {\\n  display: grid;\\n  /**\\n   * Icon -- Metric Name\\n   *      -- Metric Value\\n   */\\n  grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 1fr;\\n  align-items: center;\\n  padding: var(--default-padding);\\n}\\n\\n.lh-metric__details {\\n  order: -1;\\n}\\n\\n.lh-metric__title {\\n  flex: 1;\\n}\\n\\n.lh-calclink {\\n  padding-left: calc(1ex / 3);\\n}\\n\\n.lh-metric__description {\\n  display: none;\\n  grid-column-start: 2;\\n  grid-column-end: 4;\\n  color: var(--report-text-color-secondary);\\n}\\n\\n.lh-metric__value {\\n  font-size: var(--metric-value-font-size);\\n  margin: calc(var(--default-padding) / 2) 0;\\n  white-space: nowrap; /* No wrapping between metric value and the icon */\\n  grid-column-start: 2;\\n}\\n\\n\\n@media screen and (max-width: 535px) {\\n  .lh-metrics-container {\\n    display: block;\\n  }\\n\\n  .lh-metric {\\n    border-bottom: none !important;\\n  }\\n  .lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(1) {\\n    border-bottom: 1px solid var(--report-border-color-secondary) !important;\\n  }\\n\\n  /* Change the grid to 3 columns for narrow viewport. */\\n  .lh-metric__innerwrap {\\n  /**\\n   * Icon -- Metric Name -- Metric Value\\n   */\\n    grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;\\n  }\\n  .lh-metric__value {\\n    justify-self: end;\\n    grid-column-start: unset;\\n  }\\n}\\n\\n/* No-JS toggle switch */\\n/* Keep this selector sync\\\'d w/ `magicSelector` in report-ui-features-test.js */\\n .lh-metrics-toggle__input:checked ~ .lh-metrics-container .lh-metric__description {\\n  display: block;\\n}\\n\\n/* TODO get rid of the SVGS and clean up these some more */\\n.lh-metrics-toggle__input {\\n  opacity: 0;\\n  position: absolute;\\n  right: 0;\\n  top: 0px;\\n}\\n\\n.lh-metrics-toggle__input + div > label > .lh-metrics-toggle__labeltext--hide,\\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--show {\\n  display: none;\\n}\\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--hide {\\n  display: inline;\\n}\\n.lh-metrics-toggle__input:focus + div > label {\\n  outline: -webkit-focus-ring-color auto 3px;\\n}\\n\\n.lh-metrics-toggle__label {\\n  cursor: pointer;\\n  font-size: var(--report-font-size-secondary);\\n  line-height: var(--report-line-height-secondary);\\n  color: var(--color-gray-700);\\n}\\n\\n/* Pushes the metric description toggle button to the right. */\\n.lh-audit-group--metrics .lh-audit-group__header {\\n  display: flex;\\n  justify-content: space-between;\\n}\\n\\n.lh-metric__icon,\\n.lh-scorescale-range::before {\\n  content: \\\'\\\';\\n  width: var(--score-icon-size);\\n  height: var(--score-icon-size);\\n  display: inline-block;\\n  margin: var(--score-icon-margin);\\n}\\n\\n.lh-metric--pass .lh-metric__value {\\n  color: var(--color-pass-secondary);\\n}\\n.lh-metric--pass .lh-metric__icon {\\n  border-radius: 100%;\\n  background: var(--color-pass);\\n}\\n\\n.lh-metric--average .lh-metric__value {\\n  color: var(--color-average-secondary);\\n}\\n.lh-metric--average .lh-metric__icon {\\n  background: var(--color-average);\\n  width: var(--icon-square-size);\\n  height: var(--icon-square-size);\\n}\\n\\n.lh-metric--fail .lh-metric__value {\\n  color: var(--color-fail-secondary);\\n}\\n.lh-metric--fail .lh-metric__icon {\\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n\\n.lh-metric--error .lh-metric__value,\\n.lh-metric--error .lh-metric__description {\\n  color: var(--color-fail-secondary);\\n}\\n\\n/* Perf load opportunity */\\n\\n.lh-load-opportunity__cols {\\n  display: flex;\\n  align-items: flex-start;\\n}\\n\\n.lh-load-opportunity__header .lh-load-opportunity__col {\\n  color: var(--color-gray-600);\\n  display: unset;\\n  line-height: calc(2.3 * var(--report-font-size));\\n}\\n\\n.lh-load-opportunity__col {\\n  display: flex;\\n}\\n\\n.lh-load-opportunity__col--one {\\n  flex: 5;\\n  align-items: center;\\n  margin-right: 2px;\\n}\\n.lh-load-opportunity__col--two {\\n  flex: 4;\\n  text-align: right;\\n}\\n\\n.lh-audit--load-opportunity .lh-audit__display-text {\\n  text-align: right;\\n  flex: 0 0 7.5ch;\\n}\\n\\n\\n/* Sparkline */\\n\\n.lh-load-opportunity__sparkline {\\n  flex: 1;\\n  margin-top: calc((var(--report-line-height) - var(--sparkline-height)) / 2);\\n}\\n\\n.lh-sparkline {\\n  height: var(--sparkline-height);\\n  width: 100%;\\n}\\n\\n.lh-sparkline__bar {\\n  height: 100%;\\n  float: right;\\n}\\n\\n.lh-audit--pass .lh-sparkline__bar {\\n  background: var(--color-pass);\\n}\\n\\n.lh-audit--average .lh-sparkline__bar {\\n  background: var(--color-average);\\n}\\n\\n.lh-audit--fail .lh-sparkline__bar {\\n  background: var(--color-fail);\\n}\\n\\n/* Filmstrip */\\n\\n.lh-filmstrip-container {\\n  /* smaller gap between metrics and filmstrip */\\n  margin: -8px auto 0 auto;\\n}\\n\\n.lh-filmstrip {\\n  display: grid;\\n  justify-content: space-between;\\n  padding-bottom: var(--default-padding);\\n  width: 100%;\\n  grid-template-columns: repeat(auto-fit, 90px);\\n}\\n\\n.lh-filmstrip__frame {\\n  text-align: right;\\n  position: relative;\\n}\\n\\n.lh-filmstrip__thumbnail {\\n  border: 1px solid var(--report-border-color-secondary);\\n  max-height: 150px;\\n  max-width: 120px;\\n}\\n\\n/* Audit */\\n\\n.lh-audit {\\n  border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\n\\n/* Apply border-top to just the first audit. */\\n.lh-audit {\\n  border-top: 1px solid var(--report-border-color-secondary);\\n}\\n.lh-audit ~ .lh-audit {\\n  border-top: none;\\n}\\n\\n\\n.lh-audit--error .lh-audit__display-text {\\n  color: var(--color-fail-secondary);\\n}\\n\\n/* Audit Group */\\n\\n.lh-audit-group {\\n  margin-bottom: var(--audit-group-margin-bottom);\\n  position: relative;\\n}\\n.lh-audit-group--metrics {\\n  margin-bottom: calc(var(--audit-group-margin-bottom) / 2);\\n}\\n\\n.lh-audit-group__header::before {\\n  /* By default, groups don\\\'t get an icon */\\n  content: none;\\n  width: var(--pwa-icon-size);\\n  height: var(--pwa-icon-size);\\n  margin: var(--pwa-icon-margin);\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n/* Style the "over budget" columns red. */\\n.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(4),\\n.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(5),\\n.lh-audit-group--budgets #timing-budget tbody tr td:nth-child(3) {\\n  color: var(--color-red-700);\\n}\\n\\n/* Align the "over budget request count" text to be close to the "over budget bytes" column. */\\n.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){\\n  text-align: right;\\n}\\n\\n.lh-audit-group--budgets .lh-details--budget {\\n  width: 100%;\\n  margin: 0 0 var(--default-padding);\\n}\\n\\n.lh-audit-group--pwa-installable .lh-audit-group__header::before {\\n  content: \\\'\\\';\\n  background-image: var(--pwa-installable-gray-url);\\n}\\n.lh-audit-group--pwa-optimized .lh-audit-group__header::before {\\n  content: \\\'\\\';\\n  background-image: var(--pwa-optimized-gray-url);\\n}\\n.lh-audit-group--pwa-installable.lh-badged .lh-audit-group__header::before {\\n  background-image: var(--pwa-installable-color-url);\\n}\\n.lh-audit-group--pwa-optimized.lh-badged .lh-audit-group__header::before {\\n  background-image: var(--pwa-optimized-color-url);\\n}\\n\\n.lh-audit-group--metrics .lh-audit-group__summary {\\n  margin-top: 0;\\n  margin-bottom: 0;\\n}\\n\\n.lh-audit-group__summary {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n}\\n\\n.lh-audit-group__header .lh-chevron {\\n  margin-top: calc((var(--report-line-height) - 5px) / 2);\\n}\\n\\n.lh-audit-group__header {\\n  letter-spacing: 0.8px;\\n  padding: var(--default-padding);\\n  padding-left: 0;\\n}\\n\\n.lh-audit-group__header, .lh-audit-group__summary {\\n  font-size: var(--report-font-size-secondary);\\n  line-height: var(--report-line-height-secondary);\\n  color: var(--color-gray-700);\\n}\\n\\n.lh-audit-group__title {\\n  text-transform: uppercase;\\n  font-weight: 500;\\n}\\n\\n.lh-audit-group__itemcount {\\n  color: var(--color-gray-600);\\n}\\n\\n.lh-audit-group__footer {\\n  color: var(--color-gray-600);\\n  display: block;\\n  margin-top: var(--default-padding);\\n}\\n\\n.lh-details,\\n.lh-category-header__description,\\n.lh-load-opportunity__header,\\n.lh-audit-group__footer {\\n  font-size: var(--report-font-size-secondary);\\n  line-height: var(--report-line-height-secondary);\\n}\\n\\n.lh-audit-explanation {\\n  margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);\\n  line-height: var(--audit-explanation-line-height);\\n  display: inline-block;\\n}\\n\\n.lh-audit--fail .lh-audit-explanation {\\n  color: var(--color-fail-secondary);\\n}\\n\\n/* Report */\\n.lh-list > :not(:last-child) {\\n  margin-bottom: calc(var(--default-padding) * 2);\\n}\\n\\n.lh-header-container {\\n  display: block;\\n  margin: 0 auto;\\n  position: relative;\\n  word-wrap: break-word;\\n}\\n\\n.lh-header-container .lh-scores-wrapper {\\n  border-bottom: 1px solid var(--color-gray-200);\\n}\\n\\n\\n.lh-report {\\n  min-width: var(--report-content-min-width);\\n}\\n\\n.lh-exception {\\n  font-size: large;\\n}\\n\\n.lh-code {\\n  white-space: normal;\\n  margin-top: 0;\\n  font-size: var(--report-monospace-font-size);\\n}\\n\\n.lh-warnings {\\n  --item-margin: calc(var(--report-line-height) / 6);\\n  color: var(--color-average-secondary);\\n  margin: var(--audit-padding-vertical) 0;\\n  padding: var(--default-padding)\\n    var(--default-padding)\\n    var(--default-padding)\\n    calc(var(--audit-description-padding-left));\\n  background-color: var(--toplevel-warning-background-color);\\n}\\n.lh-warnings span {\\n  font-weight: bold;\\n}\\n\\n.lh-warnings--toplevel {\\n  --item-margin: calc(var(--header-line-height) / 4);\\n  color: var(--toplevel-warning-text-color);\\n  margin-left: auto;\\n  margin-right: auto;\\n  max-width: var(--report-content-max-width-minus-edge-gap);\\n  padding: var(--toplevel-warning-padding);\\n  border-radius: 8px;\\n}\\n\\n.lh-warnings__msg {\\n  color: var(--toplevel-warning-message-text-color);\\n  margin: 0;\\n}\\n\\n.lh-warnings ul {\\n  margin: 0;\\n}\\n.lh-warnings li {\\n  margin: var(--item-margin) 0;\\n}\\n.lh-warnings li:last-of-type {\\n  margin-bottom: 0;\\n}\\n\\n.lh-scores-header {\\n  display: flex;\\n  flex-wrap: wrap;\\n  justify-content: center;\\n}\\n.lh-scores-header__solo {\\n  padding: 0;\\n  border: 0;\\n}\\n\\n/* Gauge */\\n\\n.lh-gauge__wrapper--pass {\\n  color: var(--color-pass-secondary);\\n  fill: var(--color-pass);\\n  stroke: var(--color-pass);\\n}\\n\\n.lh-gauge__wrapper--average {\\n  color: var(--color-average-secondary);\\n  fill: var(--color-average);\\n  stroke: var(--color-average);\\n}\\n\\n.lh-gauge__wrapper--fail {\\n  color: var(--color-fail-secondary);\\n  fill: var(--color-fail);\\n  stroke: var(--color-fail);\\n}\\n\\n.lh-gauge__wrapper--not-applicable {\\n  color: var(--color-not-applicable);\\n  fill: var(--color-not-applicable);\\n  stroke: var(--color-not-applicable);\\n}\\n\\n.lh-fraction__wrapper .lh-fraction__content::before {\\n  content: \\\'\\\';\\n  height: var(--score-icon-size);\\n  width: var(--score-icon-size);\\n  margin: var(--score-icon-margin);\\n  display: inline-block;\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__content {\\n  color: var(--color-pass-secondary);\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__background {\\n  background-color: var(--color-pass);\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__content::before {\\n  background-color: var(--color-pass);\\n  border-radius: 50%;\\n}\\n.lh-fraction__wrapper--average .lh-fraction__content {\\n  color: var(--color-average-secondary);\\n}\\n.lh-fraction__wrapper--average .lh-fraction__background,\\n.lh-fraction__wrapper--average .lh-fraction__content::before {\\n  background-color: var(--color-average);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__content {\\n  color: var(--color-fail);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__background {\\n  background-color: var(--color-fail);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__content::before {\\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__content {\\n  color: var(--color-gray-700);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__background {\\n  background-color: var(--color-gray-700);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__content::before {\\n  border-radius: 50%;\\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-700);\\n}\\n\\n.lh-fraction__background {\\n  position: absolute;\\n  height: 100%;\\n  width: 100%;\\n  border-radius: calc(var(--gauge-circle-size) / 2);\\n  opacity: 0.1;\\n  z-index: -1;\\n}\\n\\n.lh-fraction__content-wrapper {\\n  height: var(--gauge-circle-size);\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.lh-fraction__content {\\n  display: flex;\\n  position: relative;\\n  align-items: center;\\n  justify-content: center;\\n  font-size: calc(0.3 * var(--gauge-circle-size));\\n  line-height: calc(0.4 * var(--gauge-circle-size));\\n  width: max-content;\\n  min-width: calc(1.5 * var(--gauge-circle-size));\\n  padding: calc(0.1 * var(--gauge-circle-size)) calc(0.2 * var(--gauge-circle-size));\\n  --score-icon-size: calc(0.21 * var(--gauge-circle-size));\\n  --score-icon-margin: 0 calc(0.15 * var(--gauge-circle-size)) 0 0;\\n}\\n\\n.lh-gauge {\\n  stroke-linecap: round;\\n  width: var(--gauge-circle-size);\\n  height: var(--gauge-circle-size);\\n}\\n\\n.lh-category .lh-gauge {\\n  --gauge-circle-size: var(--gauge-circle-size-big);\\n}\\n\\n.lh-gauge-base {\\n  opacity: 0.1;\\n}\\n\\n.lh-gauge-arc {\\n  fill: none;\\n  transform-origin: 50% 50%;\\n  animation: load-gauge var(--transition-length) ease both;\\n  animation-delay: 250ms;\\n}\\n\\n.lh-gauge__svg-wrapper {\\n  position: relative;\\n  height: var(--gauge-circle-size);\\n}\\n.lh-category .lh-gauge__svg-wrapper,\\n.lh-category .lh-fraction__wrapper {\\n  --gauge-circle-size: var(--gauge-circle-size-big);\\n}\\n\\n/* The plugin badge overlay */\\n.lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\\n  width: var(--plugin-badge-size);\\n  height: var(--plugin-badge-size);\\n  background-color: var(--plugin-badge-background-color);\\n  background-image: var(--plugin-icon-url);\\n  background-repeat: no-repeat;\\n  background-size: var(--plugin-icon-size);\\n  background-position: 58% 50%;\\n  content: "";\\n  position: absolute;\\n  right: -6px;\\n  bottom: 0px;\\n  display: block;\\n  z-index: 100;\\n  box-shadow: 0 0 4px rgba(0,0,0,.2);\\n  border-radius: 25%;\\n}\\n.lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\\n  width: var(--plugin-badge-size-big);\\n  height: var(--plugin-badge-size-big);\\n}\\n\\n@keyframes load-gauge {\\n  from { stroke-dasharray: 0 352; }\\n}\\n\\n.lh-gauge__percentage {\\n  width: 100%;\\n  height: var(--gauge-circle-size);\\n  position: absolute;\\n  font-family: var(--report-font-family-monospace);\\n  font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);\\n  line-height: 0;\\n  text-align: center;\\n  top: calc(var(--score-container-padding) + var(--gauge-circle-size) / 2);\\n}\\n\\n.lh-category .lh-gauge__percentage {\\n  --gauge-circle-size: var(--gauge-circle-size-big);\\n  --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);\\n}\\n\\n.lh-gauge__wrapper,\\n.lh-fraction__wrapper {\\n  position: relative;\\n  display: flex;\\n  align-items: center;\\n  flex-direction: column;\\n  text-decoration: none;\\n  padding: var(--score-container-padding);\\n\\n  --transition-length: 1s;\\n\\n  /* Contain the layout style paint & layers during animation*/\\n  contain: content;\\n  will-change: opacity; /* Only using for layer promotion */\\n}\\n\\n.lh-gauge__label,\\n.lh-fraction__label {\\n  font-size: var(--gauge-label-font-size);\\n  font-weight: 500;\\n  line-height: var(--gauge-label-line-height);\\n  margin-top: 10px;\\n  text-align: center;\\n  color: var(--report-text-color);\\n  word-break: keep-all;\\n}\\n\\n/* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */\\n.lh-category .lh-gauge__label,\\n.lh-category .lh-fraction__label {\\n  --gauge-label-font-size: var(--gauge-label-font-size-big);\\n  --gauge-label-line-height: var(--gauge-label-line-height-big);\\n  margin-top: 14px;\\n}\\n\\n.lh-scores-header .lh-gauge__wrapper,\\n.lh-scores-header .lh-fraction__wrapper,\\n.lh-scores-header .lh-gauge--pwa__wrapper,\\n.lh-sticky-header .lh-gauge__wrapper,\\n.lh-sticky-header .lh-fraction__wrapper,\\n.lh-sticky-header .lh-gauge--pwa__wrapper {\\n  width: var(--gauge-wrapper-width);\\n}\\n\\n.lh-scorescale {\\n  display: inline-flex;\\n\\n  gap: calc(var(--default-padding) * 4);\\n  margin: 16px auto 0 auto;\\n  font-size: var(--report-font-size-secondary);\\n  color: var(--color-gray-700);\\n\\n}\\n\\n.lh-scorescale-range {\\n  display: flex;\\n  align-items: center;\\n  font-family: var(--report-font-family-monospace);\\n  white-space: nowrap;\\n}\\n\\n.lh-category-header__finalscreenshot .lh-scorescale {\\n  border: 0;\\n  display: flex;\\n  justify-content: center;\\n}\\n\\n.lh-category-header__finalscreenshot .lh-scorescale-range {\\n  font-family: unset;\\n  font-size: 12px;\\n}\\n\\n.lh-scorescale-wrap {\\n  display: contents;\\n}\\n\\n/* Hide category score gauages if it\\\'s a single category report */\\n.lh-header--solo-category .lh-scores-wrapper {\\n  display: none;\\n}\\n\\n\\n.lh-categories {\\n  width: 100%;\\n}\\n\\n.lh-category {\\n  padding: var(--category-padding);\\n  max-width: var(--report-content-max-width);\\n  margin: 0 auto;\\n\\n  scroll-margin-top: var(--sticky-header-buffer);\\n}\\n\\n.lh-category-wrapper {\\n  border-bottom: 1px solid var(--color-gray-200);\\n}\\n.lh-category-wrapper:last-of-type {\\n  border-bottom: 0;\\n}\\n\\n.lh-category-header {\\n  margin-bottom: var(--section-padding-vertical);\\n}\\n\\n.lh-category-header .lh-score__gauge {\\n  max-width: 400px;\\n  width: auto;\\n  margin: 0px auto;\\n}\\n\\n.lh-category-header__finalscreenshot {\\n  display: grid;\\n  grid-template: none / 1fr 1px 1fr;\\n  justify-items: center;\\n  align-items: center;\\n  gap: var(--report-line-height);\\n  min-height: 288px;\\n  margin-bottom: var(--default-padding);\\n}\\n\\n.lh-final-ss-image {\\n  /* constrain the size of the image to not be too large */\\n  max-height: calc(var(--gauge-circle-size-big) * 2.8);\\n  max-width: calc(var(--gauge-circle-size-big) * 3.5);\\n  border: 1px solid var(--color-gray-200);\\n  padding: 4px;\\n  border-radius: 3px;\\n  display: block;\\n}\\n\\n.lh-category-headercol--separator {\\n  background: var(--color-gray-200);\\n  width: 1px;\\n  height: var(--gauge-circle-size-big);\\n}\\n\\n@media screen and (max-width: 780px) {\\n  .lh-category-header__finalscreenshot {\\n    grid-template: 1fr 1fr / none\\n  }\\n  .lh-category-headercol--separator {\\n    display: none;\\n  }\\n}\\n\\n\\n/* 964 fits the min-width of the filmstrip */\\n@media screen and (max-width: 964px) {\\n  .lh-report {\\n    margin-left: 0;\\n    width: 100%;\\n  }\\n}\\n\\n@media print {\\n  body {\\n    -webkit-print-color-adjust: exact; /* print background colors */\\n  }\\n  .lh-container {\\n    display: block;\\n  }\\n  .lh-report {\\n    margin-left: 0;\\n    padding-top: 0;\\n  }\\n  .lh-categories {\\n    margin-top: 0;\\n  }\\n}\\n\\n.lh-table {\\n  position: relative;\\n  border-collapse: separate;\\n  border-spacing: 0;\\n  /* Can\\\'t assign padding to table, so shorten the width instead. */\\n  width: calc(100% - var(--audit-description-padding-left) - var(--stackpack-padding-horizontal));\\n  border: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-table thead th {\\n  position: sticky;\\n  top: calc(var(--sticky-header-buffer) + 1em);\\n  z-index: 1;\\n  background-color: var(--report-background-color);\\n  border-bottom: 1px solid var(--report-border-color-secondary);\\n  font-weight: normal;\\n  color: var(--color-gray-600);\\n  /* See text-wrapping comment on .lh-container. */\\n  word-break: normal;\\n}\\n\\n.lh-row--group {\\n  background-color: var(--table-group-header-background-color);\\n}\\n\\n.lh-row--group td {\\n  font-weight: bold;\\n  font-size: 1.05em;\\n  color: var(--table-group-header-text-color);\\n}\\n\\n.lh-row--group td:first-child {\\n  font-weight: normal;\\n}\\n\\n.lh-row--group .lh-text {\\n  color: inherit;\\n  text-decoration: none;\\n  display: inline-block;\\n}\\n\\n.lh-row--group a.lh-link:hover {\\n  text-decoration: underline;\\n}\\n\\n.lh-row--group .lh-audit__adorn {\\n  text-transform: capitalize;\\n  font-weight: normal;\\n  padding: 2px 3px 1px 3px;\\n}\\n\\n.lh-row--group .lh-audit__adorn1p {\\n  color: var(--link-color);\\n  border-color: var(--link-color);\\n}\\n\\n.lh-row--group .lh-report-icon--external::before {\\n  content: "";\\n  background-repeat: no-repeat;\\n  width: 14px;\\n  height: 16px;\\n  opacity: 0.7;\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n.lh-row--group .lh-report-icon--external {\\n  display: none;\\n}\\n\\n.lh-row--group:hover .lh-report-icon--external {\\n  display: inline-block;\\n}\\n\\n.lh-dark .lh-report-icon--external::before {\\n  filter: invert(1);\\n}\\n\\n/** Manages indentation of two-level and three-level nested adjacent rows */\\n\\n.lh-row--group ~ [data-entity]:not(.lh-row--group) td:first-child {\\n  padding-left: 20px;\\n}\\n\\n.lh-row--group ~ [data-entity]:not(.lh-row--group) ~ .lh-sub-item-row td:first-child {\\n  padding-left: 40px;\\n}\\n\\n.lh-row--even {\\n  background-color: var(--table-group-header-background-color);\\n}\\n.lh-row--hidden {\\n  display: none;\\n}\\n\\n.lh-table th,\\n.lh-table td {\\n  padding: var(--default-padding);\\n}\\n\\n.lh-table tr {\\n  vertical-align: middle;\\n}\\n\\n.lh-table tr:hover {\\n  background-color: var(--table-higlight-background-color);\\n}\\n\\n/* Looks unnecessary, but mostly for keeping the <th>s left-aligned */\\n.lh-table-column--text,\\n.lh-table-column--source-location,\\n.lh-table-column--url,\\n/* .lh-table-column--thumbnail, */\\n/* .lh-table-column--empty,*/\\n.lh-table-column--code,\\n.lh-table-column--node {\\n  text-align: left;\\n}\\n\\n.lh-table-column--code {\\n  min-width: 100px;\\n}\\n\\n.lh-table-column--bytes,\\n.lh-table-column--timespanMs,\\n.lh-table-column--ms,\\n.lh-table-column--numeric {\\n  text-align: right;\\n  word-break: normal;\\n}\\n\\n\\n\\n.lh-table .lh-table-column--thumbnail {\\n  width: var(--image-preview-size);\\n}\\n\\n.lh-table-column--url {\\n  min-width: 250px;\\n}\\n\\n.lh-table-column--text {\\n  min-width: 80px;\\n}\\n\\n/* Keep columns narrow if they follow the URL column */\\n/* 12% was determined to be a decent narrow width, but wide enough for column headings */\\n.lh-table-column--url + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--ms,\\n.lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs {\\n  width: 12%;\\n}\\n\\n.lh-text__url-host {\\n  display: inline;\\n}\\n\\n.lh-text__url-host {\\n  margin-left: calc(var(--report-font-size) / 2);\\n  opacity: 0.6;\\n  font-size: 90%\\n}\\n\\n.lh-thumbnail {\\n  object-fit: cover;\\n  width: var(--image-preview-size);\\n  height: var(--image-preview-size);\\n  display: block;\\n}\\n\\n.lh-unknown pre {\\n  overflow: scroll;\\n  border: solid 1px var(--color-gray-200);\\n}\\n\\n.lh-text__url > a {\\n  color: inherit;\\n  text-decoration: none;\\n}\\n\\n.lh-text__url > a:hover {\\n  text-decoration: underline dotted #999;\\n}\\n\\n.lh-sub-item-row {\\n  margin-left: 20px;\\n  margin-bottom: 0;\\n  color: var(--color-gray-700);\\n}\\n\\n.lh-sub-item-row td {\\n  padding-top: 4px;\\n  padding-bottom: 4px;\\n  padding-left: 20px;\\n}\\n\\n/* Chevron\\n   https://codepen.io/paulirish/pen/LmzEmK\\n */\\n.lh-chevron {\\n  --chevron-angle: 42deg;\\n  /* Edge doesn\\\'t support transform: rotate(calc(...)), so we define it here */\\n  --chevron-angle-right: -42deg;\\n  width: var(--chevron-size);\\n  height: var(--chevron-size);\\n  margin-top: calc((var(--report-line-height) - 12px) / 2);\\n}\\n\\n.lh-chevron__lines {\\n  transition: transform 0.4s;\\n  transform: translateY(var(--report-line-height));\\n}\\n.lh-chevron__line {\\n stroke: var(--chevron-line-stroke);\\n stroke-width: var(--chevron-size);\\n stroke-linecap: square;\\n transform-origin: 50%;\\n transform: rotate(var(--chevron-angle));\\n transition: transform 300ms, stroke 300ms;\\n}\\n\\n.lh-expandable-details .lh-chevron__line-right,\\n.lh-expandable-details[open] .lh-chevron__line-left {\\n transform: rotate(var(--chevron-angle-right));\\n}\\n\\n.lh-expandable-details[open] .lh-chevron__line-right {\\n  transform: rotate(var(--chevron-angle));\\n}\\n\\n\\n.lh-expandable-details[open]  .lh-chevron__lines {\\n transform: translateY(calc(var(--chevron-size) * -1));\\n}\\n\\n.lh-expandable-details[open] {\\n  animation: 300ms openDetails forwards;\\n  padding-bottom: var(--default-padding);\\n}\\n\\n@keyframes openDetails {\\n  from {\\n    outline: 1px solid var(--report-background-color);\\n  }\\n  to {\\n   outline: 1px solid;\\n   box-shadow: 0 2px 4px rgba(0, 0, 0, .24);\\n  }\\n}\\n\\n@media screen and (max-width: 780px) {\\n  /* no black outline if we\\\'re not confident the entire table can be displayed within bounds */\\n  .lh-expandable-details[open] {\\n    animation: none;\\n  }\\n}\\n\\n.lh-expandable-details[open] summary, details.lh-clump > summary {\\n  border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\ndetails.lh-clump[open] > summary {\\n  border-bottom-width: 0;\\n}\\n\\n\\n\\ndetails .lh-clump-toggletext--hide,\\ndetails[open] .lh-clump-toggletext--show { display: none; }\\ndetails[open] .lh-clump-toggletext--hide { display: block;}\\n\\n\\n/* Tooltip */\\n.lh-tooltip-boundary {\\n  position: relative;\\n}\\n\\n.lh-tooltip {\\n  position: absolute;\\n  display: none; /* Don\\\'t retain these layers when not needed */\\n  opacity: 0;\\n  background: #ffffff;\\n  white-space: pre-line; /* Render newlines in the text */\\n  min-width: 246px;\\n  max-width: 275px;\\n  padding: 15px;\\n  border-radius: 5px;\\n  text-align: initial;\\n  line-height: 1.4;\\n}\\n/* shrink tooltips to not be cutoff on left edge of narrow viewports\\n   45vw is chosen to be ~= width of the left column of metrics\\n*/\\n@media screen and (max-width: 535px) {\\n  .lh-tooltip {\\n    min-width: 45vw;\\n    padding: 3vw;\\n  }\\n}\\n\\n.lh-tooltip-boundary:hover .lh-tooltip {\\n  display: block;\\n  animation: fadeInTooltip 250ms;\\n  animation-fill-mode: forwards;\\n  animation-delay: 850ms;\\n  bottom: 100%;\\n  z-index: 1;\\n  will-change: opacity;\\n  right: 0;\\n  pointer-events: none;\\n}\\n\\n.lh-tooltip::before {\\n  content: "";\\n  border: solid transparent;\\n  border-bottom-color: #fff;\\n  border-width: 10px;\\n  position: absolute;\\n  bottom: -20px;\\n  right: 6px;\\n  transform: rotate(180deg);\\n  pointer-events: none;\\n}\\n\\n@keyframes fadeInTooltip {\\n  0% { opacity: 0; }\\n  75% { opacity: 1; }\\n  100% { opacity: 1;  filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; }\\n}\\n\\n/* Element screenshot */\\n.lh-element-screenshot {\\n  float: left;\\n  margin-right: 20px;\\n}\\n.lh-element-screenshot__content {\\n  overflow: hidden;\\n  min-width: 110px;\\n  display: flex;\\n  justify-content: center;\\n  background-color: var(--report-background-color);\\n}\\n.lh-element-screenshot__image {\\n  position: relative;\\n  /* Set by ElementScreenshotRenderer.installFullPageScreenshotCssVariable */\\n  background-image: var(--element-screenshot-url);\\n  outline: 2px solid #777;\\n  background-color: white;\\n  background-repeat: no-repeat;\\n}\\n.lh-element-screenshot__mask {\\n  position: absolute;\\n  background: #555;\\n  opacity: 0.8;\\n}\\n.lh-element-screenshot__element-marker {\\n  position: absolute;\\n  outline: 2px solid var(--color-lime-400);\\n}\\n.lh-element-screenshot__overlay {\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  z-index: 2000; /* .lh-topbar is 1000 */\\n  background: var(--screenshot-overlay-background);\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  cursor: zoom-out;\\n}\\n\\n.lh-element-screenshot__overlay .lh-element-screenshot {\\n  margin-right: 0; /* clearing margin used in thumbnail case */\\n  outline: 1px solid var(--color-gray-700);\\n}\\n\\n.lh-screenshot-overlay--enabled .lh-element-screenshot {\\n  cursor: zoom-out;\\n}\\n.lh-screenshot-overlay--enabled .lh-node .lh-element-screenshot {\\n  cursor: zoom-in;\\n}\\n\\n\\n.lh-meta__items {\\n  --meta-icon-size: calc(var(--report-icon-size) * 0.667);\\n  padding: var(--default-padding);\\n  display: grid;\\n  grid-template-columns: 1fr 1fr 1fr;\\n  background-color: var(--env-item-background-color);\\n  border-radius: 3px;\\n  margin: 0 0 var(--default-padding) 0;\\n  font-size: 12px;\\n  column-gap: var(--default-padding);\\n  color: var(--color-gray-700);\\n}\\n\\n.lh-meta__item {\\n  display: block;\\n  list-style-type: none;\\n  position: relative;\\n  padding: 0 0 0 calc(var(--meta-icon-size) + var(--default-padding) * 2);\\n  cursor: unset; /* disable pointer cursor from report-icon */\\n}\\n\\n.lh-meta__item.lh-tooltip-boundary {\\n  text-decoration: dotted underline var(--color-gray-500);\\n  cursor: help;\\n}\\n\\n.lh-meta__item.lh-report-icon::before {\\n  position: absolute;\\n  left: var(--default-padding);\\n  width: var(--meta-icon-size);\\n  height: var(--meta-icon-size);\\n}\\n\\n.lh-meta__item.lh-report-icon:hover::before {\\n  opacity: 0.7;\\n}\\n\\n.lh-meta__item .lh-tooltip {\\n  color: var(--color-gray-800);\\n}\\n\\n.lh-meta__item .lh-tooltip::before {\\n  right: auto; /* Set the tooltip arrow to the leftside */\\n  left: 6px;\\n}\\n\\n/* Change the grid for narrow viewport. */\\n@media screen and (max-width: 640px) {\\n  .lh-meta__items {\\n    grid-template-columns: 1fr 1fr;\\n  }\\n}\\n@media screen and (max-width: 535px) {\\n  .lh-meta__items {\\n    display: block;\\n  }\\n}\\n\\n\\n/*# sourceURL=report-styles.css */\\n\'),t.append(n),t}(e);case"topbar":return function(e){let t=e.createFragment(),n=e.createElement("style");n.append("\\n    .lh-topbar {\\n      position: sticky;\\n      top: 0;\\n      left: 0;\\n      right: 0;\\n      z-index: 1000;\\n      display: flex;\\n      align-items: center;\\n      height: var(--topbar-height);\\n      padding: var(--topbar-padding);\\n      font-size: var(--report-font-size-secondary);\\n      background-color: var(--topbar-background-color);\\n      border-bottom: 1px solid var(--color-gray-200);\\n    }\\n\\n    .lh-topbar__logo {\\n      width: var(--topbar-logo-size);\\n      height: var(--topbar-logo-size);\\n      user-select: none;\\n      flex: none;\\n    }\\n\\n    .lh-topbar__url {\\n      margin: var(--topbar-padding);\\n      text-decoration: none;\\n      color: var(--report-text-color);\\n      text-overflow: ellipsis;\\n      overflow: hidden;\\n      white-space: nowrap;\\n    }\\n\\n    .lh-tools {\\n      display: flex;\\n      align-items: center;\\n      margin-left: auto;\\n      will-change: transform;\\n      min-width: var(--report-icon-size);\\n    }\\n    .lh-tools__button {\\n      width: var(--report-icon-size);\\n      min-width: 24px;\\n      height: var(--report-icon-size);\\n      cursor: pointer;\\n      margin-right: 5px;\\n      /* This is actually a button element, but we want to style it like a transparent div. */\\n      display: flex;\\n      background: none;\\n      color: inherit;\\n      border: none;\\n      padding: 0;\\n      font: inherit;\\n      outline: inherit;\\n    }\\n    .lh-tools__button svg {\\n      fill: var(--tools-icon-color);\\n    }\\n    .lh-dark .lh-tools__button svg {\\n      filter: invert(1);\\n    }\\n    .lh-tools__button.lh-active + .lh-tools__dropdown {\\n      opacity: 1;\\n      clip: rect(-1px, 194px, 270px, -3px);\\n      visibility: visible;\\n    }\\n    .lh-tools__dropdown {\\n      position: absolute;\\n      background-color: var(--report-background-color);\\n      border: 1px solid var(--report-border-color);\\n      border-radius: 3px;\\n      padding: calc(var(--default-padding) / 2) 0;\\n      cursor: pointer;\\n      top: 36px;\\n      right: 0;\\n      box-shadow: 1px 1px 3px #ccc;\\n      min-width: 125px;\\n      clip: rect(0, 164px, 0, 0);\\n      visibility: hidden;\\n      opacity: 0;\\n      transition: all 200ms cubic-bezier(0,0,0.2,1);\\n    }\\n    .lh-tools__dropdown a {\\n      color: currentColor;\\n      text-decoration: none;\\n      white-space: nowrap;\\n      padding: 0 6px;\\n      line-height: 2;\\n    }\\n    .lh-tools__dropdown a:hover,\\n    .lh-tools__dropdown a:focus {\\n      background-color: var(--color-gray-200);\\n      outline: none;\\n    }\\n    /* save-gist option hidden in report. */\\n    .lh-tools__dropdown a[data-action=\'save-gist\'] {\\n      display: none;\\n    }\\n\\n    .lh-locale-selector {\\n      width: 100%;\\n      color: var(--report-text-color);\\n      background-color: var(--locale-selector-background-color);\\n      padding: 2px;\\n    }\\n    .lh-tools-locale {\\n      display: flex;\\n      align-items: center;\\n      flex-direction: row-reverse;\\n    }\\n    .lh-tools-locale__selector-wrapper {\\n      transition: opacity 0.15s;\\n      opacity: 0;\\n      max-width: 200px;\\n    }\\n    .lh-button.lh-tool-locale__button {\\n      height: var(--topbar-height);\\n      color: var(--tools-icon-color);\\n      padding: calc(var(--default-padding) / 2);\\n    }\\n    .lh-tool-locale__button.lh-active + .lh-tools-locale__selector-wrapper {\\n      opacity: 1;\\n      clip: rect(-1px, 194px, 242px, -3px);\\n      visibility: visible;\\n      margin: 0 4px;\\n    }\\n\\n    @media screen and (max-width: 964px) {\\n      .lh-tools__dropdown {\\n        right: 0;\\n        left: initial;\\n      }\\n    }\\n    @media print {\\n      .lh-topbar {\\n        position: static;\\n        margin-left: 0;\\n      }\\n\\n      .lh-tools__dropdown {\\n        display: none;\\n      }\\n    }\\n  "),t.append(n);let r=e.createElement("div","lh-topbar"),i=e.createElementNS("http://www.w3.org/2000/svg","svg","lh-topbar__logo");i.setAttribute("role","img"),i.setAttribute("title","Lighthouse logo"),i.setAttribute("fill","none"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("viewBox","0 0 48 48");let a=e.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d","m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z"),a.setAttribute("fill","#F63");let o=e.createElementNS("http://www.w3.org/2000/svg","path");o.setAttribute("d","M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z"),o.setAttribute("fill","#FFA385");let l=e.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("fill","#FF3"),l.setAttribute("d","M20.5 10h7v7h-7z"),i.append(" ",a," ",o," ",l," ");let s=e.createElement("a","lh-topbar__url");s.setAttribute("href",""),s.setAttribute("target","_blank"),s.setAttribute("rel","noopener");let d=e.createElement("div","lh-tools"),c=e.createElement("div","lh-tools-locale lh-hidden"),h=e.createElement("button","lh-button lh-tool-locale__button");h.setAttribute("id","lh-button__swap-locales"),h.setAttribute("title","Show Language Picker"),h.setAttribute("aria-label","Toggle language picker"),h.setAttribute("aria-haspopup","menu"),h.setAttribute("aria-expanded","false"),h.setAttribute("aria-controls","lh-tools-locale__selector-wrapper");let p=e.createElementNS("http://www.w3.org/2000/svg","svg");p.setAttribute("width","20px"),p.setAttribute("height","20px"),p.setAttribute("viewBox","0 0 24 24"),p.setAttribute("fill","currentColor");let u=e.createElementNS("http://www.w3.org/2000/svg","path");u.setAttribute("d","M0 0h24v24H0V0z"),u.setAttribute("fill","none");let g=e.createElementNS("http://www.w3.org/2000/svg","path");g.setAttribute("d","M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"),p.append(u,g),h.append(" ",p," ");let m=e.createElement("div","lh-tools-locale__selector-wrapper");m.setAttribute("id","lh-tools-locale__selector-wrapper"),m.setAttribute("role","menu"),m.setAttribute("aria-labelledby","lh-button__swap-locales"),m.setAttribute("aria-hidden","true"),m.append(" "," "),c.append(" ",h," ",m," ");let f=e.createElement("button","lh-tools__button");f.setAttribute("id","lh-tools-button"),f.setAttribute("title","Tools menu"),f.setAttribute("aria-label","Toggle report tools menu"),f.setAttribute("aria-haspopup","menu"),f.setAttribute("aria-expanded","false"),f.setAttribute("aria-controls","lh-tools-dropdown");let v=e.createElementNS("http://www.w3.org/2000/svg","svg");v.setAttribute("width","100%"),v.setAttribute("height","100%"),v.setAttribute("viewBox","0 0 24 24");let b=e.createElementNS("http://www.w3.org/2000/svg","path");b.setAttribute("d","M0 0h24v24H0z"),b.setAttribute("fill","none");let _=e.createElementNS("http://www.w3.org/2000/svg","path");_.setAttribute("d","M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"),v.append(" ",b," ",_," "),f.append(" ",v," ");let w=e.createElement("div","lh-tools__dropdown");w.setAttribute("id","lh-tools-dropdown"),w.setAttribute("role","menu"),w.setAttribute("aria-labelledby","lh-tools-button");let y=e.createElement("a","lh-report-icon lh-report-icon--print");y.setAttribute("role","menuitem"),y.setAttribute("tabindex","-1"),y.setAttribute("href","#"),y.setAttribute("data-i18n","dropdownPrintSummary"),y.setAttribute("data-action","print-summary");let x=e.createElement("a","lh-report-icon lh-report-icon--print");x.setAttribute("role","menuitem"),x.setAttribute("tabindex","-1"),x.setAttribute("href","#"),x.setAttribute("data-i18n","dropdownPrintExpanded"),x.setAttribute("data-action","print-expanded");let k=e.createElement("a","lh-report-icon lh-report-icon--copy");k.setAttribute("role","menuitem"),k.setAttribute("tabindex","-1"),k.setAttribute("href","#"),k.setAttribute("data-i18n","dropdownCopyJSON"),k.setAttribute("data-action","copy");let E=e.createElement("a","lh-report-icon lh-report-icon--download lh-hidden");E.setAttribute("role","menuitem"),E.setAttribute("tabindex","-1"),E.setAttribute("href","#"),E.setAttribute("data-i18n","dropdownSaveHTML"),E.setAttribute("data-action","save-html");let A=e.createElement("a","lh-report-icon lh-report-icon--download");A.setAttribute("role","menuitem"),A.setAttribute("tabindex","-1"),A.setAttribute("href","#"),A.setAttribute("data-i18n","dropdownSaveJSON"),A.setAttribute("data-action","save-json");let S=e.createElement("a","lh-report-icon lh-report-icon--open");S.setAttribute("role","menuitem"),S.setAttribute("tabindex","-1"),S.setAttribute("href","#"),S.setAttribute("data-i18n","dropdownViewer"),S.setAttribute("data-action","open-viewer");let z=e.createElement("a","lh-report-icon lh-report-icon--open");z.setAttribute("role","menuitem"),z.setAttribute("tabindex","-1"),z.setAttribute("href","#"),z.setAttribute("data-i18n","dropdownSaveGist"),z.setAttribute("data-action","save-gist");let C=e.createElement("a","lh-report-icon lh-report-icon--open lh-hidden");C.setAttribute("role","menuitem"),C.setAttribute("tabindex","-1"),C.setAttribute("href","#"),C.setAttribute("data-i18n","dropdownViewUnthrottledTrace"),C.setAttribute("data-action","view-unthrottled-trace");let L=e.createElement("a","lh-report-icon lh-report-icon--dark");return L.setAttribute("role","menuitem"),L.setAttribute("tabindex","-1"),L.setAttribute("href","#"),L.setAttribute("data-i18n","dropdownDarkTheme"),L.setAttribute("data-action","toggle-dark"),w.append(" ",y," ",x," ",k," "," ",E," ",A," ",S," ",z," "," ",C," ",L," "),d.append(" ",c," ",f," ",w," "),r.append(" "," ",i," ",s," ",d," "),t.append(r),t}(e);case"warningsToplevel":return function(e){let t=e.createFragment(),n=e.createElement("div","lh-warnings lh-warnings--toplevel"),r=e.createElement("p","lh-warnings__msg"),i=e.createElement("ul");return n.append(" ",r," ",i," "),t.append(n),t}(e)}throw new Error("unexpected component: "+t)}(this,e),this._componentCache.set(e,t),t.cloneNode(!0)}clearComponentCache(){this._componentCache.clear()}convertMarkdownLinkSnippets(e,t={}){let n=this.createElement("span");for(let i of r.splitMarkdownLink(e)){let e=i.text.includes("`")?this.convertMarkdownCodeSnippets(i.text):i.text;if(!i.isLink){n.append(e);continue}let r=new URL(i.linkHref);(["https://developers.google.com","https://web.dev","https://developer.chrome.com"].includes(r.origin)||t.alwaysAppendUtmSource)&&(r.searchParams.set("utm_source","lighthouse"),r.searchParams.set("utm_medium",this._lighthouseChannel));let a=this.createElement("a");a.rel="noopener",a.target="_blank",a.append(e),this.safelySetHref(a,r.href),n.append(a)}return n}safelySetHref(e,t){if((t=t||"").startsWith("#"))return void(e.href=t);let n;try{n=new URL(t)}catch{}n&&["https:","http:"].includes(n.protocol)&&(e.href=n.href)}safelySetBlobHref(e,t){if("text/html"!==t.type&&"application/json"!==t.type)throw new Error("Unsupported blob type");let n=URL.createObjectURL(t);e.href=n}convertMarkdownCodeSnippets(e){let t=this.createElement("span");for(let n of r.splitMarkdownCodeSpans(e))if(n.isCode){let e=this.createElement("code");e.textContent=n.text,t.append(e)}else t.append(this._document.createTextNode(n.text));return t}setLighthouseChannel(e){this._lighthouseChannel=e}document(){return this._document}isDevTools(){return!!this._document.querySelector(".lh-devtools")}find(e,t){let n=t.querySelector(e);if(null===n)throw new Error(`query ${e} not found`);return n}findAll(e,t){return Array.from(t.querySelectorAll(e))}fireEventOn(e,t=this._document,n){let r=new CustomEvent(e,n?{detail:n}:void 0);t.dispatchEvent(r)}saveFile(e,t){let n=this.createElement("a");n.download=t,this.safelySetBlobHref(n,e),this._document.body.append(n),n.click(),this._document.body.removeChild(n),setTimeout((()=>URL.revokeObjectURL(n.href)),500)}},a=0,o=class e{static i18n=null;static strings={};static reportJson=null;static apply(t){e.strings={...c,...t.providedStrings},e.i18n=t.i18n,e.reportJson=t.reportJson}static getUniqueSuffix(){return a++}static resetUniqueSuffix(){a=0}},l="data:image/jpeg;base64,";var s=r.RATINGS,d=class e{static prepareReportResult(t){let n=JSON.parse(JSON.stringify(t));!function(e){e.configSettings.locale||(e.configSettings.locale="en"),e.configSettings.formFactor||(e.configSettings.formFactor=e.configSettings.emulatedFormFactor),e.finalDisplayedUrl=r.getFinalDisplayedUrl(e),e.mainDocumentUrl=r.getMainDocumentUrl(e);for(let t of Object.values(e.audits))if(("not_applicable"===t.scoreDisplayMode||"not-applicable"===t.scoreDisplayMode)&&(t.scoreDisplayMode="notApplicable"),t.details){if((void 0===t.details.type||"diagnostic"===t.details.type)&&(t.details.type="debugdata"),"filmstrip"===t.details.type)for(let e of t.details.items)e.data.startsWith(l)||(e.data=l+e.data);if("table"===t.details.type)for(let e of t.details.headings){let{itemType:t,text:n}=e;void 0!==t&&(e.valueType=t,delete e.itemType),void 0!==n&&(e.label=n,delete e.text);let r=e.subItemsHeading?.itemType;e.subItemsHeading&&void 0!==r&&(e.subItemsHeading.valueType=r,delete e.subItemsHeading.itemType)}if("third-party-summary"===t.id&&("opportunity"===t.details.type||"table"===t.details.type)){let{headings:e,items:n}=t.details;if("link"===e[0].valueType){e[0].valueType="text";for(let e of n)"object"==typeof e.entity&&"link"===e.entity.type&&(e.entity=e.entity.text);t.details.isEntityGrouped=!0}}}let[t]=e.lighthouseVersion.split(".").map(Number),n=e.categories.performance;if(t<9&&n){e.categoryGroups||(e.categoryGroups={}),e.categoryGroups.hidden={title:""};for(let e of n.auditRefs)e.group?["load-opportunities","diagnostics"].includes(e.group)&&delete e.group:e.group="hidden"}if(e.environment||(e.environment={benchmarkIndex:0,networkUserAgent:e.userAgent,hostUserAgent:e.userAgent}),e.configSettings.screenEmulation||(e.configSettings.screenEmulation={width:-1,height:-1,deviceScaleFactor:-1,mobile:/mobile/i.test(e.environment.hostUserAgent),disabled:!1}),e.i18n||(e.i18n={}),e.audits["full-page-screenshot"]){let t=e.audits["full-page-screenshot"].details;e.fullPageScreenshot=t?{screenshot:t.screenshot,nodes:t.nodes}:null,delete e.audits["full-page-screenshot"]}}(n);for(let t of Object.values(n.audits))t.details&&("opportunity"===t.details.type||"table"===t.details.type)&&!t.details.isEntityGrouped&&n.entities&&e.classifyEntities(n.entities,t.details);if("object"!=typeof n.categories)throw new Error("No categories provided.");let i=new Map;for(let e of Object.values(n.categories))e.auditRefs.forEach((e=>{e.relevantAudits&&e.relevantAudits.forEach((t=>{let n=i.get(t)||[];n.push(e),i.set(t,n)}))})),e.auditRefs.forEach((e=>{let t=n.audits[e.id];e.result=t,i.has(e.id)&&(e.relevantMetrics=i.get(e.id)),n.stackPacks&&n.stackPacks.forEach((t=>{t.descriptions[e.id]&&(e.stackPacks=e.stackPacks||[],e.stackPacks.push({title:t.title,iconDataURL:t.iconDataURL,description:t.descriptions[e.id]}))}))}));return n}static getUrlLocatorFn(e){let t=e.find((e=>"url"===e.valueType))?.key;if(t&&"string"==typeof t)return e=>{let n=e[t];if("string"==typeof n)return n};let n=e.find((e=>"source-location"===e.valueType))?.key;return n?e=>{let t=e[n];if("object"==typeof t&&"source-location"===t.type)return t.url}:void 0}static classifyEntities(t,n){let{items:i,headings:a}=n;if(!i.length||i.some((e=>e.entity)))return;let o=e.getUrlLocatorFn(a);if(o)for(let e of i){let n=o(e);if(!n)continue;let i="";try{i=r.parseURL(n).origin}catch{}if(!i)continue;let a=t.find((e=>e.origins.includes(i)));a&&(e.entity=a.name)}}static getTableItemSortComparator(e){return(t,n)=>{for(let r of e){let e=t[r],i=n[r];if((typeof e!=typeof i||!["number","string"].includes(typeof e))&&console.warn(`Warning: Attempting to sort unsupported value type: ${r}.`),"number"==typeof e&&"number"==typeof i&&e!==i)return i-e;if("string"==typeof e&&"string"==typeof i&&e!==i)return e.localeCompare(i)}return 0}}static getEmulationDescriptions(e){let t,n,r,i=e.throttling,a=o.i18n,l=o.strings;switch(e.throttlingMethod){case"provided":r=n=t=l.throttlingProvided;break;case"devtools":{let{cpuSlowdownMultiplier:e,requestLatencyMs:o}=i;t=`${a.formatNumber(e)}x slowdown (DevTools)`,n=`${a.formatMilliseconds(o)} HTTP RTT, ${a.formatKbps(i.downloadThroughputKbps)} down, ${a.formatKbps(i.uploadThroughputKbps)} up (DevTools)`,r=562.5===o&&i.downloadThroughputKbps===1638.4*.9&&675===i.uploadThroughputKbps?l.runtimeSlow4g:l.runtimeCustom;break}case"simulate":{let{cpuSlowdownMultiplier:e,rttMs:o,throughputKbps:s}=i;t=`${a.formatNumber(e)}x slowdown (Simulated)`,n=`${a.formatMilliseconds(o)} TCP RTT, ${a.formatKbps(s)} throughput (Simulated)`,r=150===o&&1638.4===s?l.runtimeSlow4g:l.runtimeCustom;break}default:r=t=n=l.runtimeUnknown}let s="devtools"!==e.channel&&e.screenEmulation.disabled,d="devtools"===e.channel?"mobile"===e.formFactor:e.screenEmulation.mobile,c=l.runtimeMobileEmulation;return s?c=l.runtimeNoEmulation:d||(c=l.runtimeDesktopEmulation),{deviceEmulation:c,screenEmulation:s?void 0:`${e.screenEmulation.width}x${e.screenEmulation.height}, DPR ${e.screenEmulation.deviceScaleFactor}`,cpuThrottling:t,networkThrottling:n,summary:r}}static showAsPassed(e){switch(e.scoreDisplayMode){case"manual":case"notApplicable":return!0;case"error":case"informative":return!1;default:return Number(e.score)>=s.PASS.minScore}}static calculateRating(e,t){if("manual"===t||"notApplicable"===t)return s.PASS.label;if("error"===t)return s.ERROR.label;if(null===e)return s.FAIL.label;let n=s.FAIL.label;return e>=s.PASS.minScore?n=s.PASS.label:e>=s.AVERAGE.minScore&&(n=s.AVERAGE.label),n}static calculateCategoryFraction(t){let n=0,r=0,i=0,a=0;for(let o of t.auditRefs){let t=e.showAsPassed(o.result);if("hidden"!==o.group&&"manual"!==o.result.scoreDisplayMode&&"notApplicable"!==o.result.scoreDisplayMode){if("informative"===o.result.scoreDisplayMode){t||++i;continue}++n,a+=o.weight,t&&r++}}return{numPassed:r,numPassableAudits:n,numInformative:i,totalWeight:a}}static isPluginCategory(e){return e.startsWith("lighthouse-plugin-")}static shouldDisplayAsFraction(e){return"timespan"===e||"snapshot"===e}},c={varianceDisclaimer:"Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.",calculatorLink:"See calculator.",showRelevantAudits:"Show audits relevant to:",opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Estimated Savings",errorMissingAuditInfo:"Report error: no audit information",errorLabel:"Error!",warningHeader:"Warnings: ",warningAuditsGroupTitle:"Passed audits but with warnings",passedAuditsGroupTitle:"Passed audits",notApplicableAuditsGroupTitle:"Not applicable",manualAuditsGroupTitle:"Additional items to manually check",toplevelWarningsMessage:"There were issues affecting this run of Lighthouse:",crcInitialNavigation:"Initial Navigation",crcLongestDurationLabel:"Maximum critical path latency:",snippetExpandButtonLabel:"Expand snippet",snippetCollapseButtonLabel:"Collapse snippet",lsPerformanceCategoryDescription:"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",labDataTitle:"Lab Data",thirdPartyResourcesLabel:"Show 3rd-party resources",viewTreemapLabel:"View Treemap",viewTraceLabel:"View Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",dropdownViewUnthrottledTrace:"View Unthrottled Trace",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"Unthrottled CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",runtimeSettingsScreenEmulation:"Screen emulation",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G Power",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling",firstPartyChipLabel:"1st party",openInANewTabTooltip:"Open in a new tab",unattributable:"Unattributable"},h=class{constructor(e,t){this.dom=e,this.detailsRenderer=t}get _clumpTitles(){return{warning:o.strings.warningAuditsGroupTitle,manual:o.strings.manualAuditsGroupTitle,passed:o.strings.passedAuditsGroupTitle,notApplicable:o.strings.notApplicableAuditsGroupTitle}}renderAudit(e){let t=this.dom.createComponent("audit");return this.populateAuditValues(e,t)}populateAuditValues(e,t){let n=o.strings,r=this.dom.find(".lh-audit",t);r.id=e.result.id;let i=e.result.scoreDisplayMode;e.result.displayValue&&(this.dom.find(".lh-audit__display-text",r).textContent=e.result.displayValue);let a=this.dom.find(".lh-audit__title",r);a.append(this.dom.convertMarkdownCodeSnippets(e.result.title));let l=this.dom.find(".lh-audit__description",r);l.append(this.dom.convertMarkdownLinkSnippets(e.result.description));for(let t of e.relevantMetrics||[]){let e=this.dom.createChildOf(l,"span","lh-audit__adorn");e.title=`Relevant to ${t.result.title}`,e.textContent=t.acronym||t.id}e.stackPacks&&e.stackPacks.forEach((e=>{let t=this.dom.createElement("img","lh-audit__stackpack__img");t.src=e.iconDataURL,t.alt=e.title;let n=this.dom.convertMarkdownLinkSnippets(e.description,{alwaysAppendUtmSource:!0}),i=this.dom.createElement("div","lh-audit__stackpack");i.append(t,n),this.dom.find(".lh-audit__stackpacks",r).append(i)}));let s=this.dom.find("details",r);if(e.result.details){let t=this.detailsRenderer.render(e.result.details);t&&(t.classList.add("lh-details"),s.append(t))}if(this.dom.find(".lh-chevron-container",r).append(this._createChevron()),this._setRatingClass(r,e.result.score,i),"error"===e.result.scoreDisplayMode){r.classList.add("lh-audit--error");let t=this.dom.find(".lh-audit__display-text",r);t.textContent=n.errorLabel,t.classList.add("lh-tooltip-boundary"),this.dom.createChildOf(t,"div","lh-tooltip lh-tooltip--error").textContent=e.result.errorMessage||n.errorMissingAuditInfo}else if(e.result.explanation){this.dom.createChildOf(a,"div","lh-audit-explanation").textContent=e.result.explanation}let d=e.result.warnings;if(!d||0===d.length)return r;let c=this.dom.find("summary",s),h=this.dom.createChildOf(c,"div","lh-warnings");if(this.dom.createChildOf(h,"span").textContent=n.warningHeader,1===d.length)h.append(this.dom.createTextNode(d.join("")));else{let e=this.dom.createChildOf(h,"ul");for(let t of d){this.dom.createChildOf(e,"li").textContent=t}}return r}injectFinalScreenshot(e,t,n){let r=t["final-screenshot"];if(!r||"error"===r.scoreDisplayMode||!r.details||"screenshot"!==r.details.type)return null;let i=this.dom.createElement("img","lh-final-ss-image"),a=r.details.data;i.src=a,i.alt=r.title;let o=this.dom.find(".lh-category .lh-category-header",e),l=this.dom.createElement("div","lh-category-headercol"),s=this.dom.createElement("div","lh-category-headercol lh-category-headercol--separator"),d=this.dom.createElement("div","lh-category-headercol");l.append(...o.childNodes),l.append(n),d.append(i),o.append(l,s,d),o.classList.add("lh-category-header__finalscreenshot")}_createChevron(){let e=this.dom.createComponent("chevron");return this.dom.find("svg.lh-chevron",e)}_setRatingClass(e,t,n){let r=d.calculateRating(t,n);return e.classList.add(`lh-audit--${n.toLowerCase()}`),"informative"!==n&&e.classList.add(`lh-audit--${r}`),e}renderCategoryHeader(e,t,n){let r=this.dom.createComponent("categoryHeader"),i=this.dom.find(".lh-score__gauge",r),a=this.renderCategoryScore(e,t,n);if(i.append(a),e.description){let t=this.dom.convertMarkdownLinkSnippets(e.description);this.dom.find(".lh-category-header__description",r).append(t)}return r}renderAuditGroup(e){let t=this.dom.createElement("div","lh-audit-group"),n=this.dom.createElement("div","lh-audit-group__header");this.dom.createChildOf(n,"span","lh-audit-group__title").textContent=e.title,t.append(n);let r=null;return e.description&&(r=this.dom.convertMarkdownLinkSnippets(e.description),r.classList.add("lh-audit-group__description","lh-audit-group__footer"),t.append(r)),[t,r]}_renderGroupedAudits(e,t){let n=new Map,r="NotAGroup";n.set(r,[]);for(let t of e){let e=t.group||r;if("hidden"===e)continue;let i=n.get(e)||[];i.push(t),n.set(e,i)}let i=[];for(let[e,a]of n){if(e===r){for(let e of a)i.push(this.renderAudit(e));continue}let n=t[e],[o,l]=this.renderAuditGroup(n);for(let e of a)o.insertBefore(this.renderAudit(e),l);o.classList.add(`lh-audit-group--${e}`),i.push(o)}return i}renderUnexpandableClump(e,t){let n=this.dom.createElement("div");return this._renderGroupedAudits(e,t).forEach((e=>n.append(e))),n}renderClump(e,{auditRefs:t,description:n,openByDefault:r}){let i=this.dom.createComponent("clump"),a=this.dom.find(".lh-clump",i);r&&a.setAttribute("open","");let l=this.dom.find(".lh-audit-group__header",a),s=this._clumpTitles[e];this.dom.find(".lh-audit-group__title",l).textContent=s,this.dom.find(".lh-audit-group__itemcount",a).textContent=`(${t.length})`;let d=t.map(this.renderAudit.bind(this));a.append(...d);let c=this.dom.find(".lh-audit-group",i);if(n){let e=this.dom.convertMarkdownLinkSnippets(n);e.classList.add("lh-audit-group__description","lh-audit-group__footer"),c.append(e)}return this.dom.find(".lh-clump-toggletext--show",c).textContent=o.strings.show,this.dom.find(".lh-clump-toggletext--hide",c).textContent=o.strings.hide,a.classList.add(`lh-clump--${e.toLowerCase()}`),c}renderCategoryScore(e,t,n){let r;if(r=n&&d.shouldDisplayAsFraction(n.gatherMode)?this.renderCategoryFraction(e):this.renderScoreGauge(e,t),n?.omitLabel&&this.dom.find(".lh-gauge__label,.lh-fraction__label",r).remove(),n?.onPageAnchorRendered){let e=this.dom.find("a",r);n.onPageAnchorRendered(e)}return r}renderScoreGauge(e,t){let n=this.dom.createComponent("gauge"),r=this.dom.find("a.lh-gauge__wrapper",n);d.isPluginCategory(e.id)&&r.classList.add("lh-gauge__wrapper--plugin");let i=Number(e.score),a=this.dom.find(".lh-gauge",n),l=this.dom.find("circle.lh-gauge-arc",a);l&&this._setGaugeArc(l,i);let s=Math.round(100*i),c=this.dom.find("div.lh-gauge__percentage",n);return c.textContent=s.toString(),null===e.score&&(c.classList.add("lh-gauge--error"),c.textContent="",c.title=o.strings.errorLabel),0===e.auditRefs.length||this.hasApplicableAudits(e)?r.classList.add(`lh-gauge__wrapper--${d.calculateRating(e.score)}`):(r.classList.add("lh-gauge__wrapper--not-applicable"),c.textContent="-",c.title=o.strings.notApplicableAuditsGroupTitle),this.dom.find(".lh-gauge__label",n).textContent=e.title,n}renderCategoryFraction(e){let t=this.dom.createComponent("fraction"),n=this.dom.find("a.lh-fraction__wrapper",t),{numPassed:r,numPassableAudits:i,totalWeight:a}=d.calculateCategoryFraction(e),o=r/i,l=this.dom.find(".lh-fraction__content",t),s=this.dom.createElement("span");s.textContent=`${r}/${i}`,l.append(s);let c=d.calculateRating(o);return 0===a&&(c="null"),n.classList.add(`lh-fraction__wrapper--${c}`),this.dom.find(".lh-fraction__label",t).textContent=e.title,t}hasApplicableAudits(e){return e.auditRefs.some((e=>"notApplicable"!==e.result.scoreDisplayMode))}_setGaugeArc(e,t){let n=2*Math.PI*Number(e.getAttribute("r")),r=Number(e.getAttribute("stroke-width")),i=.25*r/n;e.style.transform=`rotate(${360*i-90}deg)`;let a=t*n-r/2;0===t&&(e.style.opacity="0"),1===t&&(a=n),e.style.strokeDasharray=`${Math.max(a,0)} ${n}`}_auditHasWarning(e){return!!e.result.warnings?.length}_getClumpIdForAuditRef(e){let t=e.result.scoreDisplayMode;return"manual"===t||"notApplicable"===t?t:d.showAsPassed(e.result)?this._auditHasWarning(e)?"warning":"passed":"failed"}render(e,t={},n){let r=this.dom.createElement("div","lh-category");r.id=e.id,r.append(this.renderCategoryHeader(e,t,n));let i=new Map;i.set("failed",[]),i.set("warning",[]),i.set("manual",[]),i.set("passed",[]),i.set("notApplicable",[]);for(let t of e.auditRefs){let e=this._getClumpIdForAuditRef(t),n=i.get(e);n.push(t),i.set(e,n)}for(let e of i.values())e.sort(((e,t)=>t.weight-e.weight));let a=i.get("failed")?.length;for(let[n,o]of i){if(0===o.length)continue;if("failed"===n){let e=this.renderUnexpandableClump(o,t);e.classList.add("lh-clump--failed"),r.append(e);continue}let i="manual"===n?e.manualDescription:void 0,l="warning"===n||"manual"===n&&0===a,s=this.renderClump(n,{auditRefs:o,description:i,openByDefault:l});r.append(s)}return r}},p=class{static initTree(e){let t=0,n=Object.keys(e);return n.length>0&&(t=e[n[0]].request.startTime),{tree:e,startTime:t,transferSize:0}}static createSegment(e,t,n,r,i,a){let o=e[t],l=Object.keys(e),s=l.indexOf(t)===l.length-1,d=!!o.children&&Object.keys(o.children).length>0,c=Array.isArray(i)?i.slice(0):[];return typeof a<"u"&&c.push(!a),{node:o,isLastChild:s,hasChildren:d,startTime:n,transferSize:r+o.request.transferSize,treeMarkers:c}}static createChainNode(e,t,n){let r=e.createComponent("crcChain");e.find(".lh-crc-node",r).setAttribute("title",t.node.request.url);let i=e.find(".lh-crc-node__tree-marker",r);t.treeMarkers.forEach((t=>{let n=t?"lh-tree-marker lh-vert":"lh-tree-marker";i.append(e.createElement("span",n),e.createElement("span","lh-tree-marker"))}));let a=t.isLastChild?"lh-tree-marker lh-up-right":"lh-tree-marker lh-vert-right",l=t.hasChildren?"lh-tree-marker lh-horiz-down":"lh-tree-marker lh-right";i.append(e.createElement("span",a),e.createElement("span","lh-tree-marker lh-right"),e.createElement("span",l));let s=t.node.request.url,d=n.renderTextURL(s),c=e.find(".lh-crc-node__tree-value",r);if(c.append(d),!t.hasChildren){let{startTime:n,endTime:r,transferSize:i}=t.node.request,a=e.createElement("span","lh-crc-node__chain-duration");a.textContent=" - "+o.i18n.formatMilliseconds(1e3*(r-n))+", ";let l=e.createElement("span","lh-crc-node__chain-duration");l.textContent=o.i18n.formatBytesToKiB(i,.01),c.append(a,l)}return r}static buildTree(e,t,n,r,i,a){if(r.append(u.createChainNode(e,n,a)),n.node.children)for(let o of Object.keys(n.node.children)){let l=u.createSegment(n.node.children,o,n.startTime,n.transferSize,n.treeMarkers,n.isLastChild);u.buildTree(e,t,l,r,i,a)}}static render(e,t,n){let r=e.createComponent("crc"),i=e.find(".lh-crc",r);e.find(".lh-crc-initial-nav",r).textContent=o.strings.crcInitialNavigation,e.find(".lh-crc__longest_duration_label",r).textContent=o.strings.crcLongestDurationLabel,e.find(".lh-crc__longest_duration",r).textContent=o.i18n.formatMilliseconds(t.longestChain.duration);let a=u.initTree(t.chains);for(let o of Object.keys(a.tree)){let l=u.createSegment(a.tree,o,a.startTime,a.transferSize);u.buildTree(e,r,l,i,t,n)}return e.find(".lh-crc-container",r)}},u=p;function g(e,t,n){return e<t?t:e>n?n:e}var m=class e{static getScreenshotPositions(e,t,n){let r=function(e){return{x:e.left+e.width/2,y:e.top+e.height/2}}(e),i=g(r.x-t.width/2,0,n.width-t.width),a=g(r.y-t.height/2,0,n.height-t.height);return{screenshot:{left:i,top:a},clip:{left:e.left-i,top:e.top-a}}}static renderClipPathInScreenshot(e,t,n,r,i){let a=e.find("clipPath",t),l=`clip-${o.getUniqueSuffix()}`;a.id=l,t.style.clipPath=`url(#${l})`;let s=n.top/i.height,d=s+r.height/i.height,c=n.left/i.width,h=c+r.width/i.width,p=[`0,0             1,0            1,${s}          0,${s}`,`0,${d}     1,${d}    1,1               0,1`,`0,${s}        ${c},${s} ${c},${d} 0,${d}`,`${h},${s} 1,${s}       1,${d}       ${h},${d}`];for(let t of p){let n=e.createElementNS("http://www.w3.org/2000/svg","polygon");n.setAttribute("points",t),a.append(n)}}static installFullPageScreenshot(e,t){e.style.setProperty("--element-screenshot-url",`url(\'${t.data}\')`)}static installOverlayFeature(t){let{dom:n,rootEl:r,overlayContainerEl:i,fullPageScreenshot:a}=t,o="lh-screenshot-overlay--enabled";r.classList.contains(o)||(r.classList.add(o),r.addEventListener("click",(t=>{let r=t.target;if(!r)return;let o=r.closest(".lh-node > .lh-element-screenshot");if(!o)return;let l=n.createElement("div","lh-element-screenshot__overlay");i.append(l);let s={width:.95*l.clientWidth,height:.8*l.clientHeight},d={width:Number(o.dataset.rectWidth),height:Number(o.dataset.rectHeight),left:Number(o.dataset.rectLeft),right:Number(o.dataset.rectLeft)+Number(o.dataset.rectWidth),top:Number(o.dataset.rectTop),bottom:Number(o.dataset.rectTop)+Number(o.dataset.rectHeight)},c=e.render(n,a.screenshot,d,s);c?(l.append(c),l.addEventListener("click",(()=>l.remove()))):l.remove()})))}static _computeZoomFactor(e,t){let n={x:t.width/e.width,y:t.height/e.height},r=.75*Math.min(n.x,n.y);return Math.min(1,r)}static render(t,n,r,i){if(!function(e,t){return t.left<=e.width&&0<=t.right&&t.top<=e.height&&0<=t.bottom}(n,r))return null;let a=t.createComponent("elementScreenshot"),o=t.find("div.lh-element-screenshot",a);o.dataset.rectWidth=r.width.toString(),o.dataset.rectHeight=r.height.toString(),o.dataset.rectLeft=r.left.toString(),o.dataset.rectTop=r.top.toString();let l=this._computeZoomFactor(r,i),s={width:i.width/l,height:i.height/l};s.width=Math.min(n.width,s.width),s.height=Math.min(n.height,s.height);let d=s.width*l,c=s.height*l,h=e.getScreenshotPositions(r,s,{width:n.width,height:n.height}),p=t.find("div.lh-element-screenshot__image",o);p.style.width=d+"px",p.style.height=c+"px",p.style.backgroundPositionY=-h.screenshot.top*l+"px",p.style.backgroundPositionX=-h.screenshot.left*l+"px",p.style.backgroundSize=`${n.width*l}px ${n.height*l}px`;let u=t.find("div.lh-element-screenshot__element-marker",o);u.style.width=r.width*l+"px",u.style.height=r.height*l+"px",u.style.left=h.clip.left*l+"px",u.style.top=h.clip.top*l+"px";let g=t.find("div.lh-element-screenshot__mask",o);return g.style.width=d+"px",g.style.height=c+"px",e.renderClipPathInScreenshot(t,g,h.clip,r,s),o}},f=["http://","https://","data:"],v=["bytes","numeric","ms","timespanMs"],b=class{constructor(e){"en-XA"===e&&(e="de"),this._locale=e,this._cachedNumberFormatters=new Map}_formatNumberWithGranularity(e,t,n={}){if(void 0!==t){let r=-Math.log10(t);Number.isInteger(r)||(console.warn(`granularity of ${t} is invalid. Using 1 instead`),t=1),t<1&&((n={...n}).minimumFractionDigits=n.maximumFractionDigits=Math.ceil(r)),e=Math.round(e/t)*t,Object.is(e,-0)&&(e=0)}else Math.abs(e)<5e-4&&(e=0);let r,i=[n.minimumFractionDigits,n.maximumFractionDigits,n.style,n.unit,n.unitDisplay,this._locale].join("");return r=this._cachedNumberFormatters.get(i),r||(r=new Intl.NumberFormat(this._locale,n),this._cachedNumberFormatters.set(i,r)),r.format(e).replace(" ","\xA0")}formatNumber(e,t){return this._formatNumberWithGranularity(e,t)}formatInteger(e){return this._formatNumberWithGranularity(e,1)}formatPercent(e){return new Intl.NumberFormat(this._locale,{style:"percent"}).format(e)}formatBytesToKiB(e,t=void 0){return this._formatNumberWithGranularity(e/1024,t)+"\xA0KiB"}formatBytesToMiB(e,t=void 0){return this._formatNumberWithGranularity(e/1048576,t)+"\xA0MiB"}formatBytes(e,t=1){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"byte",unitDisplay:"long"})}formatBytesWithBestUnit(e,t=void 0){return e>=1048576?this.formatBytesToMiB(e,t):e>=1024?this.formatBytesToKiB(e,t):this._formatNumberWithGranularity(e,t,{style:"unit",unit:"byte",unitDisplay:"narrow"})}formatKbps(e,t=void 0){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"kilobit-per-second",unitDisplay:"short"})}formatMilliseconds(e,t=void 0){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"millisecond",unitDisplay:"short"})}formatSeconds(e,t=void 0){return this._formatNumberWithGranularity(e/1e3,t,{style:"unit",unit:"second",unitDisplay:"narrow"})}formatDateTime(e){let t,n={month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"numeric",timeZoneName:"short"};try{t=new Intl.DateTimeFormat(this._locale,n)}catch{n.timeZone="UTC",t=new Intl.DateTimeFormat(this._locale,n)}return t.format(new Date(e))}formatDuration(e){let t=e/1e3;if(0===Math.round(t))return"None";let n=[],r={day:86400,hour:3600,minute:60,second:1};return Object.keys(r).forEach((e=>{let i=r[e],a=Math.floor(t/i);if(a>0){t-=a*i;let r=this._formatNumberWithGranularity(a,1,{style:"unit",unit:e,unitDisplay:"narrow"});n.push(r)}})),n.join(" ")}},_=class extends h{_renderMetric(e){let t=this.dom.createComponent("metric"),n=this.dom.find(".lh-metric",t);n.id=e.result.id;let r=d.calculateRating(e.result.score,e.result.scoreDisplayMode);n.classList.add(`lh-metric--${r}`),this.dom.find(".lh-metric__title",t).textContent=e.result.title;let i=this.dom.find(".lh-metric__value",t);i.textContent=e.result.displayValue||"";let a=this.dom.find(".lh-metric__description",t);if(a.append(this.dom.convertMarkdownLinkSnippets(e.result.description)),"error"===e.result.scoreDisplayMode){a.textContent="",i.textContent="Error!",this.dom.createChildOf(a,"span").textContent=e.result.errorMessage||"Report error: no metric information"}else"notApplicable"===e.result.scoreDisplayMode&&(i.textContent="--");return n}_renderOpportunity(e,t){let n=this.dom.createComponent("opportunity"),r=this.populateAuditValues(e,n);if(r.id=e.result.id,!e.result.details||"error"===e.result.scoreDisplayMode)return r;let i=e.result.details;if(void 0===i.overallSavingsMs)return r;let a=this.dom.find("span.lh-audit__display-text, div.lh-audit__display-text",r),l=i.overallSavingsMs/t*100+"%";if(this.dom.find("div.lh-sparkline__bar",r).style.width=l,a.textContent=o.i18n.formatSeconds(i.overallSavingsMs,.01),e.result.displayValue){let t=e.result.displayValue;this.dom.find("div.lh-load-opportunity__sparkline",r).title=t,a.title=t}return r}_getWastedMs(e){if(e.result.details){let t=e.result.details;if("number"!=typeof t.overallSavingsMs)throw new Error("non-opportunity details passed to _getWastedMs");return t.overallSavingsMs}return Number.MIN_VALUE}_getScoringCalculatorHref(e){let t=e.filter((e=>"metrics"===e.group)),n=e.find((e=>"interactive"===e.id)),r=e.find((e=>"first-cpu-idle"===e.id)),i=e.find((e=>"first-meaningful-paint"===e.id));n&&t.push(n),r&&t.push(r),i&&t.push(i);let a=[...t.map((e=>{let t;return"number"==typeof e.result.numericValue?(t="cumulative-layout-shift"===e.id?(e=>Math.round(100*e)/100)(e.result.numericValue):Math.round(e.result.numericValue),t=t.toString()):t="null",[e.acronym||e.id,t]}))];o.reportJson&&(a.push(["device",o.reportJson.configSettings.formFactor]),a.push(["version",o.reportJson.lighthouseVersion]));let l=new URLSearchParams(a),s=new URL("https://googlechrome.github.io/lighthouse/scorecalc/");return s.hash=l.toString(),s.href}_classifyPerformanceAudit(e){return e.group?null:void 0!==e.result.details?.overallSavingsMs?"load-opportunity":"diagnostic"}render(e,t,n){let r=o.strings,i=this.dom.createElement("div","lh-category");i.id=e.id,i.append(this.renderCategoryHeader(e,t,n));let a=e.auditRefs.filter((e=>"metrics"===e.group));if(a.length){let[n,l]=this.renderAuditGroup(t.metrics),s=this.dom.createElement("input","lh-metrics-toggle__input"),d=`lh-metrics-toggle${o.getUniqueSuffix()}`;s.setAttribute("aria-label","Toggle the display of metric descriptions"),s.type="checkbox",s.id=d,n.prepend(s);let c=this.dom.find(".lh-audit-group__header",n),h=this.dom.createChildOf(c,"label","lh-metrics-toggle__label");h.htmlFor=d;let p=this.dom.createChildOf(h,"span","lh-metrics-toggle__labeltext--show"),u=this.dom.createChildOf(h,"span","lh-metrics-toggle__labeltext--hide");p.textContent=o.strings.expandView,u.textContent=o.strings.collapseView;let g=this.dom.createElement("div","lh-metrics-container");if(n.insertBefore(g,l),a.forEach((e=>{g.append(this._renderMetric(e))})),i.querySelector(".lh-gauge__wrapper")){let t=this.dom.find(".lh-category-header__description",i),n=this.dom.createChildOf(t,"div","lh-metrics__disclaimer"),a=this.dom.convertMarkdownLinkSnippets(r.varianceDisclaimer);n.append(a);let o=this.dom.createChildOf(n,"a","lh-calclink");o.target="_blank",o.textContent=r.calculatorLink,this.dom.safelySetHref(o,this._getScoringCalculatorHref(e.auditRefs))}n.classList.add("lh-audit-group--metrics"),i.append(n)}let l=this.dom.createChildOf(i,"div","lh-filmstrip-container"),s=e.auditRefs.find((e=>"screenshot-thumbnails"===e.id))?.result;if(s?.details){l.id=s.id;let e=this.detailsRenderer.render(s.details);e&&l.append(e)}let c=e.auditRefs.filter((e=>"load-opportunity"===this._classifyPerformanceAudit(e))).filter((e=>!d.showAsPassed(e.result))).sort(((e,t)=>this._getWastedMs(t)-this._getWastedMs(e))),h=a.filter((e=>!!e.relevantAudits));if(h.length&&this.renderMetricAuditFilter(h,i),c.length){let e=c.map((e=>this._getWastedMs(e))),n=Math.max(...e),a=Math.max(1e3*Math.ceil(n/1e3),2e3),[o,l]=this.renderAuditGroup(t["load-opportunities"]),s=this.dom.createComponent("opportunityHeader");this.dom.find(".lh-load-opportunity__col--one",s).textContent=r.opportunityResourceColumnLabel,this.dom.find(".lh-load-opportunity__col--two",s).textContent=r.opportunitySavingsColumnLabel;let d=this.dom.find(".lh-load-opportunity__header",s);o.insertBefore(d,l),c.forEach((e=>o.insertBefore(this._renderOpportunity(e,a),l))),o.classList.add("lh-audit-group--load-opportunities"),i.append(o)}let p=e.auditRefs.filter((e=>"diagnostic"===this._classifyPerformanceAudit(e))).filter((e=>!d.showAsPassed(e.result))).sort(((e,t)=>("informative"===e.result.scoreDisplayMode?100:Number(e.result.score))-("informative"===t.result.scoreDisplayMode?100:Number(t.result.score))));if(p.length){let[e,n]=this.renderAuditGroup(t.diagnostics);p.forEach((t=>e.insertBefore(this.renderAudit(t),n))),e.classList.add("lh-audit-group--diagnostics"),i.append(e)}let u=e.auditRefs.filter((e=>this._classifyPerformanceAudit(e)&&d.showAsPassed(e.result)));if(!u.length)return i;let g={auditRefs:u,groupDefinitions:t},m=this.renderClump("passed",g);i.append(m);let f=[];if(["performance-budget","timing-budget"].forEach((t=>{let n=e.auditRefs.find((e=>e.id===t));if(n?.result.details){let e=this.detailsRenderer.render(n.result.details);e&&(e.id=t,e.classList.add("lh-details","lh-details--budget","lh-audit"),f.push(e))}})),f.length>0){let[e,n]=this.renderAuditGroup(t.budgets);f.forEach((t=>e.insertBefore(t,n))),e.classList.add("lh-audit-group--budgets"),i.append(e)}return i}renderMetricAuditFilter(e,t){let n=this.dom.createElement("div","lh-metricfilter");this.dom.createChildOf(n,"span","lh-metricfilter__text").textContent=o.strings.showRelevantAudits;let r=[{acronym:"All"},...e],i=o.getUniqueSuffix();for(let e of r){let r=`metric-${e.acronym}-${i}`,a=this.dom.createChildOf(n,"input","lh-metricfilter__radio");a.type="radio",a.name=`metricsfilter-${i}`,a.id=r;let o=this.dom.createChildOf(n,"label","lh-metricfilter__label");o.htmlFor=r,o.title=e.result?.title,o.textContent=e.acronym||e.id,"All"===e.acronym&&(a.checked=!0,o.classList.add("lh-metricfilter__label--active")),t.append(n),a.addEventListener("input",(n=>{for(let e of t.querySelectorAll("label.lh-metricfilter__label"))e.classList.toggle("lh-metricfilter__label--active",e.htmlFor===r);t.classList.toggle("lh-category--filtered","All"!==e.acronym);for(let n of t.querySelectorAll("div.lh-audit"))"All"!==e.acronym?(n.hidden=!0,e.relevantAudits&&e.relevantAudits.includes(n.id)&&(n.hidden=!1)):n.hidden=!1;let i=t.querySelectorAll("div.lh-audit-group, details.lh-audit-group");for(let e of i){e.hidden=!1;let t=Array.from(e.querySelectorAll("div.lh-audit")),n=!!t.length&&t.every((e=>e.hidden));e.hidden=n}}))}}},w=class e extends h{render(e,t={}){let n=this.dom.createElement("div","lh-category");n.id=e.id,n.append(this.renderCategoryHeader(e,t));let r=e.auditRefs,i=r.filter((e=>"manual"!==e.result.scoreDisplayMode)),a=this._renderAudits(i,t);n.append(a);let o=r.filter((e=>"manual"===e.result.scoreDisplayMode)),l=this.renderClump("manual",{auditRefs:o,description:e.manualDescription,openByDefault:!0});return n.append(l),n}renderCategoryScore(t,n){if(null===t.score)return super.renderScoreGauge(t,n);let r=this.dom.createComponent("gaugePwa"),i=this.dom.find("a.lh-gauge--pwa__wrapper",r),a=r.querySelector("svg");if(!a)throw new Error("no SVG element found in PWA score gauge template");e._makeSvgReferencesUnique(a);let o=this._getGroupIds(t.auditRefs),l=this._getPassingGroupIds(t.auditRefs);if(l.size===o.size)i.classList.add("lh-badged--all");else for(let e of l)i.classList.add(`lh-badged--${e}`);return this.dom.find(".lh-gauge__label",r).textContent=t.title,i.title=this._getGaugeTooltip(t.auditRefs,n),r}_getGroupIds(e){let t=e.map((e=>e.group)).filter((e=>!!e));return new Set(t)}_getPassingGroupIds(e){let t=this._getGroupIds(e);for(let n of e)!d.showAsPassed(n.result)&&n.group&&t.delete(n.group);return t}_getGaugeTooltip(e,t){let n=this._getGroupIds(e),r=[];for(let i of n){let n=e.filter((e=>e.group===i)),a=n.length,o=n.filter((e=>d.showAsPassed(e.result))).length,l=t[i].title;r.push(`${l}: ${o}/${a}`)}return r.join(", ")}_renderAudits(e,t){let n=this.renderUnexpandableClump(e,t),r=this._getPassingGroupIds(e);for(let e of r)this.dom.find(`.lh-audit-group--${e}`,n).classList.add("lh-badged");return n}static _makeSvgReferencesUnique(e){let t=e.querySelector("defs");if(!t)return;let n=o.getUniqueSuffix(),r=t.querySelectorAll("[id]");for(let t of r){let r=t.id,i=`${r}-${n}`;t.id=i;let a=e.querySelectorAll(`use[href="#${r}"]`);for(let e of a)e.setAttribute("href",`#${i}`);let o=e.querySelectorAll(`[fill="url(#${r})"]`);for(let e of o)e.setAttribute("fill",`url(#${i})`)}}},y=class{constructor(e){this._dom=e,this._opts={}}renderReport(e,t,n){if(!this._dom.rootEl&&t){console.warn("Please adopt the new report API in renderer/api.js.");let e=t.closest(".lh-root");e?this._dom.rootEl=e:(t.classList.add("lh-root","lh-vars"),this._dom.rootEl=t)}else this._dom.rootEl&&t&&(this._dom.rootEl=t);n&&(this._opts=n),this._dom.setLighthouseChannel(e.configSettings.channel||"unknown");let r=d.prepareReportResult(e);return this._dom.rootEl.textContent="",this._dom.rootEl.append(this._renderReport(r)),this._dom.rootEl}_renderReportTopbar(e){let t=this._dom.createComponent("topbar"),n=this._dom.find("a.lh-topbar__url",t);return n.textContent=e.finalDisplayedUrl,n.title=e.finalDisplayedUrl,this._dom.safelySetHref(n,e.finalDisplayedUrl),t}_renderReportHeader(){let e=this._dom.createComponent("heading"),t=this._dom.createComponent("scoresWrapper");return this._dom.find(".lh-scores-wrapper-placeholder",e).replaceWith(t),e}_renderReportFooter(e){let t=this._dom.createComponent("footer");return this._renderMetaBlock(e,t),this._dom.find(".lh-footer__version_issue",t).textContent=o.strings.footerIssue,this._dom.find(".lh-footer__version",t).textContent=e.lighthouseVersion,t}_renderMetaBlock(e,t){let n=d.getEmulationDescriptions(e.configSettings||{}),r=e.userAgent.match(/(\\w*Chrome\\/[\\d.]+)/),i=Array.isArray(r)?r[1].replace("/"," ").replace("Chrome","Chromium"):"Chromium",a=e.configSettings.channel,l=e.environment.benchmarkIndex.toFixed(0),s=e.environment.credits?.["axe-core"],c=[`${o.strings.runtimeSettingsBenchmark}: ${l}`,`${o.strings.runtimeSettingsCPUThrottling}: ${n.cpuThrottling}`];n.screenEmulation&&c.push(`${o.strings.runtimeSettingsScreenEmulation}: ${n.screenEmulation}`),s&&c.push(`${o.strings.runtimeSettingsAxeVersion}: ${s}`);let h=[["date",`Captured at ${o.i18n.formatDateTime(e.fetchTime)}`],["devices",`${n.deviceEmulation} with Lighthouse ${e.lighthouseVersion}`,c.join("\\n")],["samples-one",o.strings.runtimeSingleLoad,o.strings.runtimeSingleLoadTooltip],["stopwatch",o.strings.runtimeAnalysisWindow],["networkspeed",`${n.summary}`,`${o.strings.runtimeSettingsNetworkThrottling}: ${n.networkThrottling}`],["chrome",`Using ${i}`+(a?` with ${a}`:""),`${o.strings.runtimeSettingsUANetwork}: "${e.environment.networkUserAgent}"`]],p=this._dom.find(".lh-meta__items",t);for(let[e,t,n]of h){let r=this._dom.createChildOf(p,"li","lh-meta__item");if(r.textContent=t,n){r.classList.add("lh-tooltip-boundary"),this._dom.createChildOf(r,"div","lh-tooltip").textContent=n}r.classList.add("lh-report-icon",`lh-report-icon--${e}`)}}_renderReportWarnings(e){if(!e.runWarnings||0===e.runWarnings.length)return this._dom.createElement("div");let t=this._dom.createComponent("warningsToplevel");this._dom.find(".lh-warnings__msg",t).textContent=o.strings.toplevelWarningsMessage;let n=[];for(let t of e.runWarnings){let e=this._dom.createElement("li");e.append(this._dom.convertMarkdownLinkSnippets(t)),n.push(e)}return this._dom.find("ul",t).append(...n),t}_renderScoreGauges(e,t,n){let r=[],i=[],a=[];for(let o of Object.values(e.categories)){let l=n[o.id]||t,s=l.renderCategoryScore(o,e.categoryGroups||{},{gatherMode:e.gatherMode}),c=this._dom.find("a.lh-gauge__wrapper, a.lh-fraction__wrapper",s);c&&(this._dom.safelySetHref(c,`#${o.id}`),c.addEventListener("click",(e=>{if(!c.matches(\'[href^="#"]\'))return;let t=c.getAttribute("href"),n=this._dom.rootEl;if(!t||!n)return;let r=this._dom.find(t,n);e.preventDefault(),r.scrollIntoView()})),this._opts.onPageAnchorRendered?.(c)),d.isPluginCategory(o.id)?a.push(s):l.renderCategoryScore===t.renderCategoryScore?r.push(s):i.push(s)}return[...r,...i,...a]}_renderReport(e){o.apply({providedStrings:e.i18n.rendererFormattedStrings,i18n:new b(e.configSettings.locale),reportJson:e});let t=new class{constructor(e,t={}){this._dom=e,this._fullPageScreenshot=t.fullPageScreenshot,this._entities=t.entities}render(e){switch(e.type){case"filmstrip":return this._renderFilmstrip(e);case"list":return this._renderList(e);case"table":case"opportunity":return this._renderTable(e);case"criticalrequestchain":return p.render(this._dom,e,this);case"screenshot":case"debugdata":case"treemap-data":return null;default:return this._renderUnknown(e.type,e)}}_renderBytes(e){let t=o.i18n.formatBytesToKiB(e.value,e.granularity||.1),n=this._renderText(t);return n.title=o.i18n.formatBytes(e.value),n}_renderMilliseconds(e){let t;return t="duration"===e.displayUnit?o.i18n.formatDuration(e.value):o.i18n.formatMilliseconds(e.value,e.granularity||10),this._renderText(t)}renderTextURL(e){let t,n,i,a=e;try{let e=r.parseURL(a);t="/"===e.file?e.origin:e.file,n="/"===e.file||""===e.hostname?"":`(${e.hostname})`,i=a}catch{t=a}let o=this._dom.createElement("div","lh-text__url");if(o.append(this._renderLink({text:t,url:a})),n){let e=this._renderText(n);e.classList.add("lh-text__url-host"),o.append(e)}return i&&(o.title=a,o.dataset.url=a),o}_renderLink(e){let t=this._dom.createElement("a");if(this._dom.safelySetHref(t,e.url),!t.href){let t=this._renderText(e.text);return t.classList.add("lh-link"),t}return t.rel="noopener",t.target="_blank",t.textContent=e.text,t.classList.add("lh-link"),t}_renderText(e){let t=this._dom.createElement("div","lh-text");return t.textContent=e,t}_renderNumeric(e){let t=o.i18n.formatNumber(e.value,e.granularity||.1),n=this._dom.createElement("div","lh-numeric");return n.textContent=t,n}_renderThumbnail(e){let t=this._dom.createElement("img","lh-thumbnail"),n=e;return t.src=n,t.title=n,t.alt="",t}_renderUnknown(e,t){console.error(`Unknown details type: ${e}`,t);let n=this._dom.createElement("details","lh-unknown");return this._dom.createChildOf(n,"summary").textContent=`We don\'t know how to render audit details of type \\`${e}\\`. The Lighthouse version that collected this data is likely newer than the Lighthouse version of the report renderer. Expand for the raw JSON.`,this._dom.createChildOf(n,"pre").textContent=JSON.stringify(t,null,2),n}_renderTableValue(e,t){if(null==e)return null;if("object"==typeof e)switch(e.type){case"code":return this._renderCode(e.value);case"link":return this._renderLink(e);case"node":return this.renderNode(e);case"numeric":return this._renderNumeric(e);case"source-location":return this.renderSourceLocation(e);case"url":return this.renderTextURL(e.value);default:return this._renderUnknown(e.type,e)}switch(t.valueType){case"bytes":{let n=Number(e);return this._renderBytes({value:n,granularity:t.granularity})}case"code":{let t=String(e);return this._renderCode(t)}case"ms":{let n={value:Number(e),granularity:t.granularity,displayUnit:t.displayUnit};return this._renderMilliseconds(n)}case"numeric":{let n=Number(e);return this._renderNumeric({value:n,granularity:t.granularity})}case"text":{let t=String(e);return this._renderText(t)}case"thumbnail":{let t=String(e);return this._renderThumbnail(t)}case"timespanMs":{let t=Number(e);return this._renderMilliseconds({value:t})}case"url":{let t=String(e);return f.some((e=>t.startsWith(e)))?this.renderTextURL(t):this._renderCode(t)}default:return this._renderUnknown(t.valueType,e)}}_getDerivedSubItemsHeading(e){return e.subItemsHeading?{key:e.subItemsHeading.key||"",valueType:e.subItemsHeading.valueType||e.valueType,granularity:e.subItemsHeading.granularity||e.granularity,displayUnit:e.subItemsHeading.displayUnit||e.displayUnit,label:""}:null}_renderTableRow(e,t){let n=this._dom.createElement("tr");for(let r of t){if(!r||!r.key){this._dom.createChildOf(n,"td","lh-table-column--empty");continue}let t,i=e[r.key];if(null!=i&&(t=this._renderTableValue(i,r)),t){let e=`lh-table-column--${r.valueType}`;this._dom.createChildOf(n,"td",e).append(t)}else this._dom.createChildOf(n,"td","lh-table-column--empty")}return n}_renderTableRowsFromItem(e,t){let n=this._dom.createFragment();if(n.append(this._renderTableRow(e,t)),!e.subItems)return n;let r=t.map(this._getDerivedSubItemsHeading);if(!r.some(Boolean))return n;for(let t of e.subItems.items){let e=this._renderTableRow(t,r);e.classList.add("lh-sub-item-row"),n.append(e)}return n}_adornEntityGroupRow(e){let t=e.dataset.entity;if(!t)return;let n=this._entities?.find((e=>e.name===t));if(!n)return;let r=this._dom.find("td",e);if(n.category){let e=this._dom.createElement("span");e.classList.add("lh-audit__adorn"),e.textContent=n.category,r.append(" ",e)}if(n.isFirstParty){let e=this._dom.createElement("span");e.classList.add("lh-audit__adorn","lh-audit__adorn1p"),e.textContent=o.strings.firstPartyChipLabel,r.append(" ",e)}if(n.homepage){let e=this._dom.createElement("a");e.href=n.homepage,e.target="_blank",e.title=o.strings.openInANewTabTooltip,e.classList.add("lh-report-icon--external"),r.append(" ",e)}}_renderEntityGroupRow(e,t){let n={...t[0]};n.valueType="text";let r=[n,...t.slice(1)],i=this._dom.createFragment();return i.append(this._renderTableRow(e,r)),this._dom.find("tr",i).classList.add("lh-row--group"),i}_getEntityGroupItems(e){let{items:t,headings:n,sortedBy:r}=e;if(!t.length||e.isEntityGrouped||!t.some((e=>e.entity)))return[];let i=new Set(e.skipSumming||[]),a=[];for(let e of n)!e.key||i.has(e.key)||v.includes(e.valueType)&&a.push(e.key);let l=n[0].key;if(!l)return[];let s=new Map;for(let e of t){let t="string"==typeof e.entity?e.entity:void 0,n=s.get(t)||{[l]:t||o.strings.unattributable,entity:t};for(let t of a)n[t]=Number(n[t]||0)+Number(e[t]||0);s.set(t,n)}let c=[...s.values()];return r&&c.sort(d.getTableItemSortComparator(r)),c}_renderTable(e){if(!e.items.length)return this._dom.createElement("span");let t=this._dom.createElement("table","lh-table"),n=this._dom.createChildOf(t,"thead"),r=this._dom.createChildOf(n,"tr");for(let t of e.headings){let e=`lh-table-column--${t.valueType||"text"}`,n=this._dom.createElement("div","lh-text");n.textContent=t.label,this._dom.createChildOf(r,"th",e).append(n)}let i=this._getEntityGroupItems(e),a=this._dom.createChildOf(t,"tbody");if(i.length)for(let t of i){let n="string"==typeof t.entity?t.entity:void 0,r=this._renderEntityGroupRow(t,e.headings);for(let t of e.items.filter((e=>e.entity===n)))r.append(this._renderTableRowsFromItem(t,e.headings));let i=this._dom.findAll("tr",r);n&&i.length&&(i.forEach((e=>e.dataset.entity=n)),this._adornEntityGroupRow(i[0])),a.append(r)}else{let t=!0;for(let n of e.items){let r=this._renderTableRowsFromItem(n,e.headings),i=this._dom.findAll("tr",r),o=i[0];if("string"==typeof n.entity&&(o.dataset.entity=n.entity),e.isEntityGrouped&&n.entity)o.classList.add("lh-row--group"),this._adornEntityGroupRow(o);else for(let e of i)e.classList.add(t?"lh-row--even":"lh-row--odd");t=!t,a.append(r)}}return t}_renderList(e){let t=this._dom.createElement("div","lh-list");return e.items.forEach((e=>{let n=this.render(e);n&&t.append(n)})),t}renderNode(e){let t=this._dom.createElement("span","lh-node");if(e.nodeLabel){let n=this._dom.createElement("div");n.textContent=e.nodeLabel,t.append(n)}if(e.snippet){let n=this._dom.createElement("div");n.classList.add("lh-node__snippet"),n.textContent=e.snippet,t.append(n)}if(e.selector&&(t.title=e.selector),e.path&&t.setAttribute("data-path",e.path),e.selector&&t.setAttribute("data-selector",e.selector),e.snippet&&t.setAttribute("data-snippet",e.snippet),!this._fullPageScreenshot)return t;let n=e.lhId&&this._fullPageScreenshot.nodes[e.lhId];if(!n||0===n.width||0===n.height)return t;let r=m.render(this._dom,this._fullPageScreenshot.screenshot,n,{width:147,height:100});return r&&t.prepend(r),t}renderSourceLocation(e){if(!e.url)return null;let t,n,r=`${e.url}:${e.line+1}:${e.column}`;if(e.original&&(t=`${e.original.file||"<unmapped>"}:${e.original.line+1}:${e.original.column}`),"network"===e.urlProvider&&t)n=this._renderLink({url:e.url,text:t}),n.title=`maps to generated location ${r}`;else if("network"!==e.urlProvider||t)if("comment"===e.urlProvider&&t)n=this._renderText(`${t} (from source map)`),n.title=`${r} (from sourceURL)`;else{if("comment"!==e.urlProvider||t)return null;n=this._renderText(`${r} (from sourceURL)`)}else n=this.renderTextURL(e.url),this._dom.find(".lh-link",n).textContent+=`:${e.line+1}:${e.column}`;return n.classList.add("lh-source-location"),n.setAttribute("data-source-url",e.url),n.setAttribute("data-source-line",String(e.line)),n.setAttribute("data-source-column",String(e.column)),n}_renderFilmstrip(e){let t=this._dom.createElement("div","lh-filmstrip");for(let n of e.items){let e=this._dom.createChildOf(t,"div","lh-filmstrip__frame"),r=this._dom.createChildOf(e,"img","lh-filmstrip__thumbnail");r.src=n.data,r.alt="Screenshot"}return t}_renderCode(e){let t=this._dom.createElement("pre","lh-code");return t.textContent=e,t}}(this._dom,{fullPageScreenshot:e.fullPageScreenshot??void 0,entities:e.entities}),n=new h(this._dom,t),i={performance:new _(this._dom,t),pwa:new w(this._dom,t)},a=this._dom.createElement("div");a.append(this._renderReportHeader());let l,s=this._dom.createElement("div","lh-container"),c=this._dom.createElement("div","lh-report");c.append(this._renderReportWarnings(e)),1===Object.keys(e.categories).length?a.classList.add("lh-header--solo-category"):l=this._dom.createElement("div","lh-scores-header");let u=this._dom.createElement("div");if(u.classList.add("lh-scorescale-wrap"),u.append(this._dom.createComponent("scorescale")),l){let t=this._dom.find(".lh-scores-container",a);l.append(...this._renderScoreGauges(e,n,i)),t.append(l,u);let r=this._dom.createElement("div","lh-sticky-header");r.append(...this._renderScoreGauges(e,n,i)),s.append(r)}let g=this._dom.createElement("div","lh-categories");c.append(g);let y={gatherMode:e.gatherMode};for(let t of Object.values(e.categories)){let r=i[t.id]||n;r.dom.createChildOf(g,"div","lh-category-wrapper").append(r.render(t,e.categoryGroups,y))}n.injectFinalScreenshot(g,e.audits,u);let x=this._dom.createFragment();return this._opts.omitGlobalStyles||x.append(this._dom.createComponent("styles")),this._opts.omitTopbar||x.append(this._renderReportTopbar(e)),x.append(s),c.append(this._renderReportFooter(e)),s.append(a,c),e.fullPageScreenshot&&m.installFullPageScreenshot(this._dom.rootEl,e.fullPageScreenshot.screenshot),x}};function x(e,t){let n=e.rootEl;typeof t>"u"?n.classList.toggle("lh-dark"):n.classList.toggle("lh-dark",t)}var k=typeof btoa<"u"?btoa:e=>Buffer.from(e).toString("base64"),E=typeof atob<"u"?atob:e=>Buffer.from(e,"base64").toString();var A={toBase64:async function(e,t){let n=(new TextEncoder).encode(e);if(t.gzip)if(typeof CompressionStream<"u"){let e=new CompressionStream("gzip"),t=e.writable.getWriter();t.write(n),t.close();let r=await new Response(e.readable).arrayBuffer();n=new Uint8Array(r)}else n=window.pako.gzip(e);let r="";for(let e=0;e<n.length;e+=5e3)r+=String.fromCharCode(...n.subarray(e,e+5e3));return k(r)},fromBase64:function(e,t){let n=E(e),r=Uint8Array.from(n,(e=>e.charCodeAt(0)));return t.gzip?window.pako.ungzip(r,{to:"string"}):(new TextDecoder).decode(r)}};function S(){let e=window.location.host.endsWith(".vercel.app"),t=new URLSearchParams(window.location.search).has("dev");return e?`https://${window.location.host}/gh-pages`:t?"http://localhost:7333":"https://googlechrome.github.io/lighthouse"}function z(e){let t=e.generatedTime,n=e.fetchTime||t;return`${e.lighthouseVersion}-${e.finalDisplayedUrl}-${n}`}async function C(e,t,n){let r=new URL(t),i=!!window.CompressionStream;r.hash=await A.toBase64(JSON.stringify(e),{gzip:i}),i&&r.searchParams.set("gzip","1"),window.open(r.toString(),n)}async function L(e){let t="viewer-"+z(e);!function(e,t,n){let r=new URL(t).origin;window.addEventListener("message",(function t(n){n.origin===r&&i&&n.data.opened&&(i.postMessage(e,r),window.removeEventListener("message",t))}));let i=window.open(t,n)}({lhr:e},S()+"/viewer/",t)}function M(e){return function(e,t){let n=t?new Date(t):new Date,r=n.toLocaleTimeString("en-US",{hour12:!1}),i=n.toLocaleDateString("en-US",{year:"numeric",month:"2-digit",day:"2-digit"}).split("/");return i.unshift(i.pop()),`${e}_${i.join("-")}_${r}`.replace(/[/?<>\\\\:*|"]/g,"-")}(new URL(e.finalDisplayedUrl).hostname,e.fetchTime)}var F=class{constructor(e,t={}){this.json,this._dom=e,this._opts=t,this._topbar=t.omitTopbar?null:new class{constructor(e,t){this.lhr,this._reportUIFeatures=e,this._dom=t,this._dropDownMenu=new class{constructor(e){this._dom=e,this._toggleEl,this._menuEl,this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onToggleClick=this.onToggleClick.bind(this),this.onToggleKeydown=this.onToggleKeydown.bind(this),this.onMenuFocusOut=this.onMenuFocusOut.bind(this),this.onMenuKeydown=this.onMenuKeydown.bind(this),this._getNextMenuItem=this._getNextMenuItem.bind(this),this._getNextSelectableNode=this._getNextSelectableNode.bind(this),this._getPreviousMenuItem=this._getPreviousMenuItem.bind(this)}setup(e){this._toggleEl=this._dom.find(".lh-topbar button.lh-tools__button",this._dom.rootEl),this._toggleEl.addEventListener("click",this.onToggleClick),this._toggleEl.addEventListener("keydown",this.onToggleKeydown),this._menuEl=this._dom.find(".lh-topbar div.lh-tools__dropdown",this._dom.rootEl),this._menuEl.addEventListener("keydown",this.onMenuKeydown),this._menuEl.addEventListener("click",e)}close(){this._toggleEl.classList.remove("lh-active"),this._toggleEl.setAttribute("aria-expanded","false"),this._menuEl.contains(this._dom.document().activeElement)&&this._toggleEl.focus(),this._menuEl.removeEventListener("focusout",this.onMenuFocusOut),this._dom.document().removeEventListener("keydown",this.onDocumentKeyDown)}open(e){this._toggleEl.classList.contains("lh-active")?e.focus():this._menuEl.addEventListener("transitionend",(()=>{e.focus()}),{once:!0}),this._toggleEl.classList.add("lh-active"),this._toggleEl.setAttribute("aria-expanded","true"),this._menuEl.addEventListener("focusout",this.onMenuFocusOut),this._dom.document().addEventListener("keydown",this.onDocumentKeyDown)}onToggleClick(e){e.preventDefault(),e.stopImmediatePropagation(),this._toggleEl.classList.contains("lh-active")?this.close():this.open(this._getNextMenuItem())}onToggleKeydown(e){switch(e.code){case"ArrowUp":e.preventDefault(),this.open(this._getPreviousMenuItem());break;case"ArrowDown":case"Enter":case" ":e.preventDefault(),this.open(this._getNextMenuItem())}}onMenuKeydown(e){let t=e.target;switch(e.code){case"ArrowUp":e.preventDefault(),this._getPreviousMenuItem(t).focus();break;case"ArrowDown":e.preventDefault(),this._getNextMenuItem(t).focus();break;case"Home":e.preventDefault(),this._getNextMenuItem().focus();break;case"End":e.preventDefault(),this._getPreviousMenuItem().focus()}}onDocumentKeyDown(e){27===e.keyCode&&this.close()}onMenuFocusOut(e){let t=e.relatedTarget;this._menuEl.contains(t)||this.close()}_getNextSelectableNode(e,t){let n=e.filter((e=>!(!(e instanceof HTMLElement)||e.hasAttribute("disabled")||"none"===window.getComputedStyle(e).display))),r=t?n.indexOf(t)+1:0;return r>=n.length&&(r=0),n[r]}_getNextMenuItem(e){let t=Array.from(this._menuEl.childNodes);return this._getNextSelectableNode(t,e)}_getPreviousMenuItem(e){let t=Array.from(this._menuEl.childNodes).reverse();return this._getNextSelectableNode(t,e)}}(this._dom),this._copyAttempt=!1,this.topbarEl,this.categoriesEl,this.stickyHeaderEl,this.highlightEl,this.onDropDownMenuClick=this.onDropDownMenuClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onCopy=this.onCopy.bind(this),this.collapseAllDetails=this.collapseAllDetails.bind(this)}enable(e){this.lhr=e,this._dom.rootEl.addEventListener("keyup",this.onKeyUp),this._dom.document().addEventListener("copy",this.onCopy),this._dropDownMenu.setup(this.onDropDownMenuClick),this._setUpCollapseDetailsAfterPrinting(),this._dom.find(".lh-topbar__logo",this._dom.rootEl).addEventListener("click",(()=>x(this._dom))),this._setupStickyHeader()}onDropDownMenuClick(e){e.preventDefault();let t=e.target;if(t&&t.hasAttribute("data-action")){switch(t.getAttribute("data-action")){case"copy":this.onCopyButtonClick();break;case"print-summary":this.collapseAllDetails(),this._print();break;case"print-expanded":this.expandAllDetails(),this._print();break;case"save-json":{let e=JSON.stringify(this.lhr,null,2);this._reportUIFeatures._saveFile(new Blob([e],{type:"application/json"}));break}case"save-html":{let e=this._reportUIFeatures.getReportHtml();try{this._reportUIFeatures._saveFile(new Blob([e],{type:"text/html"}))}catch(e){this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"error",msg:"Could not export as HTML. "+e.message})}break}case"open-viewer":this._dom.isDevTools()?async function(e){let t="viewer-"+z(e),n=S()+"/viewer/";await C({lhr:e},n,t)}(this.lhr):L(this.lhr);break;case"save-gist":this._reportUIFeatures.saveAsGist();break;case"toggle-dark":x(this._dom);break;case"view-unthrottled-trace":this._reportUIFeatures._opts.onViewTrace?.()}this._dropDownMenu.close()}}onCopy(e){this._copyAttempt&&e.clipboardData&&(e.preventDefault(),e.clipboardData.setData("text/plain",JSON.stringify(this.lhr,null,2)),this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"log",msg:"Report JSON copied to clipboard"})),this._copyAttempt=!1}onCopyButtonClick(){this._dom.fireEventOn("lh-analytics",this._dom.document(),{cmd:"send",fields:{hitType:"event",eventCategory:"report",eventAction:"copy"}});try{this._dom.document().queryCommandSupported("copy")&&(this._copyAttempt=!0,this._dom.document().execCommand("copy")||(this._copyAttempt=!1,this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"warn",msg:"Your browser does not support copy to clipboard."})))}catch(e){this._copyAttempt=!1,this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"log",msg:e.message})}}onKeyUp(e){(e.ctrlKey||e.metaKey)&&80===e.keyCode&&this._dropDownMenu.close()}expandAllDetails(){this._dom.findAll(".lh-categories details",this._dom.rootEl).map((e=>e.open=!0))}collapseAllDetails(){this._dom.findAll(".lh-categories details",this._dom.rootEl).map((e=>e.open=!1))}_print(){this._reportUIFeatures._opts.onPrintOverride?this._reportUIFeatures._opts.onPrintOverride(this._dom.rootEl):self.print()}resetUIState(){this._dropDownMenu.close()}_getScrollParent(e){let{overflowY:t}=window.getComputedStyle(e);return"visible"!==t&&"hidden"!==t?e:e.parentElement?this._getScrollParent(e.parentElement):document}_setUpCollapseDetailsAfterPrinting(){"onbeforeprint"in self?self.addEventListener("afterprint",this.collapseAllDetails):self.matchMedia("print").addListener((e=>{e.matches?this.expandAllDetails():this.collapseAllDetails()}))}_setupStickyHeader(){this.topbarEl=this._dom.find("div.lh-topbar",this._dom.rootEl),this.categoriesEl=this._dom.find("div.lh-categories",this._dom.rootEl),window.requestAnimationFrame((()=>window.requestAnimationFrame((()=>{try{this.stickyHeaderEl=this._dom.find("div.lh-sticky-header",this._dom.rootEl)}catch{return}this.highlightEl=this._dom.createChildOf(this.stickyHeaderEl,"div","lh-highlighter");let e=this._getScrollParent(this._dom.find(".lh-container",this._dom.rootEl));e.addEventListener("scroll",(()=>this._updateStickyHeader()));let t=e instanceof window.Document?document.documentElement:e;new window.ResizeObserver((()=>this._updateStickyHeader())).observe(t)}))))}_updateStickyHeader(){if(!this.stickyHeaderEl)return;let e=this.topbarEl.getBoundingClientRect().bottom>=this.categoriesEl.getBoundingClientRect().top,t=Array.from(this._dom.rootEl.querySelectorAll(".lh-category")).filter((e=>e.getBoundingClientRect().top-window.innerHeight/2<0)),n=t.length>0?t.length-1:0,r=this.stickyHeaderEl.querySelectorAll(".lh-gauge__wrapper, .lh-fraction__wrapper"),i=r[n],a=r[0].getBoundingClientRect().left,o=i.getBoundingClientRect().left-a;this.highlightEl.style.transform=`translate(${o}px)`,this.stickyHeaderEl.classList.toggle("lh-sticky-header--visible",e)}}(this,e),this.onMediaQueryChange=this.onMediaQueryChange.bind(this)}initFeatures(e){this.json=e,this._fullPageScreenshot=r.getFullPageScreenshot(e),this._topbar&&(this._topbar.enable(e),this._topbar.resetUIState()),this._setupMediaQueryListeners(),this._setupThirdPartyFilter(),this._setupElementScreenshotOverlay(this._dom.rootEl);let t=this._dom.isDevTools()||this._opts.disableDarkMode||this._opts.disableAutoDarkModeAndFireworks;!t&&window.matchMedia("(prefers-color-scheme: dark)").matches&&x(this._dom,!0);let n=["performance","accessibility","best-practices","seo"].every((t=>{let n=e.categories[t];return n&&1===n.score})),i=this._opts.disableFireworks||this._opts.disableAutoDarkModeAndFireworks;if(n&&!i&&(this._enableFireworks(),t||x(this._dom,!0)),e.categories.performance&&e.categories.performance.auditRefs.some((t=>!("metrics"!==t.group||!e.audits[t.id].errorMessage)))){this._dom.find("input.lh-metrics-toggle__input",this._dom.rootEl).checked=!0}this.json.audits["script-treemap-data"]&&this.json.audits["script-treemap-data"].details&&this.addButton({text:o.strings.viewTreemapLabel,icon:"treemap",onClick:()=>function(e){if(!e.audits["script-treemap-data"].details)throw new Error("no script treemap data found");C({lhr:{mainDocumentUrl:e.mainDocumentUrl,finalUrl:e.finalUrl,finalDisplayedUrl:e.finalDisplayedUrl,audits:{"script-treemap-data":e.audits["script-treemap-data"]},configSettings:{locale:e.configSettings.locale}}},S()+"/treemap/","treemap-"+z(e))}(this.json)}),this._opts.onViewTrace&&("simulate"===e.configSettings.throttlingMethod?this._dom.find(\'a[data-action="view-unthrottled-trace"]\',this._dom.rootEl).classList.remove("lh-hidden"):this.addButton({text:o.strings.viewTraceLabel,onClick:()=>this._opts.onViewTrace?.()})),this._opts.getStandaloneReportHTML&&this._dom.find(\'a[data-action="save-html"]\',this._dom.rootEl).classList.remove("lh-hidden");for(let e of this._dom.findAll("[data-i18n]",this._dom.rootEl)){let t=e.getAttribute("data-i18n");e.textContent=o.strings[t]}}addButton(e){let t=this._dom.rootEl.querySelector(".lh-audit-group--metrics");if(!t)return;let n=t.querySelector(".lh-buttons");n||(n=this._dom.createChildOf(t,"div","lh-buttons"));let r=["lh-button"];e.icon&&(r.push("lh-report-icon"),r.push(`lh-report-icon--${e.icon}`));let i=this._dom.createChildOf(n,"button",r.join(" "));return i.textContent=e.text,i.addEventListener("click",e.onClick),i}resetUIState(){this._topbar&&this._topbar.resetUIState()}getReportHtml(){if(!this._opts.getStandaloneReportHTML)throw new Error("`getStandaloneReportHTML` is not set");return this.resetUIState(),this._opts.getStandaloneReportHTML()}saveAsGist(){throw new Error("Cannot save as gist from base report")}_enableFireworks(){this._dom.find(".lh-scores-container",this._dom.rootEl).classList.add("lh-score100")}_setupMediaQueryListeners(){let e=self.matchMedia("(max-width: 500px)");e.addListener(this.onMediaQueryChange),this.onMediaQueryChange(e)}_resetUIState(){this._topbar&&this._topbar.resetUIState()}onMediaQueryChange(e){this._dom.rootEl.classList.toggle("lh-narrow",e.matches)}_setupThirdPartyFilter(){let e=["uses-rel-preconnect","third-party-facades"],t=["legacy-javascript"];Array.from(this._dom.rootEl.querySelectorAll("table.lh-table")).filter((e=>e.querySelector("td.lh-table-column--url, td.lh-table-column--source-location"))).filter((t=>{let n=t.closest(".lh-audit");if(!n)throw new Error(".lh-table not within audit");return!e.includes(n.id)})).forEach((e=>{let n=(c=e,Array.from(c.tBodies[0].rows)),i=n.filter((e=>!e.classList.contains("lh-sub-item-row"))),a=this._getThirdPartyRows(i,r.getFinalDisplayedUrl(this.json)),l=n.some((e=>e.classList.contains("lh-row--even"))),s=this._dom.createComponent("3pFilter"),d=this._dom.find("input",s);var c;d.addEventListener("change",(e=>{let t=e.target instanceof HTMLInputElement&&!e.target.checked,n=!0,r=i[0];for(;r;){let e=t&&a.includes(r);do{r.classList.toggle("lh-row--hidden",e),l&&(r.classList.toggle("lh-row--even",!e&&n),r.classList.toggle("lh-row--odd",!e&&!n)),r=r.nextElementSibling}while(r&&r.classList.contains("lh-sub-item-row"));e||(n=!n)}}));let h=a.filter((e=>!e.classList.contains("lh-row--group"))).length;this._dom.find(".lh-3p-filter-count",s).textContent=`${h}`,this._dom.find(".lh-3p-ui-string",s).textContent=o.strings.thirdPartyResourcesLabel;let p=a.length===i.length,u=!a.length;if((p||u)&&(this._dom.find("div.lh-3p-filter",s).hidden=!0),!e.parentNode)return;e.parentNode.insertBefore(s,e);let g=e.closest(".lh-audit");if(!g)throw new Error(".lh-table not within audit");t.includes(g.id)&&!p&&d.click()}))}_setupElementScreenshotOverlay(e){this._fullPageScreenshot&&m.installOverlayFeature({dom:this._dom,rootEl:e,overlayContainerEl:e,fullPageScreenshot:this._fullPageScreenshot})}_getThirdPartyRows(e,t){let n=r.getRootDomain(t),i=this.json.entities?.find((e=>!0===e.isFirstParty))?.name,a=[];for(let t of e){if(i){if(!t.dataset.entity||t.dataset.entity===i)continue}else{let e=t.querySelector("div.lh-text__url");if(!e)continue;let i=e.dataset.url;if(!i||r.getRootDomain(i)===n)continue}a.push(t)}return a}_saveFile(e){let t=e.type.match("json")?".json":".html",n=M({finalDisplayedUrl:r.getFinalDisplayedUrl(this.json),fetchTime:this.json.fetchTime})+t;this._opts.onSaveFileOverride?this._opts.onSaveFileOverride(e,n):this._dom.saveFile(e,n)}};window.__initLighthouseReport__=function(){let e=function(e,t={}){let n=document.createElement("article");n.classList.add("lh-root","lh-vars");let r=new i(n.ownerDocument,n);return new y(r).renderReport(e,n,t),new F(r,t).initFeatures(e),n}(window.__LIGHTHOUSE_JSON__,{getStandaloneReportHTML:()=>document.documentElement.outerHTML});document.body.append(e),document.addEventListener("lh-analytics",(e=>{window.ga&&ga(e.detail.cmd,e.detail.fields)})),document.addEventListener("lh-log",(e=>{let t=document.querySelector("div#lh-log");if(!t)return;let n=new class{constructor(e){this.el=e;let t=document.createElement("style");if(t.textContent="\\n      #lh-log {\\n        position: fixed;\\n        background-color: #323232;\\n        color: #fff;\\n        min-height: 48px;\\n        min-width: 288px;\\n        padding: 16px 24px;\\n        box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\\n        border-radius: 2px;\\n        margin: 12px;\\n        font-size: 14px;\\n        cursor: default;\\n        transition: transform 0.3s, opacity 0.3s;\\n        transform: translateY(100px);\\n        opacity: 0;\\n        bottom: 0;\\n        left: 0;\\n        z-index: 3;\\n        display: flex;\\n        flex-direction: row;\\n        justify-content: center;\\n        align-items: center;\\n      }\\n      \\n      #lh-log.lh-show {\\n        opacity: 1;\\n        transform: translateY(0);\\n      }\\n    ",!this.el.parentNode)throw new Error("element needs to be in the DOM");this.el.parentNode.insertBefore(t,this.el),this._id=void 0}log(e,t=!0){this._id&&clearTimeout(this._id),this.el.textContent=e,this.el.classList.add("lh-show"),t&&(this._id=setTimeout((()=>{this.el.classList.remove("lh-show")}),7e3))}warn(e){this.log("Warning: "+e)}error(e){this.log(e),setTimeout((()=>{throw new Error(e)}),0)}hide(){this._id&&clearTimeout(this._id),this.el.classList.remove("lh-show")}}(t),r=e.detail;switch(r.cmd){case"log":n.log(r.msg);break;case"warn":n.warn(r.msg);break;case"error":n.error(r.msg);break;case"hide":n.hide()}}))}})();\n/**\n * @license\n * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS-IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n */\n/**\n * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n */\n/**\n * @license\n * Copyright 2018 The Lighthouse Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS-IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @license\n * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS-IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Dummy text for ensuring report robustness: <\\/script> pre$`post %%LIGHTHOUSE_JSON%%\n * (this is handled by terser)\n */\n/**\n * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n */\n/**\n * @license\n * Copyright 2021 The Lighthouse Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS-IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @license Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n */';
+  var reportAssets = {
     REPORT_TEMPLATE,
     REPORT_JAVASCRIPT,
     // Flow report assets are not needed for every bundle.
     // Replacing/ignoring flow-report-assets.js (e.g. `rollupPlugins.shim`) will
     // remove the flow assets from the bundle.
-    ...flowReportAssets,
+    ...flowReportAssets
   };
 
-  /**
-   * @license Copyright 2017 The Lighthouse Authors. All Rights Reserved.
-   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-   */
-
-  /** @typedef {import('../../types/lhr/lhr').default} LHResult */
-  /** @typedef {import('../../types/lhr/flow-result').default} FlowResult */
-
-  class ReportGenerator {
+  // report/generator/report-generator.js
+  var ReportGenerator = class _ReportGenerator {
     /**
      * Replaces all the specified strings in source without serial replacements.
      * @param {string} source
@@ -44,62 +100,46 @@
       if (replacements.length === 0) {
         return source;
       }
-
       const firstReplacement = replacements[0];
       const nextReplacements = replacements.slice(1);
-      return source
-          .split(firstReplacement.search)
-          .map(part => ReportGenerator.replaceStrings(part, nextReplacements))
-          .join(firstReplacement.replacement);
+      return source.split(firstReplacement.search).map((part) => _ReportGenerator.replaceStrings(part, nextReplacements)).join(firstReplacement.replacement);
     }
-
     /**
      * @param {unknown} object
      * @return {string}
      */
     static sanitizeJson(object) {
-      return JSON.stringify(object)
-      .replace(/</g, '\\u003c') // replaces opening script tags
-      .replace(/\u2028/g, '\\u2028') // replaces line separators ()
-      .replace(/\u2029/g, '\\u2029'); // replaces paragraph separators
+      return JSON.stringify(object).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
     }
-
     /**
      * Returns the standalone report HTML as a string with the report JSON and renderer JS inlined.
      * @param {LHResult} lhr
      * @return {string}
      */
     static generateReportHtml(lhr) {
-      const sanitizedJson = ReportGenerator.sanitizeJson(lhr);
-      // terser does its own sanitization, but keep this basic replace for when
-      // we want to generate a report without minification.
-      const sanitizedJavascript = reportAssets.REPORT_JAVASCRIPT.replace(/<\//g, '\\u003c/');
-
-      return ReportGenerator.replaceStrings(reportAssets.REPORT_TEMPLATE, [
-        {search: '%%LIGHTHOUSE_JSON%%', replacement: sanitizedJson},
-        {search: '%%LIGHTHOUSE_JAVASCRIPT%%', replacement: sanitizedJavascript},
+      const sanitizedJson = _ReportGenerator.sanitizeJson(lhr);
+      const sanitizedJavascript = reportAssets.REPORT_JAVASCRIPT.replace(/<\//g, "\\u003c/");
+      return _ReportGenerator.replaceStrings(reportAssets.REPORT_TEMPLATE, [
+        { search: "%%LIGHTHOUSE_JSON%%", replacement: sanitizedJson },
+        { search: "%%LIGHTHOUSE_JAVASCRIPT%%", replacement: sanitizedJavascript }
       ]);
     }
-
     /**
      * Returns the standalone flow report HTML as a string with the report JSON and renderer JS inlined.
      * @param {FlowResult} flow
      * @return {string}
      */
     static generateFlowReportHtml(flow) {
-      const sanitizedJson = ReportGenerator.sanitizeJson(flow);
-      // terser does its own sanitization, but keep this basic replace for when
-      // we want to generate a report without minification.
-      const sanitizedJavascript = reportAssets.FLOW_REPORT_JAVASCRIPT.replace(/<\//g, '\\u003c/');
-      return ReportGenerator.replaceStrings(reportAssets.FLOW_REPORT_TEMPLATE, [
+      const sanitizedJson = _ReportGenerator.sanitizeJson(flow);
+      const sanitizedJavascript = reportAssets.FLOW_REPORT_JAVASCRIPT.replace(/<\//g, "\\u003c/");
+      return _ReportGenerator.replaceStrings(reportAssets.FLOW_REPORT_TEMPLATE, [
         /* eslint-disable max-len */
-        {search: '%%LIGHTHOUSE_FLOW_JSON%%', replacement: sanitizedJson},
-        {search: '%%LIGHTHOUSE_FLOW_JAVASCRIPT%%', replacement: sanitizedJavascript},
-        {search: '/*%%LIGHTHOUSE_FLOW_CSS%%*/', replacement: reportAssets.FLOW_REPORT_CSS},
+        { search: "%%LIGHTHOUSE_FLOW_JSON%%", replacement: sanitizedJson },
+        { search: "%%LIGHTHOUSE_FLOW_JAVASCRIPT%%", replacement: sanitizedJavascript },
+        { search: "/*%%LIGHTHOUSE_FLOW_CSS%%*/", replacement: reportAssets.FLOW_REPORT_CSS }
         /* eslint-enable max-len */
       ]);
     }
-
     /**
      * Converts the results to a CSV formatted string
      * Each row describes the result of 1 audit with
@@ -113,70 +153,54 @@
      * @return {string}
      */
     static generateReportCSV(lhr) {
-      // To keep things "official" we follow the CSV specification (RFC4180)
-      // The document describes how to deal with escaping commas and quotes etc.
-      const CRLF = '\r\n';
-      const separator = ',';
-      /** @param {string} value @return {string} */
-      const escape = value => `"${value.replace(/"/g, '""')}"`;
-      /** @param {ReadonlyArray<string | number | null>} row @return {string[]} */
-      const rowFormatter = row => row.map(value => {
-        if (value === null) return 'null';
+      const CRLF = "\r\n";
+      const separator = ",";
+      const escape = (value) => `"${value.replace(/"/g, '""')}"`;
+      const rowFormatter = (row) => row.map((value) => {
+        if (value === null)
+          return "null";
         return value.toString();
       }).map(escape);
-
       const rows = [];
-      const topLevelKeys = /** @type {const} */(
-        ['requestedUrl', 'finalDisplayedUrl', 'fetchTime', 'gatherMode']);
-
-      // First we have metadata about the LHR.
+      const topLevelKeys = (
+        /** @type {const} */
+        ["requestedUrl", "finalDisplayedUrl", "fetchTime", "gatherMode"]
+      );
       rows.push(rowFormatter(topLevelKeys));
-      rows.push(rowFormatter(topLevelKeys.map(key => lhr[key] ?? null)));
-
-      // Some spacing.
+      rows.push(rowFormatter(topLevelKeys.map((key) => lhr[key] ?? null)));
       rows.push([]);
-
-      // Categories.
-      rows.push(['category', 'score']);
+      rows.push(["category", "score"]);
       for (const category of Object.values(lhr.categories)) {
         rows.push(rowFormatter([
           category.id,
-          category.score,
+          category.score
         ]));
       }
-
       rows.push([]);
-
-      // Audits.
-      rows.push(['category', 'audit', 'score', 'displayValue', 'description']);
+      rows.push(["category", "audit", "score", "displayValue", "description"]);
       for (const category of Object.values(lhr.categories)) {
         for (const auditRef of category.auditRefs) {
           const audit = lhr.audits[auditRef.id];
-          if (!audit) continue;
-
+          if (!audit)
+            continue;
           rows.push(rowFormatter([
             category.id,
             auditRef.id,
             audit.score,
-            audit.displayValue || '',
-            audit.description,
+            audit.displayValue || "",
+            audit.description
           ]));
         }
       }
-
-      return rows
-        .map(row => row.join(separator))
-        .join(CRLF);
+      return rows.map((row) => row.join(separator)).join(CRLF);
     }
-
     /**
      * @param {LHResult|FlowResult} result
      * @return {result is FlowResult}
      */
     static isFlowResult(result) {
-      return 'steps' in result;
+      return "steps" in result;
     }
-
     /**
      * Creates the results output in a format based on the `mode`.
      * @param {LHResult|FlowResult} result
@@ -185,37 +209,46 @@
      */
     static generateReport(result, outputModes) {
       const outputAsArray = Array.isArray(outputModes);
-      if (typeof outputModes === 'string') outputModes = [outputModes];
-
-      const output = outputModes.map(outputMode => {
-        // HTML report.
-        if (outputMode === 'html') {
-          if (ReportGenerator.isFlowResult(result)) {
-            return ReportGenerator.generateFlowReportHtml(result);
+      if (typeof outputModes === "string")
+        outputModes = [outputModes];
+      const output = outputModes.map((outputMode) => {
+        if (outputMode === "html") {
+          if (_ReportGenerator.isFlowResult(result)) {
+            return _ReportGenerator.generateFlowReportHtml(result);
           }
-          return ReportGenerator.generateReportHtml(result);
+          return _ReportGenerator.generateReportHtml(result);
         }
-        // CSV report.
-        if (outputMode === 'csv') {
-          if (ReportGenerator.isFlowResult(result)) {
-            throw new Error('CSV output is not support for user flows');
+        if (outputMode === "csv") {
+          if (_ReportGenerator.isFlowResult(result)) {
+            throw new Error("CSV output is not support for user flows");
           }
-          return ReportGenerator.generateReportCSV(result);
+          return _ReportGenerator.generateReportCSV(result);
         }
-        // JSON report.
-        if (outputMode === 'json') {
+        if (outputMode === "json") {
           return JSON.stringify(result, null, 2);
         }
-
-        throw new Error('Invalid output mode: ' + outputMode);
+        throw new Error("Invalid output mode: " + outputMode);
       });
-
       return outputAsArray ? output : output[0];
     }
-  }
-
-  exports.ReportGenerator = ReportGenerator;
-
-  Object.defineProperty(exports, '__esModule', { value: true });
-
-})));
+  };
+  return __toCommonJS(report_generator_exports);
+})();
+/**
+ * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+/**
+ * @license Copyright 2018 The Lighthouse Authors. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+/**
+ * @license Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+;
+  return umdExports.ReportGenerator ?? umdExports;
+}));
diff --git a/front_end/third_party/lighthouse/report/bundle.d.ts b/front_end/third_party/lighthouse/report/bundle.d.ts
index bfd6b8b..89024f2 100644
--- a/front_end/third_party/lighthouse/report/bundle.d.ts
+++ b/front_end/third_party/lighthouse/report/bundle.d.ts
@@ -1,837 +1,112 @@
-
-export type ComponentName = '3pFilter' | 'audit' | 'categoryHeader' | 'chevron' | 'clump' | 'crc' | 'crcChain' | 'elementScreenshot' | 'footer' | 'fraction' | 'gauge' | 'gaugePwa' | 'heading' | 'metric' | 'opportunity' | 'opportunityHeader' | 'scorescale' | 'scoresWrapper' | 'snippet' | 'snippetContent' | 'snippetHeader' | 'snippetLine' | 'styles' | 'topbar' | 'warningsToplevel';
-export type ItemValueType = import('../../types/lhr/audit-details').default.ItemValueType;
-export type Rect = LH.Audit.Details.Rect;
-export type Size = {
-    width: number;
-    height: number;
-};
-export type InstallOverlayFeatureParams = {
-    dom: DOM;
-    rootEl: Element;
-    overlayContainerEl: Element;
-    fullPageScreenshot: LH.Result.FullPageScreenshot;
-};
-export type SnippetValue = any;
-export type I18nFormatter = any;
-export type DetailsRenderer = any;
-export type CRCSegment = {
-    node: LH.Audit.Details.SimpleCriticalRequestNode;
-    isLastChild: boolean;
-    hasChildren: boolean;
-    startTime: number;
-    transferSize: number;
-    treeMarkers: boolean[];
-};
-/**
- * @license
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export class DOM {
-    /**
-     * @param {Document} document
-     * @param {HTMLElement} rootEl
-     */
-    constructor(document: Document, rootEl: HTMLElement);
-    /** @type {Document} */
-    _document: Document;
-    /** @type {string} */
-    _lighthouseChannel: string;
-    /** @type {Map<string, DocumentFragment>} */
-    _componentCache: Map<string, DocumentFragment>;
-    /** @type {HTMLElement} */
-    rootEl: HTMLElement;
-    /**
-     * @template {string} T
-     * @param {T} name
-     * @param {string=} className
-     * @return {HTMLElementByTagName[T]}
-     */
-    createElement<T extends string>(name: T, className?: string | undefined): HTMLElementByTagName;
-    /**
-     * @param {string} namespaceURI
-     * @param {string} name
-     * @param {string=} className
-     * @return {Element}
-     */
-    createElementNS(namespaceURI: string, name: string, className?: string | undefined): Element;
-    /**
-     * @return {!DocumentFragment}
-     */
-    createFragment(): DocumentFragment;
-    /**
-     * @param {string} data
-     * @return {!Node}
-     */
-    createTextNode(data: string): Node;
-    /**
-     * @template {string} T
-     * @param {Element} parentElem
-     * @param {T} elementName
-     * @param {string=} className
-     * @return {HTMLElementByTagName[T]}
-     */
-    createChildOf<T_1 extends string>(parentElem: Element, elementName: T_1, className?: string | undefined): HTMLElementByTagName;
-    /**
-     * @param {import('./components.js').ComponentName} componentName
-     * @return {!DocumentFragment} A clone of the cached component.
-     */
-    createComponent(componentName: any): DocumentFragment;
-    clearComponentCache(): void;
-    /**
-     * @param {string} text
-     * @param {{alwaysAppendUtmSource?: boolean}} opts
-     * @return {Element}
-     */
-    convertMarkdownLinkSnippets(text: string, opts?: {
-        alwaysAppendUtmSource?: boolean;
-    }): Element;
-    /**
-     * Set link href, but safely, preventing `javascript:` protocol, etc.
-     * @see https://github.com/google/safevalues/
-     * @param {HTMLAnchorElement} elem
-     * @param {string} url
-     */
-    safelySetHref(elem: HTMLAnchorElement, url: string): void;
-    /**
-     * Only create blob URLs for JSON & HTML
-     * @param {HTMLAnchorElement} elem
-     * @param {Blob} blob
-     */
-    safelySetBlobHref(elem: HTMLAnchorElement, blob: Blob): void;
-    /**
-     * @param {string} markdownText
-     * @return {Element}
-     */
-    convertMarkdownCodeSnippets(markdownText: string): Element;
-    /**
-     * The channel to use for UTM data when rendering links to the documentation.
-     * @param {string} lighthouseChannel
-     */
-    setLighthouseChannel(lighthouseChannel: string): void;
-    /**
-     * ONLY use if `dom.rootEl` isn't sufficient for your needs. `dom.rootEl` is preferred
-     * for all scoping, because a document can have multiple reports within it.
-     * @return {Document}
-     */
-    document(): Document;
-    /**
-     * TODO(paulirish): import and conditionally apply the DevTools frontend subclasses instead of this
-     * @return {boolean}
-     */
-    isDevTools(): boolean;
-    /**
-     * Guaranteed context.querySelector. Always returns an element or throws if
-     * nothing matches query.
-     * @template {string} T
-     * @param {T} query
-     * @param {ParentNode} context
-     * @return {ParseSelector<T>}
-     */
-    find<T_2 extends string>(query: T_2, context: ParentNode): ParseSelector<T_3>;
-    /**
-     * Helper for context.querySelectorAll. Returns an Array instead of a NodeList.
-     * @template {string} T
-     * @param {T} query
-     * @param {ParentNode} context
-     */
-    findAll<T_4 extends string>(query: T_4, context: ParentNode): Element[];
-    /**
-     * Fires a custom DOM event on target.
-     * @param {string} name Name of the event.
-     * @param {Node=} target DOM node to fire the event on.
-     * @param {*=} detail Custom data to include.
-     */
-    fireEventOn(name: string, target?: Node | undefined, detail?: any | undefined): void;
-    /**
-     * Downloads a file (blob) using a[download].
-     * @param {Blob|File} blob The file to save.
-     * @param {string} filename
-     */
-    saveFile(blob: Blob | File, filename: string): void;
-}
-/**
- * @license
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Dummy text for ensuring report robustness: </script> pre$`post %%LIGHTHOUSE_JSON%%
- * (this is handled by terser)
- */
-export class ReportRenderer {
-    /**
-     * @param {DOM} dom
-     */
-    constructor(dom: DOM);
-    /** @type {DOM} */
-    _dom: DOM;
-    /** @type {LH.Renderer.Options} */
-    _opts: LH.Renderer.Options;
-    /**
-     * @param {LH.Result} lhr
-     * @param {HTMLElement?} rootEl Report root element containing the report
-     * @param {LH.Renderer.Options=} opts
-     * @return {!Element}
-     */
-    renderReport(lhr: LH.Result, rootEl: HTMLElement | null, opts?: LH.Renderer.Options): Element;
-    /**
-     * @param {LH.ReportResult} report
-     * @return {DocumentFragment}
-     */
-    _renderReportTopbar(report: LH.ReportResult): DocumentFragment;
-    /**
-     * @return {DocumentFragment}
-     */
-    _renderReportHeader(): DocumentFragment;
-    /**
-     * @param {LH.ReportResult} report
-     * @return {DocumentFragment}
-     */
-    _renderReportFooter(report: LH.ReportResult): DocumentFragment;
-    /**
-     * @param {LH.ReportResult} report
-     * @param {DocumentFragment} footer
-     */
-    _renderMetaBlock(report: LH.ReportResult, footer: DocumentFragment): void;
-    /**
-     * Returns a div with a list of top-level warnings, or an empty div if no warnings.
-     * @param {LH.ReportResult} report
-     * @return {Node}
-     */
-    _renderReportWarnings(report: LH.ReportResult): Node;
-    /**
-     * @param {LH.ReportResult} report
-     * @param {CategoryRenderer} categoryRenderer
-     * @param {Record<string, CategoryRenderer>} specificCategoryRenderers
-     * @return {!DocumentFragment[]}
-     */
-    _renderScoreGauges(report: LH.ReportResult, categoryRenderer: CategoryRenderer, specificCategoryRenderers: Record<string, CategoryRenderer>): DocumentFragment[];
-    /**
-     * @param {LH.ReportResult} report
-     * @return {!DocumentFragment}
-     */
-    _renderReport(report: LH.ReportResult): DocumentFragment;
-}
-export class ReportUIFeatures {
-    /**
-     * @param {DOM} dom
-     * @param {LH.Renderer.Options} opts
-     */
-    constructor(dom: DOM, opts?: LH.Renderer.Options);
-    /** @type {LH.Result} */
-    json: LH.Result;
-    /** @type {DOM} */
-    _dom: DOM;
-    _opts: LH.Renderer.Options;
-    _topbar: TopbarFeatures;
-    /**
-     * Handle media query change events.
-     * @param {MediaQueryList|MediaQueryListEvent} mql
-     */
-    onMediaQueryChange(mql: MediaQueryList | MediaQueryListEvent): void;
-    /**
-     * Adds tools button, print, and other functionality to the report. The method
-     * should be called whenever the report needs to be re-rendered.
-     * @param {LH.Result} lhr
-     */
-    initFeatures(lhr: LH.Result): void;
-    _fullPageScreenshot: LH.Result.FullPageScreenshot;
-    /**
-     * @param {{text: string, icon?: string, onClick: () => void}} opts
-     */
-    addButton(opts: {
-        text: string;
-        icon?: string;
-        onClick: () => void;
-    }): HTMLElementByTagName;
-    resetUIState(): void;
-    /**
-     * Returns the html that recreates this report.
-     * @return {string}
-     */
-    getReportHtml(): string;
-    /**
-     * Save json as a gist. Unimplemented in base UI features.
-     */
-    saveAsGist(): void;
-    _enableFireworks(): void;
-    _setupMediaQueryListeners(): void;
-    /**
-     * Resets the state of page before capturing the page for export.
-     * When the user opens the exported HTML page, certain UI elements should
-     * be in their closed state (not opened) and the templates should be unstamped.
-     */
-    _resetUIState(): void;
-    _setupThirdPartyFilter(): void;
-    /**
-     * @param {Element} rootEl
-     */
-    _setupElementScreenshotOverlay(rootEl: Element): void;
-    /**
-     * From a table with URL entries, finds the rows containing third-party URLs
-     * and returns them.
-     * @param {HTMLElement[]} rowEls
-     * @param {string} finalDisplayedUrl
-     * @return {Array<HTMLElement>}
-     */
-    _getThirdPartyRows(rowEls: HTMLElement[], finalDisplayedUrl: string): Array<HTMLElement>;
-    /**
-     * @param {Blob|File} blob
-     */
-    _saveFile(blob: Blob | File): void;
-}
-export namespace format {
-    export { registerLocaleData };
-    export { hasLocale };
-}
-/**
- * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-/**
- * @param {LH.Result} lhr
- * @param {LH.Renderer.Options} opts
- * @return {HTMLElement}
- */
-export function renderReport(lhr: LH.Result, opts?: LH.Renderer.Options): HTMLElement;
-/**
- * Returns a new LHR with all strings changed to the new requestedLocale.
- * @param {LH.Result} lhr
- * @param {LH.Locale} requestedLocale
- * @return {{lhr: LH.Result, missingIcuMessageIds: string[]}}
- */
-export function swapLocale(lhr: LH.Result, requestedLocale: LH.Locale): {
-    lhr: LH.Result;
-    missingIcuMessageIds: string[];
-};
-/**
- * @license
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-declare class CategoryRenderer {
-    /**
-     * @param {DOM} dom
-     * @param {DetailsRenderer} detailsRenderer
-     */
-    constructor(dom: DOM, detailsRenderer: DetailsRenderer);
-    /** @type {DOM} */
-    dom: DOM;
-    /** @type {DetailsRenderer} */
-    detailsRenderer: DetailsRenderer;
-    /**
-     * Display info per top-level clump. Define on class to avoid race with Util init.
-     */
-    get _clumpTitles(): {
-        warning: string;
-        manual: string;
-        passed: string;
-        notApplicable: string;
+declare var I: {
+    new (e: any, t: any): {
+        _document: any;
+        _lighthouseChannel: string;
+        _componentCache: Map<any, any>;
+        rootEl: any;
+        createElement(e: any, t: any): any;
+        createElementNS(e: any, t: any, n: any): any;
+        createFragment(): any;
+        createTextNode(e: any): any;
+        createChildOf(e: any, t: any, n: any): any;
+        createComponent(e: any): any;
+        clearComponentCache(): void;
+        convertMarkdownLinkSnippets(e: any, t?: {}): any;
+        safelySetHref(e: any, t: any): void;
+        safelySetBlobHref(e: any, t: any): void;
+        convertMarkdownCodeSnippets(e: any): any;
+        setLighthouseChannel(e: any): void;
+        document(): any;
+        isDevTools(): boolean;
+        find(e: any, t: any): any;
+        findAll(e: any, t: any): any[];
+        fireEventOn(e: any, t: any, n: any): void;
+        saveFile(e: any, t: any): void;
     };
-    /**
-     * @param {LH.ReportResult.AuditRef} audit
-     * @return {Element}
-     */
-    renderAudit(audit: LH.ReportResult.AuditRef): Element;
-    /**
-     * Populate an DOM tree with audit details. Used by renderAudit and renderOpportunity
-     * @param {LH.ReportResult.AuditRef} audit
-     * @param {DocumentFragment} component
-     * @return {!Element}
-     */
-    populateAuditValues(audit: LH.ReportResult.AuditRef, component: DocumentFragment): Element;
-    /**
-     * Inject the final screenshot next to the score gauge of the first category (likely Performance)
-     * @param {HTMLElement} categoriesEl
-     * @param {LH.ReportResult['audits']} audits
-     * @param {Element} scoreScaleEl
-     */
-    injectFinalScreenshot(categoriesEl: HTMLElement, audits: LH.ReportResult, scoreScaleEl: Element): any;
-    /**
-     * @return {Element}
-     */
-    _createChevron(): Element;
-    /**
-     * @param {Element} element DOM node to populate with values.
-     * @param {number|null} score
-     * @param {string} scoreDisplayMode
-     * @return {!Element}
-     */
-    _setRatingClass(element: Element, score: number | null, scoreDisplayMode: string): Element;
-    /**
-     * @param {LH.ReportResult.Category} category
-     * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
-     * @param {{gatherMode: LH.Result.GatherMode}=} options
-     * @return {DocumentFragment}
-     */
-    renderCategoryHeader(category: LH.ReportResult.Category, groupDefinitions: Record<string, LH.Result.ReportGroup>, options?: {
-        gatherMode: LH.Result.GatherMode;
-    } | undefined): DocumentFragment;
-    /**
-     * Renders the group container for a group of audits. Individual audit elements can be added
-     * directly to the returned element.
-     * @param {LH.Result.ReportGroup} group
-     * @return {[Element, Element | null]}
-     */
-    renderAuditGroup(group: LH.Result.ReportGroup): [Element, Element | null];
-    /**
-     * Takes an array of auditRefs, groups them if requested, then returns an
-     * array of audit and audit-group elements.
-     * @param {Array<LH.ReportResult.AuditRef>} auditRefs
-     * @param {Object<string, LH.Result.ReportGroup>} groupDefinitions
-     * @return {Array<Element>}
-     */
-    _renderGroupedAudits(auditRefs: Array<LH.ReportResult.AuditRef>, groupDefinitions: {
-        [x: string]: LH.Result.ReportGroup;
-    }): Array<Element>;
-    /**
-     * Take a set of audits, group them if they have groups, then render in a top-level
-     * clump that can't be expanded/collapsed.
-     * @param {Array<LH.ReportResult.AuditRef>} auditRefs
-     * @param {Object<string, LH.Result.ReportGroup>} groupDefinitions
-     * @return {Element}
-     */
-    renderUnexpandableClump(auditRefs: Array<LH.ReportResult.AuditRef>, groupDefinitions: {
-        [x: string]: LH.Result.ReportGroup;
-    }): Element;
-    /**
-     * Take a set of audits and render in a top-level, expandable clump that starts
-     * in a collapsed state.
-     * @param {Exclude<TopLevelClumpId, 'failed'>} clumpId
-     * @param {{auditRefs: Array<LH.ReportResult.AuditRef>, description?: string}} clumpOpts
-     * @return {!Element}
-     */
-    renderClump(clumpId: Exclude<TopLevelClumpId, 'failed'>, { auditRefs, description }: {
-        auditRefs: Array<LH.ReportResult.AuditRef>;
-        description?: string;
-    }): Element;
-    /**
-     * @param {LH.ReportResult.Category} category
-     * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
-     * @param {{gatherMode: LH.Result.GatherMode, omitLabel?: boolean, onPageAnchorRendered?: (link: HTMLAnchorElement) => void}=} options
-     * @return {DocumentFragment}
-     */
-    renderCategoryScore(category: LH.ReportResult.Category, groupDefinitions: Record<string, LH.Result.ReportGroup>, options?: {
-        gatherMode: LH.Result.GatherMode;
-        omitLabel?: boolean;
-        onPageAnchorRendered?: (link: HTMLAnchorElement) => void;
-    }): DocumentFragment;
-    /**
-     * @param {LH.ReportResult.Category} category
-     * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
-     * @return {DocumentFragment}
-     */
-    renderScoreGauge(category: LH.ReportResult.Category, groupDefinitions: Record<string, LH.Result.ReportGroup>): DocumentFragment;
-    /**
-     * @param {LH.ReportResult.Category} category
-     * @return {DocumentFragment}
-     */
-    renderCategoryFraction(category: LH.ReportResult.Category): DocumentFragment;
-    /**
-     * Returns true if an LH category has any non-"notApplicable" audits.
-     * @param {LH.ReportResult.Category} category
-     * @return {boolean}
-     */
-    hasApplicableAudits(category: LH.ReportResult.Category): boolean;
-    /**
-     * Define the score arc of the gauge
-     * Credit to xgad for the original technique: https://codepen.io/xgad/post/svg-radial-progress-meters
-     * @param {SVGCircleElement} arcElem
-     * @param {number} percent
-     */
-    _setGaugeArc(arcElem: SVGCircleElement, percent: number): void;
-    /**
-     * @param {LH.ReportResult.AuditRef} audit
-     * @return {boolean}
-     */
-    _auditHasWarning(audit: LH.ReportResult.AuditRef): boolean;
-    /**
-     * Returns the id of the top-level clump to put this audit in.
-     * @param {LH.ReportResult.AuditRef} auditRef
-     * @return {TopLevelClumpId}
-     */
-    _getClumpIdForAuditRef(auditRef: LH.ReportResult.AuditRef): TopLevelClumpId;
-    /**
-     * Renders a set of top level sections (clumps), under a status of failed, warning,
-     * manual, passed, or notApplicable. The result ends up something like:
-     *
-     * failed clump
-     *   ├── audit 1 (w/o group)
-     *   ├── audit 2 (w/o group)
-     *   ├── audit group
-     *   |  ├── audit 3
-     *   |  └── audit 4
-     *   └── audit group
-     *      ├── audit 5
-     *      └── audit 6
-     * other clump (e.g. 'manual')
-     *   ├── audit 1
-     *   ├── audit 2
-     *   ├── …
-     *   ⋮
-     * @param {LH.ReportResult.Category} category
-     * @param {Object<string, LH.Result.ReportGroup>=} groupDefinitions
-     * @param {{gatherMode: LH.Result.GatherMode}=} options
-     * @return {Element}
-     */
-    render(category: LH.ReportResult.Category, groupDefinitions?: {
-        [x: string]: LH.Result.ReportGroup;
-    } | undefined, options?: {
-        gatherMode: LH.Result.GatherMode;
-    } | undefined): Element;
+};
+declare var $: {
+    new (e: any): {
+        _dom: any;
+        _opts: {};
+        renderReport(e: any, t: any, n: any): any;
+        _renderReportTopbar(e: any): any;
+        _renderReportHeader(): any;
+        _renderReportFooter(e: any): any;
+        _renderMetaBlock(e: any, t: any): void;
+        _renderReportWarnings(e: any): any;
+        _renderScoreGauges(e: any, t: any, n: any): any[];
+        _renderReport(e: any): any;
+    };
+};
+declare var B: {
+    new (e: any, t?: {}): {
+        _dom: any;
+        _opts: {};
+        _topbar: {
+            _reportUIFeatures: any;
+            _dom: any;
+            _dropDownMenu: {
+                _dom: any;
+                onDocumentKeyDown(e: any): void;
+                onToggleClick(e: any): void;
+                onToggleKeydown(e: any): void;
+                onMenuFocusOut(e: any): void;
+                onMenuKeydown(e: any): void;
+                _getNextMenuItem(e: any): any;
+                _getNextSelectableNode(e: any, t: any): any;
+                _getPreviousMenuItem(e: any): any;
+                setup(e: any): void;
+                _toggleEl: any;
+                _menuEl: any;
+                close(): void;
+                open(e: any): void;
+            };
+            _copyAttempt: boolean;
+            onDropDownMenuClick(e: any): void;
+            onKeyUp(e: any): void;
+            onCopy(e: any): void;
+            collapseAllDetails(): void;
+            enable(e: any): void;
+            lhr: any;
+            onCopyButtonClick(): void;
+            expandAllDetails(): void;
+            _print(): void;
+            resetUIState(): void;
+            _getScrollParent(e: any): any;
+            _setUpCollapseDetailsAfterPrinting(): void;
+            _setupStickyHeader(): void;
+            topbarEl: any;
+            categoriesEl: any;
+            stickyHeaderEl: any;
+            highlightEl: any;
+            _updateStickyHeader(): void;
+        };
+        onMediaQueryChange(e: any): void;
+        initFeatures(e: any): void;
+        json: any;
+        _fullPageScreenshot: any;
+        addButton(e: any): any;
+        resetUIState(): void;
+        getReportHtml(): any;
+        saveAsGist(): void;
+        _enableFireworks(): void;
+        _setupMediaQueryListeners(): void;
+        _resetUIState(): void;
+        _setupThirdPartyFilter(): void;
+        _setupElementScreenshotOverlay(e: any): void;
+        _getThirdPartyRows(e: any, t: any): any[];
+        _saveFile(e: any): void;
+    };
+};
+declare namespace Xe {
+    export { Qe as registerLocaleData };
+    export { Ye as hasLocale };
 }
-/**
- * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-declare class TopbarFeatures {
-    /**
-     * @param {ReportUIFeatures} reportUIFeatures
-     * @param {DOM} dom
-     */
-    constructor(reportUIFeatures: ReportUIFeatures, dom: DOM);
-    /** @type {LH.Result} */
-    lhr: LH.Result;
-    _reportUIFeatures: ReportUIFeatures;
-    _dom: DOM;
-    _dropDownMenu: DropDownMenu;
-    _copyAttempt: boolean;
-    /** @type {HTMLElement} */
-    topbarEl: HTMLElement;
-    /** @type {HTMLElement} */
-    categoriesEl: HTMLElement;
-    /** @type {HTMLElement?} */
-    stickyHeaderEl: HTMLElement | null;
-    /** @type {HTMLElement} */
-    highlightEl: HTMLElement;
-    /**
-     * Handler for tool button.
-     * @param {Event} e
-     */
-    onDropDownMenuClick(e: Event): void;
-    /**
-     * Keyup handler for the document.
-     * @param {KeyboardEvent} e
-     */
-    onKeyUp(e: KeyboardEvent): void;
-    /**
-     * Handle copy events.
-     * @param {ClipboardEvent} e
-     */
-    onCopy(e: ClipboardEvent): void;
-    /**
-     * Collapses all audit `<details>`.
-     * open a `<details>` element.
-     */
-    collapseAllDetails(): void;
-    /**
-     * @param {LH.Result} lhr
-     */
-    enable(lhr: LH.Result): void;
-    /**
-     * Copies the report JSON to the clipboard (if supported by the browser).
-     */
-    onCopyButtonClick(): void;
-    /**
-     * Expands all audit `<details>`.
-     * Ideally, a print stylesheet could take care of this, but CSS has no way to
-     * open a `<details>` element.
-     */
-    expandAllDetails(): void;
-    _print(): void;
-    /**
-     * Resets the state of page before capturing the page for export.
-     * When the user opens the exported HTML page, certain UI elements should
-     * be in their closed state (not opened) and the templates should be unstamped.
-     */
-    resetUIState(): void;
-    /**
-     * Finds the first scrollable ancestor of `element`. Falls back to the document.
-     * @param {Element} element
-     * @return {Element | Document}
-     */
-    _getScrollParent(element: Element): Element | Document;
-    /**
-     * Sets up listeners to collapse audit `<details>` when the user closes the
-     * print dialog, all `<details>` are collapsed.
-     */
-    _setUpCollapseDetailsAfterPrinting(): void;
-    _setupStickyHeader(): void;
-    /**
-     * Toggle visibility and update highlighter position
-     */
-    _updateStickyHeader(): void;
-}
-/**
- * Populate the i18n string lookup dict with locale data
- * Used when the host environment selects the locale and serves lighthouse the intended locale file
- * @see https://docs.google.com/document/d/1jnt3BqKB-4q3AE94UWFA0Gqspx8Sd_jivlB7gQMlmfk/edit
- * @param {LH.Locale} locale
- * @param {Record<string, {message: string}>} lhlMessages
- */
-declare function registerLocaleData(locale: LH.Locale, lhlMessages: Record<string, {
-    message: string;
-}>): void;
-/**
- * Returns whether the requestedLocale is registered and available for use
- * @param {LH.Locale} requestedLocale
- * @return {boolean}
- */
-declare function hasLocale(requestedLocale: LH.Locale): boolean;
-declare class DetailsRenderer {
-    /**
-     * @param {DOM} dom
-     * @param {{fullPageScreenshot?: LH.Result.FullPageScreenshot, entities?: LH.Result.Entities}} [options]
-     */
-    constructor(dom: DOM, options?: {
-        fullPageScreenshot?: LH.Result.FullPageScreenshot;
-        entities?: LH.Result.Entities;
-    });
-    _dom: DOM;
-    _fullPageScreenshot: LH.Result.FullPageScreenshot;
-    _entities: LH.Result.Entities;
-    /**
-     * @param {AuditDetails} details
-     * @return {Element|null}
-     */
-    render(details: AuditDetails): Element | null;
-    /**
-     * @param {{value: number, granularity?: number}} details
-     * @return {Element}
-     */
-    _renderBytes(details: {
-        value: number;
-        granularity?: number;
-    }): Element;
-    /**
-     * @param {{value: number, granularity?: number, displayUnit?: string}} details
-     * @return {Element}
-     */
-    _renderMilliseconds(details: {
-        value: number;
-        granularity?: number;
-        displayUnit?: string;
-    }): Element;
-    /**
-     * @param {string} text
-     * @return {HTMLElement}
-     */
-    renderTextURL(text: string): HTMLElement;
-    /**
-     * @param {{text: string, url: string}} details
-     * @return {HTMLElement}
-     */
-    _renderLink(details: {
-        text: string;
-        url: string;
-    }): HTMLElement;
-    /**
-     * @param {string} text
-     * @return {HTMLDivElement}
-     */
-    _renderText(text: string): HTMLDivElement;
-    /**
-     * @param {{value: number, granularity?: number}} details
-     * @return {Element}
-     */
-    _renderNumeric(details: {
-        value: number;
-        granularity?: number;
-    }): Element;
-    /**
-     * Create small thumbnail with scaled down image asset.
-     * @param {string} details
-     * @return {Element}
-     */
-    _renderThumbnail(details: string): Element;
-    /**
-     * @param {string} type
-     * @param {*} value
-     */
-    _renderUnknown(type: string, value: any): HTMLElementByTagName;
-    /**
-     * Render a details item value for embedding in a table. Renders the value
-     * based on the heading's valueType, unless the value itself has a `type`
-     * property to override it.
-     * @param {TableItemValue} value
-     * @param {LH.Audit.Details.TableColumnHeading} heading
-     * @return {Element|null}
-     */
-    _renderTableValue(value: TableItemValue, heading: LH.Audit.Details.TableColumnHeading): Element | null;
-    /**
-     * Returns a new heading where the values are defined first by `heading.subItemsHeading`,
-     * and secondly by `heading`. If there is no subItemsHeading, returns null, which will
-     * be rendered as an empty column.
-     * @param {LH.Audit.Details.TableColumnHeading} heading
-     * @return {LH.Audit.Details.TableColumnHeading | null}
-     */
-    _getDerivedSubItemsHeading(heading: LH.Audit.Details.TableColumnHeading): LH.Audit.Details.TableColumnHeading | null;
-    /**
-     * @param {TableItem} item
-     * @param {(LH.Audit.Details.TableColumnHeading | null)[]} headings
-     */
-    _renderTableRow(item: TableItem, headings: (LH.Audit.Details.TableColumnHeading | null)[]): HTMLElementByTagName;
-    /**
-     * Renders one or more rows from a details table item. A single table item can
-     * expand into multiple rows, if there is a subItemsHeading.
-     * @param {TableItem} item
-     * @param {LH.Audit.Details.TableColumnHeading[]} headings
-     */
-    _renderTableRowsFromItem(item: TableItem, headings: LH.Audit.Details.TableColumnHeading[]): DocumentFragment;
-    /**
-     * Adorn a table row element with entity chips based on [data-entity] attribute.
-     * @param {HTMLTableRowElement} rowEl
-     */
-    _adornEntityGroupRow(rowEl: HTMLTableRowElement): void;
-    /**
-     * Renders an entity-grouped row.
-     * @param {TableItem} item
-     * @param {LH.Audit.Details.TableColumnHeading[]} headings
-     */
-    _renderEntityGroupRow(item: TableItem, headings: LH.Audit.Details.TableColumnHeading[]): DocumentFragment;
-    /**
-     * Returns an array of entity-grouped TableItems to use as the top-level rows in
-     * an grouped table. Each table item returned represents a unique entity, with every
-     * applicable key that can be grouped as a property. Optionally, supported columns are
-     * summed by entity, and sorted by specified keys.
-     * @param {TableLike} details
-     * @return {TableItem[]}
-     */
-    _getEntityGroupItems(details: TableLike): TableItem[];
-    /**
-     * @param {TableLike} details
-     * @return {Element}
-     */
-    _renderTable(details: TableLike): Element;
-    /**
-     * @param {LH.FormattedIcu<LH.Audit.Details.List>} details
-     * @return {Element}
-     */
-    _renderList(details: LH.FormattedIcu<LH.Audit.Details.List>): Element;
-    /**
-     * @param {LH.Audit.Details.NodeValue} item
-     * @return {Element}
-     */
-    renderNode(item: LH.Audit.Details.NodeValue): Element;
-    /**
-     * @param {LH.Audit.Details.SourceLocationValue} item
-     * @return {Element|null}
-     * @protected
-     */
-    protected renderSourceLocation(item: LH.Audit.Details.SourceLocationValue): Element | null;
-    /**
-     * @param {LH.Audit.Details.Filmstrip} details
-     * @return {Element}
-     */
-    _renderFilmstrip(details: LH.Audit.Details.Filmstrip): Element;
-    /**
-     * @param {string} text
-     * @return {Element}
-     */
-    _renderCode(text: string): Element;
-}
-/**
- * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-/** @typedef {import('./dom.js').DOM} DOM */
-declare class DropDownMenu {
-    /**
-     * @param {DOM} dom
-     */
-    constructor(dom: DOM);
-    /** @type {DOM} */
-    _dom: DOM;
-    /** @type {HTMLElement} */
-    _toggleEl: HTMLElement;
-    /** @type {HTMLElement} */
-    _menuEl: HTMLElement;
-    /**
-     * Keydown handler for the document.
-     * @param {KeyboardEvent} e
-     */
-    onDocumentKeyDown(e: KeyboardEvent): void;
-    /**
-     * Click handler for tools button.
-     * @param {Event} e
-     */
-    onToggleClick(e: Event): void;
-    /**
-     * Handler for tool button.
-     * @param {KeyboardEvent} e
-     */
-    onToggleKeydown(e: KeyboardEvent): void;
-    /**
-     * Focus out handler for the drop down menu.
-     * @param {FocusEvent} e
-     */
-    onMenuFocusOut(e: FocusEvent): void;
-    /**
-     * Handler for tool DropDown.
-     * @param {KeyboardEvent} e
-     */
-    onMenuKeydown(e: KeyboardEvent): void;
-    /**
-     * @param {?HTMLElement=} startEl
-     * @return {HTMLElement}
-     */
-    _getNextMenuItem(startEl?: (HTMLElement | null) | undefined): HTMLElement;
-    /**
-     * @param {Array<Node>} allNodes
-     * @param {?HTMLElement=} startNode
-     * @return {HTMLElement}
-     */
-    _getNextSelectableNode(allNodes: Array<Node>, startNode?: (HTMLElement | null) | undefined): HTMLElement;
-    /**
-     * @param {?HTMLElement=} startEl
-     * @return {HTMLElement}
-     */
-    _getPreviousMenuItem(startEl?: (HTMLElement | null) | undefined): HTMLElement;
-    /**
-     * @param {function(MouseEvent): any} menuClickHandler
-     */
-    setup(menuClickHandler: (arg0: MouseEvent) => any): void;
-    close(): void;
-    /**
-     * @param {HTMLElement} firstFocusElement
-     */
-    open(firstFocusElement: HTMLElement): void;
-}
-export {};
+declare function Je(o: any, e?: {}): HTMLElement;
+declare function Ze(o: any, e: any): {
+    lhr: any;
+    missingIcuMessageIds: any[];
+};
+declare function Qe(o: any, e: any): void;
+declare function Ye(o: any): boolean;
+export { I as DOM, $ as ReportRenderer, B as ReportUIFeatures, Xe as format, Je as renderReport, Ze as swapLocale };
diff --git a/front_end/third_party/lighthouse/report/bundle.js b/front_end/third_party/lighthouse/report/bundle.js
index bba889c..6a918084 100644
--- a/front_end/third_party/lighthouse/report/bundle.js
+++ b/front_end/third_party/lighthouse/report/bundle.js
@@ -1,1093 +1,361 @@
-/**
- * @license
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/** @typedef {import('../types/lhr/audit-details').default.SnippetValue} SnippetValue */
-
-const ELLIPSIS = '\u2026';
-const NBSP = '\xa0';
-const PASS_THRESHOLD = 0.9;
-
-const RATINGS$1 = {
-  PASS: {label: 'pass', minScore: PASS_THRESHOLD},
-  AVERAGE: {label: 'average', minScore: 0.5},
-  FAIL: {label: 'fail'},
-  ERROR: {label: 'error'},
-};
-
-// 25 most used tld plus one domains (aka public suffixes) from http archive.
-// @see https://github.com/GoogleChrome/lighthouse/pull/5065#discussion_r191926212
-// The canonical list is https://publicsuffix.org/learn/ but we're only using subset to conserve bytes
-const listOfTlds = [
-  'com', 'co', 'gov', 'edu', 'ac', 'org', 'go', 'gob', 'or', 'net', 'in', 'ne', 'nic', 'gouv',
-  'web', 'spb', 'blog', 'jus', 'kiev', 'mil', 'wi', 'qc', 'ca', 'bel', 'on',
-];
-
-class Util {
-  static get RATINGS() {
-    return RATINGS$1;
-  }
-
-  static get PASS_THRESHOLD() {
-    return PASS_THRESHOLD;
-  }
-
-  static get MS_DISPLAY_VALUE() {
-    return `%10d${NBSP}ms`;
-  }
-
-  /**
-   * If LHR is older than 10.0 it will not have the `finalDisplayedUrl` property.
-   * Old LHRs should have the `finalUrl` property which will work fine for the report.
-   *
-   * @param {LH.Result} lhr
-   */
-  static getFinalDisplayedUrl(lhr) {
-    if (lhr.finalDisplayedUrl) return lhr.finalDisplayedUrl;
-    if (lhr.finalUrl) return lhr.finalUrl;
-    throw new Error('Could not determine final displayed URL');
-  }
-
-  /**
-   * If LHR is older than 10.0 it will not have the `mainDocumentUrl` property.
-   * Old LHRs should have the `finalUrl` property which is the same as `mainDocumentUrl`.
-   *
-   * @param {LH.Result} lhr
-   */
-  static getMainDocumentUrl(lhr) {
-    return lhr.mainDocumentUrl || lhr.finalUrl;
-  }
-
-  /**
-   * @param {LH.Result} lhr
-   * @return {LH.Result.FullPageScreenshot=}
-   */
-  static getFullPageScreenshot(lhr) {
-    if (lhr.fullPageScreenshot) {
-      return lhr.fullPageScreenshot;
+var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:"average",minScore:.5},FAIL:{label:"fail"},ERROR:{label:"error"}},he=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"],k=class o{static get RATINGS(){return pe}static get PASS_THRESHOLD(){return .9}static get MS_DISPLAY_VALUE(){return`%10d${de}ms`}static getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error("Could not determine final displayed URL")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}static getFullPageScreenshot(e){return e.fullPageScreenshot?e.fullPageScreenshot:e.audits["full-page-screenshot"]?.details}static splitMarkdownCodeSpans(e){let t=[],n=e.split(/`(.*?)`/g);for(let r=0;r<n.length;r++){let i=n[r];if(!i)continue;let a=r%2!==0;t.push({isCode:a,text:i})}return t}static splitMarkdownLink(e){let t=[],n=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;n.length;){let[r,i,a]=n.splice(0,3);r&&t.push({isLink:!1,text:r}),i&&a&&t.push({isLink:!0,text:i,linkHref:a})}return t}static truncate(e,t,n="\u2026"){if(e.length<=t)return e;let i=new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(e)[Symbol.iterator](),a=0;for(let l=0;l<=t-n.length;l++){let s=i.next();if(s.done)return e;a=s.value.index}for(let l=0;l<n.length;l++)if(i.next().done)return e;return e.slice(0,a)+n}static getURLDisplayName(e,t){t=t||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0};let n=t.numPathParts!==void 0?t.numPathParts:2,r=t.preserveQuery!==void 0?t.preserveQuery:!0,i=t.preserveHost||!1,a;if(e.protocol==="about:"||e.protocol==="data:")a=e.href;else{a=e.pathname;let s=a.split("/").filter(c=>c.length);n&&s.length>n&&(a=D+s.slice(-1*n).join("/")),i&&(a=`${e.host}/${a.replace(/^\//,"")}`),r&&(a=`${a}${e.search}`)}let l=64;if(e.protocol!=="data:"&&(a=a.slice(0,200),a=a.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,`$1${D}`),a=a.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,`$1${D}`),a=a.replace(/(\d{3})\d{6,}/g,`$1${D}`),a=a.replace(/\u2026+/g,D),a.length>l&&a.includes("?")&&(a=a.replace(/\?([^=]*)(=)?.*/,`?$1$2${D}`),a.length>l&&(a=a.replace(/\?.*/,`?${D}`)))),a.length>l){let s=a.lastIndexOf(".");s>=0?a=a.slice(0,l-1-(a.length-s))+`${D}${a.slice(s)}`:a=a.slice(0,l-1)+D}return a}static getChromeExtensionOrigin(e){let t=new URL(e);return t.protocol+"//"+t.host}static parseURL(e){let t=new URL(e);return{file:o.getURLDisplayName(t),hostname:t.hostname,origin:t.protocol==="chrome-extension:"?o.getChromeExtensionOrigin(e):t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){let t=e.split(".").slice(-2);return he.includes(t[0])?`.${t.join(".")}`:`.${t[t.length-1]}`}static getRootDomain(e){let t=o.createOrReturnURL(e).hostname,r=o.getTld(t).split(".");return t.split(".").slice(-r.length).join(".")}static filterRelevantLines(e,t,n){if(t.length===0)return e.slice(0,n*2+1);let r=3,i=new Set;return t=t.sort((a,l)=>(a.lineNumber||0)-(l.lineNumber||0)),t.forEach(({lineNumber:a})=>{let l=a-n,s=a+n;for(;l<1;)l++,s++;i.has(l-r-1)&&(l-=r);for(let c=l;c<=s;c++){let d=c;i.add(d)}}),e.filter(a=>i.has(a.lineNumber))}};function ue(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
+    .lh-3p-filter {
+      color: var(--color-gray-600);
+      float: right;
+      padding: 6px var(--stackpack-padding-horizontal);
+    }
+    .lh-3p-filter-label, .lh-3p-filter-input {
+      vertical-align: middle;
+      user-select: none;
+    }
+    .lh-3p-filter-input:disabled + .lh-3p-ui-string {
+      text-decoration: line-through;
+    }
+  `),e.append(t);let n=o.createElement("div","lh-3p-filter"),r=o.createElement("label","lh-3p-filter-label"),i=o.createElement("input","lh-3p-filter-input");i.setAttribute("type","checkbox"),i.setAttribute("checked","");let a=o.createElement("span","lh-3p-ui-string");a.append("Show 3rd party resources");let l=o.createElement("span","lh-3p-filter-count");return r.append(" ",i," ",a," (",l,") "),n.append(" ",r," "),e.append(n),e}function ge(o){let e=o.createFragment(),t=o.createElement("div","lh-audit"),n=o.createElement("details","lh-expandable-details"),r=o.createElement("summary"),i=o.createElement("div","lh-audit__header lh-expandable-details__summary"),a=o.createElement("span","lh-audit__score-icon"),l=o.createElement("span","lh-audit__title-and-text"),s=o.createElement("span","lh-audit__title"),c=o.createElement("span","lh-audit__display-text");l.append(" ",s," ",c," ");let d=o.createElement("div","lh-chevron-container");i.append(" ",a," ",l," ",d," "),r.append(" ",i," ");let p=o.createElement("div","lh-audit__description"),h=o.createElement("div","lh-audit__stackpacks");return n.append(" ",r," ",p," ",h," "),t.append(" ",n," "),e.append(t),e}function me(o){let e=o.createFragment(),t=o.createElement("div","lh-category-header"),n=o.createElement("div","lh-score__gauge");n.setAttribute("role","heading"),n.setAttribute("aria-level","2");let r=o.createElement("div","lh-category-header__description");return t.append(" ",n," ",r," "),e.append(t),e}function fe(o){let e=o.createFragment(),t=o.createElementNS("http://www.w3.org/2000/svg","svg","lh-chevron");t.setAttribute("viewBox","0 0 100 100");let n=o.createElementNS("http://www.w3.org/2000/svg","g","lh-chevron__lines"),r=o.createElementNS("http://www.w3.org/2000/svg","path","lh-chevron__line lh-chevron__line-left");r.setAttribute("d","M10 50h40");let i=o.createElementNS("http://www.w3.org/2000/svg","path","lh-chevron__line lh-chevron__line-right");return i.setAttribute("d","M90 50H50"),n.append(" ",r," ",i," "),t.append(" ",n," "),e.append(t),e}function be(o){let e=o.createFragment(),t=o.createElement("div","lh-audit-group"),n=o.createElement("details","lh-clump"),r=o.createElement("summary"),i=o.createElement("div","lh-audit-group__summary"),a=o.createElement("div","lh-audit-group__header"),l=o.createElement("span","lh-audit-group__title"),s=o.createElement("span","lh-audit-group__itemcount");a.append(" ",l," ",s," "," "," ");let c=o.createElement("div","lh-clump-toggle"),d=o.createElement("span","lh-clump-toggletext--show"),p=o.createElement("span","lh-clump-toggletext--hide");return c.append(" ",d," ",p," "),i.append(" ",a," ",c," "),r.append(" ",i," "),n.append(" ",r," "),t.append(" "," ",n," "),e.append(t),e}function ve(o){let e=o.createFragment(),t=o.createElement("div","lh-crc-container"),n=o.createElement("style");n.append(`
+      .lh-crc .lh-tree-marker {
+        width: 12px;
+        height: 26px;
+        display: block;
+        float: left;
+        background-position: top left;
+      }
+      .lh-crc .lh-horiz-down {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><g fill="%23D8D8D8" fill-rule="evenodd"><path d="M16 12v2H-2v-2z"/><path d="M9 12v14H7V12z"/></g></svg>');
+      }
+      .lh-crc .lh-right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M16 12v2H0v-2z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .lh-up-right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v14H7zm2 12h7v2H9z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .lh-vert-right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v27H7zm2 12h7v2H9z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .lh-vert {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v26H7z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .lh-crc-tree {
+        font-size: 14px;
+        width: 100%;
+        overflow-x: auto;
+      }
+      .lh-crc .lh-crc-node {
+        height: 26px;
+        line-height: 26px;
+        white-space: nowrap;
+      }
+      .lh-crc .lh-crc-node__tree-value {
+        margin-left: 10px;
+      }
+      .lh-crc .lh-crc-node__tree-value div {
+        display: inline;
+      }
+      .lh-crc .lh-crc-node__chain-duration {
+        font-weight: 700;
+      }
+      .lh-crc .lh-crc-initial-nav {
+        color: #595959;
+        font-style: italic;
+      }
+      .lh-crc__summary-value {
+        margin-bottom: 10px;
+      }
+    `);let r=o.createElement("div"),i=o.createElement("div","lh-crc__summary-value"),a=o.createElement("span","lh-crc__longest_duration_label"),l=o.createElement("b","lh-crc__longest_duration");i.append(" ",a," ",l," "),r.append(" ",i," ");let s=o.createElement("div","lh-crc"),c=o.createElement("div","lh-crc-initial-nav");return s.append(" ",c," "," "),t.append(" ",n," ",r," ",s," "),e.append(t),e}function _e(o){let e=o.createFragment(),t=o.createElement("div","lh-crc-node"),n=o.createElement("span","lh-crc-node__tree-marker"),r=o.createElement("span","lh-crc-node__tree-value");return t.append(" ",n," ",r," "),e.append(t),e}function we(o){let e=o.createFragment(),t=o.createElement("div","lh-element-screenshot"),n=o.createElement("div","lh-element-screenshot__content"),r=o.createElement("div","lh-element-screenshot__image"),i=o.createElement("div","lh-element-screenshot__mask"),a=o.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("height","0"),a.setAttribute("width","0");let l=o.createElementNS("http://www.w3.org/2000/svg","defs"),s=o.createElementNS("http://www.w3.org/2000/svg","clipPath");s.setAttribute("clipPathUnits","objectBoundingBox"),l.append(" ",s," "," "),a.append(" ",l," "),i.append(" ",a," ");let c=o.createElement("div","lh-element-screenshot__element-marker");return r.append(" ",i," ",c," "),n.append(" ",r," "),t.append(" ",n," "),e.append(t),e}function ye(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
+    .lh-footer {
+      padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);
+      max-width: var(--report-content-max-width);
+      margin: 0 auto;
+    }
+    .lh-footer .lh-generated {
+      text-align: center;
+    }
+  `),e.append(t);let n=o.createElement("footer","lh-footer"),r=o.createElement("ul","lh-meta__items");r.append(" ");let i=o.createElement("div","lh-generated"),a=o.createElement("b");a.append("Lighthouse");let l=o.createElement("span","lh-footer__version"),s=o.createElement("a","lh-footer__version_issue");return s.setAttribute("href","https://github.com/GoogleChrome/Lighthouse/issues"),s.setAttribute("target","_blank"),s.setAttribute("rel","noopener"),s.append("File an issue"),i.append(" "," Generated by ",a," ",l," | ",s," "),n.append(" ",r," ",i," "),e.append(n),e}function xe(o){let e=o.createFragment(),t=o.createElement("a","lh-fraction__wrapper"),n=o.createElement("div","lh-fraction__content-wrapper"),r=o.createElement("div","lh-fraction__content"),i=o.createElement("div","lh-fraction__background");r.append(" ",i," "),n.append(" ",r," ");let a=o.createElement("div","lh-fraction__label");return t.append(" ",n," ",a," "),e.append(t),e}function Ee(o){let e=o.createFragment(),t=o.createElement("a","lh-gauge__wrapper"),n=o.createElement("div","lh-gauge__svg-wrapper"),r=o.createElementNS("http://www.w3.org/2000/svg","svg","lh-gauge");r.setAttribute("viewBox","0 0 120 120");let i=o.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge-base");i.setAttribute("r","56"),i.setAttribute("cx","60"),i.setAttribute("cy","60"),i.setAttribute("stroke-width","8");let a=o.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge-arc");a.setAttribute("r","56"),a.setAttribute("cx","60"),a.setAttribute("cy","60"),a.setAttribute("stroke-width","8"),r.append(" ",i," ",a," "),n.append(" ",r," ");let l=o.createElement("div","lh-gauge__percentage"),s=o.createElement("div","lh-gauge__label");return t.append(" "," ",n," ",l," "," ",s," "),e.append(t),e}function ke(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
+    .lh-gauge--pwa .lh-gauge--pwa__component {
+      display: none;
+    }
+    .lh-gauge--pwa__wrapper:not(.lh-badged--all) .lh-gauge--pwa__logo > path {
+      /* Gray logo unless everything is passing. */
+      fill: #B0B0B0;
     }
 
-    // Prior to 10.0.
-    const details = /** @type {LH.Result.FullPageScreenshot=} */ (
-      lhr.audits['full-page-screenshot']?.details);
-    return details;
-  }
-
-  /**
-   * Split a string by markdown code spans (enclosed in `backticks`), splitting
-   * into segments that were enclosed in backticks (marked as `isCode === true`)
-   * and those that outside the backticks (`isCode === false`).
-   * @param {string} text
-   * @return {Array<{isCode: true, text: string}|{isCode: false, text: string}>}
-   */
-  static splitMarkdownCodeSpans(text) {
-    /** @type {Array<{isCode: true, text: string}|{isCode: false, text: string}>} */
-    const segments = [];
-
-    // Split on backticked code spans.
-    const parts = text.split(/`(.*?)`/g);
-    for (let i = 0; i < parts.length; i ++) {
-      const text = parts[i];
-
-      // Empty strings are an artifact of splitting, not meaningful.
-      if (!text) continue;
-
-      // Alternates between plain text and code segments.
-      const isCode = i % 2 !== 0;
-      segments.push({
-        isCode,
-        text,
-      });
+    .lh-gauge--pwa__disc {
+      fill: var(--color-gray-200);
     }
 
-    return segments;
-  }
-
-  /**
-   * Split a string on markdown links (e.g. [some link](https://...)) into
-   * segments of plain text that weren't part of a link (marked as
-   * `isLink === false`), and segments with text content and a URL that did make
-   * up a link (marked as `isLink === true`).
-   * @param {string} text
-   * @return {Array<{isLink: true, text: string, linkHref: string}|{isLink: false, text: string}>}
-   */
-  static splitMarkdownLink(text) {
-    /** @type {Array<{isLink: true, text: string, linkHref: string}|{isLink: false, text: string}>} */
-    const segments = [];
-
-    const parts = text.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);
-    while (parts.length) {
-      // Shift off the same number of elements as the pre-split and capture groups.
-      const [preambleText, linkText, linkHref] = parts.splice(0, 3);
-
-      if (preambleText) { // Skip empty text as it's an artifact of splitting, not meaningful.
-        segments.push({
-          isLink: false,
-          text: preambleText,
-        });
-      }
-
-      // Append link if there are any.
-      if (linkText && linkHref) {
-        segments.push({
-          isLink: true,
-          text: linkText,
-          linkHref,
-        });
-      }
+    .lh-gauge--pwa__logo--primary-color {
+      fill: #304FFE;
     }
 
-    return segments;
-  }
-
-  /**
-   * @param {string} string
-   * @param {number} characterLimit
-   * @param {string} ellipseSuffix
-   */
-  static truncate(string, characterLimit, ellipseSuffix = '…') {
-    // Early return for the case where there are fewer bytes than the character limit.
-    if (string.length <= characterLimit) {
-      return string;
+    .lh-gauge--pwa__logo--secondary-color {
+      fill: #3D3D3D;
+    }
+    .lh-dark .lh-gauge--pwa__logo--secondary-color {
+      fill: #D8B6B6;
     }
 
-    const segmenter = new Intl.Segmenter(undefined, {granularity: 'grapheme'});
-    const iterator = segmenter.segment(string)[Symbol.iterator]();
-
-    let lastSegmentIndex = 0;
-    for (let i = 0; i <= characterLimit - ellipseSuffix.length; i++) {
-      const result = iterator.next();
-      if (result.done) {
-        return string;
-      }
-
-      lastSegmentIndex = result.value.index;
+    /* No passing groups. */
+    .lh-gauge--pwa__wrapper:not([class*='lh-badged--']) .lh-gauge--pwa__na-line {
+      display: inline;
+    }
+    /* Just optimized. Same n/a line as no passing groups. */
+    .lh-gauge--pwa__wrapper.lh-badged--pwa-optimized:not(.lh-badged--pwa-installable) .lh-gauge--pwa__na-line {
+      display: inline;
     }
 
-    for (let i = 0; i < ellipseSuffix.length; i++) {
-      if (iterator.next().done) {
-        return string;
-      }
+    /* Just installable. */
+    .lh-gauge--pwa__wrapper.lh-badged--pwa-installable .lh-gauge--pwa__installable-badge {
+      display: inline;
     }
 
-    return string.slice(0, lastSegmentIndex) + ellipseSuffix;
-  }
-
-  /**
-   * @param {URL} parsedUrl
-   * @param {{numPathParts?: number, preserveQuery?: boolean, preserveHost?: boolean}=} options
-   * @return {string}
-   */
-  static getURLDisplayName(parsedUrl, options) {
-    // Closure optional properties aren't optional in tsc, so fallback needs undefined  values.
-    options = options || {numPathParts: undefined, preserveQuery: undefined,
-      preserveHost: undefined};
-    const numPathParts = options.numPathParts !== undefined ? options.numPathParts : 2;
-    const preserveQuery = options.preserveQuery !== undefined ? options.preserveQuery : true;
-    const preserveHost = options.preserveHost || false;
-
-    let name;
-
-    if (parsedUrl.protocol === 'about:' || parsedUrl.protocol === 'data:') {
-      // Handle 'about:*' and 'data:*' URLs specially since they have no path.
-      name = parsedUrl.href;
-    } else {
-      name = parsedUrl.pathname;
-      const parts = name.split('/').filter(part => part.length);
-      if (numPathParts && parts.length > numPathParts) {
-        name = ELLIPSIS + parts.slice(-1 * numPathParts).join('/');
-      }
-
-      if (preserveHost) {
-        name = `${parsedUrl.host}/${name.replace(/^\//, '')}`;
-      }
-      if (preserveQuery) {
-        name = `${name}${parsedUrl.search}`;
-      }
+    /* All passing groups. */
+    .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {
+      display: inline;
+    }
+  `),e.append(t);let n=o.createElement("a","lh-gauge__wrapper lh-gauge--pwa__wrapper"),r=o.createElementNS("http://www.w3.org/2000/svg","svg","lh-gauge lh-gauge--pwa");r.setAttribute("viewBox","0 0 60 60");let i=o.createElementNS("http://www.w3.org/2000/svg","defs"),a=o.createElementNS("http://www.w3.org/2000/svg","linearGradient");a.setAttribute("id","lh-gauge--pwa__check-circle__gradient"),a.setAttribute("x1","50%"),a.setAttribute("y1","0%"),a.setAttribute("x2","50%"),a.setAttribute("y2","100%");let l=o.createElementNS("http://www.w3.org/2000/svg","stop");l.setAttribute("stop-color","#00C852"),l.setAttribute("offset","0%");let s=o.createElementNS("http://www.w3.org/2000/svg","stop");s.setAttribute("stop-color","#009688"),s.setAttribute("offset","100%"),a.append(" ",l," ",s," ");let c=o.createElementNS("http://www.w3.org/2000/svg","linearGradient");c.setAttribute("id","lh-gauge--pwa__installable__shadow-gradient"),c.setAttribute("x1","76.056%"),c.setAttribute("x2","24.111%"),c.setAttribute("y1","82.995%"),c.setAttribute("y2","24.735%");let d=o.createElementNS("http://www.w3.org/2000/svg","stop");d.setAttribute("stop-color","#A5D6A7"),d.setAttribute("offset","0%");let p=o.createElementNS("http://www.w3.org/2000/svg","stop");p.setAttribute("stop-color","#80CBC4"),p.setAttribute("offset","100%"),c.append(" ",d," ",p," ");let h=o.createElementNS("http://www.w3.org/2000/svg","g");h.setAttribute("id","lh-gauge--pwa__installable-badge");let u=o.createElementNS("http://www.w3.org/2000/svg","circle");u.setAttribute("fill","#FFFFFF"),u.setAttribute("cx","10"),u.setAttribute("cy","10"),u.setAttribute("r","10");let f=o.createElementNS("http://www.w3.org/2000/svg","path");f.setAttribute("fill","#009688"),f.setAttribute("d","M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"),h.append(" ",u," ",f," "),i.append(" ",a," ",c," ",h," ");let b=o.createElementNS("http://www.w3.org/2000/svg","g");b.setAttribute("stroke","none"),b.setAttribute("fill-rule","nonzero");let _=o.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge--pwa__disc");_.setAttribute("cx","30"),_.setAttribute("cy","30"),_.setAttribute("r","30");let m=o.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__logo"),w=o.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--secondary-color");w.setAttribute("d","M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z");let v=o.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--primary-color");v.setAttribute("d","M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z");let x=o.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--secondary-color");x.setAttribute("fill-rule","nonzero"),x.setAttribute("d","M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"),m.append(" ",w," ",v," ",x," ");let E=o.createElementNS("http://www.w3.org/2000/svg","rect","lh-gauge--pwa__component lh-gauge--pwa__na-line");E.setAttribute("fill","#FFFFFF"),E.setAttribute("x","20"),E.setAttribute("y","32"),E.setAttribute("width","20"),E.setAttribute("height","4"),E.setAttribute("rx","2");let A=o.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__component lh-gauge--pwa__installable-badge");A.setAttribute("transform","translate(20, 29)");let C=o.createElementNS("http://www.w3.org/2000/svg","path");C.setAttribute("fill","url(#lh-gauge--pwa__installable__shadow-gradient)"),C.setAttribute("d","M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z");let L=o.createElementNS("http://www.w3.org/2000/svg","use");L.setAttribute("href","#lh-gauge--pwa__installable-badge"),A.append(" ",C," ",L," ");let S=o.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__component lh-gauge--pwa__check-circle");S.setAttribute("transform","translate(18, 28)");let z=o.createElementNS("http://www.w3.org/2000/svg","circle");z.setAttribute("fill","#FFFFFF"),z.setAttribute("cx","12"),z.setAttribute("cy","12"),z.setAttribute("r","12");let M=o.createElementNS("http://www.w3.org/2000/svg","path");M.setAttribute("fill","url(#lh-gauge--pwa__check-circle__gradient)"),M.setAttribute("d","M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"),S.append(" ",z," ",M," "),b.append(" "," ",_," ",m," "," ",E," "," ",A," "," ",S," "),r.append(" ",i," ",b," ");let T=o.createElement("div","lh-gauge__label");return n.append(" ",r," ",T," "),e.append(n),e}function Ae(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
+    /* CSS Fireworks. Originally by Eddie Lin
+       https://codepen.io/paulirish/pen/yEVMbP
+    */
+    .lh-pyro {
+      display: none;
+      z-index: 1;
+      pointer-events: none;
+    }
+    .lh-score100 .lh-pyro {
+      display: block;
+    }
+    .lh-score100 .lh-lighthouse stop:first-child {
+      stop-color: hsla(200, 12%, 95%, 0);
+    }
+    .lh-score100 .lh-lighthouse stop:last-child {
+      stop-color: hsla(65, 81%, 76%, 1);
     }
 
-    const MAX_LENGTH = 64;
-    if (parsedUrl.protocol !== 'data:') {
-      // Even non-data uris can be 10k characters long.
-      name = name.slice(0, 200);
-      // Always elide hexadecimal hash
-      name = name.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g, `$1${ELLIPSIS}`);
-      // Also elide other hash-like mixed-case strings
-      name = name.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,
-        `$1${ELLIPSIS}`);
-      // Also elide long number sequences
-      name = name.replace(/(\d{3})\d{6,}/g, `$1${ELLIPSIS}`);
-      // Merge any adjacent ellipses
-      name = name.replace(/\u2026+/g, ELLIPSIS);
+    .lh-pyro > .lh-pyro-before, .lh-pyro > .lh-pyro-after {
+      position: absolute;
+      width: 5px;
+      height: 5px;
+      border-radius: 2.5px;
+      box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;
+      animation: 1s bang ease-out infinite backwards,  1s gravity ease-in infinite backwards,  5s position linear infinite backwards;
+      animation-delay: 1s, 1s, 1s;
+    }
 
-      // Elide query params first
-      if (name.length > MAX_LENGTH && name.includes('?')) {
-        // Try to leave the first query parameter intact
-        name = name.replace(/\?([^=]*)(=)?.*/, `?$1$2${ELLIPSIS}`);
+    .lh-pyro > .lh-pyro-after {
+      animation-delay: 2.25s, 2.25s, 2.25s;
+      animation-duration: 1.25s, 1.25s, 6.25s;
+    }
 
-        // Remove it all if it's still too long
-        if (name.length > MAX_LENGTH) {
-          name = name.replace(/\?.*/, `?${ELLIPSIS}`);
+    @keyframes bang {
+      to {
+        opacity: 1;
+        box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;
+      }
+    }
+    @keyframes gravity {
+      from {
+        opacity: 1;
+      }
+      to {
+        transform: translateY(80px);
+        opacity: 0;
+      }
+    }
+    @keyframes position {
+      0%, 19.9% {
+        margin-top: 4%;
+        margin-left: 47%;
+      }
+      20%, 39.9% {
+        margin-top: 7%;
+        margin-left: 30%;
+      }
+      40%, 59.9% {
+        margin-top: 6%;
+        margin-left: 70%;
+      }
+      60%, 79.9% {
+        margin-top: 3%;
+        margin-left: 20%;
+      }
+      80%, 99.9% {
+        margin-top: 3%;
+        margin-left: 80%;
+      }
+    }
+  `),e.append(t);let n=o.createElement("div","lh-header-container"),r=o.createElement("div","lh-scores-wrapper-placeholder");return n.append(" ",r," "),e.append(n),e}function Se(o){let e=o.createFragment(),t=o.createElement("div","lh-metric"),n=o.createElement("div","lh-metric__innerwrap"),r=o.createElement("div","lh-metric__icon"),i=o.createElement("span","lh-metric__title"),a=o.createElement("div","lh-metric__value"),l=o.createElement("div","lh-metric__description");return n.append(" ",r," ",i," ",a," ",l," "),t.append(" ",n," "),e.append(t),e}function Ce(o){let e=o.createFragment(),t=o.createElement("div","lh-audit lh-audit--load-opportunity"),n=o.createElement("details","lh-expandable-details"),r=o.createElement("summary"),i=o.createElement("div","lh-audit__header"),a=o.createElement("div","lh-load-opportunity__cols"),l=o.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--one"),s=o.createElement("span","lh-audit__score-icon"),c=o.createElement("div","lh-audit__title");l.append(" ",s," ",c," ");let d=o.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--two"),p=o.createElement("div","lh-load-opportunity__sparkline"),h=o.createElement("div","lh-sparkline"),u=o.createElement("div","lh-sparkline__bar");h.append(u),p.append(" ",h," ");let f=o.createElement("div","lh-audit__display-text"),b=o.createElement("div","lh-chevron-container");d.append(" ",p," ",f," ",b," "),a.append(" ",l," ",d," "),i.append(" ",a," "),r.append(" ",i," ");let _=o.createElement("div","lh-audit__description"),m=o.createElement("div","lh-audit__stackpacks");return n.append(" ",r," ",_," ",m," "),t.append(" ",n," "),e.append(t),e}function ze(o){let e=o.createFragment(),t=o.createElement("div","lh-load-opportunity__header lh-load-opportunity__cols"),n=o.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--one"),r=o.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--two");return t.append(" ",n," ",r," "),e.append(t),e}function Le(o){let e=o.createFragment(),t=o.createElement("div","lh-scorescale"),n=o.createElement("span","lh-scorescale-range lh-scorescale-range--fail");n.append("0\u201349");let r=o.createElement("span","lh-scorescale-range lh-scorescale-range--average");r.append("50\u201389");let i=o.createElement("span","lh-scorescale-range lh-scorescale-range--pass");return i.append("90\u2013100"),t.append(" ",n," ",r," ",i," "),e.append(t),e}function Me(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
+    .lh-scores-container {
+      display: flex;
+      flex-direction: column;
+      padding: var(--default-padding) 0;
+      position: relative;
+      width: 100%;
+    }
+
+    .lh-sticky-header {
+      --gauge-circle-size: var(--gauge-circle-size-sm);
+      --plugin-badge-size: 16px;
+      --plugin-icon-size: 75%;
+      --gauge-wrapper-width: 60px;
+      --gauge-percentage-font-size: 13px;
+      position: fixed;
+      left: 0;
+      right: 0;
+      top: var(--topbar-height);
+      font-weight: 500;
+      display: none;
+      justify-content: center;
+      background-color: var(--sticky-header-background-color);
+      border-bottom: 1px solid var(--color-gray-200);
+      padding-top: var(--score-container-padding);
+      padding-bottom: 4px;
+      z-index: 1;
+      pointer-events: none;
+    }
+
+    .lh-devtools .lh-sticky-header {
+      /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change \`position\` to \`sticky.\` */
+      position: sticky;
+    }
+
+    .lh-sticky-header--visible {
+      display: grid;
+      grid-auto-flow: column;
+      pointer-events: auto;
+    }
+
+    /* Disable the gauge arc animation for the sticky header, so toggling display: none
+       does not play the animation. */
+    .lh-sticky-header .lh-gauge-arc {
+      animation: none;
+    }
+
+    .lh-sticky-header .lh-gauge__label,
+    .lh-sticky-header .lh-fraction__label {
+      display: none;
+    }
+
+    .lh-highlighter {
+      width: var(--gauge-wrapper-width);
+      height: 1px;
+      background-color: var(--highlighter-background-color);
+      /* Position at bottom of first gauge in sticky header. */
+      position: absolute;
+      grid-column: 1;
+      bottom: -1px;
+    }
+
+    .lh-gauge__wrapper:first-of-type {
+      contain: none;
+    }
+  `),e.append(t);let n=o.createElement("div","lh-scores-wrapper"),r=o.createElement("div","lh-scores-container"),i=o.createElement("div","lh-pyro"),a=o.createElement("div","lh-pyro-before"),l=o.createElement("div","lh-pyro-after");return i.append(" ",a," ",l," "),r.append(" ",i," "),n.append(" ",r," "),e.append(n),e}function Te(o){let e=o.createFragment(),t=o.createElement("div","lh-snippet"),n=o.createElement("style");return n.append(`
+          :root {
+            --snippet-highlight-light: #fbf1f2;
+            --snippet-highlight-dark: #ffd6d8;
+          }
+
+         .lh-snippet__header {
+          position: relative;
+          overflow: hidden;
+          padding: 10px;
+          border-bottom: none;
+          color: var(--snippet-color);
+          background-color: var(--snippet-background-color);
+          border: 1px solid var(--report-border-color-secondary);
         }
-      }
-    }
+        .lh-snippet__title {
+          font-weight: bold;
+          float: left;
+        }
+        .lh-snippet__node {
+          float: left;
+          margin-left: 4px;
+        }
+        .lh-snippet__toggle-expand {
+          padding: 1px 7px;
+          margin-top: -1px;
+          margin-right: -7px;
+          float: right;
+          background: transparent;
+          border: none;
+          cursor: pointer;
+          font-size: 14px;
+          color: #0c50c7;
+        }
 
-    // Elide too long names next
-    if (name.length > MAX_LENGTH) {
-      const dotIndex = name.lastIndexOf('.');
-      if (dotIndex >= 0) {
-        name = name.slice(0, MAX_LENGTH - 1 - (name.length - dotIndex)) +
-          // Show file extension
-          `${ELLIPSIS}${name.slice(dotIndex)}`;
-      } else {
-        name = name.slice(0, MAX_LENGTH - 1) + ELLIPSIS;
-      }
-    }
+        .lh-snippet__snippet {
+          overflow: auto;
+          border: 1px solid var(--report-border-color-secondary);
+        }
+        /* Container needed so that all children grow to the width of the scroll container */
+        .lh-snippet__snippet-inner {
+          display: inline-block;
+          min-width: 100%;
+        }
 
-    return name;
-  }
+        .lh-snippet:not(.lh-snippet--expanded) .lh-snippet__show-if-expanded {
+          display: none;
+        }
+        .lh-snippet.lh-snippet--expanded .lh-snippet__show-if-collapsed {
+          display: none;
+        }
 
-  /**
-   * Returns the origin portion of a Chrome extension URL.
-   * @param {string} url
-   * @return {string}
-   */
-  static getChromeExtensionOrigin(url) {
-    const parsedUrl = new URL(url);
-    return parsedUrl.protocol + '//' + parsedUrl.host;
-  }
-
-  /**
-   * Split a URL into a file, hostname and origin for easy display.
-   * @param {string} url
-   * @return {{file: string, hostname: string, origin: string}}
-   */
-  static parseURL(url) {
-    const parsedUrl = new URL(url);
-    return {
-      file: Util.getURLDisplayName(parsedUrl),
-      hostname: parsedUrl.hostname,
-      // Node's URL parsing behavior is different than Chrome and returns 'null'
-      // for chrome-extension:// URLs. See https://github.com/nodejs/node/issues/21955.
-      origin: parsedUrl.protocol === 'chrome-extension:' ?
-        Util.getChromeExtensionOrigin(url) : parsedUrl.origin,
-    };
-  }
-
-  /**
-   * @param {string|URL} value
-   * @return {!URL}
-   */
-  static createOrReturnURL(value) {
-    if (value instanceof URL) {
-      return value;
-    }
-
-    return new URL(value);
-  }
-
-  /**
-   * Gets the tld of a domain
-   *
-   * @param {string} hostname
-   * @return {string} tld
-   */
-  static getTld(hostname) {
-    const tlds = hostname.split('.').slice(-2);
-
-    if (!listOfTlds.includes(tlds[0])) {
-      return `.${tlds[tlds.length - 1]}`;
-    }
-
-    return `.${tlds.join('.')}`;
-  }
-
-  /**
-   * Returns a primary domain for provided hostname (e.g. www.example.com -> example.com).
-   * @param {string|URL} url hostname or URL object
-   * @return {string}
-   */
-  static getRootDomain(url) {
-    const hostname = Util.createOrReturnURL(url).hostname;
-    const tld = Util.getTld(hostname);
-
-    // tld is .com or .co.uk which means we means that length is 1 to big
-    // .com => 2 & .co.uk => 3
-    const splitTld = tld.split('.');
-
-    // get TLD + root domain
-    return hostname.split('.').slice(-splitTld.length).join('.');
-  }
-
-  /**
-   * Returns only lines that are near a message, or the first few lines if there are
-   * no line messages.
-   * @param {SnippetValue['lines']} lines
-   * @param {SnippetValue['lineMessages']} lineMessages
-   * @param {number} surroundingLineCount Number of lines to include before and after
-   * the message. If this is e.g. 2 this function might return 5 lines.
-   */
-  static filterRelevantLines(lines, lineMessages, surroundingLineCount) {
-    if (lineMessages.length === 0) {
-      // no lines with messages, just return the first bunch of lines
-      return lines.slice(0, surroundingLineCount * 2 + 1);
-    }
-
-    const minGapSize = 3;
-    const lineNumbersToKeep = new Set();
-    // Sort messages so we can check lineNumbersToKeep to see how big the gap to
-    // the previous line is.
-    lineMessages = lineMessages.sort((a, b) => (a.lineNumber || 0) - (b.lineNumber || 0));
-    lineMessages.forEach(({lineNumber}) => {
-      let firstSurroundingLineNumber = lineNumber - surroundingLineCount;
-      let lastSurroundingLineNumber = lineNumber + surroundingLineCount;
-
-      while (firstSurroundingLineNumber < 1) {
-        // make sure we still show (surroundingLineCount * 2 + 1) lines in total
-        firstSurroundingLineNumber++;
-        lastSurroundingLineNumber++;
-      }
-      // If only a few lines would be omitted normally then we prefer to include
-      // extra lines to avoid the tiny gap
-      if (lineNumbersToKeep.has(firstSurroundingLineNumber - minGapSize - 1)) {
-        firstSurroundingLineNumber -= minGapSize;
-      }
-      for (let i = firstSurroundingLineNumber; i <= lastSurroundingLineNumber; i++) {
-        const surroundingLineNumber = i;
-        lineNumbersToKeep.add(surroundingLineNumber);
-      }
-    });
-
-    return lines.filter(line => lineNumbersToKeep.has(line.lineNumber));
-  }
-}
-
-// auto-generated by build/build-report-components.js
-
-/** @typedef {import('./dom.js').DOM} DOM */
-
-/* eslint-disable max-len, quotes, comma-spacing */
-
-
-/**
- * @param {DOM} dom
- */
-function create3pFilterComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("style");
-  el1.append("\n    .lh-3p-filter {\n      color: var(--color-gray-600);\n      float: right;\n      padding: 6px var(--stackpack-padding-horizontal);\n    }\n    .lh-3p-filter-label, .lh-3p-filter-input {\n      vertical-align: middle;\n      user-select: none;\n    }\n    .lh-3p-filter-input:disabled + .lh-3p-ui-string {\n      text-decoration: line-through;\n    }\n  ");
-  el0.append(el1);
-  const el2 = dom.createElement("div", "lh-3p-filter");
-  const el3 = dom.createElement("label", "lh-3p-filter-label");
-  const el4 = dom.createElement("input", "lh-3p-filter-input");
-  el4.setAttribute('type', 'checkbox');
-  el4.setAttribute('checked', '');
-  const el5 = dom.createElement("span", "lh-3p-ui-string");
-  el5.append("Show 3rd party resources");
-  const el6 = dom.createElement("span", "lh-3p-filter-count");
-  el3.append(" ",el4," ",el5," (",el6,") ");
-  el2.append(" ",el3," ");
-  el0.append(el2);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createAuditComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-audit");
-  const el2 = dom.createElement("details", "lh-expandable-details");
-  const el3 = dom.createElement("summary");
-  const el4 = dom.createElement("div", "lh-audit__header lh-expandable-details__summary");
-  const el5 = dom.createElement("span", "lh-audit__score-icon");
-  const el6 = dom.createElement("span", "lh-audit__title-and-text");
-  const el7 = dom.createElement("span", "lh-audit__title");
-  const el8 = dom.createElement("span", "lh-audit__display-text");
-  el6.append(" ",el7," ",el8," ");
-  const el9 = dom.createElement("div", "lh-chevron-container");
-  el4.append(" ",el5," ",el6," ",el9," ");
-  el3.append(" ",el4," ");
-  const el10 = dom.createElement("div", "lh-audit__description");
-  const el11 = dom.createElement("div", "lh-audit__stackpacks");
-  el2.append(" ",el3," ",el10," ",el11," ");
-  el1.append(" ",el2," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createCategoryHeaderComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-category-header");
-  const el2 = dom.createElement("div", "lh-score__gauge");
-  el2.setAttribute('role', 'heading');
-  el2.setAttribute('aria-level', '2');
-  const el3 = dom.createElement("div", "lh-category-header__description");
-  el1.append(" ",el2," ",el3," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createChevronComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElementNS("http://www.w3.org/2000/svg", "svg", "lh-chevron");
-  el1.setAttribute('viewBox', '0 0 100 100');
-  const el2 = dom.createElementNS("http://www.w3.org/2000/svg", "g", "lh-chevron__lines");
-  const el3 = dom.createElementNS("http://www.w3.org/2000/svg", "path", "lh-chevron__line lh-chevron__line-left");
-  el3.setAttribute('d', 'M10 50h40');
-  const el4 = dom.createElementNS("http://www.w3.org/2000/svg", "path", "lh-chevron__line lh-chevron__line-right");
-  el4.setAttribute('d', 'M90 50H50');
-  el2.append(" ",el3," ",el4," ");
-  el1.append(" ",el2," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createClumpComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-audit-group");
-  const el2 = dom.createElement("details", "lh-clump");
-  const el3 = dom.createElement("summary");
-  const el4 = dom.createElement("div", "lh-audit-group__summary");
-  const el5 = dom.createElement("div", "lh-audit-group__header");
-  const el6 = dom.createElement("span", "lh-audit-group__title");
-  const el7 = dom.createElement("span", "lh-audit-group__itemcount");
-  el5.append(" ",el6," ",el7," "," "," ");
-  const el8 = dom.createElement("div", "lh-clump-toggle");
-  const el9 = dom.createElement("span", "lh-clump-toggletext--show");
-  const el10 = dom.createElement("span", "lh-clump-toggletext--hide");
-  el8.append(" ",el9," ",el10," ");
-  el4.append(" ",el5," ",el8," ");
-  el3.append(" ",el4," ");
-  el2.append(" ",el3," ");
-  el1.append(" "," ",el2," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createCrcComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-crc-container");
-  const el2 = dom.createElement("style");
-  el2.append("\n      .lh-crc .lh-tree-marker {\n        width: 12px;\n        height: 26px;\n        display: block;\n        float: left;\n        background-position: top left;\n      }\n      .lh-crc .lh-horiz-down {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"%23D8D8D8\" fill-rule=\"evenodd\"><path d=\"M16 12v2H-2v-2z\"/><path d=\"M9 12v14H7V12z\"/></g></svg>');\n      }\n      .lh-crc .lh-right {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M16 12v2H0v-2z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n      }\n      .lh-crc .lh-up-right {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v14H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n      }\n      .lh-crc .lh-vert-right {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v27H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n      }\n      .lh-crc .lh-vert {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v26H7z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n      }\n      .lh-crc .lh-crc-tree {\n        font-size: 14px;\n        width: 100%;\n        overflow-x: auto;\n      }\n      .lh-crc .lh-crc-node {\n        height: 26px;\n        line-height: 26px;\n        white-space: nowrap;\n      }\n      .lh-crc .lh-crc-node__tree-value {\n        margin-left: 10px;\n      }\n      .lh-crc .lh-crc-node__tree-value div {\n        display: inline;\n      }\n      .lh-crc .lh-crc-node__chain-duration {\n        font-weight: 700;\n      }\n      .lh-crc .lh-crc-initial-nav {\n        color: #595959;\n        font-style: italic;\n      }\n      .lh-crc__summary-value {\n        margin-bottom: 10px;\n      }\n    ");
-  const el3 = dom.createElement("div");
-  const el4 = dom.createElement("div", "lh-crc__summary-value");
-  const el5 = dom.createElement("span", "lh-crc__longest_duration_label");
-  const el6 = dom.createElement("b", "lh-crc__longest_duration");
-  el4.append(" ",el5," ",el6," ");
-  el3.append(" ",el4," ");
-  const el7 = dom.createElement("div", "lh-crc");
-  const el8 = dom.createElement("div", "lh-crc-initial-nav");
-  el7.append(" ",el8," "," ");
-  el1.append(" ",el2," ",el3," ",el7," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createCrcChainComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-crc-node");
-  const el2 = dom.createElement("span", "lh-crc-node__tree-marker");
-  const el3 = dom.createElement("span", "lh-crc-node__tree-value");
-  el1.append(" ",el2," ",el3," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createElementScreenshotComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-element-screenshot");
-  const el2 = dom.createElement("div", "lh-element-screenshot__content");
-  const el3 = dom.createElement("div", "lh-element-screenshot__image");
-  const el4 = dom.createElement("div", "lh-element-screenshot__mask");
-  const el5 = dom.createElementNS("http://www.w3.org/2000/svg", "svg");
-  el5.setAttribute('height', '0');
-  el5.setAttribute('width', '0');
-  const el6 = dom.createElementNS("http://www.w3.org/2000/svg", "defs");
-  const el7 = dom.createElementNS("http://www.w3.org/2000/svg", "clipPath");
-  el7.setAttribute('clipPathUnits', 'objectBoundingBox');
-  el6.append(" ",el7," "," ");
-  el5.append(" ",el6," ");
-  el4.append(" ",el5," ");
-  const el8 = dom.createElement("div", "lh-element-screenshot__element-marker");
-  el3.append(" ",el4," ",el8," ");
-  el2.append(" ",el3," ");
-  el1.append(" ",el2," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createFooterComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("style");
-  el1.append("\n    .lh-footer {\n      padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);\n      max-width: var(--report-content-max-width);\n      margin: 0 auto;\n    }\n    .lh-footer .lh-generated {\n      text-align: center;\n    }\n  ");
-  el0.append(el1);
-  const el2 = dom.createElement("footer", "lh-footer");
-  const el3 = dom.createElement("ul", "lh-meta__items");
-  el3.append(" ");
-  const el4 = dom.createElement("div", "lh-generated");
-  const el5 = dom.createElement("b");
-  el5.append("Lighthouse");
-  const el6 = dom.createElement("span", "lh-footer__version");
-  const el7 = dom.createElement("a", "lh-footer__version_issue");
-  el7.setAttribute('href', 'https://github.com/GoogleChrome/Lighthouse/issues');
-  el7.setAttribute('target', '_blank');
-  el7.setAttribute('rel', 'noopener');
-  el7.append("File an issue");
-  el4.append(" "," Generated by ",el5," ",el6," | ",el7," ");
-  el2.append(" ",el3," ",el4," ");
-  el0.append(el2);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createFractionComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("a", "lh-fraction__wrapper");
-  const el2 = dom.createElement("div", "lh-fraction__content-wrapper");
-  const el3 = dom.createElement("div", "lh-fraction__content");
-  const el4 = dom.createElement("div", "lh-fraction__background");
-  el3.append(" ",el4," ");
-  el2.append(" ",el3," ");
-  const el5 = dom.createElement("div", "lh-fraction__label");
-  el1.append(" ",el2," ",el5," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createGaugeComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("a", "lh-gauge__wrapper");
-  const el2 = dom.createElement("div", "lh-gauge__svg-wrapper");
-  const el3 = dom.createElementNS("http://www.w3.org/2000/svg", "svg", "lh-gauge");
-  el3.setAttribute('viewBox', '0 0 120 120');
-  const el4 = dom.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-gauge-base");
-  el4.setAttribute('r', '56');
-  el4.setAttribute('cx', '60');
-  el4.setAttribute('cy', '60');
-  el4.setAttribute('stroke-width', '8');
-  const el5 = dom.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-gauge-arc");
-  el5.setAttribute('r', '56');
-  el5.setAttribute('cx', '60');
-  el5.setAttribute('cy', '60');
-  el5.setAttribute('stroke-width', '8');
-  el3.append(" ",el4," ",el5," ");
-  el2.append(" ",el3," ");
-  const el6 = dom.createElement("div", "lh-gauge__percentage");
-  const el7 = dom.createElement("div", "lh-gauge__label");
-  el1.append(" "," ",el2," ",el6," "," ",el7," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createGaugePwaComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("style");
-  el1.append("\n    .lh-gauge--pwa .lh-gauge--pwa__component {\n      display: none;\n    }\n    .lh-gauge--pwa__wrapper:not(.lh-badged--all) .lh-gauge--pwa__logo > path {\n      /* Gray logo unless everything is passing. */\n      fill: #B0B0B0;\n    }\n\n    .lh-gauge--pwa__disc {\n      fill: var(--color-gray-200);\n    }\n\n    .lh-gauge--pwa__logo--primary-color {\n      fill: #304FFE;\n    }\n\n    .lh-gauge--pwa__logo--secondary-color {\n      fill: #3D3D3D;\n    }\n    .lh-dark .lh-gauge--pwa__logo--secondary-color {\n      fill: #D8B6B6;\n    }\n\n    /* No passing groups. */\n    .lh-gauge--pwa__wrapper:not([class*='lh-badged--']) .lh-gauge--pwa__na-line {\n      display: inline;\n    }\n    /* Just optimized. Same n/a line as no passing groups. */\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-optimized:not(.lh-badged--pwa-installable) .lh-gauge--pwa__na-line {\n      display: inline;\n    }\n\n    /* Just installable. */\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-installable .lh-gauge--pwa__installable-badge {\n      display: inline;\n    }\n\n    /* All passing groups. */\n    .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {\n      display: inline;\n    }\n  ");
-  el0.append(el1);
-  const el2 = dom.createElement("a", "lh-gauge__wrapper lh-gauge--pwa__wrapper");
-  const el3 = dom.createElementNS("http://www.w3.org/2000/svg", "svg", "lh-gauge lh-gauge--pwa");
-  el3.setAttribute('viewBox', '0 0 60 60');
-  const el4 = dom.createElementNS("http://www.w3.org/2000/svg", "defs");
-  const el5 = dom.createElementNS("http://www.w3.org/2000/svg", "linearGradient");
-  el5.setAttribute('id', 'lh-gauge--pwa__check-circle__gradient');
-  el5.setAttribute('x1', '50%');
-  el5.setAttribute('y1', '0%');
-  el5.setAttribute('x2', '50%');
-  el5.setAttribute('y2', '100%');
-  const el6 = dom.createElementNS("http://www.w3.org/2000/svg", "stop");
-  el6.setAttribute('stop-color', '#00C852');
-  el6.setAttribute('offset', '0%');
-  const el7 = dom.createElementNS("http://www.w3.org/2000/svg", "stop");
-  el7.setAttribute('stop-color', '#009688');
-  el7.setAttribute('offset', '100%');
-  el5.append(" ",el6," ",el7," ");
-  const el8 = dom.createElementNS("http://www.w3.org/2000/svg", "linearGradient");
-  el8.setAttribute('id', 'lh-gauge--pwa__installable__shadow-gradient');
-  el8.setAttribute('x1', '76.056%');
-  el8.setAttribute('x2', '24.111%');
-  el8.setAttribute('y1', '82.995%');
-  el8.setAttribute('y2', '24.735%');
-  const el9 = dom.createElementNS("http://www.w3.org/2000/svg", "stop");
-  el9.setAttribute('stop-color', '#A5D6A7');
-  el9.setAttribute('offset', '0%');
-  const el10 = dom.createElementNS("http://www.w3.org/2000/svg", "stop");
-  el10.setAttribute('stop-color', '#80CBC4');
-  el10.setAttribute('offset', '100%');
-  el8.append(" ",el9," ",el10," ");
-  const el11 = dom.createElementNS("http://www.w3.org/2000/svg", "g");
-  el11.setAttribute('id', 'lh-gauge--pwa__installable-badge');
-  const el12 = dom.createElementNS("http://www.w3.org/2000/svg", "circle");
-  el12.setAttribute('fill', '#FFFFFF');
-  el12.setAttribute('cx', '10');
-  el12.setAttribute('cy', '10');
-  el12.setAttribute('r', '10');
-  const el13 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el13.setAttribute('fill', '#009688');
-  el13.setAttribute('d', 'M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z');
-  el11.append(" ",el12," ",el13," ");
-  el4.append(" ",el5," ",el8," ",el11," ");
-  const el14 = dom.createElementNS("http://www.w3.org/2000/svg", "g");
-  el14.setAttribute('stroke', 'none');
-  el14.setAttribute('fill-rule', 'nonzero');
-  const el15 = dom.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-gauge--pwa__disc");
-  el15.setAttribute('cx', '30');
-  el15.setAttribute('cy', '30');
-  el15.setAttribute('r', '30');
-  const el16 = dom.createElementNS("http://www.w3.org/2000/svg", "g", "lh-gauge--pwa__logo");
-  const el17 = dom.createElementNS("http://www.w3.org/2000/svg", "path", "lh-gauge--pwa__logo--secondary-color");
-  el17.setAttribute('d', 'M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z');
-  const el18 = dom.createElementNS("http://www.w3.org/2000/svg", "path", "lh-gauge--pwa__logo--primary-color");
-  el18.setAttribute('d', 'M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z');
-  const el19 = dom.createElementNS("http://www.w3.org/2000/svg", "path", "lh-gauge--pwa__logo--secondary-color");
-  el19.setAttribute('fill-rule', 'nonzero');
-  el19.setAttribute('d', 'M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z');
-  el16.append(" ",el17," ",el18," ",el19," ");
-  const el20 = dom.createElementNS("http://www.w3.org/2000/svg", "rect", "lh-gauge--pwa__component lh-gauge--pwa__na-line");
-  el20.setAttribute('fill', '#FFFFFF');
-  el20.setAttribute('x', '20');
-  el20.setAttribute('y', '32');
-  el20.setAttribute('width', '20');
-  el20.setAttribute('height', '4');
-  el20.setAttribute('rx', '2');
-  const el21 = dom.createElementNS("http://www.w3.org/2000/svg", "g", "lh-gauge--pwa__component lh-gauge--pwa__installable-badge");
-  el21.setAttribute('transform', 'translate(20, 29)');
-  const el22 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el22.setAttribute('fill', 'url(#lh-gauge--pwa__installable__shadow-gradient)');
-  el22.setAttribute('d', 'M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z');
-  const el23 = dom.createElementNS("http://www.w3.org/2000/svg", "use");
-  el23.setAttribute('href', '#lh-gauge--pwa__installable-badge');
-  el21.append(" ",el22," ",el23," ");
-  const el24 = dom.createElementNS("http://www.w3.org/2000/svg", "g", "lh-gauge--pwa__component lh-gauge--pwa__check-circle");
-  el24.setAttribute('transform', 'translate(18, 28)');
-  const el25 = dom.createElementNS("http://www.w3.org/2000/svg", "circle");
-  el25.setAttribute('fill', '#FFFFFF');
-  el25.setAttribute('cx', '12');
-  el25.setAttribute('cy', '12');
-  el25.setAttribute('r', '12');
-  const el26 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el26.setAttribute('fill', 'url(#lh-gauge--pwa__check-circle__gradient)');
-  el26.setAttribute('d', 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z');
-  el24.append(" ",el25," ",el26," ");
-  el14.append(" "," ",el15," ",el16," "," ",el20," "," ",el21," "," ",el24," ");
-  el3.append(" ",el4," ",el14," ");
-  const el27 = dom.createElement("div", "lh-gauge__label");
-  el2.append(" ",el3," ",el27," ");
-  el0.append(el2);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createHeadingComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("style");
-  el1.append("\n    /* CSS Fireworks. Originally by Eddie Lin\n       https://codepen.io/paulirish/pen/yEVMbP\n    */\n    .lh-pyro {\n      display: none;\n      z-index: 1;\n      pointer-events: none;\n    }\n    .lh-score100 .lh-pyro {\n      display: block;\n    }\n    .lh-score100 .lh-lighthouse stop:first-child {\n      stop-color: hsla(200, 12%, 95%, 0);\n    }\n    .lh-score100 .lh-lighthouse stop:last-child {\n      stop-color: hsla(65, 81%, 76%, 1);\n    }\n\n    .lh-pyro > .lh-pyro-before, .lh-pyro > .lh-pyro-after {\n      position: absolute;\n      width: 5px;\n      height: 5px;\n      border-radius: 2.5px;\n      box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;\n      animation: 1s bang ease-out infinite backwards,  1s gravity ease-in infinite backwards,  5s position linear infinite backwards;\n      animation-delay: 1s, 1s, 1s;\n    }\n\n    .lh-pyro > .lh-pyro-after {\n      animation-delay: 2.25s, 2.25s, 2.25s;\n      animation-duration: 1.25s, 1.25s, 6.25s;\n    }\n\n    @keyframes bang {\n      to {\n        opacity: 1;\n        box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;\n      }\n    }\n    @keyframes gravity {\n      from {\n        opacity: 1;\n      }\n      to {\n        transform: translateY(80px);\n        opacity: 0;\n      }\n    }\n    @keyframes position {\n      0%, 19.9% {\n        margin-top: 4%;\n        margin-left: 47%;\n      }\n      20%, 39.9% {\n        margin-top: 7%;\n        margin-left: 30%;\n      }\n      40%, 59.9% {\n        margin-top: 6%;\n        margin-left: 70%;\n      }\n      60%, 79.9% {\n        margin-top: 3%;\n        margin-left: 20%;\n      }\n      80%, 99.9% {\n        margin-top: 3%;\n        margin-left: 80%;\n      }\n    }\n  ");
-  el0.append(el1);
-  const el2 = dom.createElement("div", "lh-header-container");
-  const el3 = dom.createElement("div", "lh-scores-wrapper-placeholder");
-  el2.append(" ",el3," ");
-  el0.append(el2);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createMetricComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-metric");
-  const el2 = dom.createElement("div", "lh-metric__innerwrap");
-  const el3 = dom.createElement("div", "lh-metric__icon");
-  const el4 = dom.createElement("span", "lh-metric__title");
-  const el5 = dom.createElement("div", "lh-metric__value");
-  const el6 = dom.createElement("div", "lh-metric__description");
-  el2.append(" ",el3," ",el4," ",el5," ",el6," ");
-  el1.append(" ",el2," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createOpportunityComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-audit lh-audit--load-opportunity");
-  const el2 = dom.createElement("details", "lh-expandable-details");
-  const el3 = dom.createElement("summary");
-  const el4 = dom.createElement("div", "lh-audit__header");
-  const el5 = dom.createElement("div", "lh-load-opportunity__cols");
-  const el6 = dom.createElement("div", "lh-load-opportunity__col lh-load-opportunity__col--one");
-  const el7 = dom.createElement("span", "lh-audit__score-icon");
-  const el8 = dom.createElement("div", "lh-audit__title");
-  el6.append(" ",el7," ",el8," ");
-  const el9 = dom.createElement("div", "lh-load-opportunity__col lh-load-opportunity__col--two");
-  const el10 = dom.createElement("div", "lh-load-opportunity__sparkline");
-  const el11 = dom.createElement("div", "lh-sparkline");
-  const el12 = dom.createElement("div", "lh-sparkline__bar");
-  el11.append(el12);
-  el10.append(" ",el11," ");
-  const el13 = dom.createElement("div", "lh-audit__display-text");
-  const el14 = dom.createElement("div", "lh-chevron-container");
-  el9.append(" ",el10," ",el13," ",el14," ");
-  el5.append(" ",el6," ",el9," ");
-  el4.append(" ",el5," ");
-  el3.append(" ",el4," ");
-  const el15 = dom.createElement("div", "lh-audit__description");
-  const el16 = dom.createElement("div", "lh-audit__stackpacks");
-  el2.append(" ",el3," ",el15," ",el16," ");
-  el1.append(" ",el2," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createOpportunityHeaderComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-load-opportunity__header lh-load-opportunity__cols");
-  const el2 = dom.createElement("div", "lh-load-opportunity__col lh-load-opportunity__col--one");
-  const el3 = dom.createElement("div", "lh-load-opportunity__col lh-load-opportunity__col--two");
-  el1.append(" ",el2," ",el3," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createScorescaleComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-scorescale");
-  const el2 = dom.createElement("span", "lh-scorescale-range lh-scorescale-range--fail");
-  el2.append("0–49");
-  const el3 = dom.createElement("span", "lh-scorescale-range lh-scorescale-range--average");
-  el3.append("50–89");
-  const el4 = dom.createElement("span", "lh-scorescale-range lh-scorescale-range--pass");
-  el4.append("90–100");
-  el1.append(" ",el2," ",el3," ",el4," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createScoresWrapperComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("style");
-  el1.append("\n    .lh-scores-container {\n      display: flex;\n      flex-direction: column;\n      padding: var(--default-padding) 0;\n      position: relative;\n      width: 100%;\n    }\n\n    .lh-sticky-header {\n      --gauge-circle-size: var(--gauge-circle-size-sm);\n      --plugin-badge-size: 16px;\n      --plugin-icon-size: 75%;\n      --gauge-wrapper-width: 60px;\n      --gauge-percentage-font-size: 13px;\n      position: fixed;\n      left: 0;\n      right: 0;\n      top: var(--topbar-height);\n      font-weight: 500;\n      display: none;\n      justify-content: center;\n      background-color: var(--sticky-header-background-color);\n      border-bottom: 1px solid var(--color-gray-200);\n      padding-top: var(--score-container-padding);\n      padding-bottom: 4px;\n      z-index: 1;\n      pointer-events: none;\n    }\n\n    .lh-devtools .lh-sticky-header {\n      /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change `position` to `sticky.` */\n      position: sticky;\n    }\n\n    .lh-sticky-header--visible {\n      display: grid;\n      grid-auto-flow: column;\n      pointer-events: auto;\n    }\n\n    /* Disable the gauge arc animation for the sticky header, so toggling display: none\n       does not play the animation. */\n    .lh-sticky-header .lh-gauge-arc {\n      animation: none;\n    }\n\n    .lh-sticky-header .lh-gauge__label,\n    .lh-sticky-header .lh-fraction__label {\n      display: none;\n    }\n\n    .lh-highlighter {\n      width: var(--gauge-wrapper-width);\n      height: 1px;\n      background-color: var(--highlighter-background-color);\n      /* Position at bottom of first gauge in sticky header. */\n      position: absolute;\n      grid-column: 1;\n      bottom: -1px;\n    }\n\n    .lh-gauge__wrapper:first-of-type {\n      contain: none;\n    }\n  ");
-  el0.append(el1);
-  const el2 = dom.createElement("div", "lh-scores-wrapper");
-  const el3 = dom.createElement("div", "lh-scores-container");
-  const el4 = dom.createElement("div", "lh-pyro");
-  const el5 = dom.createElement("div", "lh-pyro-before");
-  const el6 = dom.createElement("div", "lh-pyro-after");
-  el4.append(" ",el5," ",el6," ");
-  el3.append(" ",el4," ");
-  el2.append(" ",el3," ");
-  el0.append(el2);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createSnippetComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-snippet");
-  const el2 = dom.createElement("style");
-  el2.append("\n          :root {\n            --snippet-highlight-light: #fbf1f2;\n            --snippet-highlight-dark: #ffd6d8;\n          }\n\n         .lh-snippet__header {\n          position: relative;\n          overflow: hidden;\n          padding: 10px;\n          border-bottom: none;\n          color: var(--snippet-color);\n          background-color: var(--snippet-background-color);\n          border: 1px solid var(--report-border-color-secondary);\n        }\n        .lh-snippet__title {\n          font-weight: bold;\n          float: left;\n        }\n        .lh-snippet__node {\n          float: left;\n          margin-left: 4px;\n        }\n        .lh-snippet__toggle-expand {\n          padding: 1px 7px;\n          margin-top: -1px;\n          margin-right: -7px;\n          float: right;\n          background: transparent;\n          border: none;\n          cursor: pointer;\n          font-size: 14px;\n          color: #0c50c7;\n        }\n\n        .lh-snippet__snippet {\n          overflow: auto;\n          border: 1px solid var(--report-border-color-secondary);\n        }\n        /* Container needed so that all children grow to the width of the scroll container */\n        .lh-snippet__snippet-inner {\n          display: inline-block;\n          min-width: 100%;\n        }\n\n        .lh-snippet:not(.lh-snippet--expanded) .lh-snippet__show-if-expanded {\n          display: none;\n        }\n        .lh-snippet.lh-snippet--expanded .lh-snippet__show-if-collapsed {\n          display: none;\n        }\n\n        .lh-snippet__line {\n          background: white;\n          white-space: pre;\n          display: flex;\n        }\n        .lh-snippet__line:not(.lh-snippet__line--message):first-child {\n          padding-top: 4px;\n        }\n        .lh-snippet__line:not(.lh-snippet__line--message):last-child {\n          padding-bottom: 4px;\n        }\n        .lh-snippet__line--content-highlighted {\n          background: var(--snippet-highlight-dark);\n        }\n        .lh-snippet__line--message {\n          background: var(--snippet-highlight-light);\n        }\n        .lh-snippet__line--message .lh-snippet__line-number {\n          padding-top: 10px;\n          padding-bottom: 10px;\n        }\n        .lh-snippet__line--message code {\n          padding: 10px;\n          padding-left: 5px;\n          color: var(--color-fail);\n          font-family: var(--report-font-family);\n        }\n        .lh-snippet__line--message code {\n          white-space: normal;\n        }\n        .lh-snippet__line-icon {\n          padding-top: 10px;\n          display: none;\n        }\n        .lh-snippet__line--message .lh-snippet__line-icon {\n          display: block;\n        }\n        .lh-snippet__line-icon:before {\n          content: \"\";\n          display: inline-block;\n          vertical-align: middle;\n          margin-right: 4px;\n          width: var(--score-icon-size);\n          height: var(--score-icon-size);\n          background-image: var(--fail-icon-url);\n        }\n        .lh-snippet__line-number {\n          flex-shrink: 0;\n          width: 40px;\n          text-align: right;\n          font-family: monospace;\n          padding-right: 5px;\n          margin-right: 5px;\n          color: var(--color-gray-600);\n          user-select: none;\n        }\n    ");
-  el1.append(" ",el2," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createSnippetContentComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-snippet__snippet");
-  const el2 = dom.createElement("div", "lh-snippet__snippet-inner");
-  el1.append(" ",el2," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createSnippetHeaderComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-snippet__header");
-  const el2 = dom.createElement("div", "lh-snippet__title");
-  const el3 = dom.createElement("div", "lh-snippet__node");
-  const el4 = dom.createElement("button", "lh-snippet__toggle-expand");
-  const el5 = dom.createElement("span", "lh-snippet__btn-label-collapse lh-snippet__show-if-expanded");
-  const el6 = dom.createElement("span", "lh-snippet__btn-label-expand lh-snippet__show-if-collapsed");
-  el4.append(" ",el5," ",el6," ");
-  el1.append(" ",el2," ",el3," ",el4," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createSnippetLineComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-snippet__line");
-  const el2 = dom.createElement("div", "lh-snippet__line-number");
-  const el3 = dom.createElement("div", "lh-snippet__line-icon");
-  const el4 = dom.createElement("code");
-  el1.append(" ",el2," ",el3," ",el4," ");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createStylesComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("style");
-  el1.append("/**\n * @license\n * Copyright 2017 The Lighthouse Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS-IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n  Naming convention:\n\n  If a variable is used for a specific component: --{component}-{property name}-{modifier}\n\n  Both {component} and {property name} should be kebab-case. If the target is the entire page,\n  use 'report' for the component. The property name should not be abbreviated. Use the\n  property name the variable is intended for - if it's used for multiple, a common descriptor\n  is fine (ex: 'size' for a variable applied to 'width' and 'height'). If a variable is shared\n  across multiple components, either create more variables or just drop the \"{component}-\"\n  part of the name. Append any modifiers at the end (ex: 'big', 'dark').\n\n  For colors: --color-{hue}-{intensity}\n\n  {intensity} is the Material Design tag - 700, A700, etc.\n*/\n.lh-vars {\n  /* Palette using Material Design Colors\n   * https://www.materialui.co/colors */\n  --color-amber-50: #FFF8E1;\n  --color-blue-200: #90CAF9;\n  --color-blue-900: #0D47A1;\n  --color-blue-A700: #2962FF;\n  --color-blue-primary: #06f;\n  --color-cyan-500: #00BCD4;\n  --color-gray-100: #F5F5F5;\n  --color-gray-300: #CFCFCF;\n  --color-gray-200: #E0E0E0;\n  --color-gray-400: #BDBDBD;\n  --color-gray-50: #FAFAFA;\n  --color-gray-500: #9E9E9E;\n  --color-gray-600: #757575;\n  --color-gray-700: #616161;\n  --color-gray-800: #424242;\n  --color-gray-900: #212121;\n  --color-gray: #000000;\n  --color-green-700: #080;\n  --color-green: #0c6;\n  --color-lime-400: #D3E156;\n  --color-orange-50: #FFF3E0;\n  --color-orange-700: #C33300;\n  --color-orange: #fa3;\n  --color-red-700: #c00;\n  --color-red: #f33;\n  --color-teal-600: #00897B;\n  --color-white: #FFFFFF;\n\n  /* Context-specific colors */\n  --color-average-secondary: var(--color-orange-700);\n  --color-average: var(--color-orange);\n  --color-fail-secondary: var(--color-red-700);\n  --color-fail: var(--color-red);\n  --color-hover: var(--color-gray-50);\n  --color-informative: var(--color-blue-900);\n  --color-pass-secondary: var(--color-green-700);\n  --color-pass: var(--color-green);\n  --color-not-applicable: var(--color-gray-600);\n\n  /* Component variables */\n  --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));\n  --audit-explanation-line-height: 16px;\n  --audit-group-margin-bottom: calc(var(--default-padding) * 6);\n  --audit-group-padding-vertical: 8px;\n  --audit-margin-horizontal: 5px;\n  --audit-padding-vertical: 8px;\n  --category-padding: calc(var(--default-padding) * 6) var(--edge-gap-padding) calc(var(--default-padding) * 4);\n  --chevron-line-stroke: var(--color-gray-600);\n  --chevron-size: 12px;\n  --default-padding: 8px;\n  --edge-gap-padding: calc(var(--default-padding) * 4);\n  --env-item-background-color: var(--color-gray-100);\n  --env-item-font-size: 28px;\n  --env-item-line-height: 36px;\n  --env-item-padding: 10px 0px;\n  --env-name-min-width: 220px;\n  --footer-padding-vertical: 16px;\n  --gauge-circle-size-big: 96px;\n  --gauge-circle-size: 48px;\n  --gauge-circle-size-sm: 32px;\n  --gauge-label-font-size-big: 18px;\n  --gauge-label-font-size: var(--report-font-size-secondary);\n  --gauge-label-line-height-big: 24px;\n  --gauge-label-line-height: var(--report-line-height-secondary);\n  --gauge-percentage-font-size-big: 38px;\n  --gauge-percentage-font-size: var(--report-font-size-secondary);\n  --gauge-wrapper-width: 120px;\n  --header-line-height: 24px;\n  --highlighter-background-color: var(--report-text-color);\n  --icon-square-size: calc(var(--score-icon-size) * 0.88);\n  --image-preview-size: 48px;\n  --link-color: var(--color-blue-primary);\n  --locale-selector-background-color: var(--color-white);\n  --metric-toggle-lines-fill: #7F7F7F;\n  --metric-value-font-size: calc(var(--report-font-size) * 1.8);\n  --metrics-toggle-background-color: var(--color-gray-200);\n  --plugin-badge-background-color: var(--color-white);\n  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);\n  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);\n  --plugin-icon-size: 65%;\n  --pwa-icon-margin: 0 var(--default-padding);\n  --pwa-icon-size: var(--topbar-logo-size);\n  --report-background-color: #fff;\n  --report-border-color-secondary: #ebebeb;\n  --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;\n  --report-font-family: Roboto, Helvetica, Arial, sans-serif;\n  --report-font-size: 14px;\n  --report-font-size-secondary: 12px;\n  --report-icon-size: var(--score-icon-background-size);\n  --report-line-height: 24px;\n  --report-line-height-secondary: 20px;\n  --report-monospace-font-size: calc(var(--report-font-size) * 0.85);\n  --report-text-color-secondary: var(--color-gray-800);\n  --report-text-color: var(--color-gray-900);\n  --report-content-max-width: calc(60 * var(--report-font-size)); /* defaults to 840px */\n  --report-content-min-width: 360px;\n  --report-content-max-width-minus-edge-gap: calc(var(--report-content-max-width) - var(--edge-gap-padding) * 2);\n  --score-container-padding: 8px;\n  --score-icon-background-size: 24px;\n  --score-icon-margin-left: 6px;\n  --score-icon-margin-right: 14px;\n  --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);\n  --score-icon-size: 12px;\n  --score-icon-size-big: 16px;\n  --screenshot-overlay-background: rgba(0, 0, 0, 0.3);\n  --section-padding-vertical: calc(var(--default-padding) * 6);\n  --snippet-background-color: var(--color-gray-50);\n  --snippet-color: #0938C2;\n  --sparkline-height: 5px;\n  --stackpack-padding-horizontal: 10px;\n  --sticky-header-background-color: var(--report-background-color);\n  --sticky-header-buffer: calc(var(--topbar-height) + var(--sticky-header-height));\n  --sticky-header-height: calc(var(--gauge-circle-size-sm) + var(--score-container-padding) * 2);\n  --table-group-header-background-color: #EEF1F4;\n  --table-group-header-text-color: var(--color-gray-700);\n  --table-higlight-background-color: #F5F7FA;\n  --tools-icon-color: var(--color-gray-600);\n  --topbar-background-color: var(--color-white);\n  --topbar-height: 32px;\n  --topbar-logo-size: 24px;\n  --topbar-padding: 0 8px;\n  --toplevel-warning-background-color: hsla(30, 100%, 75%, 10%);\n  --toplevel-warning-message-text-color: var(--color-average-secondary);\n  --toplevel-warning-padding: 18px;\n  --toplevel-warning-text-color: var(--report-text-color);\n\n  /* SVGs */\n  --plugin-icon-url-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23FFFFFF\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>');\n  --plugin-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23757575\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>');\n\n  --pass-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>check</title><path fill=\"%23178239\" d=\"M24 4C12.95 4 4 12.95 4 24c0 11.04 8.95 20 20 20 11.04 0 20-8.96 20-20 0-11.05-8.96-20-20-20zm-4 30L10 24l2.83-2.83L20 28.34l15.17-15.17L38 16 20 34z\"/></svg>');\n  --average-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>info</title><path fill=\"%23E67700\" d=\"M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z\"/></svg>');\n  --fail-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>warn</title><path fill=\"%23C7221F\" d=\"M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z\"/></svg>');\n  --error-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 3 15\"><title>error</title><path d=\"M0 15H 3V 12H 0V\" fill=\"%23FF4E42\"/><path d=\"M0 9H 3V 0H 0V\" fill=\"%23FF4E42\"/></svg>');\n\n  --pwa-installable-gray-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"nonzero\"><circle fill=\"%23DAE0E3\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-optimized-gray-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%23DAE0E3\" width=\"24\" height=\"24\" rx=\"12\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/><path d=\"M5 5h14v14H5z\"/></g></svg>');\n\n  --pwa-installable-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"nonzero\"><circle fill=\"%23424242\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-optimized-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%23424242\" width=\"24\" height=\"24\" rx=\"12\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/><path d=\"M5 5h14v14H5z\"/></g></svg>');\n\n  --pwa-installable-color-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-rule=\"nonzero\" fill=\"none\"><circle fill=\"%230CCE6B\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-optimized-color-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%230CCE6B\" width=\"24\" height=\"24\" rx=\"12\"/><path d=\"M5 5h14v14H5z\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/></g></svg>');\n\n  --swap-locale-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z\"/></svg>');\n}\n\n@media not print {\n  .lh-dark {\n    /* Pallete */\n    --color-gray-200: var(--color-gray-800);\n    --color-gray-300: #616161;\n    --color-gray-400: var(--color-gray-600);\n    --color-gray-700: var(--color-gray-400);\n    --color-gray-50: #757575;\n    --color-gray-600: var(--color-gray-500);\n    --color-green-700: var(--color-green);\n    --color-orange-700: var(--color-orange);\n    --color-red-700: var(--color-red);\n    --color-teal-600: var(--color-cyan-500);\n\n    /* Context-specific colors */\n    --color-hover: rgba(0, 0, 0, 0.2);\n    --color-informative: var(--color-blue-200);\n\n    /* Component variables */\n    --env-item-background-color: #393535;\n    --link-color: var(--color-blue-200);\n    --locale-selector-background-color: var(--color-gray-200);\n    --plugin-badge-background-color: var(--color-gray-800);\n    --report-background-color: var(--color-gray-900);\n    --report-border-color-secondary: var(--color-gray-200);\n    --report-text-color-secondary: var(--color-gray-400);\n    --report-text-color: var(--color-gray-100);\n    --snippet-color: var(--color-cyan-500);\n    --topbar-background-color: var(--color-gray);\n    --toplevel-warning-background-color: hsl(33deg 14% 18%);\n    --toplevel-warning-message-text-color: var(--color-orange-700);\n    --toplevel-warning-text-color: var(--color-gray-100);\n    --table-group-header-background-color: rgba(186, 196, 206, 0.15);\n    --table-group-header-text-color: var(--color-gray-100);\n    --table-higlight-background-color: rgba(186, 196, 206, 0.09);\n\n    /* SVGs */\n    --plugin-icon-url: var(--plugin-icon-url-dark);\n    --pwa-installable-gray-url: var(--pwa-installable-gray-url-dark);\n    --pwa-optimized-gray-url: var(--pwa-optimized-gray-url-dark);\n  }\n}\n\n@media only screen and (max-width: 480px) {\n  .lh-vars {\n    --audit-group-margin-bottom: 20px;\n    --edge-gap-padding: var(--default-padding);\n    --env-name-min-width: 120px;\n    --gauge-circle-size-big: 96px;\n    --gauge-circle-size: 72px;\n    --gauge-label-font-size-big: 22px;\n    --gauge-label-font-size: 14px;\n    --gauge-label-line-height-big: 26px;\n    --gauge-label-line-height: 20px;\n    --gauge-percentage-font-size-big: 34px;\n    --gauge-percentage-font-size: 26px;\n    --gauge-wrapper-width: 112px;\n    --header-padding: 16px 0 16px 0;\n    --image-preview-size: 24px;\n    --plugin-icon-size: 75%;\n    --pwa-icon-margin: 0 7px 0 -3px;\n    --report-font-size: 14px;\n    --report-line-height: 20px;\n    --score-icon-margin-left: 2px;\n    --score-icon-size: 10px;\n    --topbar-height: 28px;\n    --topbar-logo-size: 20px;\n  }\n\n  /* Not enough space to adequately show the relative savings bars. */\n  .lh-sparkline {\n    display: none;\n  }\n}\n\n.lh-vars.lh-devtools {\n  --audit-explanation-line-height: 14px;\n  --audit-group-margin-bottom: 20px;\n  --audit-group-padding-vertical: 12px;\n  --audit-padding-vertical: 4px;\n  --category-padding: 12px;\n  --default-padding: 12px;\n  --env-name-min-width: 120px;\n  --footer-padding-vertical: 8px;\n  --gauge-circle-size-big: 72px;\n  --gauge-circle-size: 64px;\n  --gauge-label-font-size-big: 22px;\n  --gauge-label-font-size: 14px;\n  --gauge-label-line-height-big: 26px;\n  --gauge-label-line-height: 20px;\n  --gauge-percentage-font-size-big: 34px;\n  --gauge-percentage-font-size: 26px;\n  --gauge-wrapper-width: 97px;\n  --header-line-height: 20px;\n  --header-padding: 16px 0 16px 0;\n  --screenshot-overlay-background: transparent;\n  --plugin-icon-size: 75%;\n  --pwa-icon-margin: 0 7px 0 -3px;\n  --report-font-family-monospace: 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;\n  --report-font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;\n  --report-font-size: 12px;\n  --report-line-height: 20px;\n  --score-icon-margin-left: 2px;\n  --score-icon-size: 10px;\n  --section-padding-vertical: 8px;\n}\n\n.lh-container:not(.lh-topbar + .lh-container) {\n  --topbar-height: 0;\n  --sticky-header-height: 0;\n  --sticky-header-buffer: 0;\n}\n\n.lh-devtools.lh-root {\n  height: 100%;\n}\n.lh-devtools.lh-root img {\n  /* Override devtools default 'min-width: 0' so svg without size in a flexbox isn't collapsed. */\n  min-width: auto;\n}\n.lh-devtools .lh-container {\n  overflow-y: scroll;\n  height: calc(100% - var(--topbar-height));\n  /** The .lh-container is the scroll parent in DevTools so we exclude the topbar from the sticky header buffer. */\n  --sticky-header-buffer: calc(var(--sticky-header-height));\n}\n@media print {\n  .lh-devtools .lh-container {\n    overflow: unset;\n  }\n}\n.lh-devtools .lh-sticky-header {\n  /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container` */\n  top: 0;\n}\n.lh-devtools .lh-element-screenshot__overlay {\n  position: absolute;\n}\n\n@keyframes fadeIn {\n  0% { opacity: 0;}\n  100% { opacity: 0.6;}\n}\n\n.lh-root *, .lh-root *::before, .lh-root *::after {\n  box-sizing: border-box;\n}\n\n.lh-root {\n  font-family: var(--report-font-family);\n  font-size: var(--report-font-size);\n  margin: 0;\n  line-height: var(--report-line-height);\n  background: var(--report-background-color);\n  color: var(--report-text-color);\n}\n\n.lh-root :focus-visible {\n    outline: -webkit-focus-ring-color auto 3px;\n}\n.lh-root summary:focus {\n    outline: none;\n    box-shadow: 0 0 0 1px hsl(217, 89%, 61%);\n}\n\n.lh-root [hidden] {\n  display: none !important;\n}\n\n.lh-root pre {\n  margin: 0;\n}\n\n.lh-root pre,\n.lh-root code {\n  font-family: var(--report-font-family-monospace);\n}\n\n.lh-root details > summary {\n  cursor: pointer;\n}\n\n.lh-hidden {\n  display: none !important;\n}\n\n.lh-container {\n  /*\n  Text wrapping in the report is so much FUN!\n  We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely\n  long non-breakable text (usually URLs) found in:\n    1. The footer\n    2. .lh-node (outerHTML)\n    3. .lh-code\n\n  With that sorted, the next challenge is appropriate column sizing and text wrapping inside our\n  .lh-details tables. Even more fun.\n    * We don't want table headers (\"Potential Savings (ms)\") to wrap or their column values, but\n    we'd be happy for the URL column to wrap if the URLs are particularly long.\n    * We want the narrow columns to remain narrow, providing the most column width for URL\n    * We don't want the table to extend past 100% width.\n    * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters,\n      but they do not get any overflow:ellipsis treatment.\n  */\n  word-break: break-word;\n}\n\n.lh-audit-group a,\n.lh-category-header__description a,\n.lh-audit__description a,\n.lh-warnings a,\n.lh-footer a,\n.lh-table-column--link a {\n  color: var(--link-color);\n}\n\n.lh-audit__description, .lh-audit__stackpack {\n  --inner-audit-padding-right: var(--stackpack-padding-horizontal);\n  padding-left: var(--audit-description-padding-left);\n  padding-right: var(--inner-audit-padding-right);\n  padding-top: 8px;\n  padding-bottom: 8px;\n}\n\n.lh-details {\n  margin-top: var(--default-padding);\n  margin-bottom: var(--default-padding);\n  margin-left: var(--audit-description-padding-left);\n  /* whatever the .lh-details side margins are */\n  width: 100%;\n}\n\n.lh-audit__stackpack {\n  display: flex;\n  align-items: center;\n}\n\n.lh-audit__stackpack__img {\n  max-width: 30px;\n  margin-right: var(--default-padding)\n}\n\n/* Report header */\n\n.lh-report-icon {\n  display: flex;\n  align-items: center;\n  padding: 10px 12px;\n  cursor: pointer;\n}\n.lh-report-icon[disabled] {\n  opacity: 0.3;\n  pointer-events: none;\n}\n\n.lh-report-icon::before {\n  content: \"\";\n  margin: 4px;\n  background-repeat: no-repeat;\n  width: var(--report-icon-size);\n  height: var(--report-icon-size);\n  opacity: 0.7;\n  display: inline-block;\n  vertical-align: middle;\n}\n.lh-report-icon:hover::before {\n  opacity: 1;\n}\n.lh-dark .lh-report-icon::before {\n  filter: invert(1);\n}\n.lh-report-icon--print::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\"/><path fill=\"none\" d=\"M0 0h24v24H0z\"/></svg>');\n}\n.lh-report-icon--copy::before {\n  background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/></svg>');\n}\n.lh-report-icon--open::before {\n  background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z\"/></svg>');\n}\n.lh-report-icon--download::before {\n  background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>');\n}\n.lh-report-icon--dark::before {\n  background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 100 125\"><path d=\"M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z\"/></svg>');\n}\n.lh-report-icon--treemap::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"black\"><path d=\"M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z\"/></svg>');\n}\n.lh-report-icon--date::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 11h2v2H7v-2zm14-5v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h1V2h2v2h8V2h2v2h1a2 2 0 012 2zM5 8h14V6H5v2zm14 12V10H5v10h14zm-4-7h2v-2h-2v2zm-4 0h2v-2h-2v2z\"/></svg>');\n}\n.lh-report-icon--devices::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 6h18V4H4a2 2 0 00-2 2v11H0v3h14v-3H4V6zm19 2h-6a1 1 0 00-1 1v10c0 .6.5 1 1 1h6c.6 0 1-.5 1-1V9c0-.6-.5-1-1-1zm-1 9h-4v-7h4v7z\"/></svg>');\n}\n.lh-report-icon--world::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm7 6h-3c-.3-1.3-.8-2.5-1.4-3.6A8 8 0 0 1 18.9 8zm-7-4a14 14 0 0 1 2 4h-4a14 14 0 0 1 2-4zM4.3 14a8.2 8.2 0 0 1 0-4h3.3a16.5 16.5 0 0 0 0 4H4.3zm.8 2h3a14 14 0 0 0 1.3 3.6A8 8 0 0 1 5.1 16zm3-8H5a8 8 0 0 1 4.3-3.6L8 8zM12 20a14 14 0 0 1-2-4h4a14 14 0 0 1-2 4zm2.3-6H9.7a14.7 14.7 0 0 1 0-4h4.6a14.6 14.6 0 0 1 0 4zm.3 5.6c.6-1.2 1-2.4 1.4-3.6h3a8 8 0 0 1-4.4 3.6zm1.8-5.6a16.5 16.5 0 0 0 0-4h3.3a8.2 8.2 0 0 1 0 4h-3.3z\"/></svg>');\n}\n.lh-report-icon--stopwatch::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.1-6.6L20.5 6l-1.4-1.4L17.7 6A9 9 0 0 0 3 13a9 9 0 1 0 16-5.6zm-7 12.6a7 7 0 1 1 0-14 7 7 0 0 1 0 14z\"/></svg>');\n}\n.lh-report-icon--networkspeed::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.9 5c-.2 0-.3 0-.4.2v.2L10.1 17a2 2 0 0 0-.2 1 2 2 0 0 0 4 .4l2.4-12.9c0-.3-.2-.5-.5-.5zM1 9l2 2c2.9-2.9 6.8-4 10.5-3.6l1.2-2.7C10 3.8 4.7 5.3 1 9zm20 2 2-2a15.4 15.4 0 0 0-5.6-3.6L17 8.2c1.5.7 2.9 1.6 4.1 2.8zm-4 4 2-2a9.9 9.9 0 0 0-2.7-1.9l-.5 3 1.2.9zM5 13l2 2a7.1 7.1 0 0 1 4-2l1.3-2.9C9.7 10.1 7 11 5 13z\"/></svg>');\n}\n.lh-report-icon--samples-one::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><circle cx=\"7\" cy=\"14\" r=\"3\"/><path d=\"M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/></svg>');\n}\n.lh-report-icon--samples-many::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/><circle cx=\"7\" cy=\"14\" r=\"3\"/><circle cx=\"11\" cy=\"6\" r=\"3\"/></svg>');\n}\n.lh-report-icon--chrome::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-50 -50 562 562\"><path d=\"M256 25.6v25.6a204 204 0 0 1 144.8 60 204 204 0 0 1 60 144.8 204 204 0 0 1-60 144.8 204 204 0 0 1-144.8 60 204 204 0 0 1-144.8-60 204 204 0 0 1-60-144.8 204 204 0 0 1 60-144.8 204 204 0 0 1 144.8-60V0a256 256 0 1 0 0 512 256 256 0 0 0 0-512v25.6z\"/><path d=\"M256 179.2v25.6a51.3 51.3 0 0 1 0 102.4 51.3 51.3 0 0 1 0-102.4v-51.2a102.3 102.3 0 1 0-.1 204.7 102.3 102.3 0 0 0 .1-204.7v25.6z\"/><path d=\"M256 204.8h217.6a25.6 25.6 0 0 0 0-51.2H256a25.6 25.6 0 0 0 0 51.2m44.3 76.8L191.5 470.1a25.6 25.6 0 1 0 44.4 25.6l108.8-188.5a25.6 25.6 0 1 0-44.4-25.6m-88.6 0L102.9 93.2a25.7 25.7 0 0 0-35-9.4 25.7 25.7 0 0 0-9.4 35l108.8 188.5a25.7 25.7 0 0 0 35 9.4 25.9 25.9 0 0 0 9.4-35.1\"/></svg>');\n}\n.lh-report-icon--external::before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.15 11.9a1.01 1.01 0 0 1-.743-.307 1.01 1.01 0 0 1-.306-.743v-7.7c0-.292.102-.54.306-.744a1.01 1.01 0 0 1 .744-.306H7v1.05H3.15v7.7h7.7V7h1.05v3.85c0 .291-.103.54-.307.743a1.01 1.01 0 0 1-.743.307h-7.7Zm2.494-2.8-.743-.744 5.206-5.206H8.401V2.1h3.5v3.5h-1.05V3.893L5.644 9.1Z\"/></svg>');\n}\n\n.lh-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  margin: var(--default-padding) 0;\n}\n.lh-button {\n  height: 32px;\n  border: 1px solid var(--report-border-color-secondary);\n  border-radius: 3px;\n  color: var(--link-color);\n  background-color: var(--report-background-color);\n  margin: 5px;\n}\n\n.lh-button:first-of-type {\n  margin-left: 0;\n}\n\n/* Node */\n.lh-node__snippet {\n  font-family: var(--report-font-family-monospace);\n  color: var(--snippet-color);\n  font-size: var(--report-monospace-font-size);\n  line-height: 20px;\n}\n\n/* Score */\n\n.lh-audit__score-icon {\n  width: var(--score-icon-size);\n  height: var(--score-icon-size);\n  margin: var(--score-icon-margin);\n}\n\n.lh-audit--pass .lh-audit__display-text {\n  color: var(--color-pass-secondary);\n}\n.lh-audit--pass .lh-audit__score-icon,\n.lh-scorescale-range--pass::before {\n  border-radius: 100%;\n  background: var(--color-pass);\n}\n\n.lh-audit--average .lh-audit__display-text {\n  color: var(--color-average-secondary);\n}\n.lh-audit--average .lh-audit__score-icon,\n.lh-scorescale-range--average::before {\n  background: var(--color-average);\n  width: var(--icon-square-size);\n  height: var(--icon-square-size);\n}\n\n.lh-audit--fail .lh-audit__display-text {\n  color: var(--color-fail-secondary);\n}\n.lh-audit--fail .lh-audit__score-icon,\n.lh-audit--error .lh-audit__score-icon,\n.lh-scorescale-range--fail::before {\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\n}\n\n.lh-audit--error .lh-audit__score-icon,\n.lh-metric--error .lh-metric__icon {\n  background-image: var(--error-icon-url);\n  background-repeat: no-repeat;\n  background-position: center;\n  border: none;\n}\n\n.lh-gauge__wrapper--fail .lh-gauge--error {\n  background-image: var(--error-icon-url);\n  background-repeat: no-repeat;\n  background-position: center;\n  transform: scale(0.5);\n  top: var(--score-container-padding);\n}\n\n.lh-audit--manual .lh-audit__display-text,\n.lh-audit--notapplicable .lh-audit__display-text {\n  color: var(--color-gray-600);\n}\n.lh-audit--manual .lh-audit__score-icon,\n.lh-audit--notapplicable .lh-audit__score-icon {\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\n  border-radius: 100%;\n  background: none;\n}\n\n.lh-audit--informative .lh-audit__display-text {\n  color: var(--color-gray-600);\n}\n\n.lh-audit--informative .lh-audit__score-icon {\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\n  border-radius: 100%;\n}\n\n.lh-audit__description,\n.lh-audit__stackpack {\n  color: var(--report-text-color-secondary);\n}\n.lh-audit__adorn {\n  border: 1px solid var(--color-gray-500);\n  border-radius: 3px;\n  margin: 0 3px;\n  padding: 0 2px;\n  line-height: 1.1;\n  display: inline-block;\n  font-size: 90%;\n  color: var(--report-text-color-secondary);\n}\n\n.lh-category-header__description  {\n  text-align: center;\n  color: var(--color-gray-700);\n  margin: 0px auto;\n  max-width: 400px;\n}\n\n\n.lh-audit__display-text,\n.lh-load-opportunity__sparkline,\n.lh-chevron-container {\n  margin: 0 var(--audit-margin-horizontal);\n}\n.lh-chevron-container {\n  margin-right: 0;\n}\n\n.lh-audit__title-and-text {\n  flex: 1;\n}\n\n.lh-audit__title-and-text code {\n  color: var(--snippet-color);\n  font-size: var(--report-monospace-font-size);\n}\n\n/* Prepend display text with em dash separator. But not in Opportunities. */\n.lh-audit__display-text:not(:empty):before {\n  content: '—';\n  margin-right: var(--audit-margin-horizontal);\n}\n.lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before {\n  display: none;\n}\n\n/* Expandable Details (Audit Groups, Audits) */\n.lh-audit__header {\n  display: flex;\n  align-items: center;\n  padding: var(--default-padding);\n}\n\n.lh-audit--load-opportunity .lh-audit__header {\n  display: block;\n}\n\n\n.lh-metricfilter {\n  display: grid;\n  justify-content: end;\n  align-items: center;\n  grid-auto-flow: column;\n  gap: 4px;\n  color: var(--color-gray-700);\n}\n\n.lh-metricfilter__radio {\n  /*\n   * Instead of hiding, position offscreen so it's still accessible to screen readers\n   * https://bugs.chromium.org/p/chromium/issues/detail?id=1439785\n   */\n  position: fixed;\n  left: -9999px;\n}\n.lh-metricfilter input[type='radio']:focus-visible + label {\n  outline: -webkit-focus-ring-color auto 1px;\n}\n\n.lh-metricfilter__label {\n  display: inline-flex;\n  padding: 0 4px;\n  height: 16px;\n  text-decoration: underline;\n  align-items: center;\n  cursor: pointer;\n  font-size: 90%;\n}\n\n.lh-metricfilter__label--active {\n  background: var(--color-blue-primary);\n  color: var(--color-white);\n  border-radius: 3px;\n  text-decoration: none;\n}\n/* Give the 'All' choice a more muted display */\n.lh-metricfilter__label--active[for=\"metric-All\"] {\n  background-color: var(--color-blue-200) !important;\n  color: black !important;\n}\n\n.lh-metricfilter__text {\n  margin-right: 8px;\n}\n\n/* If audits are filtered, hide the itemcount for Passed Audits… */\n.lh-category--filtered .lh-audit-group .lh-audit-group__itemcount {\n  display: none;\n}\n\n\n.lh-audit__header:hover {\n  background-color: var(--color-hover);\n}\n\n/* We want to hide the browser's default arrow marker on summary elements. Admittedly, it's complicated. */\n.lh-root details > summary {\n  /* Blink 89+ and Firefox will hide the arrow when display is changed from (new) default of `list-item` to block.  https://chromestatus.com/feature/6730096436051968*/\n  display: block;\n}\n/* Safari and Blink <=88 require using the -webkit-details-marker selector */\n.lh-root details > summary::-webkit-details-marker {\n  display: none;\n}\n\n/* Perf Metric */\n\n.lh-metrics-container {\n  display: grid;\n  grid-auto-rows: 1fr;\n  grid-template-columns: 1fr 1fr;\n  grid-column-gap: var(--report-line-height);\n  margin-bottom: var(--default-padding);\n}\n\n.lh-metric {\n  border-top: 1px solid var(--report-border-color-secondary);\n}\n\n.lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(-n+2) {\n  border-bottom: 1px solid var(--report-border-color-secondary);\n}\n\n.lh-metric__innerwrap {\n  display: grid;\n  /**\n   * Icon -- Metric Name\n   *      -- Metric Value\n   */\n  grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 1fr;\n  align-items: center;\n  padding: var(--default-padding);\n}\n\n.lh-metric__details {\n  order: -1;\n}\n\n.lh-metric__title {\n  flex: 1;\n}\n\n.lh-calclink {\n  padding-left: calc(1ex / 3);\n}\n\n.lh-metric__description {\n  display: none;\n  grid-column-start: 2;\n  grid-column-end: 4;\n  color: var(--report-text-color-secondary);\n}\n\n.lh-metric__value {\n  font-size: var(--metric-value-font-size);\n  margin: calc(var(--default-padding) / 2) 0;\n  white-space: nowrap; /* No wrapping between metric value and the icon */\n  grid-column-start: 2;\n}\n\n\n@media screen and (max-width: 535px) {\n  .lh-metrics-container {\n    display: block;\n  }\n\n  .lh-metric {\n    border-bottom: none !important;\n  }\n  .lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(1) {\n    border-bottom: 1px solid var(--report-border-color-secondary) !important;\n  }\n\n  /* Change the grid to 3 columns for narrow viewport. */\n  .lh-metric__innerwrap {\n  /**\n   * Icon -- Metric Name -- Metric Value\n   */\n    grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;\n  }\n  .lh-metric__value {\n    justify-self: end;\n    grid-column-start: unset;\n  }\n}\n\n/* No-JS toggle switch */\n/* Keep this selector sync'd w/ `magicSelector` in report-ui-features-test.js */\n .lh-metrics-toggle__input:checked ~ .lh-metrics-container .lh-metric__description {\n  display: block;\n}\n\n/* TODO get rid of the SVGS and clean up these some more */\n.lh-metrics-toggle__input {\n  opacity: 0;\n  position: absolute;\n  right: 0;\n  top: 0px;\n}\n\n.lh-metrics-toggle__input + div > label > .lh-metrics-toggle__labeltext--hide,\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--show {\n  display: none;\n}\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--hide {\n  display: inline;\n}\n.lh-metrics-toggle__input:focus + div > label {\n  outline: -webkit-focus-ring-color auto 3px;\n}\n\n.lh-metrics-toggle__label {\n  cursor: pointer;\n  font-size: var(--report-font-size-secondary);\n  line-height: var(--report-line-height-secondary);\n  color: var(--color-gray-700);\n}\n\n/* Pushes the metric description toggle button to the right. */\n.lh-audit-group--metrics .lh-audit-group__header {\n  display: flex;\n  justify-content: space-between;\n}\n\n.lh-metric__icon,\n.lh-scorescale-range::before {\n  content: '';\n  width: var(--score-icon-size);\n  height: var(--score-icon-size);\n  display: inline-block;\n  margin: var(--score-icon-margin);\n}\n\n.lh-metric--pass .lh-metric__value {\n  color: var(--color-pass-secondary);\n}\n.lh-metric--pass .lh-metric__icon {\n  border-radius: 100%;\n  background: var(--color-pass);\n}\n\n.lh-metric--average .lh-metric__value {\n  color: var(--color-average-secondary);\n}\n.lh-metric--average .lh-metric__icon {\n  background: var(--color-average);\n  width: var(--icon-square-size);\n  height: var(--icon-square-size);\n}\n\n.lh-metric--fail .lh-metric__value {\n  color: var(--color-fail-secondary);\n}\n.lh-metric--fail .lh-metric__icon {\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\n}\n\n.lh-metric--error .lh-metric__value,\n.lh-metric--error .lh-metric__description {\n  color: var(--color-fail-secondary);\n}\n\n/* Perf load opportunity */\n\n.lh-load-opportunity__cols {\n  display: flex;\n  align-items: flex-start;\n}\n\n.lh-load-opportunity__header .lh-load-opportunity__col {\n  color: var(--color-gray-600);\n  display: unset;\n  line-height: calc(2.3 * var(--report-font-size));\n}\n\n.lh-load-opportunity__col {\n  display: flex;\n}\n\n.lh-load-opportunity__col--one {\n  flex: 5;\n  align-items: center;\n  margin-right: 2px;\n}\n.lh-load-opportunity__col--two {\n  flex: 4;\n  text-align: right;\n}\n\n.lh-audit--load-opportunity .lh-audit__display-text {\n  text-align: right;\n  flex: 0 0 7.5ch;\n}\n\n\n/* Sparkline */\n\n.lh-load-opportunity__sparkline {\n  flex: 1;\n  margin-top: calc((var(--report-line-height) - var(--sparkline-height)) / 2);\n}\n\n.lh-sparkline {\n  height: var(--sparkline-height);\n  width: 100%;\n}\n\n.lh-sparkline__bar {\n  height: 100%;\n  float: right;\n}\n\n.lh-audit--pass .lh-sparkline__bar {\n  background: var(--color-pass);\n}\n\n.lh-audit--average .lh-sparkline__bar {\n  background: var(--color-average);\n}\n\n.lh-audit--fail .lh-sparkline__bar {\n  background: var(--color-fail);\n}\n\n/* Filmstrip */\n\n.lh-filmstrip-container {\n  /* smaller gap between metrics and filmstrip */\n  margin: -8px auto 0 auto;\n}\n\n.lh-filmstrip {\n  display: grid;\n  justify-content: space-between;\n  padding-bottom: var(--default-padding);\n  width: 100%;\n  grid-template-columns: repeat(auto-fit, 90px);\n}\n\n.lh-filmstrip__frame {\n  text-align: right;\n  position: relative;\n}\n\n.lh-filmstrip__thumbnail {\n  border: 1px solid var(--report-border-color-secondary);\n  max-height: 150px;\n  max-width: 120px;\n}\n\n/* Audit */\n\n.lh-audit {\n  border-bottom: 1px solid var(--report-border-color-secondary);\n}\n\n/* Apply border-top to just the first audit. */\n.lh-audit {\n  border-top: 1px solid var(--report-border-color-secondary);\n}\n.lh-audit ~ .lh-audit {\n  border-top: none;\n}\n\n\n.lh-audit--error .lh-audit__display-text {\n  color: var(--color-fail-secondary);\n}\n\n/* Audit Group */\n\n.lh-audit-group {\n  margin-bottom: var(--audit-group-margin-bottom);\n  position: relative;\n}\n.lh-audit-group--metrics {\n  margin-bottom: calc(var(--audit-group-margin-bottom) / 2);\n}\n\n.lh-audit-group__header::before {\n  /* By default, groups don't get an icon */\n  content: none;\n  width: var(--pwa-icon-size);\n  height: var(--pwa-icon-size);\n  margin: var(--pwa-icon-margin);\n  display: inline-block;\n  vertical-align: middle;\n}\n\n/* Style the \"over budget\" columns red. */\n.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(4),\n.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(5),\n.lh-audit-group--budgets #timing-budget tbody tr td:nth-child(3) {\n  color: var(--color-red-700);\n}\n\n/* Align the \"over budget request count\" text to be close to the \"over budget bytes\" column. */\n.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){\n  text-align: right;\n}\n\n.lh-audit-group--budgets .lh-details--budget {\n  width: 100%;\n  margin: 0 0 var(--default-padding);\n}\n\n.lh-audit-group--pwa-installable .lh-audit-group__header::before {\n  content: '';\n  background-image: var(--pwa-installable-gray-url);\n}\n.lh-audit-group--pwa-optimized .lh-audit-group__header::before {\n  content: '';\n  background-image: var(--pwa-optimized-gray-url);\n}\n.lh-audit-group--pwa-installable.lh-badged .lh-audit-group__header::before {\n  background-image: var(--pwa-installable-color-url);\n}\n.lh-audit-group--pwa-optimized.lh-badged .lh-audit-group__header::before {\n  background-image: var(--pwa-optimized-color-url);\n}\n\n.lh-audit-group--metrics .lh-audit-group__summary {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.lh-audit-group__summary {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.lh-audit-group__header .lh-chevron {\n  margin-top: calc((var(--report-line-height) - 5px) / 2);\n}\n\n.lh-audit-group__header {\n  letter-spacing: 0.8px;\n  padding: var(--default-padding);\n  padding-left: 0;\n}\n\n.lh-audit-group__header, .lh-audit-group__summary {\n  font-size: var(--report-font-size-secondary);\n  line-height: var(--report-line-height-secondary);\n  color: var(--color-gray-700);\n}\n\n.lh-audit-group__title {\n  text-transform: uppercase;\n  font-weight: 500;\n}\n\n.lh-audit-group__itemcount {\n  color: var(--color-gray-600);\n}\n\n.lh-audit-group__footer {\n  color: var(--color-gray-600);\n  display: block;\n  margin-top: var(--default-padding);\n}\n\n.lh-details,\n.lh-category-header__description,\n.lh-load-opportunity__header,\n.lh-audit-group__footer {\n  font-size: var(--report-font-size-secondary);\n  line-height: var(--report-line-height-secondary);\n}\n\n.lh-audit-explanation {\n  margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);\n  line-height: var(--audit-explanation-line-height);\n  display: inline-block;\n}\n\n.lh-audit--fail .lh-audit-explanation {\n  color: var(--color-fail-secondary);\n}\n\n/* Report */\n.lh-list > :not(:last-child) {\n  margin-bottom: calc(var(--default-padding) * 2);\n}\n\n.lh-header-container {\n  display: block;\n  margin: 0 auto;\n  position: relative;\n  word-wrap: break-word;\n}\n\n.lh-header-container .lh-scores-wrapper {\n  border-bottom: 1px solid var(--color-gray-200);\n}\n\n\n.lh-report {\n  min-width: var(--report-content-min-width);\n}\n\n.lh-exception {\n  font-size: large;\n}\n\n.lh-code {\n  white-space: normal;\n  margin-top: 0;\n  font-size: var(--report-monospace-font-size);\n}\n\n.lh-warnings {\n  --item-margin: calc(var(--report-line-height) / 6);\n  color: var(--color-average-secondary);\n  margin: var(--audit-padding-vertical) 0;\n  padding: var(--default-padding)\n    var(--default-padding)\n    var(--default-padding)\n    calc(var(--audit-description-padding-left));\n  background-color: var(--toplevel-warning-background-color);\n}\n.lh-warnings span {\n  font-weight: bold;\n}\n\n.lh-warnings--toplevel {\n  --item-margin: calc(var(--header-line-height) / 4);\n  color: var(--toplevel-warning-text-color);\n  margin-left: auto;\n  margin-right: auto;\n  max-width: var(--report-content-max-width-minus-edge-gap);\n  padding: var(--toplevel-warning-padding);\n  border-radius: 8px;\n}\n\n.lh-warnings__msg {\n  color: var(--toplevel-warning-message-text-color);\n  margin: 0;\n}\n\n.lh-warnings ul {\n  margin: 0;\n}\n.lh-warnings li {\n  margin: var(--item-margin) 0;\n}\n.lh-warnings li:last-of-type {\n  margin-bottom: 0;\n}\n\n.lh-scores-header {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n}\n.lh-scores-header__solo {\n  padding: 0;\n  border: 0;\n}\n\n/* Gauge */\n\n.lh-gauge__wrapper--pass {\n  color: var(--color-pass-secondary);\n  fill: var(--color-pass);\n  stroke: var(--color-pass);\n}\n\n.lh-gauge__wrapper--average {\n  color: var(--color-average-secondary);\n  fill: var(--color-average);\n  stroke: var(--color-average);\n}\n\n.lh-gauge__wrapper--fail {\n  color: var(--color-fail-secondary);\n  fill: var(--color-fail);\n  stroke: var(--color-fail);\n}\n\n.lh-gauge__wrapper--not-applicable {\n  color: var(--color-not-applicable);\n  fill: var(--color-not-applicable);\n  stroke: var(--color-not-applicable);\n}\n\n.lh-fraction__wrapper .lh-fraction__content::before {\n  content: '';\n  height: var(--score-icon-size);\n  width: var(--score-icon-size);\n  margin: var(--score-icon-margin);\n  display: inline-block;\n}\n.lh-fraction__wrapper--pass .lh-fraction__content {\n  color: var(--color-pass-secondary);\n}\n.lh-fraction__wrapper--pass .lh-fraction__background {\n  background-color: var(--color-pass);\n}\n.lh-fraction__wrapper--pass .lh-fraction__content::before {\n  background-color: var(--color-pass);\n  border-radius: 50%;\n}\n.lh-fraction__wrapper--average .lh-fraction__content {\n  color: var(--color-average-secondary);\n}\n.lh-fraction__wrapper--average .lh-fraction__background,\n.lh-fraction__wrapper--average .lh-fraction__content::before {\n  background-color: var(--color-average);\n}\n.lh-fraction__wrapper--fail .lh-fraction__content {\n  color: var(--color-fail);\n}\n.lh-fraction__wrapper--fail .lh-fraction__background {\n  background-color: var(--color-fail);\n}\n.lh-fraction__wrapper--fail .lh-fraction__content::before {\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\n}\n.lh-fraction__wrapper--null .lh-fraction__content {\n  color: var(--color-gray-700);\n}\n.lh-fraction__wrapper--null .lh-fraction__background {\n  background-color: var(--color-gray-700);\n}\n.lh-fraction__wrapper--null .lh-fraction__content::before {\n  border-radius: 50%;\n  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-700);\n}\n\n.lh-fraction__background {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  border-radius: calc(var(--gauge-circle-size) / 2);\n  opacity: 0.1;\n  z-index: -1;\n}\n\n.lh-fraction__content-wrapper {\n  height: var(--gauge-circle-size);\n  display: flex;\n  align-items: center;\n}\n\n.lh-fraction__content {\n  display: flex;\n  position: relative;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(0.3 * var(--gauge-circle-size));\n  line-height: calc(0.4 * var(--gauge-circle-size));\n  width: max-content;\n  min-width: calc(1.5 * var(--gauge-circle-size));\n  padding: calc(0.1 * var(--gauge-circle-size)) calc(0.2 * var(--gauge-circle-size));\n  --score-icon-size: calc(0.21 * var(--gauge-circle-size));\n  --score-icon-margin: 0 calc(0.15 * var(--gauge-circle-size)) 0 0;\n}\n\n.lh-gauge {\n  stroke-linecap: round;\n  width: var(--gauge-circle-size);\n  height: var(--gauge-circle-size);\n}\n\n.lh-category .lh-gauge {\n  --gauge-circle-size: var(--gauge-circle-size-big);\n}\n\n.lh-gauge-base {\n  opacity: 0.1;\n}\n\n.lh-gauge-arc {\n  fill: none;\n  transform-origin: 50% 50%;\n  animation: load-gauge var(--transition-length) ease both;\n  animation-delay: 250ms;\n}\n\n.lh-gauge__svg-wrapper {\n  position: relative;\n  height: var(--gauge-circle-size);\n}\n.lh-category .lh-gauge__svg-wrapper,\n.lh-category .lh-fraction__wrapper {\n  --gauge-circle-size: var(--gauge-circle-size-big);\n}\n\n/* The plugin badge overlay */\n.lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\n  width: var(--plugin-badge-size);\n  height: var(--plugin-badge-size);\n  background-color: var(--plugin-badge-background-color);\n  background-image: var(--plugin-icon-url);\n  background-repeat: no-repeat;\n  background-size: var(--plugin-icon-size);\n  background-position: 58% 50%;\n  content: \"\";\n  position: absolute;\n  right: -6px;\n  bottom: 0px;\n  display: block;\n  z-index: 100;\n  box-shadow: 0 0 4px rgba(0,0,0,.2);\n  border-radius: 25%;\n}\n.lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\n  width: var(--plugin-badge-size-big);\n  height: var(--plugin-badge-size-big);\n}\n\n@keyframes load-gauge {\n  from { stroke-dasharray: 0 352; }\n}\n\n.lh-gauge__percentage {\n  width: 100%;\n  height: var(--gauge-circle-size);\n  position: absolute;\n  font-family: var(--report-font-family-monospace);\n  font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);\n  line-height: 0;\n  text-align: center;\n  top: calc(var(--score-container-padding) + var(--gauge-circle-size) / 2);\n}\n\n.lh-category .lh-gauge__percentage {\n  --gauge-circle-size: var(--gauge-circle-size-big);\n  --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);\n}\n\n.lh-gauge__wrapper,\n.lh-fraction__wrapper {\n  position: relative;\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  text-decoration: none;\n  padding: var(--score-container-padding);\n\n  --transition-length: 1s;\n\n  /* Contain the layout style paint & layers during animation*/\n  contain: content;\n  will-change: opacity; /* Only using for layer promotion */\n}\n\n.lh-gauge__label,\n.lh-fraction__label {\n  font-size: var(--gauge-label-font-size);\n  font-weight: 500;\n  line-height: var(--gauge-label-line-height);\n  margin-top: 10px;\n  text-align: center;\n  color: var(--report-text-color);\n  word-break: keep-all;\n}\n\n/* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */\n.lh-category .lh-gauge__label,\n.lh-category .lh-fraction__label {\n  --gauge-label-font-size: var(--gauge-label-font-size-big);\n  --gauge-label-line-height: var(--gauge-label-line-height-big);\n  margin-top: 14px;\n}\n\n.lh-scores-header .lh-gauge__wrapper,\n.lh-scores-header .lh-fraction__wrapper,\n.lh-scores-header .lh-gauge--pwa__wrapper,\n.lh-sticky-header .lh-gauge__wrapper,\n.lh-sticky-header .lh-fraction__wrapper,\n.lh-sticky-header .lh-gauge--pwa__wrapper {\n  width: var(--gauge-wrapper-width);\n}\n\n.lh-scorescale {\n  display: inline-flex;\n\n  gap: calc(var(--default-padding) * 4);\n  margin: 16px auto 0 auto;\n  font-size: var(--report-font-size-secondary);\n  color: var(--color-gray-700);\n\n}\n\n.lh-scorescale-range {\n  display: flex;\n  align-items: center;\n  font-family: var(--report-font-family-monospace);\n  white-space: nowrap;\n}\n\n.lh-category-header__finalscreenshot .lh-scorescale {\n  border: 0;\n  display: flex;\n  justify-content: center;\n}\n\n.lh-category-header__finalscreenshot .lh-scorescale-range {\n  font-family: unset;\n  font-size: 12px;\n}\n\n.lh-scorescale-wrap {\n  display: contents;\n}\n\n/* Hide category score gauages if it's a single category report */\n.lh-header--solo-category .lh-scores-wrapper {\n  display: none;\n}\n\n\n.lh-categories {\n  width: 100%;\n}\n\n.lh-category {\n  padding: var(--category-padding);\n  max-width: var(--report-content-max-width);\n  margin: 0 auto;\n\n  scroll-margin-top: var(--sticky-header-buffer);\n}\n\n.lh-category-wrapper {\n  border-bottom: 1px solid var(--color-gray-200);\n}\n.lh-category-wrapper:last-of-type {\n  border-bottom: 0;\n}\n\n.lh-category-header {\n  margin-bottom: var(--section-padding-vertical);\n}\n\n.lh-category-header .lh-score__gauge {\n  max-width: 400px;\n  width: auto;\n  margin: 0px auto;\n}\n\n.lh-category-header__finalscreenshot {\n  display: grid;\n  grid-template: none / 1fr 1px 1fr;\n  justify-items: center;\n  align-items: center;\n  gap: var(--report-line-height);\n  min-height: 288px;\n  margin-bottom: var(--default-padding);\n}\n\n.lh-final-ss-image {\n  /* constrain the size of the image to not be too large */\n  max-height: calc(var(--gauge-circle-size-big) * 2.8);\n  max-width: calc(var(--gauge-circle-size-big) * 3.5);\n  border: 1px solid var(--color-gray-200);\n  padding: 4px;\n  border-radius: 3px;\n  display: block;\n}\n\n.lh-category-headercol--separator {\n  background: var(--color-gray-200);\n  width: 1px;\n  height: var(--gauge-circle-size-big);\n}\n\n@media screen and (max-width: 780px) {\n  .lh-category-header__finalscreenshot {\n    grid-template: 1fr 1fr / none\n  }\n  .lh-category-headercol--separator {\n    display: none;\n  }\n}\n\n\n/* 964 fits the min-width of the filmstrip */\n@media screen and (max-width: 964px) {\n  .lh-report {\n    margin-left: 0;\n    width: 100%;\n  }\n}\n\n@media print {\n  body {\n    -webkit-print-color-adjust: exact; /* print background colors */\n  }\n  .lh-container {\n    display: block;\n  }\n  .lh-report {\n    margin-left: 0;\n    padding-top: 0;\n  }\n  .lh-categories {\n    margin-top: 0;\n  }\n}\n\n.lh-table {\n  position: relative;\n  border-collapse: separate;\n  border-spacing: 0;\n  /* Can't assign padding to table, so shorten the width instead. */\n  width: calc(100% - var(--audit-description-padding-left) - var(--stackpack-padding-horizontal));\n  border: 1px solid var(--report-border-color-secondary);\n}\n\n.lh-table thead th {\n  position: sticky;\n  top: calc(var(--sticky-header-buffer) + 1em);\n  z-index: 1;\n  background-color: var(--report-background-color);\n  border-bottom: 1px solid var(--report-border-color-secondary);\n  font-weight: normal;\n  color: var(--color-gray-600);\n  /* See text-wrapping comment on .lh-container. */\n  word-break: normal;\n}\n\n.lh-row--group {\n  background-color: var(--table-group-header-background-color);\n}\n\n.lh-row--group td {\n  font-weight: bold;\n  font-size: 1.05em;\n  color: var(--table-group-header-text-color);\n}\n\n.lh-row--group td:first-child {\n  font-weight: normal;\n}\n\n.lh-row--group .lh-text {\n  color: inherit;\n  text-decoration: none;\n  display: inline-block;\n}\n\n.lh-row--group a.lh-link:hover {\n  text-decoration: underline;\n}\n\n.lh-row--group .lh-audit__adorn {\n  text-transform: capitalize;\n  font-weight: normal;\n  padding: 2px 3px 1px 3px;\n}\n\n.lh-row--group .lh-audit__adorn1p {\n  color: var(--link-color);\n  border-color: var(--link-color);\n}\n\n.lh-row--group .lh-report-icon--external::before {\n  content: \"\";\n  background-repeat: no-repeat;\n  width: 14px;\n  height: 16px;\n  opacity: 0.7;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.lh-row--group .lh-report-icon--external {\n  display: none;\n}\n\n.lh-row--group:hover .lh-report-icon--external {\n  display: inline-block;\n}\n\n.lh-dark .lh-report-icon--external::before {\n  filter: invert(1);\n}\n\n/** Manages indentation of two-level and three-level nested adjacent rows */\n\n.lh-row--group ~ [data-entity]:not(.lh-row--group) td:first-child {\n  padding-left: 20px;\n}\n\n.lh-row--group ~ [data-entity]:not(.lh-row--group) ~ .lh-sub-item-row td:first-child {\n  padding-left: 40px;\n}\n\n.lh-row--even {\n  background-color: var(--table-group-header-background-color);\n}\n.lh-row--hidden {\n  display: none;\n}\n\n.lh-table th,\n.lh-table td {\n  padding: var(--default-padding);\n}\n\n.lh-table tr {\n  vertical-align: middle;\n}\n\n.lh-table tr:hover {\n  background-color: var(--table-higlight-background-color);\n}\n\n/* Looks unnecessary, but mostly for keeping the <th>s left-aligned */\n.lh-table-column--text,\n.lh-table-column--source-location,\n.lh-table-column--url,\n/* .lh-table-column--thumbnail, */\n/* .lh-table-column--empty,*/\n.lh-table-column--code,\n.lh-table-column--node {\n  text-align: left;\n}\n\n.lh-table-column--code {\n  min-width: 100px;\n}\n\n.lh-table-column--bytes,\n.lh-table-column--timespanMs,\n.lh-table-column--ms,\n.lh-table-column--numeric {\n  text-align: right;\n  word-break: normal;\n}\n\n\n\n.lh-table .lh-table-column--thumbnail {\n  width: var(--image-preview-size);\n}\n\n.lh-table-column--url {\n  min-width: 250px;\n}\n\n.lh-table-column--text {\n  min-width: 80px;\n}\n\n/* Keep columns narrow if they follow the URL column */\n/* 12% was determined to be a decent narrow width, but wide enough for column headings */\n.lh-table-column--url + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--ms,\n.lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs {\n  width: 12%;\n}\n\n.lh-text__url-host {\n  display: inline;\n}\n\n.lh-text__url-host {\n  margin-left: calc(var(--report-font-size) / 2);\n  opacity: 0.6;\n  font-size: 90%\n}\n\n.lh-thumbnail {\n  object-fit: cover;\n  width: var(--image-preview-size);\n  height: var(--image-preview-size);\n  display: block;\n}\n\n.lh-unknown pre {\n  overflow: scroll;\n  border: solid 1px var(--color-gray-200);\n}\n\n.lh-text__url > a {\n  color: inherit;\n  text-decoration: none;\n}\n\n.lh-text__url > a:hover {\n  text-decoration: underline dotted #999;\n}\n\n.lh-sub-item-row {\n  margin-left: 20px;\n  margin-bottom: 0;\n  color: var(--color-gray-700);\n}\n\n.lh-sub-item-row td {\n  padding-top: 4px;\n  padding-bottom: 4px;\n  padding-left: 20px;\n}\n\n/* Chevron\n   https://codepen.io/paulirish/pen/LmzEmK\n */\n.lh-chevron {\n  --chevron-angle: 42deg;\n  /* Edge doesn't support transform: rotate(calc(...)), so we define it here */\n  --chevron-angle-right: -42deg;\n  width: var(--chevron-size);\n  height: var(--chevron-size);\n  margin-top: calc((var(--report-line-height) - 12px) / 2);\n}\n\n.lh-chevron__lines {\n  transition: transform 0.4s;\n  transform: translateY(var(--report-line-height));\n}\n.lh-chevron__line {\n stroke: var(--chevron-line-stroke);\n stroke-width: var(--chevron-size);\n stroke-linecap: square;\n transform-origin: 50%;\n transform: rotate(var(--chevron-angle));\n transition: transform 300ms, stroke 300ms;\n}\n\n.lh-expandable-details .lh-chevron__line-right,\n.lh-expandable-details[open] .lh-chevron__line-left {\n transform: rotate(var(--chevron-angle-right));\n}\n\n.lh-expandable-details[open] .lh-chevron__line-right {\n  transform: rotate(var(--chevron-angle));\n}\n\n\n.lh-expandable-details[open]  .lh-chevron__lines {\n transform: translateY(calc(var(--chevron-size) * -1));\n}\n\n.lh-expandable-details[open] {\n  animation: 300ms openDetails forwards;\n  padding-bottom: var(--default-padding);\n}\n\n@keyframes openDetails {\n  from {\n    outline: 1px solid var(--report-background-color);\n  }\n  to {\n   outline: 1px solid;\n   box-shadow: 0 2px 4px rgba(0, 0, 0, .24);\n  }\n}\n\n@media screen and (max-width: 780px) {\n  /* no black outline if we're not confident the entire table can be displayed within bounds */\n  .lh-expandable-details[open] {\n    animation: none;\n  }\n}\n\n.lh-expandable-details[open] summary, details.lh-clump > summary {\n  border-bottom: 1px solid var(--report-border-color-secondary);\n}\ndetails.lh-clump[open] > summary {\n  border-bottom-width: 0;\n}\n\n\n\ndetails .lh-clump-toggletext--hide,\ndetails[open] .lh-clump-toggletext--show { display: none; }\ndetails[open] .lh-clump-toggletext--hide { display: block;}\n\n\n/* Tooltip */\n.lh-tooltip-boundary {\n  position: relative;\n}\n\n.lh-tooltip {\n  position: absolute;\n  display: none; /* Don't retain these layers when not needed */\n  opacity: 0;\n  background: #ffffff;\n  white-space: pre-line; /* Render newlines in the text */\n  min-width: 246px;\n  max-width: 275px;\n  padding: 15px;\n  border-radius: 5px;\n  text-align: initial;\n  line-height: 1.4;\n}\n/* shrink tooltips to not be cutoff on left edge of narrow viewports\n   45vw is chosen to be ~= width of the left column of metrics\n*/\n@media screen and (max-width: 535px) {\n  .lh-tooltip {\n    min-width: 45vw;\n    padding: 3vw;\n  }\n}\n\n.lh-tooltip-boundary:hover .lh-tooltip {\n  display: block;\n  animation: fadeInTooltip 250ms;\n  animation-fill-mode: forwards;\n  animation-delay: 850ms;\n  bottom: 100%;\n  z-index: 1;\n  will-change: opacity;\n  right: 0;\n  pointer-events: none;\n}\n\n.lh-tooltip::before {\n  content: \"\";\n  border: solid transparent;\n  border-bottom-color: #fff;\n  border-width: 10px;\n  position: absolute;\n  bottom: -20px;\n  right: 6px;\n  transform: rotate(180deg);\n  pointer-events: none;\n}\n\n@keyframes fadeInTooltip {\n  0% { opacity: 0; }\n  75% { opacity: 1; }\n  100% { opacity: 1;  filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; }\n}\n\n/* Element screenshot */\n.lh-element-screenshot {\n  float: left;\n  margin-right: 20px;\n}\n.lh-element-screenshot__content {\n  overflow: hidden;\n  min-width: 110px;\n  display: flex;\n  justify-content: center;\n  background-color: var(--report-background-color);\n}\n.lh-element-screenshot__image {\n  position: relative;\n  /* Set by ElementScreenshotRenderer.installFullPageScreenshotCssVariable */\n  background-image: var(--element-screenshot-url);\n  outline: 2px solid #777;\n  background-color: white;\n  background-repeat: no-repeat;\n}\n.lh-element-screenshot__mask {\n  position: absolute;\n  background: #555;\n  opacity: 0.8;\n}\n.lh-element-screenshot__element-marker {\n  position: absolute;\n  outline: 2px solid var(--color-lime-400);\n}\n.lh-element-screenshot__overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 2000; /* .lh-topbar is 1000 */\n  background: var(--screenshot-overlay-background);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: zoom-out;\n}\n\n.lh-element-screenshot__overlay .lh-element-screenshot {\n  margin-right: 0; /* clearing margin used in thumbnail case */\n  outline: 1px solid var(--color-gray-700);\n}\n\n.lh-screenshot-overlay--enabled .lh-element-screenshot {\n  cursor: zoom-out;\n}\n.lh-screenshot-overlay--enabled .lh-node .lh-element-screenshot {\n  cursor: zoom-in;\n}\n\n\n.lh-meta__items {\n  --meta-icon-size: calc(var(--report-icon-size) * 0.667);\n  padding: var(--default-padding);\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  background-color: var(--env-item-background-color);\n  border-radius: 3px;\n  margin: 0 0 var(--default-padding) 0;\n  font-size: 12px;\n  column-gap: var(--default-padding);\n  color: var(--color-gray-700);\n}\n\n.lh-meta__item {\n  display: block;\n  list-style-type: none;\n  position: relative;\n  padding: 0 0 0 calc(var(--meta-icon-size) + var(--default-padding) * 2);\n  cursor: unset; /* disable pointer cursor from report-icon */\n}\n\n.lh-meta__item.lh-tooltip-boundary {\n  text-decoration: dotted underline var(--color-gray-500);\n  cursor: help;\n}\n\n.lh-meta__item.lh-report-icon::before {\n  position: absolute;\n  left: var(--default-padding);\n  width: var(--meta-icon-size);\n  height: var(--meta-icon-size);\n}\n\n.lh-meta__item.lh-report-icon:hover::before {\n  opacity: 0.7;\n}\n\n.lh-meta__item .lh-tooltip {\n  color: var(--color-gray-800);\n}\n\n.lh-meta__item .lh-tooltip::before {\n  right: auto; /* Set the tooltip arrow to the leftside */\n  left: 6px;\n}\n\n/* Change the grid for narrow viewport. */\n@media screen and (max-width: 640px) {\n  .lh-meta__items {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n@media screen and (max-width: 535px) {\n  .lh-meta__items {\n    display: block;\n  }\n}\n\n\n/*# sourceURL=report-styles.css */\n");
-  el0.append(el1);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createTopbarComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("style");
-  el1.append("\n    .lh-topbar {\n      position: sticky;\n      top: 0;\n      left: 0;\n      right: 0;\n      z-index: 1000;\n      display: flex;\n      align-items: center;\n      height: var(--topbar-height);\n      padding: var(--topbar-padding);\n      font-size: var(--report-font-size-secondary);\n      background-color: var(--topbar-background-color);\n      border-bottom: 1px solid var(--color-gray-200);\n    }\n\n    .lh-topbar__logo {\n      width: var(--topbar-logo-size);\n      height: var(--topbar-logo-size);\n      user-select: none;\n      flex: none;\n    }\n\n    .lh-topbar__url {\n      margin: var(--topbar-padding);\n      text-decoration: none;\n      color: var(--report-text-color);\n      text-overflow: ellipsis;\n      overflow: hidden;\n      white-space: nowrap;\n    }\n\n    .lh-tools {\n      display: flex;\n      align-items: center;\n      margin-left: auto;\n      will-change: transform;\n      min-width: var(--report-icon-size);\n    }\n    .lh-tools__button {\n      width: var(--report-icon-size);\n      min-width: 24px;\n      height: var(--report-icon-size);\n      cursor: pointer;\n      margin-right: 5px;\n      /* This is actually a button element, but we want to style it like a transparent div. */\n      display: flex;\n      background: none;\n      color: inherit;\n      border: none;\n      padding: 0;\n      font: inherit;\n      outline: inherit;\n    }\n    .lh-tools__button svg {\n      fill: var(--tools-icon-color);\n    }\n    .lh-dark .lh-tools__button svg {\n      filter: invert(1);\n    }\n    .lh-tools__button.lh-active + .lh-tools__dropdown {\n      opacity: 1;\n      clip: rect(-1px, 194px, 242px, -3px);\n      visibility: visible;\n    }\n    .lh-tools__dropdown {\n      position: absolute;\n      background-color: var(--report-background-color);\n      border: 1px solid var(--report-border-color);\n      border-radius: 3px;\n      padding: calc(var(--default-padding) / 2) 0;\n      cursor: pointer;\n      top: 36px;\n      right: 0;\n      box-shadow: 1px 1px 3px #ccc;\n      min-width: 125px;\n      clip: rect(0, 164px, 0, 0);\n      visibility: hidden;\n      opacity: 0;\n      transition: all 200ms cubic-bezier(0,0,0.2,1);\n    }\n    .lh-tools__dropdown a {\n      color: currentColor;\n      text-decoration: none;\n      white-space: nowrap;\n      padding: 0 6px;\n      line-height: 2;\n    }\n    .lh-tools__dropdown a:hover,\n    .lh-tools__dropdown a:focus {\n      background-color: var(--color-gray-200);\n      outline: none;\n    }\n    /* save-gist option hidden in report. */\n    .lh-tools__dropdown a[data-action='save-gist'] {\n      display: none;\n    }\n\n    .lh-locale-selector {\n      width: 100%;\n      color: var(--report-text-color);\n      background-color: var(--locale-selector-background-color);\n      padding: 2px;\n    }\n    .lh-tools-locale {\n      display: flex;\n      align-items: center;\n      flex-direction: row-reverse;\n    }\n    .lh-tools-locale__selector-wrapper {\n      transition: opacity 0.15s;\n      opacity: 0;\n      max-width: 200px;\n    }\n    .lh-button.lh-tool-locale__button {\n      height: var(--topbar-height);\n      color: var(--tools-icon-color);\n      padding: calc(var(--default-padding) / 2);\n    }\n    .lh-tool-locale__button.lh-active + .lh-tools-locale__selector-wrapper {\n      opacity: 1;\n      clip: rect(-1px, 194px, 242px, -3px);\n      visibility: visible;\n      margin: 0 4px;\n    }\n\n    @media screen and (max-width: 964px) {\n      .lh-tools__dropdown {\n        right: 0;\n        left: initial;\n      }\n    }\n    @media print {\n      .lh-topbar {\n        position: static;\n        margin-left: 0;\n      }\n\n      .lh-tools__dropdown {\n        display: none;\n      }\n    }\n  ");
-  el0.append(el1);
-  const el2 = dom.createElement("div", "lh-topbar");
-  const el3 = dom.createElementNS("http://www.w3.org/2000/svg", "svg", "lh-topbar__logo");
-  el3.setAttribute('role', 'img');
-  el3.setAttribute('title', 'Lighthouse logo');
-  el3.setAttribute('fill', 'none');
-  el3.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
-  el3.setAttribute('viewBox', '0 0 48 48');
-  const el4 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el4.setAttribute('d', 'm14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z');
-  el4.setAttribute('fill', '#F63');
-  const el5 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el5.setAttribute('d', 'M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z');
-  el5.setAttribute('fill', '#FFA385');
-  const el6 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el6.setAttribute('fill', '#FF3');
-  el6.setAttribute('d', 'M20.5 10h7v7h-7z');
-  el3.append(" ",el4," ",el5," ",el6," ");
-  const el7 = dom.createElement("a", "lh-topbar__url");
-  el7.setAttribute('href', '');
-  el7.setAttribute('target', '_blank');
-  el7.setAttribute('rel', 'noopener');
-  const el8 = dom.createElement("div", "lh-tools");
-  const el9 = dom.createElement("div", "lh-tools-locale lh-hidden");
-  const el10 = dom.createElement("button", "lh-button lh-tool-locale__button");
-  el10.setAttribute('id', 'lh-button__swap-locales');
-  el10.setAttribute('title', 'Show Language Picker');
-  el10.setAttribute('aria-label', 'Toggle language picker');
-  el10.setAttribute('aria-haspopup', 'menu');
-  el10.setAttribute('aria-expanded', 'false');
-  el10.setAttribute('aria-controls', 'lh-tools-locale__selector-wrapper');
-  const el11 = dom.createElementNS("http://www.w3.org/2000/svg", "svg");
-  el11.setAttribute('width', '20px');
-  el11.setAttribute('height', '20px');
-  el11.setAttribute('viewBox', '0 0 24 24');
-  el11.setAttribute('fill', 'currentColor');
-  const el12 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el12.setAttribute('d', 'M0 0h24v24H0V0z');
-  el12.setAttribute('fill', 'none');
-  const el13 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el13.setAttribute('d', 'M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z');
-  el11.append(el12,el13);
-  el10.append(" ",el11," ");
-  const el14 = dom.createElement("div", "lh-tools-locale__selector-wrapper");
-  el14.setAttribute('id', 'lh-tools-locale__selector-wrapper');
-  el14.setAttribute('role', 'menu');
-  el14.setAttribute('aria-labelledby', 'lh-button__swap-locales');
-  el14.setAttribute('aria-hidden', 'true');
-  el14.append(" "," ");
-  el9.append(" ",el10," ",el14," ");
-  const el15 = dom.createElement("button", "lh-tools__button");
-  el15.setAttribute('id', 'lh-tools-button');
-  el15.setAttribute('title', 'Tools menu');
-  el15.setAttribute('aria-label', 'Toggle report tools menu');
-  el15.setAttribute('aria-haspopup', 'menu');
-  el15.setAttribute('aria-expanded', 'false');
-  el15.setAttribute('aria-controls', 'lh-tools-dropdown');
-  const el16 = dom.createElementNS("http://www.w3.org/2000/svg", "svg");
-  el16.setAttribute('width', '100%');
-  el16.setAttribute('height', '100%');
-  el16.setAttribute('viewBox', '0 0 24 24');
-  const el17 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el17.setAttribute('d', 'M0 0h24v24H0z');
-  el17.setAttribute('fill', 'none');
-  const el18 = dom.createElementNS("http://www.w3.org/2000/svg", "path");
-  el18.setAttribute('d', 'M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z');
-  el16.append(" ",el17," ",el18," ");
-  el15.append(" ",el16," ");
-  const el19 = dom.createElement("div", "lh-tools__dropdown");
-  el19.setAttribute('id', 'lh-tools-dropdown');
-  el19.setAttribute('role', 'menu');
-  el19.setAttribute('aria-labelledby', 'lh-tools-button');
-  const el20 = dom.createElement("a", "lh-report-icon lh-report-icon--print");
-  el20.setAttribute('role', 'menuitem');
-  el20.setAttribute('tabindex', '-1');
-  el20.setAttribute('href', '#');
-  el20.setAttribute('data-i18n', 'dropdownPrintSummary');
-  el20.setAttribute('data-action', 'print-summary');
-  const el21 = dom.createElement("a", "lh-report-icon lh-report-icon--print");
-  el21.setAttribute('role', 'menuitem');
-  el21.setAttribute('tabindex', '-1');
-  el21.setAttribute('href', '#');
-  el21.setAttribute('data-i18n', 'dropdownPrintExpanded');
-  el21.setAttribute('data-action', 'print-expanded');
-  const el22 = dom.createElement("a", "lh-report-icon lh-report-icon--copy");
-  el22.setAttribute('role', 'menuitem');
-  el22.setAttribute('tabindex', '-1');
-  el22.setAttribute('href', '#');
-  el22.setAttribute('data-i18n', 'dropdownCopyJSON');
-  el22.setAttribute('data-action', 'copy');
-  const el23 = dom.createElement("a", "lh-report-icon lh-report-icon--download lh-hidden");
-  el23.setAttribute('role', 'menuitem');
-  el23.setAttribute('tabindex', '-1');
-  el23.setAttribute('href', '#');
-  el23.setAttribute('data-i18n', 'dropdownSaveHTML');
-  el23.setAttribute('data-action', 'save-html');
-  const el24 = dom.createElement("a", "lh-report-icon lh-report-icon--download");
-  el24.setAttribute('role', 'menuitem');
-  el24.setAttribute('tabindex', '-1');
-  el24.setAttribute('href', '#');
-  el24.setAttribute('data-i18n', 'dropdownSaveJSON');
-  el24.setAttribute('data-action', 'save-json');
-  const el25 = dom.createElement("a", "lh-report-icon lh-report-icon--open");
-  el25.setAttribute('role', 'menuitem');
-  el25.setAttribute('tabindex', '-1');
-  el25.setAttribute('href', '#');
-  el25.setAttribute('data-i18n', 'dropdownViewer');
-  el25.setAttribute('data-action', 'open-viewer');
-  const el26 = dom.createElement("a", "lh-report-icon lh-report-icon--open");
-  el26.setAttribute('role', 'menuitem');
-  el26.setAttribute('tabindex', '-1');
-  el26.setAttribute('href', '#');
-  el26.setAttribute('data-i18n', 'dropdownSaveGist');
-  el26.setAttribute('data-action', 'save-gist');
-  const el27 = dom.createElement("a", "lh-report-icon lh-report-icon--dark");
-  el27.setAttribute('role', 'menuitem');
-  el27.setAttribute('tabindex', '-1');
-  el27.setAttribute('href', '#');
-  el27.setAttribute('data-i18n', 'dropdownDarkTheme');
-  el27.setAttribute('data-action', 'toggle-dark');
-  el19.append(" ",el20," ",el21," ",el22," "," ",el23," ",el24," ",el25," ",el26," ",el27," ");
-  el8.append(" ",el9," ",el15," ",el19," ");
-  el2.append(" "," ",el3," ",el7," ",el8," ");
-  el0.append(el2);
-  return el0;
-}
-
-/**
- * @param {DOM} dom
- */
-function createWarningsToplevelComponent(dom) {
-  const el0 = dom.createFragment();
-  const el1 = dom.createElement("div", "lh-warnings lh-warnings--toplevel");
-  const el2 = dom.createElement("p", "lh-warnings__msg");
-  const el3 = dom.createElement("ul");
-  el1.append(" ",el2," ",el3," ");
-  el0.append(el1);
-  return el0;
-}
-
-
-/** @typedef {'3pFilter'|'audit'|'categoryHeader'|'chevron'|'clump'|'crc'|'crcChain'|'elementScreenshot'|'footer'|'fraction'|'gauge'|'gaugePwa'|'heading'|'metric'|'opportunity'|'opportunityHeader'|'scorescale'|'scoresWrapper'|'snippet'|'snippetContent'|'snippetHeader'|'snippetLine'|'styles'|'topbar'|'warningsToplevel'} ComponentName */
-/**
- * @param {DOM} dom
- * @param {ComponentName} componentName
- * @return {DocumentFragment}
- */
-function createComponent(dom, componentName) {
-  switch (componentName) {
-    case '3pFilter': return create3pFilterComponent(dom);
-    case 'audit': return createAuditComponent(dom);
-    case 'categoryHeader': return createCategoryHeaderComponent(dom);
-    case 'chevron': return createChevronComponent(dom);
-    case 'clump': return createClumpComponent(dom);
-    case 'crc': return createCrcComponent(dom);
-    case 'crcChain': return createCrcChainComponent(dom);
-    case 'elementScreenshot': return createElementScreenshotComponent(dom);
-    case 'footer': return createFooterComponent(dom);
-    case 'fraction': return createFractionComponent(dom);
-    case 'gauge': return createGaugeComponent(dom);
-    case 'gaugePwa': return createGaugePwaComponent(dom);
-    case 'heading': return createHeadingComponent(dom);
-    case 'metric': return createMetricComponent(dom);
-    case 'opportunity': return createOpportunityComponent(dom);
-    case 'opportunityHeader': return createOpportunityHeaderComponent(dom);
-    case 'scorescale': return createScorescaleComponent(dom);
-    case 'scoresWrapper': return createScoresWrapperComponent(dom);
-    case 'snippet': return createSnippetComponent(dom);
-    case 'snippetContent': return createSnippetContentComponent(dom);
-    case 'snippetHeader': return createSnippetHeaderComponent(dom);
-    case 'snippetLine': return createSnippetLineComponent(dom);
-    case 'styles': return createStylesComponent(dom);
-    case 'topbar': return createTopbarComponent(dom);
-    case 'warningsToplevel': return createWarningsToplevelComponent(dom);
-  }
-  throw new Error('unexpected component: ' + componentName);
-}
-
-/**
+        .lh-snippet__line {
+          background: white;
+          white-space: pre;
+          display: flex;
+        }
+        .lh-snippet__line:not(.lh-snippet__line--message):first-child {
+          padding-top: 4px;
+        }
+        .lh-snippet__line:not(.lh-snippet__line--message):last-child {
+          padding-bottom: 4px;
+        }
+        .lh-snippet__line--content-highlighted {
+          background: var(--snippet-highlight-dark);
+        }
+        .lh-snippet__line--message {
+          background: var(--snippet-highlight-light);
+        }
+        .lh-snippet__line--message .lh-snippet__line-number {
+          padding-top: 10px;
+          padding-bottom: 10px;
+        }
+        .lh-snippet__line--message code {
+          padding: 10px;
+          padding-left: 5px;
+          color: var(--color-fail);
+          font-family: var(--report-font-family);
+        }
+        .lh-snippet__line--message code {
+          white-space: normal;
+        }
+        .lh-snippet__line-icon {
+          padding-top: 10px;
+          display: none;
+        }
+        .lh-snippet__line--message .lh-snippet__line-icon {
+          display: block;
+        }
+        .lh-snippet__line-icon:before {
+          content: "";
+          display: inline-block;
+          vertical-align: middle;
+          margin-right: 4px;
+          width: var(--score-icon-size);
+          height: var(--score-icon-size);
+          background-image: var(--fail-icon-url);
+        }
+        .lh-snippet__line-number {
+          flex-shrink: 0;
+          width: 40px;
+          text-align: right;
+          font-family: monospace;
+          padding-right: 5px;
+          margin-right: 5px;
+          color: var(--color-gray-600);
+          user-select: none;
+        }
+    `),t.append(" ",n," "),e.append(t),e}function Fe(o){let e=o.createFragment(),t=o.createElement("div","lh-snippet__snippet"),n=o.createElement("div","lh-snippet__snippet-inner");return t.append(" ",n," "),e.append(t),e}function De(o){let e=o.createFragment(),t=o.createElement("div","lh-snippet__header"),n=o.createElement("div","lh-snippet__title"),r=o.createElement("div","lh-snippet__node"),i=o.createElement("button","lh-snippet__toggle-expand"),a=o.createElement("span","lh-snippet__btn-label-collapse lh-snippet__show-if-expanded"),l=o.createElement("span","lh-snippet__btn-label-expand lh-snippet__show-if-collapsed");return i.append(" ",a," ",l," "),t.append(" ",n," ",r," ",i," "),e.append(t),e}function Re(o){let e=o.createFragment(),t=o.createElement("div","lh-snippet__line"),n=o.createElement("div","lh-snippet__line-number"),r=o.createElement("div","lh-snippet__line-icon"),i=o.createElement("code");return t.append(" ",n," ",r," ",i," "),e.append(t),e}function Ne(o){let e=o.createFragment(),t=o.createElement("style");return t.append(`/**
  * @license
  * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
  *
@@ -1104,2938 +372,2138 @@
  * limitations under the License.
  */
 
-class DOM {
-  /**
-   * @param {Document} document
-   * @param {HTMLElement} rootEl
-   */
-  constructor(document, rootEl) {
-    /** @type {Document} */
-    this._document = document;
-    /** @type {string} */
-    this._lighthouseChannel = 'unknown';
-    /** @type {Map<string, DocumentFragment>} */
-    this._componentCache = new Map();
-    /** @type {HTMLElement} */
-    // For legacy Report API users, this'll be undefined, but set in renderReport
-    this.rootEl = rootEl;
-  }
+/*
+  Naming convention:
 
-  /**
-   * @template {string} T
-   * @param {T} name
-   * @param {string=} className
-   * @return {HTMLElementByTagName[T]}
-   */
-  createElement(name, className) {
-    const element = this._document.createElement(name);
-    if (className) {
-      for (const token of className.split(/\s+/)) {
-        if (token) element.classList.add(token);
-      }
-    }
-    return element;
-  }
+  If a variable is used for a specific component: --{component}-{property name}-{modifier}
 
-  /**
-   * @param {string} namespaceURI
-   * @param {string} name
-   * @param {string=} className
-   * @return {Element}
-   */
-  createElementNS(namespaceURI, name, className) {
-    const element = this._document.createElementNS(namespaceURI, name);
-    if (className) {
-      for (const token of className.split(/\s+/)) {
-        if (token) element.classList.add(token);
-      }
-    }
-    return element;
-  }
+  Both {component} and {property name} should be kebab-case. If the target is the entire page,
+  use 'report' for the component. The property name should not be abbreviated. Use the
+  property name the variable is intended for - if it's used for multiple, a common descriptor
+  is fine (ex: 'size' for a variable applied to 'width' and 'height'). If a variable is shared
+  across multiple components, either create more variables or just drop the "{component}-"
+  part of the name. Append any modifiers at the end (ex: 'big', 'dark').
 
-  /**
-   * @return {!DocumentFragment}
-   */
-  createFragment() {
-    return this._document.createDocumentFragment();
-  }
+  For colors: --color-{hue}-{intensity}
 
-  /**
-   * @param {string} data
-   * @return {!Node}
-   */
-  createTextNode(data) {
-    return this._document.createTextNode(data);
-  }
+  {intensity} is the Material Design tag - 700, A700, etc.
+*/
+.lh-vars {
+  /* Palette using Material Design Colors
+   * https://www.materialui.co/colors */
+  --color-amber-50: #FFF8E1;
+  --color-blue-200: #90CAF9;
+  --color-blue-900: #0D47A1;
+  --color-blue-A700: #2962FF;
+  --color-blue-primary: #06f;
+  --color-cyan-500: #00BCD4;
+  --color-gray-100: #F5F5F5;
+  --color-gray-300: #CFCFCF;
+  --color-gray-200: #E0E0E0;
+  --color-gray-400: #BDBDBD;
+  --color-gray-50: #FAFAFA;
+  --color-gray-500: #9E9E9E;
+  --color-gray-600: #757575;
+  --color-gray-700: #616161;
+  --color-gray-800: #424242;
+  --color-gray-900: #212121;
+  --color-gray: #000000;
+  --color-green-700: #080;
+  --color-green: #0c6;
+  --color-lime-400: #D3E156;
+  --color-orange-50: #FFF3E0;
+  --color-orange-700: #C33300;
+  --color-orange: #fa3;
+  --color-red-700: #c00;
+  --color-red: #f33;
+  --color-teal-600: #00897B;
+  --color-white: #FFFFFF;
 
+  /* Context-specific colors */
+  --color-average-secondary: var(--color-orange-700);
+  --color-average: var(--color-orange);
+  --color-fail-secondary: var(--color-red-700);
+  --color-fail: var(--color-red);
+  --color-hover: var(--color-gray-50);
+  --color-informative: var(--color-blue-900);
+  --color-pass-secondary: var(--color-green-700);
+  --color-pass: var(--color-green);
+  --color-not-applicable: var(--color-gray-600);
 
-  /**
-   * @template {string} T
-   * @param {Element} parentElem
-   * @param {T} elementName
-   * @param {string=} className
-   * @return {HTMLElementByTagName[T]}
-   */
-  createChildOf(parentElem, elementName, className) {
-    const element = this.createElement(elementName, className);
-    parentElem.append(element);
-    return element;
-  }
+  /* Component variables */
+  --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));
+  --audit-explanation-line-height: 16px;
+  --audit-group-margin-bottom: calc(var(--default-padding) * 6);
+  --audit-group-padding-vertical: 8px;
+  --audit-margin-horizontal: 5px;
+  --audit-padding-vertical: 8px;
+  --category-padding: calc(var(--default-padding) * 6) var(--edge-gap-padding) calc(var(--default-padding) * 4);
+  --chevron-line-stroke: var(--color-gray-600);
+  --chevron-size: 12px;
+  --default-padding: 8px;
+  --edge-gap-padding: calc(var(--default-padding) * 4);
+  --env-item-background-color: var(--color-gray-100);
+  --env-item-font-size: 28px;
+  --env-item-line-height: 36px;
+  --env-item-padding: 10px 0px;
+  --env-name-min-width: 220px;
+  --footer-padding-vertical: 16px;
+  --gauge-circle-size-big: 96px;
+  --gauge-circle-size: 48px;
+  --gauge-circle-size-sm: 32px;
+  --gauge-label-font-size-big: 18px;
+  --gauge-label-font-size: var(--report-font-size-secondary);
+  --gauge-label-line-height-big: 24px;
+  --gauge-label-line-height: var(--report-line-height-secondary);
+  --gauge-percentage-font-size-big: 38px;
+  --gauge-percentage-font-size: var(--report-font-size-secondary);
+  --gauge-wrapper-width: 120px;
+  --header-line-height: 24px;
+  --highlighter-background-color: var(--report-text-color);
+  --icon-square-size: calc(var(--score-icon-size) * 0.88);
+  --image-preview-size: 48px;
+  --link-color: var(--color-blue-primary);
+  --locale-selector-background-color: var(--color-white);
+  --metric-toggle-lines-fill: #7F7F7F;
+  --metric-value-font-size: calc(var(--report-font-size) * 1.8);
+  --metrics-toggle-background-color: var(--color-gray-200);
+  --plugin-badge-background-color: var(--color-white);
+  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);
+  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);
+  --plugin-icon-size: 65%;
+  --pwa-icon-margin: 0 var(--default-padding);
+  --pwa-icon-size: var(--topbar-logo-size);
+  --report-background-color: #fff;
+  --report-border-color-secondary: #ebebeb;
+  --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;
+  --report-font-family: Roboto, Helvetica, Arial, sans-serif;
+  --report-font-size: 14px;
+  --report-font-size-secondary: 12px;
+  --report-icon-size: var(--score-icon-background-size);
+  --report-line-height: 24px;
+  --report-line-height-secondary: 20px;
+  --report-monospace-font-size: calc(var(--report-font-size) * 0.85);
+  --report-text-color-secondary: var(--color-gray-800);
+  --report-text-color: var(--color-gray-900);
+  --report-content-max-width: calc(60 * var(--report-font-size)); /* defaults to 840px */
+  --report-content-min-width: 360px;
+  --report-content-max-width-minus-edge-gap: calc(var(--report-content-max-width) - var(--edge-gap-padding) * 2);
+  --score-container-padding: 8px;
+  --score-icon-background-size: 24px;
+  --score-icon-margin-left: 6px;
+  --score-icon-margin-right: 14px;
+  --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);
+  --score-icon-size: 12px;
+  --score-icon-size-big: 16px;
+  --screenshot-overlay-background: rgba(0, 0, 0, 0.3);
+  --section-padding-vertical: calc(var(--default-padding) * 6);
+  --snippet-background-color: var(--color-gray-50);
+  --snippet-color: #0938C2;
+  --sparkline-height: 5px;
+  --stackpack-padding-horizontal: 10px;
+  --sticky-header-background-color: var(--report-background-color);
+  --sticky-header-buffer: calc(var(--topbar-height) + var(--sticky-header-height));
+  --sticky-header-height: calc(var(--gauge-circle-size-sm) + var(--score-container-padding) * 2);
+  --table-group-header-background-color: #EEF1F4;
+  --table-group-header-text-color: var(--color-gray-700);
+  --table-higlight-background-color: #F5F7FA;
+  --tools-icon-color: var(--color-gray-600);
+  --topbar-background-color: var(--color-white);
+  --topbar-height: 32px;
+  --topbar-logo-size: 24px;
+  --topbar-padding: 0 8px;
+  --toplevel-warning-background-color: hsla(30, 100%, 75%, 10%);
+  --toplevel-warning-message-text-color: var(--color-average-secondary);
+  --toplevel-warning-padding: 18px;
+  --toplevel-warning-text-color: var(--report-text-color);
 
-  /**
-   * @param {import('./components.js').ComponentName} componentName
-   * @return {!DocumentFragment} A clone of the cached component.
-   */
-  createComponent(componentName) {
-    let component = this._componentCache.get(componentName);
-    if (component) {
-      const cloned = /** @type {DocumentFragment} */ (component.cloneNode(true));
-      // Prevent duplicate styles in the DOM. After a template has been stamped
-      // for the first time, remove the clone's styles so they're not re-added.
-      this.findAll('style', cloned).forEach(style => style.remove());
-      return cloned;
-    }
+  /* SVGs */
+  --plugin-icon-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="%23FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></svg>');
+  --plugin-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="%23757575"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></svg>');
 
-    component = createComponent(this, componentName);
-    this._componentCache.set(componentName, component);
-    const cloned = /** @type {DocumentFragment} */ (component.cloneNode(true));
-    return cloned;
-  }
+  --pass-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>check</title><path fill="%23178239" d="M24 4C12.95 4 4 12.95 4 24c0 11.04 8.95 20 20 20 11.04 0 20-8.96 20-20 0-11.05-8.96-20-20-20zm-4 30L10 24l2.83-2.83L20 28.34l15.17-15.17L38 16 20 34z"/></svg>');
+  --average-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>info</title><path fill="%23E67700" d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z"/></svg>');
+  --fail-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>warn</title><path fill="%23C7221F" d="M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z"/></svg>');
+  --error-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3 15"><title>error</title><path d="M0 15H 3V 12H 0V" fill="%23FF4E42"/><path d="M0 9H 3V 0H 0V" fill="%23FF4E42"/></svg>');
 
-  clearComponentCache() {
-    this._componentCache.clear();
-  }
+  --pwa-installable-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23DAE0E3" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
+  --pwa-optimized-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23DAE0E3" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>');
 
-  /**
-   * @param {string} text
-   * @param {{alwaysAppendUtmSource?: boolean}} opts
-   * @return {Element}
-   */
-  convertMarkdownLinkSnippets(text, opts = {}) {
-    const element = this.createElement('span');
+  --pwa-installable-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23424242" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
+  --pwa-optimized-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23424242" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>');
 
-    for (const segment of Util.splitMarkdownLink(text)) {
-      const processedSegment = segment.text.includes('`') ?
-        this.convertMarkdownCodeSnippets(segment.text) :
-        segment.text;
+  --pwa-installable-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><circle fill="%230CCE6B" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
+  --pwa-optimized-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%230CCE6B" width="24" height="24" rx="12"/><path d="M5 5h14v14H5z"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/></g></svg>');
 
-      if (!segment.isLink) {
-        // Plain text segment.
-        element.append(processedSegment);
-        continue;
-      }
+  --swap-locale-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></svg>');
+}
 
-      // Otherwise, append any links found.
-      const url = new URL(segment.linkHref);
+@media not print {
+  .lh-dark {
+    /* Pallete */
+    --color-gray-200: var(--color-gray-800);
+    --color-gray-300: #616161;
+    --color-gray-400: var(--color-gray-600);
+    --color-gray-700: var(--color-gray-400);
+    --color-gray-50: #757575;
+    --color-gray-600: var(--color-gray-500);
+    --color-green-700: var(--color-green);
+    --color-orange-700: var(--color-orange);
+    --color-red-700: var(--color-red);
+    --color-teal-600: var(--color-cyan-500);
 
-      const DOCS_ORIGINS = ['https://developers.google.com', 'https://web.dev', 'https://developer.chrome.com'];
-      if (DOCS_ORIGINS.includes(url.origin) || opts.alwaysAppendUtmSource) {
-        url.searchParams.set('utm_source', 'lighthouse');
-        url.searchParams.set('utm_medium', this._lighthouseChannel);
-      }
+    /* Context-specific colors */
+    --color-hover: rgba(0, 0, 0, 0.2);
+    --color-informative: var(--color-blue-200);
 
-      const a = this.createElement('a');
-      a.rel = 'noopener';
-      a.target = '_blank';
-      a.append(processedSegment);
-      this.safelySetHref(a, url.href);
-      element.append(a);
-    }
+    /* Component variables */
+    --env-item-background-color: #393535;
+    --link-color: var(--color-blue-200);
+    --locale-selector-background-color: var(--color-gray-200);
+    --plugin-badge-background-color: var(--color-gray-800);
+    --report-background-color: var(--color-gray-900);
+    --report-border-color-secondary: var(--color-gray-200);
+    --report-text-color-secondary: var(--color-gray-400);
+    --report-text-color: var(--color-gray-100);
+    --snippet-color: var(--color-cyan-500);
+    --topbar-background-color: var(--color-gray);
+    --toplevel-warning-background-color: hsl(33deg 14% 18%);
+    --toplevel-warning-message-text-color: var(--color-orange-700);
+    --toplevel-warning-text-color: var(--color-gray-100);
+    --table-group-header-background-color: rgba(186, 196, 206, 0.15);
+    --table-group-header-text-color: var(--color-gray-100);
+    --table-higlight-background-color: rgba(186, 196, 206, 0.09);
 
-    return element;
-  }
-
-  /**
-   * Set link href, but safely, preventing `javascript:` protocol, etc.
-   * @see https://github.com/google/safevalues/
-   * @param {HTMLAnchorElement} elem
-   * @param {string} url
-   */
-  safelySetHref(elem, url) {
-    // Defaults to '' to fix proto roundtrip issue. See https://github.com/GoogleChrome/lighthouse/issues/12868
-    url = url || '';
-
-    // In-page anchor links are safe.
-    if (url.startsWith('#')) {
-      elem.href = url;
-      return;
-    }
-
-    const allowedProtocols = ['https:', 'http:'];
-    let parsed;
-    try {
-      parsed = new URL(url);
-    } catch (_) {}
-
-    if (parsed && allowedProtocols.includes(parsed.protocol)) {
-      elem.href = parsed.href;
-    }
-  }
-
-  /**
-   * Only create blob URLs for JSON & HTML
-   * @param {HTMLAnchorElement} elem
-   * @param {Blob} blob
-   */
-  safelySetBlobHref(elem, blob) {
-    if (blob.type !== 'text/html' && blob.type !== 'application/json') {
-      throw new Error('Unsupported blob type');
-    }
-    const href = URL.createObjectURL(blob);
-    elem.href = href;
-  }
-
-  /**
-   * @param {string} markdownText
-   * @return {Element}
-   */
-  convertMarkdownCodeSnippets(markdownText) {
-    const element = this.createElement('span');
-
-    for (const segment of Util.splitMarkdownCodeSpans(markdownText)) {
-      if (segment.isCode) {
-        const pre = this.createElement('code');
-        pre.textContent = segment.text;
-        element.append(pre);
-      } else {
-        element.append(this._document.createTextNode(segment.text));
-      }
-    }
-
-    return element;
-  }
-
-  /**
-   * The channel to use for UTM data when rendering links to the documentation.
-   * @param {string} lighthouseChannel
-   */
-  setLighthouseChannel(lighthouseChannel) {
-    this._lighthouseChannel = lighthouseChannel;
-  }
-
-  /**
-   * ONLY use if `dom.rootEl` isn't sufficient for your needs. `dom.rootEl` is preferred
-   * for all scoping, because a document can have multiple reports within it.
-   * @return {Document}
-   */
-  document() {
-    return this._document;
-  }
-
-  /**
-   * TODO(paulirish): import and conditionally apply the DevTools frontend subclasses instead of this
-   * @return {boolean}
-   */
-  isDevTools() {
-    return !!this._document.querySelector('.lh-devtools');
-  }
-
-  /**
-   * Guaranteed context.querySelector. Always returns an element or throws if
-   * nothing matches query.
-   * @template {string} T
-   * @param {T} query
-   * @param {ParentNode} context
-   * @return {ParseSelector<T>}
-   */
-  find(query, context) {
-    const result = context.querySelector(query);
-    if (result === null) {
-      throw new Error(`query ${query} not found`);
-    }
-
-    // Because we control the report layout and templates, use the simpler
-    // `typed-query-selector` types that don't require differentiating between
-    // e.g. HTMLAnchorElement and SVGAElement. See https://github.com/GoogleChrome/lighthouse/issues/12011
-    return /** @type {ParseSelector<T>} */ (result);
-  }
-
-  /**
-   * Helper for context.querySelectorAll. Returns an Array instead of a NodeList.
-   * @template {string} T
-   * @param {T} query
-   * @param {ParentNode} context
-   */
-  findAll(query, context) {
-    const elements = Array.from(context.querySelectorAll(query));
-    return elements;
-  }
-
-  /**
-   * Fires a custom DOM event on target.
-   * @param {string} name Name of the event.
-   * @param {Node=} target DOM node to fire the event on.
-   * @param {*=} detail Custom data to include.
-   */
-  fireEventOn(name, target = this._document, detail) {
-    const event = new CustomEvent(name, detail ? {detail} : undefined);
-    target.dispatchEvent(event);
-  }
-
-  /**
-   * Downloads a file (blob) using a[download].
-   * @param {Blob|File} blob The file to save.
-   * @param {string} filename
-   */
-  saveFile(blob, filename) {
-    const a = this.createElement('a');
-    a.download = filename;
-    this.safelySetBlobHref(a, blob);
-    this._document.body.append(a); // Firefox requires anchor to be in the DOM.
-    a.click();
-
-    // cleanup.
-    this._document.body.removeChild(a);
-    setTimeout(() => URL.revokeObjectURL(a.href), 500);
+    /* SVGs */
+    --plugin-icon-url: var(--plugin-icon-url-dark);
+    --pwa-installable-gray-url: var(--pwa-installable-gray-url-dark);
+    --pwa-optimized-gray-url: var(--pwa-optimized-gray-url-dark);
   }
 }
 
+@media only screen and (max-width: 480px) {
+  .lh-vars {
+    --audit-group-margin-bottom: 20px;
+    --edge-gap-padding: var(--default-padding);
+    --env-name-min-width: 120px;
+    --gauge-circle-size-big: 96px;
+    --gauge-circle-size: 72px;
+    --gauge-label-font-size-big: 22px;
+    --gauge-label-font-size: 14px;
+    --gauge-label-line-height-big: 26px;
+    --gauge-label-line-height: 20px;
+    --gauge-percentage-font-size-big: 34px;
+    --gauge-percentage-font-size: 26px;
+    --gauge-wrapper-width: 112px;
+    --header-padding: 16px 0 16px 0;
+    --image-preview-size: 24px;
+    --plugin-icon-size: 75%;
+    --pwa-icon-margin: 0 7px 0 -3px;
+    --report-font-size: 14px;
+    --report-line-height: 20px;
+    --score-icon-margin-left: 2px;
+    --score-icon-size: 10px;
+    --topbar-height: 28px;
+    --topbar-logo-size: 20px;
+  }
+
+  /* Not enough space to adequately show the relative savings bars. */
+  .lh-sparkline {
+    display: none;
+  }
+}
+
+.lh-vars.lh-devtools {
+  --audit-explanation-line-height: 14px;
+  --audit-group-margin-bottom: 20px;
+  --audit-group-padding-vertical: 12px;
+  --audit-padding-vertical: 4px;
+  --category-padding: 12px;
+  --default-padding: 12px;
+  --env-name-min-width: 120px;
+  --footer-padding-vertical: 8px;
+  --gauge-circle-size-big: 72px;
+  --gauge-circle-size: 64px;
+  --gauge-label-font-size-big: 22px;
+  --gauge-label-font-size: 14px;
+  --gauge-label-line-height-big: 26px;
+  --gauge-label-line-height: 20px;
+  --gauge-percentage-font-size-big: 34px;
+  --gauge-percentage-font-size: 26px;
+  --gauge-wrapper-width: 97px;
+  --header-line-height: 20px;
+  --header-padding: 16px 0 16px 0;
+  --screenshot-overlay-background: transparent;
+  --plugin-icon-size: 75%;
+  --pwa-icon-margin: 0 7px 0 -3px;
+  --report-font-family-monospace: 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;
+  --report-font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;
+  --report-font-size: 12px;
+  --report-line-height: 20px;
+  --score-icon-margin-left: 2px;
+  --score-icon-size: 10px;
+  --section-padding-vertical: 8px;
+}
+
+.lh-container:not(.lh-topbar + .lh-container) {
+  --topbar-height: 0;
+  --sticky-header-height: 0;
+  --sticky-header-buffer: 0;
+}
+
+.lh-devtools.lh-root {
+  height: 100%;
+}
+.lh-devtools.lh-root img {
+  /* Override devtools default 'min-width: 0' so svg without size in a flexbox isn't collapsed. */
+  min-width: auto;
+}
+.lh-devtools .lh-container {
+  overflow-y: scroll;
+  height: calc(100% - var(--topbar-height));
+  /** The .lh-container is the scroll parent in DevTools so we exclude the topbar from the sticky header buffer. */
+  --sticky-header-buffer: calc(var(--sticky-header-height));
+}
+@media print {
+  .lh-devtools .lh-container {
+    overflow: unset;
+  }
+}
+.lh-devtools .lh-sticky-header {
+  /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container\` */
+  top: 0;
+}
+.lh-devtools .lh-element-screenshot__overlay {
+  position: absolute;
+}
+
+@keyframes fadeIn {
+  0% { opacity: 0;}
+  100% { opacity: 0.6;}
+}
+
+.lh-root *, .lh-root *::before, .lh-root *::after {
+  box-sizing: border-box;
+}
+
+.lh-root {
+  font-family: var(--report-font-family);
+  font-size: var(--report-font-size);
+  margin: 0;
+  line-height: var(--report-line-height);
+  background: var(--report-background-color);
+  color: var(--report-text-color);
+}
+
+.lh-root :focus-visible {
+    outline: -webkit-focus-ring-color auto 3px;
+}
+.lh-root summary:focus {
+    outline: none;
+    box-shadow: 0 0 0 1px hsl(217, 89%, 61%);
+}
+
+.lh-root [hidden] {
+  display: none !important;
+}
+
+.lh-root pre {
+  margin: 0;
+}
+
+.lh-root pre,
+.lh-root code {
+  font-family: var(--report-font-family-monospace);
+}
+
+.lh-root details > summary {
+  cursor: pointer;
+}
+
+.lh-hidden {
+  display: none !important;
+}
+
+.lh-container {
+  /*
+  Text wrapping in the report is so much FUN!
+  We have a \`word-break: break-word;\` globally here to prevent a few common scenarios, namely
+  long non-breakable text (usually URLs) found in:
+    1. The footer
+    2. .lh-node (outerHTML)
+    3. .lh-code
+
+  With that sorted, the next challenge is appropriate column sizing and text wrapping inside our
+  .lh-details tables. Even more fun.
+    * We don't want table headers ("Potential Savings (ms)") to wrap or their column values, but
+    we'd be happy for the URL column to wrap if the URLs are particularly long.
+    * We want the narrow columns to remain narrow, providing the most column width for URL
+    * We don't want the table to extend past 100% width.
+    * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters,
+      but they do not get any overflow:ellipsis treatment.
+  */
+  word-break: break-word;
+}
+
+.lh-audit-group a,
+.lh-category-header__description a,
+.lh-audit__description a,
+.lh-warnings a,
+.lh-footer a,
+.lh-table-column--link a {
+  color: var(--link-color);
+}
+
+.lh-audit__description, .lh-audit__stackpack {
+  --inner-audit-padding-right: var(--stackpack-padding-horizontal);
+  padding-left: var(--audit-description-padding-left);
+  padding-right: var(--inner-audit-padding-right);
+  padding-top: 8px;
+  padding-bottom: 8px;
+}
+
+.lh-details {
+  margin-top: var(--default-padding);
+  margin-bottom: var(--default-padding);
+  margin-left: var(--audit-description-padding-left);
+  /* whatever the .lh-details side margins are */
+  width: 100%;
+}
+
+.lh-audit__stackpack {
+  display: flex;
+  align-items: center;
+}
+
+.lh-audit__stackpack__img {
+  max-width: 30px;
+  margin-right: var(--default-padding)
+}
+
+/* Report header */
+
+.lh-report-icon {
+  display: flex;
+  align-items: center;
+  padding: 10px 12px;
+  cursor: pointer;
+}
+.lh-report-icon[disabled] {
+  opacity: 0.3;
+  pointer-events: none;
+}
+
+.lh-report-icon::before {
+  content: "";
+  margin: 4px;
+  background-repeat: no-repeat;
+  width: var(--report-icon-size);
+  height: var(--report-icon-size);
+  opacity: 0.7;
+  display: inline-block;
+  vertical-align: middle;
+}
+.lh-report-icon:hover::before {
+  opacity: 1;
+}
+.lh-dark .lh-report-icon::before {
+  filter: invert(1);
+}
+.lh-report-icon--print::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/><path fill="none" d="M0 0h24v24H0z"/></svg>');
+}
+.lh-report-icon--copy::before {
+  background-image: url('data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>');
+}
+.lh-report-icon--open::before {
+  background-image: url('data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"/></svg>');
+}
+.lh-report-icon--download::before {
+  background-image: url('data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>');
+}
+.lh-report-icon--dark::before {
+  background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 100 125"><path d="M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z"/></svg>');
+}
+.lh-report-icon--treemap::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="black"><path d="M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z"/></svg>');
+}
+.lh-report-icon--date::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 11h2v2H7v-2zm14-5v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h1V2h2v2h8V2h2v2h1a2 2 0 012 2zM5 8h14V6H5v2zm14 12V10H5v10h14zm-4-7h2v-2h-2v2zm-4 0h2v-2h-2v2z"/></svg>');
+}
+.lh-report-icon--devices::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 6h18V4H4a2 2 0 00-2 2v11H0v3h14v-3H4V6zm19 2h-6a1 1 0 00-1 1v10c0 .6.5 1 1 1h6c.6 0 1-.5 1-1V9c0-.6-.5-1-1-1zm-1 9h-4v-7h4v7z"/></svg>');
+}
+.lh-report-icon--world::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm7 6h-3c-.3-1.3-.8-2.5-1.4-3.6A8 8 0 0 1 18.9 8zm-7-4a14 14 0 0 1 2 4h-4a14 14 0 0 1 2-4zM4.3 14a8.2 8.2 0 0 1 0-4h3.3a16.5 16.5 0 0 0 0 4H4.3zm.8 2h3a14 14 0 0 0 1.3 3.6A8 8 0 0 1 5.1 16zm3-8H5a8 8 0 0 1 4.3-3.6L8 8zM12 20a14 14 0 0 1-2-4h4a14 14 0 0 1-2 4zm2.3-6H9.7a14.7 14.7 0 0 1 0-4h4.6a14.6 14.6 0 0 1 0 4zm.3 5.6c.6-1.2 1-2.4 1.4-3.6h3a8 8 0 0 1-4.4 3.6zm1.8-5.6a16.5 16.5 0 0 0 0-4h3.3a8.2 8.2 0 0 1 0 4h-3.3z"/></svg>');
+}
+.lh-report-icon--stopwatch::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.1-6.6L20.5 6l-1.4-1.4L17.7 6A9 9 0 0 0 3 13a9 9 0 1 0 16-5.6zm-7 12.6a7 7 0 1 1 0-14 7 7 0 0 1 0 14z"/></svg>');
+}
+.lh-report-icon--networkspeed::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.9 5c-.2 0-.3 0-.4.2v.2L10.1 17a2 2 0 0 0-.2 1 2 2 0 0 0 4 .4l2.4-12.9c0-.3-.2-.5-.5-.5zM1 9l2 2c2.9-2.9 6.8-4 10.5-3.6l1.2-2.7C10 3.8 4.7 5.3 1 9zm20 2 2-2a15.4 15.4 0 0 0-5.6-3.6L17 8.2c1.5.7 2.9 1.6 4.1 2.8zm-4 4 2-2a9.9 9.9 0 0 0-2.7-1.9l-.5 3 1.2.9zM5 13l2 2a7.1 7.1 0 0 1 4-2l1.3-2.9C9.7 10.1 7 11 5 13z"/></svg>');
+}
+.lh-report-icon--samples-one::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="7" cy="14" r="3"/><path d="M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>');
+}
+.lh-report-icon--samples-many::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/><circle cx="7" cy="14" r="3"/><circle cx="11" cy="6" r="3"/></svg>');
+}
+.lh-report-icon--chrome::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="-50 -50 562 562"><path d="M256 25.6v25.6a204 204 0 0 1 144.8 60 204 204 0 0 1 60 144.8 204 204 0 0 1-60 144.8 204 204 0 0 1-144.8 60 204 204 0 0 1-144.8-60 204 204 0 0 1-60-144.8 204 204 0 0 1 60-144.8 204 204 0 0 1 144.8-60V0a256 256 0 1 0 0 512 256 256 0 0 0 0-512v25.6z"/><path d="M256 179.2v25.6a51.3 51.3 0 0 1 0 102.4 51.3 51.3 0 0 1 0-102.4v-51.2a102.3 102.3 0 1 0-.1 204.7 102.3 102.3 0 0 0 .1-204.7v25.6z"/><path d="M256 204.8h217.6a25.6 25.6 0 0 0 0-51.2H256a25.6 25.6 0 0 0 0 51.2m44.3 76.8L191.5 470.1a25.6 25.6 0 1 0 44.4 25.6l108.8-188.5a25.6 25.6 0 1 0-44.4-25.6m-88.6 0L102.9 93.2a25.7 25.7 0 0 0-35-9.4 25.7 25.7 0 0 0-9.4 35l108.8 188.5a25.7 25.7 0 0 0 35 9.4 25.9 25.9 0 0 0 9.4-35.1"/></svg>');
+}
+.lh-report-icon--external::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><path d="M3.15 11.9a1.01 1.01 0 0 1-.743-.307 1.01 1.01 0 0 1-.306-.743v-7.7c0-.292.102-.54.306-.744a1.01 1.01 0 0 1 .744-.306H7v1.05H3.15v7.7h7.7V7h1.05v3.85c0 .291-.103.54-.307.743a1.01 1.01 0 0 1-.743.307h-7.7Zm2.494-2.8-.743-.744 5.206-5.206H8.401V2.1h3.5v3.5h-1.05V3.893L5.644 9.1Z"/></svg>');
+}
+
+.lh-buttons {
+  display: flex;
+  flex-wrap: wrap;
+  margin: var(--default-padding) 0;
+}
+.lh-button {
+  height: 32px;
+  border: 1px solid var(--report-border-color-secondary);
+  border-radius: 3px;
+  color: var(--link-color);
+  background-color: var(--report-background-color);
+  margin: 5px;
+}
+
+.lh-button:first-of-type {
+  margin-left: 0;
+}
+
+/* Node */
+.lh-node__snippet {
+  font-family: var(--report-font-family-monospace);
+  color: var(--snippet-color);
+  font-size: var(--report-monospace-font-size);
+  line-height: 20px;
+}
+
+/* Score */
+
+.lh-audit__score-icon {
+  width: var(--score-icon-size);
+  height: var(--score-icon-size);
+  margin: var(--score-icon-margin);
+}
+
+.lh-audit--pass .lh-audit__display-text {
+  color: var(--color-pass-secondary);
+}
+.lh-audit--pass .lh-audit__score-icon,
+.lh-scorescale-range--pass::before {
+  border-radius: 100%;
+  background: var(--color-pass);
+}
+
+.lh-audit--average .lh-audit__display-text {
+  color: var(--color-average-secondary);
+}
+.lh-audit--average .lh-audit__score-icon,
+.lh-scorescale-range--average::before {
+  background: var(--color-average);
+  width: var(--icon-square-size);
+  height: var(--icon-square-size);
+}
+
+.lh-audit--fail .lh-audit__display-text {
+  color: var(--color-fail-secondary);
+}
+.lh-audit--fail .lh-audit__score-icon,
+.lh-audit--error .lh-audit__score-icon,
+.lh-scorescale-range--fail::before {
+  border-left: calc(var(--score-icon-size) / 2) solid transparent;
+  border-right: calc(var(--score-icon-size) / 2) solid transparent;
+  border-bottom: var(--score-icon-size) solid var(--color-fail);
+}
+
+.lh-audit--error .lh-audit__score-icon,
+.lh-metric--error .lh-metric__icon {
+  background-image: var(--error-icon-url);
+  background-repeat: no-repeat;
+  background-position: center;
+  border: none;
+}
+
+.lh-gauge__wrapper--fail .lh-gauge--error {
+  background-image: var(--error-icon-url);
+  background-repeat: no-repeat;
+  background-position: center;
+  transform: scale(0.5);
+  top: var(--score-container-padding);
+}
+
+.lh-audit--manual .lh-audit__display-text,
+.lh-audit--notapplicable .lh-audit__display-text {
+  color: var(--color-gray-600);
+}
+.lh-audit--manual .lh-audit__score-icon,
+.lh-audit--notapplicable .lh-audit__score-icon {
+  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);
+  border-radius: 100%;
+  background: none;
+}
+
+.lh-audit--informative .lh-audit__display-text {
+  color: var(--color-gray-600);
+}
+
+.lh-audit--informative .lh-audit__score-icon {
+  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);
+  border-radius: 100%;
+}
+
+.lh-audit__description,
+.lh-audit__stackpack {
+  color: var(--report-text-color-secondary);
+}
+.lh-audit__adorn {
+  border: 1px solid var(--color-gray-500);
+  border-radius: 3px;
+  margin: 0 3px;
+  padding: 0 2px;
+  line-height: 1.1;
+  display: inline-block;
+  font-size: 90%;
+  color: var(--report-text-color-secondary);
+}
+
+.lh-category-header__description  {
+  text-align: center;
+  color: var(--color-gray-700);
+  margin: 0px auto;
+  max-width: 400px;
+}
+
+
+.lh-audit__display-text,
+.lh-load-opportunity__sparkline,
+.lh-chevron-container {
+  margin: 0 var(--audit-margin-horizontal);
+}
+.lh-chevron-container {
+  margin-right: 0;
+}
+
+.lh-audit__title-and-text {
+  flex: 1;
+}
+
+.lh-audit__title-and-text code {
+  color: var(--snippet-color);
+  font-size: var(--report-monospace-font-size);
+}
+
+/* Prepend display text with em dash separator. But not in Opportunities. */
+.lh-audit__display-text:not(:empty):before {
+  content: '\u2014';
+  margin-right: var(--audit-margin-horizontal);
+}
+.lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before {
+  display: none;
+}
+
+/* Expandable Details (Audit Groups, Audits) */
+.lh-audit__header {
+  display: flex;
+  align-items: center;
+  padding: var(--default-padding);
+}
+
+.lh-audit--load-opportunity .lh-audit__header {
+  display: block;
+}
+
+
+.lh-metricfilter {
+  display: grid;
+  justify-content: end;
+  align-items: center;
+  grid-auto-flow: column;
+  gap: 4px;
+  color: var(--color-gray-700);
+}
+
+.lh-metricfilter__radio {
+  /*
+   * Instead of hiding, position offscreen so it's still accessible to screen readers
+   * https://bugs.chromium.org/p/chromium/issues/detail?id=1439785
+   */
+  position: fixed;
+  left: -9999px;
+}
+.lh-metricfilter input[type='radio']:focus-visible + label {
+  outline: -webkit-focus-ring-color auto 1px;
+}
+
+.lh-metricfilter__label {
+  display: inline-flex;
+  padding: 0 4px;
+  height: 16px;
+  text-decoration: underline;
+  align-items: center;
+  cursor: pointer;
+  font-size: 90%;
+}
+
+.lh-metricfilter__label--active {
+  background: var(--color-blue-primary);
+  color: var(--color-white);
+  border-radius: 3px;
+  text-decoration: none;
+}
+/* Give the 'All' choice a more muted display */
+.lh-metricfilter__label--active[for="metric-All"] {
+  background-color: var(--color-blue-200) !important;
+  color: black !important;
+}
+
+.lh-metricfilter__text {
+  margin-right: 8px;
+}
+
+/* If audits are filtered, hide the itemcount for Passed Audits\u2026 */
+.lh-category--filtered .lh-audit-group .lh-audit-group__itemcount {
+  display: none;
+}
+
+
+.lh-audit__header:hover {
+  background-color: var(--color-hover);
+}
+
+/* We want to hide the browser's default arrow marker on summary elements. Admittedly, it's complicated. */
+.lh-root details > summary {
+  /* Blink 89+ and Firefox will hide the arrow when display is changed from (new) default of \`list-item\` to block.  https://chromestatus.com/feature/6730096436051968*/
+  display: block;
+}
+/* Safari and Blink <=88 require using the -webkit-details-marker selector */
+.lh-root details > summary::-webkit-details-marker {
+  display: none;
+}
+
+/* Perf Metric */
+
+.lh-metrics-container {
+  display: grid;
+  grid-auto-rows: 1fr;
+  grid-template-columns: 1fr 1fr;
+  grid-column-gap: var(--report-line-height);
+  margin-bottom: var(--default-padding);
+}
+
+.lh-metric {
+  border-top: 1px solid var(--report-border-color-secondary);
+}
+
+.lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(-n+2) {
+  border-bottom: 1px solid var(--report-border-color-secondary);
+}
+
+.lh-metric__innerwrap {
+  display: grid;
+  /**
+   * Icon -- Metric Name
+   *      -- Metric Value
+   */
+  grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 1fr;
+  align-items: center;
+  padding: var(--default-padding);
+}
+
+.lh-metric__details {
+  order: -1;
+}
+
+.lh-metric__title {
+  flex: 1;
+}
+
+.lh-calclink {
+  padding-left: calc(1ex / 3);
+}
+
+.lh-metric__description {
+  display: none;
+  grid-column-start: 2;
+  grid-column-end: 4;
+  color: var(--report-text-color-secondary);
+}
+
+.lh-metric__value {
+  font-size: var(--metric-value-font-size);
+  margin: calc(var(--default-padding) / 2) 0;
+  white-space: nowrap; /* No wrapping between metric value and the icon */
+  grid-column-start: 2;
+}
+
+
+@media screen and (max-width: 535px) {
+  .lh-metrics-container {
+    display: block;
+  }
+
+  .lh-metric {
+    border-bottom: none !important;
+  }
+  .lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(1) {
+    border-bottom: 1px solid var(--report-border-color-secondary) !important;
+  }
+
+  /* Change the grid to 3 columns for narrow viewport. */
+  .lh-metric__innerwrap {
+  /**
+   * Icon -- Metric Name -- Metric Value
+   */
+    grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;
+  }
+  .lh-metric__value {
+    justify-self: end;
+    grid-column-start: unset;
+  }
+}
+
+/* No-JS toggle switch */
+/* Keep this selector sync'd w/ \`magicSelector\` in report-ui-features-test.js */
+ .lh-metrics-toggle__input:checked ~ .lh-metrics-container .lh-metric__description {
+  display: block;
+}
+
+/* TODO get rid of the SVGS and clean up these some more */
+.lh-metrics-toggle__input {
+  opacity: 0;
+  position: absolute;
+  right: 0;
+  top: 0px;
+}
+
+.lh-metrics-toggle__input + div > label > .lh-metrics-toggle__labeltext--hide,
+.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--show {
+  display: none;
+}
+.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--hide {
+  display: inline;
+}
+.lh-metrics-toggle__input:focus + div > label {
+  outline: -webkit-focus-ring-color auto 3px;
+}
+
+.lh-metrics-toggle__label {
+  cursor: pointer;
+  font-size: var(--report-font-size-secondary);
+  line-height: var(--report-line-height-secondary);
+  color: var(--color-gray-700);
+}
+
+/* Pushes the metric description toggle button to the right. */
+.lh-audit-group--metrics .lh-audit-group__header {
+  display: flex;
+  justify-content: space-between;
+}
+
+.lh-metric__icon,
+.lh-scorescale-range::before {
+  content: '';
+  width: var(--score-icon-size);
+  height: var(--score-icon-size);
+  display: inline-block;
+  margin: var(--score-icon-margin);
+}
+
+.lh-metric--pass .lh-metric__value {
+  color: var(--color-pass-secondary);
+}
+.lh-metric--pass .lh-metric__icon {
+  border-radius: 100%;
+  background: var(--color-pass);
+}
+
+.lh-metric--average .lh-metric__value {
+  color: var(--color-average-secondary);
+}
+.lh-metric--average .lh-metric__icon {
+  background: var(--color-average);
+  width: var(--icon-square-size);
+  height: var(--icon-square-size);
+}
+
+.lh-metric--fail .lh-metric__value {
+  color: var(--color-fail-secondary);
+}
+.lh-metric--fail .lh-metric__icon {
+  border-left: calc(var(--score-icon-size) / 2) solid transparent;
+  border-right: calc(var(--score-icon-size) / 2) solid transparent;
+  border-bottom: var(--score-icon-size) solid var(--color-fail);
+}
+
+.lh-metric--error .lh-metric__value,
+.lh-metric--error .lh-metric__description {
+  color: var(--color-fail-secondary);
+}
+
+/* Perf load opportunity */
+
+.lh-load-opportunity__cols {
+  display: flex;
+  align-items: flex-start;
+}
+
+.lh-load-opportunity__header .lh-load-opportunity__col {
+  color: var(--color-gray-600);
+  display: unset;
+  line-height: calc(2.3 * var(--report-font-size));
+}
+
+.lh-load-opportunity__col {
+  display: flex;
+}
+
+.lh-load-opportunity__col--one {
+  flex: 5;
+  align-items: center;
+  margin-right: 2px;
+}
+.lh-load-opportunity__col--two {
+  flex: 4;
+  text-align: right;
+}
+
+.lh-audit--load-opportunity .lh-audit__display-text {
+  text-align: right;
+  flex: 0 0 7.5ch;
+}
+
+
+/* Sparkline */
+
+.lh-load-opportunity__sparkline {
+  flex: 1;
+  margin-top: calc((var(--report-line-height) - var(--sparkline-height)) / 2);
+}
+
+.lh-sparkline {
+  height: var(--sparkline-height);
+  width: 100%;
+}
+
+.lh-sparkline__bar {
+  height: 100%;
+  float: right;
+}
+
+.lh-audit--pass .lh-sparkline__bar {
+  background: var(--color-pass);
+}
+
+.lh-audit--average .lh-sparkline__bar {
+  background: var(--color-average);
+}
+
+.lh-audit--fail .lh-sparkline__bar {
+  background: var(--color-fail);
+}
+
+/* Filmstrip */
+
+.lh-filmstrip-container {
+  /* smaller gap between metrics and filmstrip */
+  margin: -8px auto 0 auto;
+}
+
+.lh-filmstrip {
+  display: grid;
+  justify-content: space-between;
+  padding-bottom: var(--default-padding);
+  width: 100%;
+  grid-template-columns: repeat(auto-fit, 90px);
+}
+
+.lh-filmstrip__frame {
+  text-align: right;
+  position: relative;
+}
+
+.lh-filmstrip__thumbnail {
+  border: 1px solid var(--report-border-color-secondary);
+  max-height: 150px;
+  max-width: 120px;
+}
+
+/* Audit */
+
+.lh-audit {
+  border-bottom: 1px solid var(--report-border-color-secondary);
+}
+
+/* Apply border-top to just the first audit. */
+.lh-audit {
+  border-top: 1px solid var(--report-border-color-secondary);
+}
+.lh-audit ~ .lh-audit {
+  border-top: none;
+}
+
+
+.lh-audit--error .lh-audit__display-text {
+  color: var(--color-fail-secondary);
+}
+
+/* Audit Group */
+
+.lh-audit-group {
+  margin-bottom: var(--audit-group-margin-bottom);
+  position: relative;
+}
+.lh-audit-group--metrics {
+  margin-bottom: calc(var(--audit-group-margin-bottom) / 2);
+}
+
+.lh-audit-group__header::before {
+  /* By default, groups don't get an icon */
+  content: none;
+  width: var(--pwa-icon-size);
+  height: var(--pwa-icon-size);
+  margin: var(--pwa-icon-margin);
+  display: inline-block;
+  vertical-align: middle;
+}
+
+/* Style the "over budget" columns red. */
+.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(4),
+.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(5),
+.lh-audit-group--budgets #timing-budget tbody tr td:nth-child(3) {
+  color: var(--color-red-700);
+}
+
+/* Align the "over budget request count" text to be close to the "over budget bytes" column. */
+.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){
+  text-align: right;
+}
+
+.lh-audit-group--budgets .lh-details--budget {
+  width: 100%;
+  margin: 0 0 var(--default-padding);
+}
+
+.lh-audit-group--pwa-installable .lh-audit-group__header::before {
+  content: '';
+  background-image: var(--pwa-installable-gray-url);
+}
+.lh-audit-group--pwa-optimized .lh-audit-group__header::before {
+  content: '';
+  background-image: var(--pwa-optimized-gray-url);
+}
+.lh-audit-group--pwa-installable.lh-badged .lh-audit-group__header::before {
+  background-image: var(--pwa-installable-color-url);
+}
+.lh-audit-group--pwa-optimized.lh-badged .lh-audit-group__header::before {
+  background-image: var(--pwa-optimized-color-url);
+}
+
+.lh-audit-group--metrics .lh-audit-group__summary {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+.lh-audit-group__summary {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.lh-audit-group__header .lh-chevron {
+  margin-top: calc((var(--report-line-height) - 5px) / 2);
+}
+
+.lh-audit-group__header {
+  letter-spacing: 0.8px;
+  padding: var(--default-padding);
+  padding-left: 0;
+}
+
+.lh-audit-group__header, .lh-audit-group__summary {
+  font-size: var(--report-font-size-secondary);
+  line-height: var(--report-line-height-secondary);
+  color: var(--color-gray-700);
+}
+
+.lh-audit-group__title {
+  text-transform: uppercase;
+  font-weight: 500;
+}
+
+.lh-audit-group__itemcount {
+  color: var(--color-gray-600);
+}
+
+.lh-audit-group__footer {
+  color: var(--color-gray-600);
+  display: block;
+  margin-top: var(--default-padding);
+}
+
+.lh-details,
+.lh-category-header__description,
+.lh-load-opportunity__header,
+.lh-audit-group__footer {
+  font-size: var(--report-font-size-secondary);
+  line-height: var(--report-line-height-secondary);
+}
+
+.lh-audit-explanation {
+  margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);
+  line-height: var(--audit-explanation-line-height);
+  display: inline-block;
+}
+
+.lh-audit--fail .lh-audit-explanation {
+  color: var(--color-fail-secondary);
+}
+
+/* Report */
+.lh-list > :not(:last-child) {
+  margin-bottom: calc(var(--default-padding) * 2);
+}
+
+.lh-header-container {
+  display: block;
+  margin: 0 auto;
+  position: relative;
+  word-wrap: break-word;
+}
+
+.lh-header-container .lh-scores-wrapper {
+  border-bottom: 1px solid var(--color-gray-200);
+}
+
+
+.lh-report {
+  min-width: var(--report-content-min-width);
+}
+
+.lh-exception {
+  font-size: large;
+}
+
+.lh-code {
+  white-space: normal;
+  margin-top: 0;
+  font-size: var(--report-monospace-font-size);
+}
+
+.lh-warnings {
+  --item-margin: calc(var(--report-line-height) / 6);
+  color: var(--color-average-secondary);
+  margin: var(--audit-padding-vertical) 0;
+  padding: var(--default-padding)
+    var(--default-padding)
+    var(--default-padding)
+    calc(var(--audit-description-padding-left));
+  background-color: var(--toplevel-warning-background-color);
+}
+.lh-warnings span {
+  font-weight: bold;
+}
+
+.lh-warnings--toplevel {
+  --item-margin: calc(var(--header-line-height) / 4);
+  color: var(--toplevel-warning-text-color);
+  margin-left: auto;
+  margin-right: auto;
+  max-width: var(--report-content-max-width-minus-edge-gap);
+  padding: var(--toplevel-warning-padding);
+  border-radius: 8px;
+}
+
+.lh-warnings__msg {
+  color: var(--toplevel-warning-message-text-color);
+  margin: 0;
+}
+
+.lh-warnings ul {
+  margin: 0;
+}
+.lh-warnings li {
+  margin: var(--item-margin) 0;
+}
+.lh-warnings li:last-of-type {
+  margin-bottom: 0;
+}
+
+.lh-scores-header {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+}
+.lh-scores-header__solo {
+  padding: 0;
+  border: 0;
+}
+
+/* Gauge */
+
+.lh-gauge__wrapper--pass {
+  color: var(--color-pass-secondary);
+  fill: var(--color-pass);
+  stroke: var(--color-pass);
+}
+
+.lh-gauge__wrapper--average {
+  color: var(--color-average-secondary);
+  fill: var(--color-average);
+  stroke: var(--color-average);
+}
+
+.lh-gauge__wrapper--fail {
+  color: var(--color-fail-secondary);
+  fill: var(--color-fail);
+  stroke: var(--color-fail);
+}
+
+.lh-gauge__wrapper--not-applicable {
+  color: var(--color-not-applicable);
+  fill: var(--color-not-applicable);
+  stroke: var(--color-not-applicable);
+}
+
+.lh-fraction__wrapper .lh-fraction__content::before {
+  content: '';
+  height: var(--score-icon-size);
+  width: var(--score-icon-size);
+  margin: var(--score-icon-margin);
+  display: inline-block;
+}
+.lh-fraction__wrapper--pass .lh-fraction__content {
+  color: var(--color-pass-secondary);
+}
+.lh-fraction__wrapper--pass .lh-fraction__background {
+  background-color: var(--color-pass);
+}
+.lh-fraction__wrapper--pass .lh-fraction__content::before {
+  background-color: var(--color-pass);
+  border-radius: 50%;
+}
+.lh-fraction__wrapper--average .lh-fraction__content {
+  color: var(--color-average-secondary);
+}
+.lh-fraction__wrapper--average .lh-fraction__background,
+.lh-fraction__wrapper--average .lh-fraction__content::before {
+  background-color: var(--color-average);
+}
+.lh-fraction__wrapper--fail .lh-fraction__content {
+  color: var(--color-fail);
+}
+.lh-fraction__wrapper--fail .lh-fraction__background {
+  background-color: var(--color-fail);
+}
+.lh-fraction__wrapper--fail .lh-fraction__content::before {
+  border-left: calc(var(--score-icon-size) / 2) solid transparent;
+  border-right: calc(var(--score-icon-size) / 2) solid transparent;
+  border-bottom: var(--score-icon-size) solid var(--color-fail);
+}
+.lh-fraction__wrapper--null .lh-fraction__content {
+  color: var(--color-gray-700);
+}
+.lh-fraction__wrapper--null .lh-fraction__background {
+  background-color: var(--color-gray-700);
+}
+.lh-fraction__wrapper--null .lh-fraction__content::before {
+  border-radius: 50%;
+  border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-700);
+}
+
+.lh-fraction__background {
+  position: absolute;
+  height: 100%;
+  width: 100%;
+  border-radius: calc(var(--gauge-circle-size) / 2);
+  opacity: 0.1;
+  z-index: -1;
+}
+
+.lh-fraction__content-wrapper {
+  height: var(--gauge-circle-size);
+  display: flex;
+  align-items: center;
+}
+
+.lh-fraction__content {
+  display: flex;
+  position: relative;
+  align-items: center;
+  justify-content: center;
+  font-size: calc(0.3 * var(--gauge-circle-size));
+  line-height: calc(0.4 * var(--gauge-circle-size));
+  width: max-content;
+  min-width: calc(1.5 * var(--gauge-circle-size));
+  padding: calc(0.1 * var(--gauge-circle-size)) calc(0.2 * var(--gauge-circle-size));
+  --score-icon-size: calc(0.21 * var(--gauge-circle-size));
+  --score-icon-margin: 0 calc(0.15 * var(--gauge-circle-size)) 0 0;
+}
+
+.lh-gauge {
+  stroke-linecap: round;
+  width: var(--gauge-circle-size);
+  height: var(--gauge-circle-size);
+}
+
+.lh-category .lh-gauge {
+  --gauge-circle-size: var(--gauge-circle-size-big);
+}
+
+.lh-gauge-base {
+  opacity: 0.1;
+}
+
+.lh-gauge-arc {
+  fill: none;
+  transform-origin: 50% 50%;
+  animation: load-gauge var(--transition-length) ease both;
+  animation-delay: 250ms;
+}
+
+.lh-gauge__svg-wrapper {
+  position: relative;
+  height: var(--gauge-circle-size);
+}
+.lh-category .lh-gauge__svg-wrapper,
+.lh-category .lh-fraction__wrapper {
+  --gauge-circle-size: var(--gauge-circle-size-big);
+}
+
+/* The plugin badge overlay */
+.lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {
+  width: var(--plugin-badge-size);
+  height: var(--plugin-badge-size);
+  background-color: var(--plugin-badge-background-color);
+  background-image: var(--plugin-icon-url);
+  background-repeat: no-repeat;
+  background-size: var(--plugin-icon-size);
+  background-position: 58% 50%;
+  content: "";
+  position: absolute;
+  right: -6px;
+  bottom: 0px;
+  display: block;
+  z-index: 100;
+  box-shadow: 0 0 4px rgba(0,0,0,.2);
+  border-radius: 25%;
+}
+.lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {
+  width: var(--plugin-badge-size-big);
+  height: var(--plugin-badge-size-big);
+}
+
+@keyframes load-gauge {
+  from { stroke-dasharray: 0 352; }
+}
+
+.lh-gauge__percentage {
+  width: 100%;
+  height: var(--gauge-circle-size);
+  position: absolute;
+  font-family: var(--report-font-family-monospace);
+  font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);
+  line-height: 0;
+  text-align: center;
+  top: calc(var(--score-container-padding) + var(--gauge-circle-size) / 2);
+}
+
+.lh-category .lh-gauge__percentage {
+  --gauge-circle-size: var(--gauge-circle-size-big);
+  --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);
+}
+
+.lh-gauge__wrapper,
+.lh-fraction__wrapper {
+  position: relative;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+  text-decoration: none;
+  padding: var(--score-container-padding);
+
+  --transition-length: 1s;
+
+  /* Contain the layout style paint & layers during animation*/
+  contain: content;
+  will-change: opacity; /* Only using for layer promotion */
+}
+
+.lh-gauge__label,
+.lh-fraction__label {
+  font-size: var(--gauge-label-font-size);
+  font-weight: 500;
+  line-height: var(--gauge-label-line-height);
+  margin-top: 10px;
+  text-align: center;
+  color: var(--report-text-color);
+  word-break: keep-all;
+}
+
+/* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */
+.lh-category .lh-gauge__label,
+.lh-category .lh-fraction__label {
+  --gauge-label-font-size: var(--gauge-label-font-size-big);
+  --gauge-label-line-height: var(--gauge-label-line-height-big);
+  margin-top: 14px;
+}
+
+.lh-scores-header .lh-gauge__wrapper,
+.lh-scores-header .lh-fraction__wrapper,
+.lh-scores-header .lh-gauge--pwa__wrapper,
+.lh-sticky-header .lh-gauge__wrapper,
+.lh-sticky-header .lh-fraction__wrapper,
+.lh-sticky-header .lh-gauge--pwa__wrapper {
+  width: var(--gauge-wrapper-width);
+}
+
+.lh-scorescale {
+  display: inline-flex;
+
+  gap: calc(var(--default-padding) * 4);
+  margin: 16px auto 0 auto;
+  font-size: var(--report-font-size-secondary);
+  color: var(--color-gray-700);
+
+}
+
+.lh-scorescale-range {
+  display: flex;
+  align-items: center;
+  font-family: var(--report-font-family-monospace);
+  white-space: nowrap;
+}
+
+.lh-category-header__finalscreenshot .lh-scorescale {
+  border: 0;
+  display: flex;
+  justify-content: center;
+}
+
+.lh-category-header__finalscreenshot .lh-scorescale-range {
+  font-family: unset;
+  font-size: 12px;
+}
+
+.lh-scorescale-wrap {
+  display: contents;
+}
+
+/* Hide category score gauages if it's a single category report */
+.lh-header--solo-category .lh-scores-wrapper {
+  display: none;
+}
+
+
+.lh-categories {
+  width: 100%;
+}
+
+.lh-category {
+  padding: var(--category-padding);
+  max-width: var(--report-content-max-width);
+  margin: 0 auto;
+
+  scroll-margin-top: var(--sticky-header-buffer);
+}
+
+.lh-category-wrapper {
+  border-bottom: 1px solid var(--color-gray-200);
+}
+.lh-category-wrapper:last-of-type {
+  border-bottom: 0;
+}
+
+.lh-category-header {
+  margin-bottom: var(--section-padding-vertical);
+}
+
+.lh-category-header .lh-score__gauge {
+  max-width: 400px;
+  width: auto;
+  margin: 0px auto;
+}
+
+.lh-category-header__finalscreenshot {
+  display: grid;
+  grid-template: none / 1fr 1px 1fr;
+  justify-items: center;
+  align-items: center;
+  gap: var(--report-line-height);
+  min-height: 288px;
+  margin-bottom: var(--default-padding);
+}
+
+.lh-final-ss-image {
+  /* constrain the size of the image to not be too large */
+  max-height: calc(var(--gauge-circle-size-big) * 2.8);
+  max-width: calc(var(--gauge-circle-size-big) * 3.5);
+  border: 1px solid var(--color-gray-200);
+  padding: 4px;
+  border-radius: 3px;
+  display: block;
+}
+
+.lh-category-headercol--separator {
+  background: var(--color-gray-200);
+  width: 1px;
+  height: var(--gauge-circle-size-big);
+}
+
+@media screen and (max-width: 780px) {
+  .lh-category-header__finalscreenshot {
+    grid-template: 1fr 1fr / none
+  }
+  .lh-category-headercol--separator {
+    display: none;
+  }
+}
+
+
+/* 964 fits the min-width of the filmstrip */
+@media screen and (max-width: 964px) {
+  .lh-report {
+    margin-left: 0;
+    width: 100%;
+  }
+}
+
+@media print {
+  body {
+    -webkit-print-color-adjust: exact; /* print background colors */
+  }
+  .lh-container {
+    display: block;
+  }
+  .lh-report {
+    margin-left: 0;
+    padding-top: 0;
+  }
+  .lh-categories {
+    margin-top: 0;
+  }
+}
+
+.lh-table {
+  position: relative;
+  border-collapse: separate;
+  border-spacing: 0;
+  /* Can't assign padding to table, so shorten the width instead. */
+  width: calc(100% - var(--audit-description-padding-left) - var(--stackpack-padding-horizontal));
+  border: 1px solid var(--report-border-color-secondary);
+}
+
+.lh-table thead th {
+  position: sticky;
+  top: calc(var(--sticky-header-buffer) + 1em);
+  z-index: 1;
+  background-color: var(--report-background-color);
+  border-bottom: 1px solid var(--report-border-color-secondary);
+  font-weight: normal;
+  color: var(--color-gray-600);
+  /* See text-wrapping comment on .lh-container. */
+  word-break: normal;
+}
+
+.lh-row--group {
+  background-color: var(--table-group-header-background-color);
+}
+
+.lh-row--group td {
+  font-weight: bold;
+  font-size: 1.05em;
+  color: var(--table-group-header-text-color);
+}
+
+.lh-row--group td:first-child {
+  font-weight: normal;
+}
+
+.lh-row--group .lh-text {
+  color: inherit;
+  text-decoration: none;
+  display: inline-block;
+}
+
+.lh-row--group a.lh-link:hover {
+  text-decoration: underline;
+}
+
+.lh-row--group .lh-audit__adorn {
+  text-transform: capitalize;
+  font-weight: normal;
+  padding: 2px 3px 1px 3px;
+}
+
+.lh-row--group .lh-audit__adorn1p {
+  color: var(--link-color);
+  border-color: var(--link-color);
+}
+
+.lh-row--group .lh-report-icon--external::before {
+  content: "";
+  background-repeat: no-repeat;
+  width: 14px;
+  height: 16px;
+  opacity: 0.7;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.lh-row--group .lh-report-icon--external {
+  display: none;
+}
+
+.lh-row--group:hover .lh-report-icon--external {
+  display: inline-block;
+}
+
+.lh-dark .lh-report-icon--external::before {
+  filter: invert(1);
+}
+
+/** Manages indentation of two-level and three-level nested adjacent rows */
+
+.lh-row--group ~ [data-entity]:not(.lh-row--group) td:first-child {
+  padding-left: 20px;
+}
+
+.lh-row--group ~ [data-entity]:not(.lh-row--group) ~ .lh-sub-item-row td:first-child {
+  padding-left: 40px;
+}
+
+.lh-row--even {
+  background-color: var(--table-group-header-background-color);
+}
+.lh-row--hidden {
+  display: none;
+}
+
+.lh-table th,
+.lh-table td {
+  padding: var(--default-padding);
+}
+
+.lh-table tr {
+  vertical-align: middle;
+}
+
+.lh-table tr:hover {
+  background-color: var(--table-higlight-background-color);
+}
+
+/* Looks unnecessary, but mostly for keeping the <th>s left-aligned */
+.lh-table-column--text,
+.lh-table-column--source-location,
+.lh-table-column--url,
+/* .lh-table-column--thumbnail, */
+/* .lh-table-column--empty,*/
+.lh-table-column--code,
+.lh-table-column--node {
+  text-align: left;
+}
+
+.lh-table-column--code {
+  min-width: 100px;
+}
+
+.lh-table-column--bytes,
+.lh-table-column--timespanMs,
+.lh-table-column--ms,
+.lh-table-column--numeric {
+  text-align: right;
+  word-break: normal;
+}
+
+
+
+.lh-table .lh-table-column--thumbnail {
+  width: var(--image-preview-size);
+}
+
+.lh-table-column--url {
+  min-width: 250px;
+}
+
+.lh-table-column--text {
+  min-width: 80px;
+}
+
+/* Keep columns narrow if they follow the URL column */
+/* 12% was determined to be a decent narrow width, but wide enough for column headings */
+.lh-table-column--url + th.lh-table-column--bytes,
+.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes,
+.lh-table-column--url + .lh-table-column--ms,
+.lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes,
+.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs {
+  width: 12%;
+}
+
+.lh-text__url-host {
+  display: inline;
+}
+
+.lh-text__url-host {
+  margin-left: calc(var(--report-font-size) / 2);
+  opacity: 0.6;
+  font-size: 90%
+}
+
+.lh-thumbnail {
+  object-fit: cover;
+  width: var(--image-preview-size);
+  height: var(--image-preview-size);
+  display: block;
+}
+
+.lh-unknown pre {
+  overflow: scroll;
+  border: solid 1px var(--color-gray-200);
+}
+
+.lh-text__url > a {
+  color: inherit;
+  text-decoration: none;
+}
+
+.lh-text__url > a:hover {
+  text-decoration: underline dotted #999;
+}
+
+.lh-sub-item-row {
+  margin-left: 20px;
+  margin-bottom: 0;
+  color: var(--color-gray-700);
+}
+
+.lh-sub-item-row td {
+  padding-top: 4px;
+  padding-bottom: 4px;
+  padding-left: 20px;
+}
+
+/* Chevron
+   https://codepen.io/paulirish/pen/LmzEmK
+ */
+.lh-chevron {
+  --chevron-angle: 42deg;
+  /* Edge doesn't support transform: rotate(calc(...)), so we define it here */
+  --chevron-angle-right: -42deg;
+  width: var(--chevron-size);
+  height: var(--chevron-size);
+  margin-top: calc((var(--report-line-height) - 12px) / 2);
+}
+
+.lh-chevron__lines {
+  transition: transform 0.4s;
+  transform: translateY(var(--report-line-height));
+}
+.lh-chevron__line {
+ stroke: var(--chevron-line-stroke);
+ stroke-width: var(--chevron-size);
+ stroke-linecap: square;
+ transform-origin: 50%;
+ transform: rotate(var(--chevron-angle));
+ transition: transform 300ms, stroke 300ms;
+}
+
+.lh-expandable-details .lh-chevron__line-right,
+.lh-expandable-details[open] .lh-chevron__line-left {
+ transform: rotate(var(--chevron-angle-right));
+}
+
+.lh-expandable-details[open] .lh-chevron__line-right {
+  transform: rotate(var(--chevron-angle));
+}
+
+
+.lh-expandable-details[open]  .lh-chevron__lines {
+ transform: translateY(calc(var(--chevron-size) * -1));
+}
+
+.lh-expandable-details[open] {
+  animation: 300ms openDetails forwards;
+  padding-bottom: var(--default-padding);
+}
+
+@keyframes openDetails {
+  from {
+    outline: 1px solid var(--report-background-color);
+  }
+  to {
+   outline: 1px solid;
+   box-shadow: 0 2px 4px rgba(0, 0, 0, .24);
+  }
+}
+
+@media screen and (max-width: 780px) {
+  /* no black outline if we're not confident the entire table can be displayed within bounds */
+  .lh-expandable-details[open] {
+    animation: none;
+  }
+}
+
+.lh-expandable-details[open] summary, details.lh-clump > summary {
+  border-bottom: 1px solid var(--report-border-color-secondary);
+}
+details.lh-clump[open] > summary {
+  border-bottom-width: 0;
+}
+
+
+
+details .lh-clump-toggletext--hide,
+details[open] .lh-clump-toggletext--show { display: none; }
+details[open] .lh-clump-toggletext--hide { display: block;}
+
+
+/* Tooltip */
+.lh-tooltip-boundary {
+  position: relative;
+}
+
+.lh-tooltip {
+  position: absolute;
+  display: none; /* Don't retain these layers when not needed */
+  opacity: 0;
+  background: #ffffff;
+  white-space: pre-line; /* Render newlines in the text */
+  min-width: 246px;
+  max-width: 275px;
+  padding: 15px;
+  border-radius: 5px;
+  text-align: initial;
+  line-height: 1.4;
+}
+/* shrink tooltips to not be cutoff on left edge of narrow viewports
+   45vw is chosen to be ~= width of the left column of metrics
+*/
+@media screen and (max-width: 535px) {
+  .lh-tooltip {
+    min-width: 45vw;
+    padding: 3vw;
+  }
+}
+
+.lh-tooltip-boundary:hover .lh-tooltip {
+  display: block;
+  animation: fadeInTooltip 250ms;
+  animation-fill-mode: forwards;
+  animation-delay: 850ms;
+  bottom: 100%;
+  z-index: 1;
+  will-change: opacity;
+  right: 0;
+  pointer-events: none;
+}
+
+.lh-tooltip::before {
+  content: "";
+  border: solid transparent;
+  border-bottom-color: #fff;
+  border-width: 10px;
+  position: absolute;
+  bottom: -20px;
+  right: 6px;
+  transform: rotate(180deg);
+  pointer-events: none;
+}
+
+@keyframes fadeInTooltip {
+  0% { opacity: 0; }
+  75% { opacity: 1; }
+  100% { opacity: 1;  filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; }
+}
+
+/* Element screenshot */
+.lh-element-screenshot {
+  float: left;
+  margin-right: 20px;
+}
+.lh-element-screenshot__content {
+  overflow: hidden;
+  min-width: 110px;
+  display: flex;
+  justify-content: center;
+  background-color: var(--report-background-color);
+}
+.lh-element-screenshot__image {
+  position: relative;
+  /* Set by ElementScreenshotRenderer.installFullPageScreenshotCssVariable */
+  background-image: var(--element-screenshot-url);
+  outline: 2px solid #777;
+  background-color: white;
+  background-repeat: no-repeat;
+}
+.lh-element-screenshot__mask {
+  position: absolute;
+  background: #555;
+  opacity: 0.8;
+}
+.lh-element-screenshot__element-marker {
+  position: absolute;
+  outline: 2px solid var(--color-lime-400);
+}
+.lh-element-screenshot__overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 2000; /* .lh-topbar is 1000 */
+  background: var(--screenshot-overlay-background);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  cursor: zoom-out;
+}
+
+.lh-element-screenshot__overlay .lh-element-screenshot {
+  margin-right: 0; /* clearing margin used in thumbnail case */
+  outline: 1px solid var(--color-gray-700);
+}
+
+.lh-screenshot-overlay--enabled .lh-element-screenshot {
+  cursor: zoom-out;
+}
+.lh-screenshot-overlay--enabled .lh-node .lh-element-screenshot {
+  cursor: zoom-in;
+}
+
+
+.lh-meta__items {
+  --meta-icon-size: calc(var(--report-icon-size) * 0.667);
+  padding: var(--default-padding);
+  display: grid;
+  grid-template-columns: 1fr 1fr 1fr;
+  background-color: var(--env-item-background-color);
+  border-radius: 3px;
+  margin: 0 0 var(--default-padding) 0;
+  font-size: 12px;
+  column-gap: var(--default-padding);
+  color: var(--color-gray-700);
+}
+
+.lh-meta__item {
+  display: block;
+  list-style-type: none;
+  position: relative;
+  padding: 0 0 0 calc(var(--meta-icon-size) + var(--default-padding) * 2);
+  cursor: unset; /* disable pointer cursor from report-icon */
+}
+
+.lh-meta__item.lh-tooltip-boundary {
+  text-decoration: dotted underline var(--color-gray-500);
+  cursor: help;
+}
+
+.lh-meta__item.lh-report-icon::before {
+  position: absolute;
+  left: var(--default-padding);
+  width: var(--meta-icon-size);
+  height: var(--meta-icon-size);
+}
+
+.lh-meta__item.lh-report-icon:hover::before {
+  opacity: 0.7;
+}
+
+.lh-meta__item .lh-tooltip {
+  color: var(--color-gray-800);
+}
+
+.lh-meta__item .lh-tooltip::before {
+  right: auto; /* Set the tooltip arrow to the leftside */
+  left: 6px;
+}
+
+/* Change the grid for narrow viewport. */
+@media screen and (max-width: 640px) {
+  .lh-meta__items {
+    grid-template-columns: 1fr 1fr;
+  }
+}
+@media screen and (max-width: 535px) {
+  .lh-meta__items {
+    display: block;
+  }
+}
+
+
+/*# sourceURL=report-styles.css */
+`),e.append(t),e}function Pe(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
+    .lh-topbar {
+      position: sticky;
+      top: 0;
+      left: 0;
+      right: 0;
+      z-index: 1000;
+      display: flex;
+      align-items: center;
+      height: var(--topbar-height);
+      padding: var(--topbar-padding);
+      font-size: var(--report-font-size-secondary);
+      background-color: var(--topbar-background-color);
+      border-bottom: 1px solid var(--color-gray-200);
+    }
+
+    .lh-topbar__logo {
+      width: var(--topbar-logo-size);
+      height: var(--topbar-logo-size);
+      user-select: none;
+      flex: none;
+    }
+
+    .lh-topbar__url {
+      margin: var(--topbar-padding);
+      text-decoration: none;
+      color: var(--report-text-color);
+      text-overflow: ellipsis;
+      overflow: hidden;
+      white-space: nowrap;
+    }
+
+    .lh-tools {
+      display: flex;
+      align-items: center;
+      margin-left: auto;
+      will-change: transform;
+      min-width: var(--report-icon-size);
+    }
+    .lh-tools__button {
+      width: var(--report-icon-size);
+      min-width: 24px;
+      height: var(--report-icon-size);
+      cursor: pointer;
+      margin-right: 5px;
+      /* This is actually a button element, but we want to style it like a transparent div. */
+      display: flex;
+      background: none;
+      color: inherit;
+      border: none;
+      padding: 0;
+      font: inherit;
+      outline: inherit;
+    }
+    .lh-tools__button svg {
+      fill: var(--tools-icon-color);
+    }
+    .lh-dark .lh-tools__button svg {
+      filter: invert(1);
+    }
+    .lh-tools__button.lh-active + .lh-tools__dropdown {
+      opacity: 1;
+      clip: rect(-1px, 194px, 270px, -3px);
+      visibility: visible;
+    }
+    .lh-tools__dropdown {
+      position: absolute;
+      background-color: var(--report-background-color);
+      border: 1px solid var(--report-border-color);
+      border-radius: 3px;
+      padding: calc(var(--default-padding) / 2) 0;
+      cursor: pointer;
+      top: 36px;
+      right: 0;
+      box-shadow: 1px 1px 3px #ccc;
+      min-width: 125px;
+      clip: rect(0, 164px, 0, 0);
+      visibility: hidden;
+      opacity: 0;
+      transition: all 200ms cubic-bezier(0,0,0.2,1);
+    }
+    .lh-tools__dropdown a {
+      color: currentColor;
+      text-decoration: none;
+      white-space: nowrap;
+      padding: 0 6px;
+      line-height: 2;
+    }
+    .lh-tools__dropdown a:hover,
+    .lh-tools__dropdown a:focus {
+      background-color: var(--color-gray-200);
+      outline: none;
+    }
+    /* save-gist option hidden in report. */
+    .lh-tools__dropdown a[data-action='save-gist'] {
+      display: none;
+    }
+
+    .lh-locale-selector {
+      width: 100%;
+      color: var(--report-text-color);
+      background-color: var(--locale-selector-background-color);
+      padding: 2px;
+    }
+    .lh-tools-locale {
+      display: flex;
+      align-items: center;
+      flex-direction: row-reverse;
+    }
+    .lh-tools-locale__selector-wrapper {
+      transition: opacity 0.15s;
+      opacity: 0;
+      max-width: 200px;
+    }
+    .lh-button.lh-tool-locale__button {
+      height: var(--topbar-height);
+      color: var(--tools-icon-color);
+      padding: calc(var(--default-padding) / 2);
+    }
+    .lh-tool-locale__button.lh-active + .lh-tools-locale__selector-wrapper {
+      opacity: 1;
+      clip: rect(-1px, 194px, 242px, -3px);
+      visibility: visible;
+      margin: 0 4px;
+    }
+
+    @media screen and (max-width: 964px) {
+      .lh-tools__dropdown {
+        right: 0;
+        left: initial;
+      }
+    }
+    @media print {
+      .lh-topbar {
+        position: static;
+        margin-left: 0;
+      }
+
+      .lh-tools__dropdown {
+        display: none;
+      }
+    }
+  `),e.append(t);let n=o.createElement("div","lh-topbar"),r=o.createElementNS("http://www.w3.org/2000/svg","svg","lh-topbar__logo");r.setAttribute("role","img"),r.setAttribute("title","Lighthouse logo"),r.setAttribute("fill","none"),r.setAttribute("xmlns","http://www.w3.org/2000/svg"),r.setAttribute("viewBox","0 0 48 48");let i=o.createElementNS("http://www.w3.org/2000/svg","path");i.setAttribute("d","m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z"),i.setAttribute("fill","#F63");let a=o.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d","M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z"),a.setAttribute("fill","#FFA385");let l=o.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("fill","#FF3"),l.setAttribute("d","M20.5 10h7v7h-7z"),r.append(" ",i," ",a," ",l," ");let s=o.createElement("a","lh-topbar__url");s.setAttribute("href",""),s.setAttribute("target","_blank"),s.setAttribute("rel","noopener");let c=o.createElement("div","lh-tools"),d=o.createElement("div","lh-tools-locale lh-hidden"),p=o.createElement("button","lh-button lh-tool-locale__button");p.setAttribute("id","lh-button__swap-locales"),p.setAttribute("title","Show Language Picker"),p.setAttribute("aria-label","Toggle language picker"),p.setAttribute("aria-haspopup","menu"),p.setAttribute("aria-expanded","false"),p.setAttribute("aria-controls","lh-tools-locale__selector-wrapper");let h=o.createElementNS("http://www.w3.org/2000/svg","svg");h.setAttribute("width","20px"),h.setAttribute("height","20px"),h.setAttribute("viewBox","0 0 24 24"),h.setAttribute("fill","currentColor");let u=o.createElementNS("http://www.w3.org/2000/svg","path");u.setAttribute("d","M0 0h24v24H0V0z"),u.setAttribute("fill","none");let f=o.createElementNS("http://www.w3.org/2000/svg","path");f.setAttribute("d","M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"),h.append(u,f),p.append(" ",h," ");let b=o.createElement("div","lh-tools-locale__selector-wrapper");b.setAttribute("id","lh-tools-locale__selector-wrapper"),b.setAttribute("role","menu"),b.setAttribute("aria-labelledby","lh-button__swap-locales"),b.setAttribute("aria-hidden","true"),b.append(" "," "),d.append(" ",p," ",b," ");let _=o.createElement("button","lh-tools__button");_.setAttribute("id","lh-tools-button"),_.setAttribute("title","Tools menu"),_.setAttribute("aria-label","Toggle report tools menu"),_.setAttribute("aria-haspopup","menu"),_.setAttribute("aria-expanded","false"),_.setAttribute("aria-controls","lh-tools-dropdown");let m=o.createElementNS("http://www.w3.org/2000/svg","svg");m.setAttribute("width","100%"),m.setAttribute("height","100%"),m.setAttribute("viewBox","0 0 24 24");let w=o.createElementNS("http://www.w3.org/2000/svg","path");w.setAttribute("d","M0 0h24v24H0z"),w.setAttribute("fill","none");let v=o.createElementNS("http://www.w3.org/2000/svg","path");v.setAttribute("d","M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"),m.append(" ",w," ",v," "),_.append(" ",m," ");let x=o.createElement("div","lh-tools__dropdown");x.setAttribute("id","lh-tools-dropdown"),x.setAttribute("role","menu"),x.setAttribute("aria-labelledby","lh-tools-button");let E=o.createElement("a","lh-report-icon lh-report-icon--print");E.setAttribute("role","menuitem"),E.setAttribute("tabindex","-1"),E.setAttribute("href","#"),E.setAttribute("data-i18n","dropdownPrintSummary"),E.setAttribute("data-action","print-summary");let A=o.createElement("a","lh-report-icon lh-report-icon--print");A.setAttribute("role","menuitem"),A.setAttribute("tabindex","-1"),A.setAttribute("href","#"),A.setAttribute("data-i18n","dropdownPrintExpanded"),A.setAttribute("data-action","print-expanded");let C=o.createElement("a","lh-report-icon lh-report-icon--copy");C.setAttribute("role","menuitem"),C.setAttribute("tabindex","-1"),C.setAttribute("href","#"),C.setAttribute("data-i18n","dropdownCopyJSON"),C.setAttribute("data-action","copy");let L=o.createElement("a","lh-report-icon lh-report-icon--download lh-hidden");L.setAttribute("role","menuitem"),L.setAttribute("tabindex","-1"),L.setAttribute("href","#"),L.setAttribute("data-i18n","dropdownSaveHTML"),L.setAttribute("data-action","save-html");let S=o.createElement("a","lh-report-icon lh-report-icon--download");S.setAttribute("role","menuitem"),S.setAttribute("tabindex","-1"),S.setAttribute("href","#"),S.setAttribute("data-i18n","dropdownSaveJSON"),S.setAttribute("data-action","save-json");let z=o.createElement("a","lh-report-icon lh-report-icon--open");z.setAttribute("role","menuitem"),z.setAttribute("tabindex","-1"),z.setAttribute("href","#"),z.setAttribute("data-i18n","dropdownViewer"),z.setAttribute("data-action","open-viewer");let M=o.createElement("a","lh-report-icon lh-report-icon--open");M.setAttribute("role","menuitem"),M.setAttribute("tabindex","-1"),M.setAttribute("href","#"),M.setAttribute("data-i18n","dropdownSaveGist"),M.setAttribute("data-action","save-gist");let T=o.createElement("a","lh-report-icon lh-report-icon--open lh-hidden");T.setAttribute("role","menuitem"),T.setAttribute("tabindex","-1"),T.setAttribute("href","#"),T.setAttribute("data-i18n","dropdownViewUnthrottledTrace"),T.setAttribute("data-action","view-unthrottled-trace");let F=o.createElement("a","lh-report-icon lh-report-icon--dark");return F.setAttribute("role","menuitem"),F.setAttribute("tabindex","-1"),F.setAttribute("href","#"),F.setAttribute("data-i18n","dropdownDarkTheme"),F.setAttribute("data-action","toggle-dark"),x.append(" ",E," ",A," ",C," "," ",L," ",S," ",z," ",M," "," ",T," ",F," "),c.append(" ",d," ",_," ",x," "),n.append(" "," ",r," ",s," ",c," "),e.append(n),e}function He(o){let e=o.createFragment(),t=o.createElement("div","lh-warnings lh-warnings--toplevel"),n=o.createElement("p","lh-warnings__msg"),r=o.createElement("ul");return t.append(" ",n," ",r," "),e.append(t),e}function Y(o,e){switch(e){case"3pFilter":return ue(o);case"audit":return ge(o);case"categoryHeader":return me(o);case"chevron":return fe(o);case"clump":return be(o);case"crc":return ve(o);case"crcChain":return _e(o);case"elementScreenshot":return we(o);case"footer":return ye(o);case"fraction":return xe(o);case"gauge":return Ee(o);case"gaugePwa":return ke(o);case"heading":return Ae(o);case"metric":return Se(o);case"opportunity":return Ce(o);case"opportunityHeader":return ze(o);case"scorescale":return Le(o);case"scoresWrapper":return Me(o);case"snippet":return Te(o);case"snippetContent":return Fe(o);case"snippetHeader":return De(o);case"snippetLine":return Re(o);case"styles":return Ne(o);case"topbar":return Pe(o);case"warningsToplevel":return He(o)}throw new Error("unexpected component: "+e)}var I=class{constructor(e,t){this._document=e,this._lighthouseChannel="unknown",this._componentCache=new Map,this.rootEl=t}createElement(e,t){let n=this._document.createElement(e);if(t)for(let r of t.split(/\s+/))r&&n.classList.add(r);return n}createElementNS(e,t,n){let r=this._document.createElementNS(e,t);if(n)for(let i of n.split(/\s+/))i&&r.classList.add(i);return r}createFragment(){return this._document.createDocumentFragment()}createTextNode(e){return this._document.createTextNode(e)}createChildOf(e,t,n){let r=this.createElement(t,n);return e.append(r),r}createComponent(e){let t=this._componentCache.get(e);if(t){let r=t.cloneNode(!0);return this.findAll("style",r).forEach(i=>i.remove()),r}return t=Y(this,e),this._componentCache.set(e,t),t.cloneNode(!0)}clearComponentCache(){this._componentCache.clear()}convertMarkdownLinkSnippets(e,t={}){let n=this.createElement("span");for(let r of k.splitMarkdownLink(e)){let i=r.text.includes("`")?this.convertMarkdownCodeSnippets(r.text):r.text;if(!r.isLink){n.append(i);continue}let a=new URL(r.linkHref);(["https://developers.google.com","https://web.dev","https://developer.chrome.com"].includes(a.origin)||t.alwaysAppendUtmSource)&&(a.searchParams.set("utm_source","lighthouse"),a.searchParams.set("utm_medium",this._lighthouseChannel));let s=this.createElement("a");s.rel="noopener",s.target="_blank",s.append(i),this.safelySetHref(s,a.href),n.append(s)}return n}safelySetHref(e,t){if(t=t||"",t.startsWith("#")){e.href=t;return}let n=["https:","http:"],r;try{r=new URL(t)}catch{}r&&n.includes(r.protocol)&&(e.href=r.href)}safelySetBlobHref(e,t){if(t.type!=="text/html"&&t.type!=="application/json")throw new Error("Unsupported blob type");let n=URL.createObjectURL(t);e.href=n}convertMarkdownCodeSnippets(e){let t=this.createElement("span");for(let n of k.splitMarkdownCodeSpans(e))if(n.isCode){let r=this.createElement("code");r.textContent=n.text,t.append(r)}else t.append(this._document.createTextNode(n.text));return t}setLighthouseChannel(e){this._lighthouseChannel=e}document(){return this._document}isDevTools(){return!!this._document.querySelector(".lh-devtools")}find(e,t){let n=t.querySelector(e);if(n===null)throw new Error(`query ${e} not found`);return n}findAll(e,t){return Array.from(t.querySelectorAll(e))}fireEventOn(e,t=this._document,n){let r=new CustomEvent(e,n?{detail:n}:void 0);t.dispatchEvent(r)}saveFile(e,t){let n=this.createElement("a");n.download=t,this.safelySetBlobHref(n,e),this._document.body.append(n),n.click(),this._document.body.removeChild(n),setTimeout(()=>URL.revokeObjectURL(n.href),500)}};var X=0,g=class o{static i18n=null;static strings={};static reportJson=null;static apply(e){o.strings={...ee,...e.providedStrings},o.i18n=e.i18n,o.reportJson=e.reportJson}static getUniqueSuffix(){return X++}static resetUniqueSuffix(){X=0}};var te="data:image/jpeg;base64,";function ne(o){o.configSettings.locale||(o.configSettings.locale="en"),o.configSettings.formFactor||(o.configSettings.formFactor=o.configSettings.emulatedFormFactor),o.finalDisplayedUrl=k.getFinalDisplayedUrl(o),o.mainDocumentUrl=k.getMainDocumentUrl(o);for(let n of Object.values(o.audits))if((n.scoreDisplayMode==="not_applicable"||n.scoreDisplayMode==="not-applicable")&&(n.scoreDisplayMode="notApplicable"),n.details){if((n.details.type===void 0||n.details.type==="diagnostic")&&(n.details.type="debugdata"),n.details.type==="filmstrip")for(let r of n.details.items)r.data.startsWith(te)||(r.data=te+r.data);if(n.details.type==="table")for(let r of n.details.headings){let{itemType:i,text:a}=r;i!==void 0&&(r.valueType=i,delete r.itemType),a!==void 0&&(r.label=a,delete r.text);let l=r.subItemsHeading?.itemType;r.subItemsHeading&&l!==void 0&&(r.subItemsHeading.valueType=l,delete r.subItemsHeading.itemType)}if(n.id==="third-party-summary"&&(n.details.type==="opportunity"||n.details.type==="table")){let{headings:r,items:i}=n.details;if(r[0].valueType==="link"){r[0].valueType="text";for(let a of i)typeof a.entity=="object"&&a.entity.type==="link"&&(a.entity=a.entity.text);n.details.isEntityGrouped=!0}}}let[e]=o.lighthouseVersion.split(".").map(Number),t=o.categories.performance;if(e<9&&t){o.categoryGroups||(o.categoryGroups={}),o.categoryGroups.hidden={title:""};for(let n of t.auditRefs)n.group?["load-opportunities","diagnostics"].includes(n.group)&&delete n.group:n.group="hidden"}if(o.environment||(o.environment={benchmarkIndex:0,networkUserAgent:o.userAgent,hostUserAgent:o.userAgent}),o.configSettings.screenEmulation||(o.configSettings.screenEmulation={width:-1,height:-1,deviceScaleFactor:-1,mobile:/mobile/i.test(o.environment.hostUserAgent),disabled:!1}),o.i18n||(o.i18n={}),o.audits["full-page-screenshot"]){let n=o.audits["full-page-screenshot"].details;n?o.fullPageScreenshot={screenshot:n.screenshot,nodes:n.nodes}:o.fullPageScreenshot=null,delete o.audits["full-page-screenshot"]}}var R=k.RATINGS,y=class o{static prepareReportResult(e){let t=JSON.parse(JSON.stringify(e));ne(t);for(let r of Object.values(t.audits))r.details&&(r.details.type==="opportunity"||r.details.type==="table")&&!r.details.isEntityGrouped&&t.entities&&o.classifyEntities(t.entities,r.details);if(typeof t.categories!="object")throw new Error("No categories provided.");let n=new Map;for(let r of Object.values(t.categories))r.auditRefs.forEach(i=>{i.relevantAudits&&i.relevantAudits.forEach(a=>{let l=n.get(a)||[];l.push(i),n.set(a,l)})}),r.auditRefs.forEach(i=>{let a=t.audits[i.id];i.result=a,n.has(i.id)&&(i.relevantMetrics=n.get(i.id)),t.stackPacks&&t.stackPacks.forEach(l=>{l.descriptions[i.id]&&(i.stackPacks=i.stackPacks||[],i.stackPacks.push({title:l.title,iconDataURL:l.iconDataURL,description:l.descriptions[i.id]}))})});return t}static getUrlLocatorFn(e){let t=e.find(r=>r.valueType==="url")?.key;if(t&&typeof t=="string")return r=>{let i=r[t];if(typeof i=="string")return i};let n=e.find(r=>r.valueType==="source-location")?.key;if(n)return r=>{let i=r[n];if(typeof i=="object"&&i.type==="source-location")return i.url}}static classifyEntities(e,t){let{items:n,headings:r}=t;if(!n.length||n.some(a=>a.entity))return;let i=o.getUrlLocatorFn(r);if(i)for(let a of n){let l=i(a);if(!l)continue;let s="";try{s=k.parseURL(l).origin}catch{}if(!s)continue;let c=e.find(d=>d.origins.includes(s));c&&(a.entity=c.name)}}static getTableItemSortComparator(e){return(t,n)=>{for(let r of e){let i=t[r],a=n[r];if((typeof i!=typeof a||!["number","string"].includes(typeof i))&&console.warn(`Warning: Attempting to sort unsupported value type: ${r}.`),typeof i=="number"&&typeof a=="number"&&i!==a)return a-i;if(typeof i=="string"&&typeof a=="string"&&i!==a)return i.localeCompare(a)}return 0}}static getEmulationDescriptions(e){let t,n,r,i=e.throttling,a=g.i18n,l=g.strings;switch(e.throttlingMethod){case"provided":r=n=t=l.throttlingProvided;break;case"devtools":{let{cpuSlowdownMultiplier:h,requestLatencyMs:u}=i;t=`${a.formatNumber(h)}x slowdown (DevTools)`,n=`${a.formatMilliseconds(u)} HTTP RTT, ${a.formatKbps(i.downloadThroughputKbps)} down, ${a.formatKbps(i.uploadThroughputKbps)} up (DevTools)`,r=(()=>u===150*3.75&&i.downloadThroughputKbps===1.6*1024*.9&&i.uploadThroughputKbps===750*.9)()?l.runtimeSlow4g:l.runtimeCustom;break}case"simulate":{let{cpuSlowdownMultiplier:h,rttMs:u,throughputKbps:f}=i;t=`${a.formatNumber(h)}x slowdown (Simulated)`,n=`${a.formatMilliseconds(u)} TCP RTT, ${a.formatKbps(f)} throughput (Simulated)`,r=(()=>u===150&&f===1.6*1024)()?l.runtimeSlow4g:l.runtimeCustom;break}default:r=t=n=l.runtimeUnknown}let s=e.channel==="devtools"?!1:e.screenEmulation.disabled,c=e.channel==="devtools"?e.formFactor==="mobile":e.screenEmulation.mobile,d=l.runtimeMobileEmulation;s?d=l.runtimeNoEmulation:c||(d=l.runtimeDesktopEmulation);let p=s?void 0:`${e.screenEmulation.width}x${e.screenEmulation.height}, DPR ${e.screenEmulation.deviceScaleFactor}`;return{deviceEmulation:d,screenEmulation:p,cpuThrottling:t,networkThrottling:n,summary:r}}static showAsPassed(e){switch(e.scoreDisplayMode){case"manual":case"notApplicable":return!0;case"error":case"informative":return!1;case"numeric":case"binary":default:return Number(e.score)>=R.PASS.minScore}}static calculateRating(e,t){if(t==="manual"||t==="notApplicable")return R.PASS.label;if(t==="error")return R.ERROR.label;if(e===null)return R.FAIL.label;let n=R.FAIL.label;return e>=R.PASS.minScore?n=R.PASS.label:e>=R.AVERAGE.minScore&&(n=R.AVERAGE.label),n}static calculateCategoryFraction(e){let t=0,n=0,r=0,i=0;for(let a of e.auditRefs){let l=o.showAsPassed(a.result);if(!(a.group==="hidden"||a.result.scoreDisplayMode==="manual"||a.result.scoreDisplayMode==="notApplicable")){if(a.result.scoreDisplayMode==="informative"){l||++r;continue}++t,i+=a.weight,l&&n++}}return{numPassed:n,numPassableAudits:t,numInformative:r,totalWeight:i}}static isPluginCategory(e){return e.startsWith("lighthouse-plugin-")}static shouldDisplayAsFraction(e){return e==="timespan"||e==="snapshot"}},ee={varianceDisclaimer:"Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.",calculatorLink:"See calculator.",showRelevantAudits:"Show audits relevant to:",opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Estimated Savings",errorMissingAuditInfo:"Report error: no audit information",errorLabel:"Error!",warningHeader:"Warnings: ",warningAuditsGroupTitle:"Passed audits but with warnings",passedAuditsGroupTitle:"Passed audits",notApplicableAuditsGroupTitle:"Not applicable",manualAuditsGroupTitle:"Additional items to manually check",toplevelWarningsMessage:"There were issues affecting this run of Lighthouse:",crcInitialNavigation:"Initial Navigation",crcLongestDurationLabel:"Maximum critical path latency:",snippetExpandButtonLabel:"Expand snippet",snippetCollapseButtonLabel:"Collapse snippet",lsPerformanceCategoryDescription:"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",labDataTitle:"Lab Data",thirdPartyResourcesLabel:"Show 3rd-party resources",viewTreemapLabel:"View Treemap",viewTraceLabel:"View Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",dropdownViewUnthrottledTrace:"View Unthrottled Trace",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"Unthrottled CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",runtimeSettingsScreenEmulation:"Screen emulation",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G Power",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling",firstPartyChipLabel:"1st party",openInANewTabTooltip:"Open in a new tab",unattributable:"Unattributable"};var N=class{constructor(e,t){this.dom=e,this.detailsRenderer=t}get _clumpTitles(){return{warning:g.strings.warningAuditsGroupTitle,manual:g.strings.manualAuditsGroupTitle,passed:g.strings.passedAuditsGroupTitle,notApplicable:g.strings.notApplicableAuditsGroupTitle}}renderAudit(e){let t=this.dom.createComponent("audit");return this.populateAuditValues(e,t)}populateAuditValues(e,t){let n=g.strings,r=this.dom.find(".lh-audit",t);r.id=e.result.id;let i=e.result.scoreDisplayMode;e.result.displayValue&&(this.dom.find(".lh-audit__display-text",r).textContent=e.result.displayValue);let a=this.dom.find(".lh-audit__title",r);a.append(this.dom.convertMarkdownCodeSnippets(e.result.title));let l=this.dom.find(".lh-audit__description",r);l.append(this.dom.convertMarkdownLinkSnippets(e.result.description));for(let h of e.relevantMetrics||[]){let u=this.dom.createChildOf(l,"span","lh-audit__adorn");u.title=`Relevant to ${h.result.title}`,u.textContent=h.acronym||h.id}e.stackPacks&&e.stackPacks.forEach(h=>{let u=this.dom.createElement("img","lh-audit__stackpack__img");u.src=h.iconDataURL,u.alt=h.title;let f=this.dom.convertMarkdownLinkSnippets(h.description,{alwaysAppendUtmSource:!0}),b=this.dom.createElement("div","lh-audit__stackpack");b.append(u,f),this.dom.find(".lh-audit__stackpacks",r).append(b)});let s=this.dom.find("details",r);if(e.result.details){let h=this.detailsRenderer.render(e.result.details);h&&(h.classList.add("lh-details"),s.append(h))}if(this.dom.find(".lh-chevron-container",r).append(this._createChevron()),this._setRatingClass(r,e.result.score,i),e.result.scoreDisplayMode==="error"){r.classList.add("lh-audit--error");let h=this.dom.find(".lh-audit__display-text",r);h.textContent=n.errorLabel,h.classList.add("lh-tooltip-boundary");let u=this.dom.createChildOf(h,"div","lh-tooltip lh-tooltip--error");u.textContent=e.result.errorMessage||n.errorMissingAuditInfo}else if(e.result.explanation){let h=this.dom.createChildOf(a,"div","lh-audit-explanation");h.textContent=e.result.explanation}let c=e.result.warnings;if(!c||c.length===0)return r;let d=this.dom.find("summary",s),p=this.dom.createChildOf(d,"div","lh-warnings");if(this.dom.createChildOf(p,"span").textContent=n.warningHeader,c.length===1)p.append(this.dom.createTextNode(c.join("")));else{let h=this.dom.createChildOf(p,"ul");for(let u of c){let f=this.dom.createChildOf(h,"li");f.textContent=u}}return r}injectFinalScreenshot(e,t,n){let r=t["final-screenshot"];if(!r||r.scoreDisplayMode==="error"||!r.details||r.details.type!=="screenshot")return null;let i=this.dom.createElement("img","lh-final-ss-image"),a=r.details.data;i.src=a,i.alt=r.title;let l=this.dom.find(".lh-category .lh-category-header",e),s=this.dom.createElement("div","lh-category-headercol"),c=this.dom.createElement("div","lh-category-headercol lh-category-headercol--separator"),d=this.dom.createElement("div","lh-category-headercol");s.append(...l.childNodes),s.append(n),d.append(i),l.append(s,c,d),l.classList.add("lh-category-header__finalscreenshot")}_createChevron(){let e=this.dom.createComponent("chevron");return this.dom.find("svg.lh-chevron",e)}_setRatingClass(e,t,n){let r=y.calculateRating(t,n);return e.classList.add(`lh-audit--${n.toLowerCase()}`),n!=="informative"&&e.classList.add(`lh-audit--${r}`),e}renderCategoryHeader(e,t,n){let r=this.dom.createComponent("categoryHeader"),i=this.dom.find(".lh-score__gauge",r),a=this.renderCategoryScore(e,t,n);if(i.append(a),e.description){let l=this.dom.convertMarkdownLinkSnippets(e.description);this.dom.find(".lh-category-header__description",r).append(l)}return r}renderAuditGroup(e){let t=this.dom.createElement("div","lh-audit-group"),n=this.dom.createElement("div","lh-audit-group__header");this.dom.createChildOf(n,"span","lh-audit-group__title").textContent=e.title,t.append(n);let r=null;return e.description&&(r=this.dom.convertMarkdownLinkSnippets(e.description),r.classList.add("lh-audit-group__description","lh-audit-group__footer"),t.append(r)),[t,r]}_renderGroupedAudits(e,t){let n=new Map,r="NotAGroup";n.set(r,[]);for(let a of e){let l=a.group||r;if(l==="hidden")continue;let s=n.get(l)||[];s.push(a),n.set(l,s)}let i=[];for(let[a,l]of n){if(a===r){for(let p of l)i.push(this.renderAudit(p));continue}let s=t[a],[c,d]=this.renderAuditGroup(s);for(let p of l)c.insertBefore(this.renderAudit(p),d);c.classList.add(`lh-audit-group--${a}`),i.push(c)}return i}renderUnexpandableClump(e,t){let n=this.dom.createElement("div");return this._renderGroupedAudits(e,t).forEach(i=>n.append(i)),n}renderClump(e,{auditRefs:t,description:n,openByDefault:r}){let i=this.dom.createComponent("clump"),a=this.dom.find(".lh-clump",i);r&&a.setAttribute("open","");let l=this.dom.find(".lh-audit-group__header",a),s=this._clumpTitles[e];this.dom.find(".lh-audit-group__title",l).textContent=s;let c=this.dom.find(".lh-audit-group__itemcount",a);c.textContent=`(${t.length})`;let d=t.map(this.renderAudit.bind(this));a.append(...d);let p=this.dom.find(".lh-audit-group",i);if(n){let h=this.dom.convertMarkdownLinkSnippets(n);h.classList.add("lh-audit-group__description","lh-audit-group__footer"),p.append(h)}return this.dom.find(".lh-clump-toggletext--show",p).textContent=g.strings.show,this.dom.find(".lh-clump-toggletext--hide",p).textContent=g.strings.hide,a.classList.add(`lh-clump--${e.toLowerCase()}`),p}renderCategoryScore(e,t,n){let r;if(n&&y.shouldDisplayAsFraction(n.gatherMode)?r=this.renderCategoryFraction(e):r=this.renderScoreGauge(e,t),n?.omitLabel&&this.dom.find(".lh-gauge__label,.lh-fraction__label",r).remove(),n?.onPageAnchorRendered){let i=this.dom.find("a",r);n.onPageAnchorRendered(i)}return r}renderScoreGauge(e,t){let n=this.dom.createComponent("gauge"),r=this.dom.find("a.lh-gauge__wrapper",n);y.isPluginCategory(e.id)&&r.classList.add("lh-gauge__wrapper--plugin");let i=Number(e.score),a=this.dom.find(".lh-gauge",n),l=this.dom.find("circle.lh-gauge-arc",a);l&&this._setGaugeArc(l,i);let s=Math.round(i*100),c=this.dom.find("div.lh-gauge__percentage",n);return c.textContent=s.toString(),e.score===null&&(c.classList.add("lh-gauge--error"),c.textContent="",c.title=g.strings.errorLabel),e.auditRefs.length===0||this.hasApplicableAudits(e)?r.classList.add(`lh-gauge__wrapper--${y.calculateRating(e.score)}`):(r.classList.add("lh-gauge__wrapper--not-applicable"),c.textContent="-",c.title=g.strings.notApplicableAuditsGroupTitle),this.dom.find(".lh-gauge__label",n).textContent=e.title,n}renderCategoryFraction(e){let t=this.dom.createComponent("fraction"),n=this.dom.find("a.lh-fraction__wrapper",t),{numPassed:r,numPassableAudits:i,totalWeight:a}=y.calculateCategoryFraction(e),l=r/i,s=this.dom.find(".lh-fraction__content",t),c=this.dom.createElement("span");c.textContent=`${r}/${i}`,s.append(c);let d=y.calculateRating(l);return a===0&&(d="null"),n.classList.add(`lh-fraction__wrapper--${d}`),this.dom.find(".lh-fraction__label",t).textContent=e.title,t}hasApplicableAudits(e){return e.auditRefs.some(t=>t.result.scoreDisplayMode!=="notApplicable")}_setGaugeArc(e,t){let n=2*Math.PI*Number(e.getAttribute("r")),r=Number(e.getAttribute("stroke-width")),i=.25*r/n;e.style.transform=`rotate(${-90+i*360}deg)`;let a=t*n-r/2;t===0&&(e.style.opacity="0"),t===1&&(a=n),e.style.strokeDasharray=`${Math.max(a,0)} ${n}`}_auditHasWarning(e){return!!e.result.warnings?.length}_getClumpIdForAuditRef(e){let t=e.result.scoreDisplayMode;return t==="manual"||t==="notApplicable"?t:y.showAsPassed(e.result)?this._auditHasWarning(e)?"warning":"passed":"failed"}render(e,t={},n){let r=this.dom.createElement("div","lh-category");r.id=e.id,r.append(this.renderCategoryHeader(e,t,n));let i=new Map;i.set("failed",[]),i.set("warning",[]),i.set("manual",[]),i.set("passed",[]),i.set("notApplicable",[]);for(let l of e.auditRefs){let s=this._getClumpIdForAuditRef(l),c=i.get(s);c.push(l),i.set(s,c)}for(let l of i.values())l.sort((s,c)=>c.weight-s.weight);let a=i.get("failed")?.length;for(let[l,s]of i){if(s.length===0)continue;if(l==="failed"){let h=this.renderUnexpandableClump(s,t);h.classList.add("lh-clump--failed"),r.append(h);continue}let c=l==="manual"?e.manualDescription:void 0,d=l==="warning"||l==="manual"&&a===0,p=this.renderClump(l,{auditRefs:s,description:c,openByDefault:d});r.append(p)}return r}};var O=class{static initTree(e){let t=0,n=Object.keys(e);return n.length>0&&(t=e[n[0]].request.startTime),{tree:e,startTime:t,transferSize:0}}static createSegment(e,t,n,r,i,a){let l=e[t],s=Object.keys(e),c=s.indexOf(t)===s.length-1,d=!!l.children&&Object.keys(l.children).length>0,p=Array.isArray(i)?i.slice(0):[];return typeof a<"u"&&p.push(!a),{node:l,isLastChild:c,hasChildren:d,startTime:n,transferSize:r+l.request.transferSize,treeMarkers:p}}static createChainNode(e,t,n){let r=e.createComponent("crcChain");e.find(".lh-crc-node",r).setAttribute("title",t.node.request.url);let i=e.find(".lh-crc-node__tree-marker",r);t.treeMarkers.forEach(p=>{let h=p?"lh-tree-marker lh-vert":"lh-tree-marker";i.append(e.createElement("span",h),e.createElement("span","lh-tree-marker"))});let a=t.isLastChild?"lh-tree-marker lh-up-right":"lh-tree-marker lh-vert-right",l=t.hasChildren?"lh-tree-marker lh-horiz-down":"lh-tree-marker lh-right";i.append(e.createElement("span",a),e.createElement("span","lh-tree-marker lh-right"),e.createElement("span",l));let s=t.node.request.url,c=n.renderTextURL(s),d=e.find(".lh-crc-node__tree-value",r);if(d.append(c),!t.hasChildren){let{startTime:p,endTime:h,transferSize:u}=t.node.request,f=e.createElement("span","lh-crc-node__chain-duration");f.textContent=" - "+g.i18n.formatMilliseconds((h-p)*1e3)+", ";let b=e.createElement("span","lh-crc-node__chain-duration");b.textContent=g.i18n.formatBytesToKiB(u,.01),d.append(f,b)}return r}static buildTree(e,t,n,r,i,a){if(r.append(H.createChainNode(e,n,a)),n.node.children)for(let l of Object.keys(n.node.children)){let s=H.createSegment(n.node.children,l,n.startTime,n.transferSize,n.treeMarkers,n.isLastChild);H.buildTree(e,t,s,r,i,a)}}static render(e,t,n){let r=e.createComponent("crc"),i=e.find(".lh-crc",r);e.find(".lh-crc-initial-nav",r).textContent=g.strings.crcInitialNavigation,e.find(".lh-crc__longest_duration_label",r).textContent=g.strings.crcLongestDurationLabel,e.find(".lh-crc__longest_duration",r).textContent=g.i18n.formatMilliseconds(t.longestChain.duration);let a=H.initTree(t.chains);for(let l of Object.keys(a.tree)){let s=H.createSegment(a.tree,l,a.startTime,a.transferSize);H.buildTree(e,r,s,i,t,n)}return e.find(".lh-crc-container",r)}},H=O;function Ue(o,e){return e.left<=o.width&&0<=e.right&&e.top<=o.height&&0<=e.bottom}function re(o,e,t){return o<e?e:o>t?t:o}function Ie(o){return{x:o.left+o.width/2,y:o.top+o.height/2}}var P=class o{static getScreenshotPositions(e,t,n){let r=Ie(e),i=re(r.x-t.width/2,0,n.width-t.width),a=re(r.y-t.height/2,0,n.height-t.height);return{screenshot:{left:i,top:a},clip:{left:e.left-i,top:e.top-a}}}static renderClipPathInScreenshot(e,t,n,r,i){let a=e.find("clipPath",t),l=`clip-${g.getUniqueSuffix()}`;a.id=l,t.style.clipPath=`url(#${l})`;let s=n.top/i.height,c=s+r.height/i.height,d=n.left/i.width,p=d+r.width/i.width,h=[`0,0             1,0            1,${s}          0,${s}`,`0,${c}     1,${c}    1,1               0,1`,`0,${s}        ${d},${s} ${d},${c} 0,${c}`,`${p},${s} 1,${s}       1,${c}       ${p},${c}`];for(let u of h){let f=e.createElementNS("http://www.w3.org/2000/svg","polygon");f.setAttribute("points",u),a.append(f)}}static installFullPageScreenshot(e,t){e.style.setProperty("--element-screenshot-url",`url('${t.data}')`)}static installOverlayFeature(e){let{dom:t,rootEl:n,overlayContainerEl:r,fullPageScreenshot:i}=e,a="lh-screenshot-overlay--enabled";n.classList.contains(a)||(n.classList.add(a),n.addEventListener("click",l=>{let s=l.target;if(!s)return;let c=s.closest(".lh-node > .lh-element-screenshot");if(!c)return;let d=t.createElement("div","lh-element-screenshot__overlay");r.append(d);let p={width:d.clientWidth*.95,height:d.clientHeight*.8},h={width:Number(c.dataset.rectWidth),height:Number(c.dataset.rectHeight),left:Number(c.dataset.rectLeft),right:Number(c.dataset.rectLeft)+Number(c.dataset.rectWidth),top:Number(c.dataset.rectTop),bottom:Number(c.dataset.rectTop)+Number(c.dataset.rectHeight)},u=o.render(t,i.screenshot,h,p);if(!u){d.remove();return}d.append(u),d.addEventListener("click",()=>d.remove())}))}static _computeZoomFactor(e,t){let r={x:t.width/e.width,y:t.height/e.height},i=.75*Math.min(r.x,r.y);return Math.min(1,i)}static render(e,t,n,r){if(!Ue(t,n))return null;let i=e.createComponent("elementScreenshot"),a=e.find("div.lh-element-screenshot",i);a.dataset.rectWidth=n.width.toString(),a.dataset.rectHeight=n.height.toString(),a.dataset.rectLeft=n.left.toString(),a.dataset.rectTop=n.top.toString();let l=this._computeZoomFactor(n,r),s={width:r.width/l,height:r.height/l};s.width=Math.min(t.width,s.width),s.height=Math.min(t.height,s.height);let c={width:s.width*l,height:s.height*l},d=o.getScreenshotPositions(n,s,{width:t.width,height:t.height}),p=e.find("div.lh-element-screenshot__image",a);p.style.width=c.width+"px",p.style.height=c.height+"px",p.style.backgroundPositionY=-(d.screenshot.top*l)+"px",p.style.backgroundPositionX=-(d.screenshot.left*l)+"px",p.style.backgroundSize=`${t.width*l}px ${t.height*l}px`;let h=e.find("div.lh-element-screenshot__element-marker",a);h.style.width=n.width*l+"px",h.style.height=n.height*l+"px",h.style.left=d.clip.left*l+"px",h.style.top=d.clip.top*l+"px";let u=e.find("div.lh-element-screenshot__mask",a);return u.style.width=c.width+"px",u.style.height=c.height+"px",o.renderClipPathInScreenshot(e,u,d.clip,n,s),a}};var Oe=["http://","https://","data:"],Ve=["bytes","numeric","ms","timespanMs"],V=class{constructor(e,t={}){this._dom=e,this._fullPageScreenshot=t.fullPageScreenshot,this._entities=t.entities}render(e){switch(e.type){case"filmstrip":return this._renderFilmstrip(e);case"list":return this._renderList(e);case"table":case"opportunity":return this._renderTable(e);case"criticalrequestchain":return O.render(this._dom,e,this);case"screenshot":case"debugdata":case"treemap-data":return null;default:return this._renderUnknown(e.type,e)}}_renderBytes(e){let t=g.i18n.formatBytesToKiB(e.value,e.granularity||.1),n=this._renderText(t);return n.title=g.i18n.formatBytes(e.value),n}_renderMilliseconds(e){let t;return e.displayUnit==="duration"?t=g.i18n.formatDuration(e.value):t=g.i18n.formatMilliseconds(e.value,e.granularity||10),this._renderText(t)}renderTextURL(e){let t=e,n,r,i;try{let l=k.parseURL(t);n=l.file==="/"?l.origin:l.file,r=l.file==="/"||l.hostname===""?"":`(${l.hostname})`,i=t}catch{n=t}let a=this._dom.createElement("div","lh-text__url");if(a.append(this._renderLink({text:n,url:t})),r){let l=this._renderText(r);l.classList.add("lh-text__url-host"),a.append(l)}return i&&(a.title=t,a.dataset.url=t),a}_renderLink(e){let t=this._dom.createElement("a");if(this._dom.safelySetHref(t,e.url),!t.href){let n=this._renderText(e.text);return n.classList.add("lh-link"),n}return t.rel="noopener",t.target="_blank",t.textContent=e.text,t.classList.add("lh-link"),t}_renderText(e){let t=this._dom.createElement("div","lh-text");return t.textContent=e,t}_renderNumeric(e){let t=g.i18n.formatNumber(e.value,e.granularity||.1),n=this._dom.createElement("div","lh-numeric");return n.textContent=t,n}_renderThumbnail(e){let t=this._dom.createElement("img","lh-thumbnail"),n=e;return t.src=n,t.title=n,t.alt="",t}_renderUnknown(e,t){console.error(`Unknown details type: ${e}`,t);let n=this._dom.createElement("details","lh-unknown");return this._dom.createChildOf(n,"summary").textContent=`We don't know how to render audit details of type \`${e}\`. The Lighthouse version that collected this data is likely newer than the Lighthouse version of the report renderer. Expand for the raw JSON.`,this._dom.createChildOf(n,"pre").textContent=JSON.stringify(t,null,2),n}_renderTableValue(e,t){if(e==null)return null;if(typeof e=="object")switch(e.type){case"code":return this._renderCode(e.value);case"link":return this._renderLink(e);case"node":return this.renderNode(e);case"numeric":return this._renderNumeric(e);case"source-location":return this.renderSourceLocation(e);case"url":return this.renderTextURL(e.value);default:return this._renderUnknown(e.type,e)}switch(t.valueType){case"bytes":{let n=Number(e);return this._renderBytes({value:n,granularity:t.granularity})}case"code":{let n=String(e);return this._renderCode(n)}case"ms":{let n={value:Number(e),granularity:t.granularity,displayUnit:t.displayUnit};return this._renderMilliseconds(n)}case"numeric":{let n=Number(e);return this._renderNumeric({value:n,granularity:t.granularity})}case"text":{let n=String(e);return this._renderText(n)}case"thumbnail":{let n=String(e);return this._renderThumbnail(n)}case"timespanMs":{let n=Number(e);return this._renderMilliseconds({value:n})}case"url":{let n=String(e);return Oe.some(r=>n.startsWith(r))?this.renderTextURL(n):this._renderCode(n)}default:return this._renderUnknown(t.valueType,e)}}_getDerivedSubItemsHeading(e){return e.subItemsHeading?{key:e.subItemsHeading.key||"",valueType:e.subItemsHeading.valueType||e.valueType,granularity:e.subItemsHeading.granularity||e.granularity,displayUnit:e.subItemsHeading.displayUnit||e.displayUnit,label:""}:null}_renderTableRow(e,t){let n=this._dom.createElement("tr");for(let r of t){if(!r||!r.key){this._dom.createChildOf(n,"td","lh-table-column--empty");continue}let i=e[r.key],a;if(i!=null&&(a=this._renderTableValue(i,r)),a){let l=`lh-table-column--${r.valueType}`;this._dom.createChildOf(n,"td",l).append(a)}else this._dom.createChildOf(n,"td","lh-table-column--empty")}return n}_renderTableRowsFromItem(e,t){let n=this._dom.createFragment();if(n.append(this._renderTableRow(e,t)),!e.subItems)return n;let r=t.map(this._getDerivedSubItemsHeading);if(!r.some(Boolean))return n;for(let i of e.subItems.items){let a=this._renderTableRow(i,r);a.classList.add("lh-sub-item-row"),n.append(a)}return n}_adornEntityGroupRow(e){let t=e.dataset.entity;if(!t)return;let n=this._entities?.find(i=>i.name===t);if(!n)return;let r=this._dom.find("td",e);if(n.category){let i=this._dom.createElement("span");i.classList.add("lh-audit__adorn"),i.textContent=n.category,r.append(" ",i)}if(n.isFirstParty){let i=this._dom.createElement("span");i.classList.add("lh-audit__adorn","lh-audit__adorn1p"),i.textContent=g.strings.firstPartyChipLabel,r.append(" ",i)}if(n.homepage){let i=this._dom.createElement("a");i.href=n.homepage,i.target="_blank",i.title=g.strings.openInANewTabTooltip,i.classList.add("lh-report-icon--external"),r.append(" ",i)}}_renderEntityGroupRow(e,t){let n={...t[0]};n.valueType="text";let r=[n,...t.slice(1)],i=this._dom.createFragment();return i.append(this._renderTableRow(e,r)),this._dom.find("tr",i).classList.add("lh-row--group"),i}_getEntityGroupItems(e){let{items:t,headings:n,sortedBy:r}=e;if(!t.length||e.isEntityGrouped||!t.some(d=>d.entity))return[];let i=new Set(e.skipSumming||[]),a=[];for(let d of n)!d.key||i.has(d.key)||Ve.includes(d.valueType)&&a.push(d.key);let l=n[0].key;if(!l)return[];let s=new Map;for(let d of t){let p=typeof d.entity=="string"?d.entity:void 0,h=s.get(p)||{[l]:p||g.strings.unattributable,entity:p};for(let u of a)h[u]=Number(h[u]||0)+Number(d[u]||0);s.set(p,h)}let c=[...s.values()];return r&&c.sort(y.getTableItemSortComparator(r)),c}_renderTable(e){if(!e.items.length)return this._dom.createElement("span");let t=this._dom.createElement("table","lh-table"),n=this._dom.createChildOf(t,"thead"),r=this._dom.createChildOf(n,"tr");for(let l of e.headings){let c=`lh-table-column--${l.valueType||"text"}`,d=this._dom.createElement("div","lh-text");d.textContent=l.label,this._dom.createChildOf(r,"th",c).append(d)}let i=this._getEntityGroupItems(e),a=this._dom.createChildOf(t,"tbody");if(i.length)for(let l of i){let s=typeof l.entity=="string"?l.entity:void 0,c=this._renderEntityGroupRow(l,e.headings);for(let p of e.items.filter(h=>h.entity===s))c.append(this._renderTableRowsFromItem(p,e.headings));let d=this._dom.findAll("tr",c);s&&d.length&&(d.forEach(p=>p.dataset.entity=s),this._adornEntityGroupRow(d[0])),a.append(c)}else{let l=!0;for(let s of e.items){let c=this._renderTableRowsFromItem(s,e.headings),d=this._dom.findAll("tr",c),p=d[0];if(typeof s.entity=="string"&&(p.dataset.entity=s.entity),e.isEntityGrouped&&s.entity)p.classList.add("lh-row--group"),this._adornEntityGroupRow(p);else for(let h of d)h.classList.add(l?"lh-row--even":"lh-row--odd");l=!l,a.append(c)}}return t}_renderList(e){let t=this._dom.createElement("div","lh-list");return e.items.forEach(n=>{let r=this.render(n);r&&t.append(r)}),t}renderNode(e){let t=this._dom.createElement("span","lh-node");if(e.nodeLabel){let a=this._dom.createElement("div");a.textContent=e.nodeLabel,t.append(a)}if(e.snippet){let a=this._dom.createElement("div");a.classList.add("lh-node__snippet"),a.textContent=e.snippet,t.append(a)}if(e.selector&&(t.title=e.selector),e.path&&t.setAttribute("data-path",e.path),e.selector&&t.setAttribute("data-selector",e.selector),e.snippet&&t.setAttribute("data-snippet",e.snippet),!this._fullPageScreenshot)return t;let n=e.lhId&&this._fullPageScreenshot.nodes[e.lhId];if(!n||n.width===0||n.height===0)return t;let r={width:147,height:100},i=P.render(this._dom,this._fullPageScreenshot.screenshot,n,r);return i&&t.prepend(i),t}renderSourceLocation(e){if(!e.url)return null;let t=`${e.url}:${e.line+1}:${e.column}`,n;e.original&&(n=`${e.original.file||"<unmapped>"}:${e.original.line+1}:${e.original.column}`);let r;if(e.urlProvider==="network"&&n)r=this._renderLink({url:e.url,text:n}),r.title=`maps to generated location ${t}`;else if(e.urlProvider==="network"&&!n)r=this.renderTextURL(e.url),this._dom.find(".lh-link",r).textContent+=`:${e.line+1}:${e.column}`;else if(e.urlProvider==="comment"&&n)r=this._renderText(`${n} (from source map)`),r.title=`${t} (from sourceURL)`;else if(e.urlProvider==="comment"&&!n)r=this._renderText(`${t} (from sourceURL)`);else return null;return r.classList.add("lh-source-location"),r.setAttribute("data-source-url",e.url),r.setAttribute("data-source-line",String(e.line)),r.setAttribute("data-source-column",String(e.column)),r}_renderFilmstrip(e){let t=this._dom.createElement("div","lh-filmstrip");for(let n of e.items){let r=this._dom.createChildOf(t,"div","lh-filmstrip__frame"),i=this._dom.createChildOf(r,"img","lh-filmstrip__thumbnail");i.src=n.data,i.alt="Screenshot"}return t}_renderCode(e){let t=this._dom.createElement("pre","lh-code");return t.textContent=e,t}};var J="\xA0";var G=class{constructor(e){e==="en-XA"&&(e="de"),this._locale=e,this._cachedNumberFormatters=new Map}_formatNumberWithGranularity(e,t,n={}){if(t!==void 0){let a=-Math.log10(t);Number.isInteger(a)||(console.warn(`granularity of ${t} is invalid. Using 1 instead`),t=1),t<1&&(n={...n},n.minimumFractionDigits=n.maximumFractionDigits=Math.ceil(a)),e=Math.round(e/t)*t,Object.is(e,-0)&&(e=0)}else Math.abs(e)<5e-4&&(e=0);let r,i=[n.minimumFractionDigits,n.maximumFractionDigits,n.style,n.unit,n.unitDisplay,this._locale].join("");return r=this._cachedNumberFormatters.get(i),r||(r=new Intl.NumberFormat(this._locale,n),this._cachedNumberFormatters.set(i,r)),r.format(e).replace(" ",J)}formatNumber(e,t){return this._formatNumberWithGranularity(e,t)}formatInteger(e){return this._formatNumberWithGranularity(e,1)}formatPercent(e){return new Intl.NumberFormat(this._locale,{style:"percent"}).format(e)}formatBytesToKiB(e,t=void 0){return this._formatNumberWithGranularity(e/1024,t)+`${J}KiB`}formatBytesToMiB(e,t=void 0){return this._formatNumberWithGranularity(e/1048576,t)+`${J}MiB`}formatBytes(e,t=1){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"byte",unitDisplay:"long"})}formatBytesWithBestUnit(e,t=void 0){return e>=1048576?this.formatBytesToMiB(e,t):e>=1024?this.formatBytesToKiB(e,t):this._formatNumberWithGranularity(e,t,{style:"unit",unit:"byte",unitDisplay:"narrow"})}formatKbps(e,t=void 0){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"kilobit-per-second",unitDisplay:"short"})}formatMilliseconds(e,t=void 0){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"millisecond",unitDisplay:"short"})}formatSeconds(e,t=void 0){return this._formatNumberWithGranularity(e/1e3,t,{style:"unit",unit:"second",unitDisplay:"narrow"})}formatDateTime(e){let t={month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"numeric",timeZoneName:"short"},n;try{n=new Intl.DateTimeFormat(this._locale,t)}catch{t.timeZone="UTC",n=new Intl.DateTimeFormat(this._locale,t)}return n.format(new Date(e))}formatDuration(e){let t=e/1e3;if(Math.round(t)===0)return"None";let n=[],r={day:60*60*24,hour:60*60,minute:60,second:1};return Object.keys(r).forEach(i=>{let a=r[i],l=Math.floor(t/a);if(l>0){t-=l*a;let s=this._formatNumberWithGranularity(l,1,{style:"unit",unit:i,unitDisplay:"narrow"});n.push(s)}}),n.join(" ")}};var W=class extends N{_renderMetric(e){let t=this.dom.createComponent("metric"),n=this.dom.find(".lh-metric",t);n.id=e.result.id;let r=y.calculateRating(e.result.score,e.result.scoreDisplayMode);n.classList.add(`lh-metric--${r}`);let i=this.dom.find(".lh-metric__title",t);i.textContent=e.result.title;let a=this.dom.find(".lh-metric__value",t);a.textContent=e.result.displayValue||"";let l=this.dom.find(".lh-metric__description",t);if(l.append(this.dom.convertMarkdownLinkSnippets(e.result.description)),e.result.scoreDisplayMode==="error"){l.textContent="",a.textContent="Error!";let s=this.dom.createChildOf(l,"span");s.textContent=e.result.errorMessage||"Report error: no metric information"}else e.result.scoreDisplayMode==="notApplicable"&&(a.textContent="--");return n}_renderOpportunity(e,t){let n=this.dom.createComponent("opportunity"),r=this.populateAuditValues(e,n);if(r.id=e.result.id,!e.result.details||e.result.scoreDisplayMode==="error")return r;let i=e.result.details;if(i.overallSavingsMs===void 0)return r;let a=this.dom.find("span.lh-audit__display-text, div.lh-audit__display-text",r),l=`${i.overallSavingsMs/t*100}%`;if(this.dom.find("div.lh-sparkline__bar",r).style.width=l,a.textContent=g.i18n.formatSeconds(i.overallSavingsMs,.01),e.result.displayValue){let s=e.result.displayValue;this.dom.find("div.lh-load-opportunity__sparkline",r).title=s,a.title=s}return r}_getWastedMs(e){if(e.result.details){let t=e.result.details;if(typeof t.overallSavingsMs!="number")throw new Error("non-opportunity details passed to _getWastedMs");return t.overallSavingsMs}else return Number.MIN_VALUE}_getScoringCalculatorHref(e){let t=e.filter(p=>p.group==="metrics"),n=e.find(p=>p.id==="interactive"),r=e.find(p=>p.id==="first-cpu-idle"),i=e.find(p=>p.id==="first-meaningful-paint");n&&t.push(n),r&&t.push(r),i&&t.push(i);let a=p=>Math.round(p*100)/100,s=[...t.map(p=>{let h;return typeof p.result.numericValue=="number"?(h=p.id==="cumulative-layout-shift"?a(p.result.numericValue):Math.round(p.result.numericValue),h=h.toString()):h="null",[p.acronym||p.id,h]})];g.reportJson&&(s.push(["device",g.reportJson.configSettings.formFactor]),s.push(["version",g.reportJson.lighthouseVersion]));let c=new URLSearchParams(s),d=new URL("https://googlechrome.github.io/lighthouse/scorecalc/");return d.hash=c.toString(),d.href}_classifyPerformanceAudit(e){return e.group?null:e.result.details?.overallSavingsMs!==void 0?"load-opportunity":"diagnostic"}render(e,t,n){let r=g.strings,i=this.dom.createElement("div","lh-category");i.id=e.id,i.append(this.renderCategoryHeader(e,t,n));let a=e.auditRefs.filter(m=>m.group==="metrics");if(a.length){let[m,w]=this.renderAuditGroup(t.metrics),v=this.dom.createElement("input","lh-metrics-toggle__input"),x=`lh-metrics-toggle${g.getUniqueSuffix()}`;v.setAttribute("aria-label","Toggle the display of metric descriptions"),v.type="checkbox",v.id=x,m.prepend(v);let E=this.dom.find(".lh-audit-group__header",m),A=this.dom.createChildOf(E,"label","lh-metrics-toggle__label");A.htmlFor=x;let C=this.dom.createChildOf(A,"span","lh-metrics-toggle__labeltext--show"),L=this.dom.createChildOf(A,"span","lh-metrics-toggle__labeltext--hide");C.textContent=g.strings.expandView,L.textContent=g.strings.collapseView;let S=this.dom.createElement("div","lh-metrics-container");if(m.insertBefore(S,w),a.forEach(z=>{S.append(this._renderMetric(z))}),i.querySelector(".lh-gauge__wrapper")){let z=this.dom.find(".lh-category-header__description",i),M=this.dom.createChildOf(z,"div","lh-metrics__disclaimer"),T=this.dom.convertMarkdownLinkSnippets(r.varianceDisclaimer);M.append(T);let F=this.dom.createChildOf(M,"a","lh-calclink");F.target="_blank",F.textContent=r.calculatorLink,this.dom.safelySetHref(F,this._getScoringCalculatorHref(e.auditRefs))}m.classList.add("lh-audit-group--metrics"),i.append(m)}let l=this.dom.createChildOf(i,"div","lh-filmstrip-container"),c=e.auditRefs.find(m=>m.id==="screenshot-thumbnails")?.result;if(c?.details){l.id=c.id;let m=this.detailsRenderer.render(c.details);m&&l.append(m)}let d=e.auditRefs.filter(m=>this._classifyPerformanceAudit(m)==="load-opportunity").filter(m=>!y.showAsPassed(m.result)).sort((m,w)=>this._getWastedMs(w)-this._getWastedMs(m)),p=a.filter(m=>!!m.relevantAudits);if(p.length&&this.renderMetricAuditFilter(p,i),d.length){let w=d.map(S=>this._getWastedMs(S)),v=Math.max(...w),x=Math.max(Math.ceil(v/1e3)*1e3,2e3),[E,A]=this.renderAuditGroup(t["load-opportunities"]),C=this.dom.createComponent("opportunityHeader");this.dom.find(".lh-load-opportunity__col--one",C).textContent=r.opportunityResourceColumnLabel,this.dom.find(".lh-load-opportunity__col--two",C).textContent=r.opportunitySavingsColumnLabel;let L=this.dom.find(".lh-load-opportunity__header",C);E.insertBefore(L,A),d.forEach(S=>E.insertBefore(this._renderOpportunity(S,x),A)),E.classList.add("lh-audit-group--load-opportunities"),i.append(E)}let h=e.auditRefs.filter(m=>this._classifyPerformanceAudit(m)==="diagnostic").filter(m=>!y.showAsPassed(m.result)).sort((m,w)=>{let v=m.result.scoreDisplayMode==="informative"?100:Number(m.result.score),x=w.result.scoreDisplayMode==="informative"?100:Number(w.result.score);return v-x});if(h.length){let[m,w]=this.renderAuditGroup(t.diagnostics);h.forEach(v=>m.insertBefore(this.renderAudit(v),w)),m.classList.add("lh-audit-group--diagnostics"),i.append(m)}let u=e.auditRefs.filter(m=>this._classifyPerformanceAudit(m)&&y.showAsPassed(m.result));if(!u.length)return i;let f={auditRefs:u,groupDefinitions:t},b=this.renderClump("passed",f);i.append(b);let _=[];if(["performance-budget","timing-budget"].forEach(m=>{let w=e.auditRefs.find(v=>v.id===m);if(w?.result.details){let v=this.detailsRenderer.render(w.result.details);v&&(v.id=m,v.classList.add("lh-details","lh-details--budget","lh-audit"),_.push(v))}}),_.length>0){let[m,w]=this.renderAuditGroup(t.budgets);_.forEach(v=>m.insertBefore(v,w)),m.classList.add("lh-audit-group--budgets"),i.append(m)}return i}renderMetricAuditFilter(e,t){let n=this.dom.createElement("div","lh-metricfilter"),r=this.dom.createChildOf(n,"span","lh-metricfilter__text");r.textContent=g.strings.showRelevantAudits;let i=[{acronym:"All"},...e],a=g.getUniqueSuffix();for(let l of i){let s=`metric-${l.acronym}-${a}`,c=this.dom.createChildOf(n,"input","lh-metricfilter__radio");c.type="radio",c.name=`metricsfilter-${a}`,c.id=s;let d=this.dom.createChildOf(n,"label","lh-metricfilter__label");d.htmlFor=s,d.title=l.result?.title,d.textContent=l.acronym||l.id,l.acronym==="All"&&(c.checked=!0,d.classList.add("lh-metricfilter__label--active")),t.append(n),c.addEventListener("input",p=>{for(let u of t.querySelectorAll("label.lh-metricfilter__label"))u.classList.toggle("lh-metricfilter__label--active",u.htmlFor===s);t.classList.toggle("lh-category--filtered",l.acronym!=="All");for(let u of t.querySelectorAll("div.lh-audit")){if(l.acronym==="All"){u.hidden=!1;continue}u.hidden=!0,l.relevantAudits&&l.relevantAudits.includes(u.id)&&(u.hidden=!1)}let h=t.querySelectorAll("div.lh-audit-group, details.lh-audit-group");for(let u of h){u.hidden=!1;let f=Array.from(u.querySelectorAll("div.lh-audit")),b=!!f.length&&f.every(_=>_.hidden);u.hidden=b}})}}};var j=class o extends N{render(e,t={}){let n=this.dom.createElement("div","lh-category");n.id=e.id,n.append(this.renderCategoryHeader(e,t));let r=e.auditRefs,i=r.filter(c=>c.result.scoreDisplayMode!=="manual"),a=this._renderAudits(i,t);n.append(a);let l=r.filter(c=>c.result.scoreDisplayMode==="manual"),s=this.renderClump("manual",{auditRefs:l,description:e.manualDescription,openByDefault:!0});return n.append(s),n}renderCategoryScore(e,t){if(e.score===null)return super.renderScoreGauge(e,t);let n=this.dom.createComponent("gaugePwa"),r=this.dom.find("a.lh-gauge--pwa__wrapper",n),i=n.querySelector("svg");if(!i)throw new Error("no SVG element found in PWA score gauge template");o._makeSvgReferencesUnique(i);let a=this._getGroupIds(e.auditRefs),l=this._getPassingGroupIds(e.auditRefs);if(l.size===a.size)r.classList.add("lh-badged--all");else for(let s of l)r.classList.add(`lh-badged--${s}`);return this.dom.find(".lh-gauge__label",n).textContent=e.title,r.title=this._getGaugeTooltip(e.auditRefs,t),n}_getGroupIds(e){let t=e.map(n=>n.group).filter(n=>!!n);return new Set(t)}_getPassingGroupIds(e){let t=this._getGroupIds(e);for(let n of e)!y.showAsPassed(n.result)&&n.group&&t.delete(n.group);return t}_getGaugeTooltip(e,t){let n=this._getGroupIds(e),r=[];for(let i of n){let a=e.filter(d=>d.group===i),l=a.length,s=a.filter(d=>y.showAsPassed(d.result)).length,c=t[i].title;r.push(`${c}: ${s}/${l}`)}return r.join(", ")}_renderAudits(e,t){let n=this.renderUnexpandableClump(e,t),r=this._getPassingGroupIds(e);for(let i of r)this.dom.find(`.lh-audit-group--${i}`,n).classList.add("lh-badged");return n}static _makeSvgReferencesUnique(e){let t=e.querySelector("defs");if(!t)return;let n=g.getUniqueSuffix(),r=t.querySelectorAll("[id]");for(let i of r){let a=i.id,l=`${a}-${n}`;i.id=l;let s=e.querySelectorAll(`use[href="#${a}"]`);for(let d of s)d.setAttribute("href",`#${l}`);let c=e.querySelectorAll(`[fill="url(#${a})"]`);for(let d of c)d.setAttribute("fill",`url(#${l})`)}}};var $=class{constructor(e){this._dom=e,this._opts={}}renderReport(e,t,n){if(!this._dom.rootEl&&t){console.warn("Please adopt the new report API in renderer/api.js.");let i=t.closest(".lh-root");i?this._dom.rootEl=i:(t.classList.add("lh-root","lh-vars"),this._dom.rootEl=t)}else this._dom.rootEl&&t&&(this._dom.rootEl=t);n&&(this._opts=n),this._dom.setLighthouseChannel(e.configSettings.channel||"unknown");let r=y.prepareReportResult(e);return this._dom.rootEl.textContent="",this._dom.rootEl.append(this._renderReport(r)),this._dom.rootEl}_renderReportTopbar(e){let t=this._dom.createComponent("topbar"),n=this._dom.find("a.lh-topbar__url",t);return n.textContent=e.finalDisplayedUrl,n.title=e.finalDisplayedUrl,this._dom.safelySetHref(n,e.finalDisplayedUrl),t}_renderReportHeader(){let e=this._dom.createComponent("heading"),t=this._dom.createComponent("scoresWrapper");return this._dom.find(".lh-scores-wrapper-placeholder",e).replaceWith(t),e}_renderReportFooter(e){let t=this._dom.createComponent("footer");return this._renderMetaBlock(e,t),this._dom.find(".lh-footer__version_issue",t).textContent=g.strings.footerIssue,this._dom.find(".lh-footer__version",t).textContent=e.lighthouseVersion,t}_renderMetaBlock(e,t){let n=y.getEmulationDescriptions(e.configSettings||{}),r=e.userAgent.match(/(\w*Chrome\/[\d.]+)/),i=Array.isArray(r)?r[1].replace("/"," ").replace("Chrome","Chromium"):"Chromium",a=e.configSettings.channel,l=e.environment.benchmarkIndex.toFixed(0),s=e.environment.credits?.["axe-core"],c=[`${g.strings.runtimeSettingsBenchmark}: ${l}`,`${g.strings.runtimeSettingsCPUThrottling}: ${n.cpuThrottling}`];n.screenEmulation&&c.push(`${g.strings.runtimeSettingsScreenEmulation}: ${n.screenEmulation}`),s&&c.push(`${g.strings.runtimeSettingsAxeVersion}: ${s}`);let d=[["date",`Captured at ${g.i18n.formatDateTime(e.fetchTime)}`],["devices",`${n.deviceEmulation} with Lighthouse ${e.lighthouseVersion}`,c.join(`
+`)],["samples-one",g.strings.runtimeSingleLoad,g.strings.runtimeSingleLoadTooltip],["stopwatch",g.strings.runtimeAnalysisWindow],["networkspeed",`${n.summary}`,`${g.strings.runtimeSettingsNetworkThrottling}: ${n.networkThrottling}`],["chrome",`Using ${i}`+(a?` with ${a}`:""),`${g.strings.runtimeSettingsUANetwork}: "${e.environment.networkUserAgent}"`]],p=this._dom.find(".lh-meta__items",t);for(let[h,u,f]of d){let b=this._dom.createChildOf(p,"li","lh-meta__item");if(b.textContent=u,f){b.classList.add("lh-tooltip-boundary");let _=this._dom.createChildOf(b,"div","lh-tooltip");_.textContent=f}b.classList.add("lh-report-icon",`lh-report-icon--${h}`)}}_renderReportWarnings(e){if(!e.runWarnings||e.runWarnings.length===0)return this._dom.createElement("div");let t=this._dom.createComponent("warningsToplevel"),n=this._dom.find(".lh-warnings__msg",t);n.textContent=g.strings.toplevelWarningsMessage;let r=[];for(let i of e.runWarnings){let a=this._dom.createElement("li");a.append(this._dom.convertMarkdownLinkSnippets(i)),r.push(a)}return this._dom.find("ul",t).append(...r),t}_renderScoreGauges(e,t,n){let r=[],i=[],a=[];for(let l of Object.values(e.categories)){let s=n[l.id]||t,c=s.renderCategoryScore(l,e.categoryGroups||{},{gatherMode:e.gatherMode}),d=this._dom.find("a.lh-gauge__wrapper, a.lh-fraction__wrapper",c);d&&(this._dom.safelySetHref(d,`#${l.id}`),d.addEventListener("click",p=>{if(!d.matches('[href^="#"]'))return;let h=d.getAttribute("href"),u=this._dom.rootEl;if(!h||!u)return;let f=this._dom.find(h,u);p.preventDefault(),f.scrollIntoView()}),this._opts.onPageAnchorRendered?.(d)),y.isPluginCategory(l.id)?a.push(c):s.renderCategoryScore===t.renderCategoryScore?r.push(c):i.push(c)}return[...r,...i,...a]}_renderReport(e){g.apply({providedStrings:e.i18n.rendererFormattedStrings,i18n:new G(e.configSettings.locale),reportJson:e});let t=new V(this._dom,{fullPageScreenshot:e.fullPageScreenshot??void 0,entities:e.entities}),n=new N(this._dom,t),r={performance:new W(this._dom,t),pwa:new j(this._dom,t)},i=this._dom.createElement("div");i.append(this._renderReportHeader());let a=this._dom.createElement("div","lh-container"),l=this._dom.createElement("div","lh-report");l.append(this._renderReportWarnings(e));let s;Object.keys(e.categories).length===1?i.classList.add("lh-header--solo-category"):s=this._dom.createElement("div","lh-scores-header");let d=this._dom.createElement("div");if(d.classList.add("lh-scorescale-wrap"),d.append(this._dom.createComponent("scorescale")),s){let f=this._dom.find(".lh-scores-container",i);s.append(...this._renderScoreGauges(e,n,r)),f.append(s,d);let b=this._dom.createElement("div","lh-sticky-header");b.append(...this._renderScoreGauges(e,n,r)),a.append(b)}let p=this._dom.createElement("div","lh-categories");l.append(p);let h={gatherMode:e.gatherMode};for(let f of Object.values(e.categories)){let b=r[f.id]||n;b.dom.createChildOf(p,"div","lh-category-wrapper").append(b.render(f,e.categoryGroups,h))}n.injectFinalScreenshot(p,e.audits,d);let u=this._dom.createFragment();return this._opts.omitGlobalStyles||u.append(this._dom.createComponent("styles")),this._opts.omitTopbar||u.append(this._renderReportTopbar(e)),u.append(a),l.append(this._renderReportFooter(e)),a.append(i,l),e.fullPageScreenshot&&P.installFullPageScreenshot(this._dom.rootEl,e.fullPageScreenshot.screenshot),u}};function U(o,e){let t=o.rootEl;typeof e>"u"?t.classList.toggle("lh-dark"):t.classList.toggle("lh-dark",e)}var $e=typeof btoa<"u"?btoa:o=>Buffer.from(o).toString("base64"),Be=typeof atob<"u"?atob:o=>Buffer.from(o,"base64").toString();async function Ge(o,e){let t=new TextEncoder().encode(o);if(e.gzip)if(typeof CompressionStream<"u"){let i=new CompressionStream("gzip"),a=i.writable.getWriter();a.write(t),a.close();let l=await new Response(i.readable).arrayBuffer();t=new Uint8Array(l)}else t=window.pako.gzip(o);let n="",r=5e3;for(let i=0;i<t.length;i+=r)n+=String.fromCharCode(...t.subarray(i,i+r));return $e(n)}function We(o,e){let t=Be(o),n=Uint8Array.from(t,r=>r.charCodeAt(0));return e.gzip?window.pako.ungzip(n,{to:"string"}):new TextDecoder().decode(n)}var oe={toBase64:Ge,fromBase64:We};function Z(){let o=window.location.host.endsWith(".vercel.app"),e=new URLSearchParams(window.location.search).has("dev");return o?`https://${window.location.host}/gh-pages`:e?"http://localhost:7333":"https://googlechrome.github.io/lighthouse"}function Q(o){let e=o.generatedTime,t=o.fetchTime||e;return`${o.lighthouseVersion}-${o.finalDisplayedUrl}-${t}`}function je(o,e,t){let n=new URL(e).origin;window.addEventListener("message",function i(a){a.origin===n&&r&&a.data.opened&&(r.postMessage(o,n),window.removeEventListener("message",i))});let r=window.open(e,t)}async function ie(o,e,t){let n=new URL(e),r=!!window.CompressionStream;n.hash=await oe.toBase64(JSON.stringify(o),{gzip:r}),r&&n.searchParams.set("gzip","1"),window.open(n.toString(),t)}async function ae(o){let e="viewer-"+Q(o),t=Z()+"/viewer/";await ie({lhr:o},t,e)}async function le(o){let e="viewer-"+Q(o),t=Z()+"/viewer/";je({lhr:o},t,e)}function se(o){if(!o.audits["script-treemap-data"].details)throw new Error("no script treemap data found");let t={lhr:{mainDocumentUrl:o.mainDocumentUrl,finalUrl:o.finalUrl,finalDisplayedUrl:o.finalDisplayedUrl,audits:{"script-treemap-data":o.audits["script-treemap-data"]},configSettings:{locale:o.configSettings.locale}}},n=Z()+"/treemap/",r="treemap-"+Q(o);ie(t,n,r)}var q=class{constructor(e){this._dom=e,this._toggleEl,this._menuEl,this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onToggleClick=this.onToggleClick.bind(this),this.onToggleKeydown=this.onToggleKeydown.bind(this),this.onMenuFocusOut=this.onMenuFocusOut.bind(this),this.onMenuKeydown=this.onMenuKeydown.bind(this),this._getNextMenuItem=this._getNextMenuItem.bind(this),this._getNextSelectableNode=this._getNextSelectableNode.bind(this),this._getPreviousMenuItem=this._getPreviousMenuItem.bind(this)}setup(e){this._toggleEl=this._dom.find(".lh-topbar button.lh-tools__button",this._dom.rootEl),this._toggleEl.addEventListener("click",this.onToggleClick),this._toggleEl.addEventListener("keydown",this.onToggleKeydown),this._menuEl=this._dom.find(".lh-topbar div.lh-tools__dropdown",this._dom.rootEl),this._menuEl.addEventListener("keydown",this.onMenuKeydown),this._menuEl.addEventListener("click",e)}close(){this._toggleEl.classList.remove("lh-active"),this._toggleEl.setAttribute("aria-expanded","false"),this._menuEl.contains(this._dom.document().activeElement)&&this._toggleEl.focus(),this._menuEl.removeEventListener("focusout",this.onMenuFocusOut),this._dom.document().removeEventListener("keydown",this.onDocumentKeyDown)}open(e){this._toggleEl.classList.contains("lh-active")?e.focus():this._menuEl.addEventListener("transitionend",()=>{e.focus()},{once:!0}),this._toggleEl.classList.add("lh-active"),this._toggleEl.setAttribute("aria-expanded","true"),this._menuEl.addEventListener("focusout",this.onMenuFocusOut),this._dom.document().addEventListener("keydown",this.onDocumentKeyDown)}onToggleClick(e){e.preventDefault(),e.stopImmediatePropagation(),this._toggleEl.classList.contains("lh-active")?this.close():this.open(this._getNextMenuItem())}onToggleKeydown(e){switch(e.code){case"ArrowUp":e.preventDefault(),this.open(this._getPreviousMenuItem());break;case"ArrowDown":case"Enter":case" ":e.preventDefault(),this.open(this._getNextMenuItem());break;default:}}onMenuKeydown(e){let t=e.target;switch(e.code){case"ArrowUp":e.preventDefault(),this._getPreviousMenuItem(t).focus();break;case"ArrowDown":e.preventDefault(),this._getNextMenuItem(t).focus();break;case"Home":e.preventDefault(),this._getNextMenuItem().focus();break;case"End":e.preventDefault(),this._getPreviousMenuItem().focus();break;default:}}onDocumentKeyDown(e){e.keyCode===27&&this.close()}onMenuFocusOut(e){let t=e.relatedTarget;this._menuEl.contains(t)||this.close()}_getNextSelectableNode(e,t){let n=e.filter(i=>!(!(i instanceof HTMLElement)||i.hasAttribute("disabled")||window.getComputedStyle(i).display==="none")),r=t?n.indexOf(t)+1:0;return r>=n.length&&(r=0),n[r]}_getNextMenuItem(e){let t=Array.from(this._menuEl.childNodes);return this._getNextSelectableNode(t,e)}_getPreviousMenuItem(e){let t=Array.from(this._menuEl.childNodes).reverse();return this._getNextSelectableNode(t,e)}};var K=class{constructor(e,t){this.lhr,this._reportUIFeatures=e,this._dom=t,this._dropDownMenu=new q(this._dom),this._copyAttempt=!1,this.topbarEl,this.categoriesEl,this.stickyHeaderEl,this.highlightEl,this.onDropDownMenuClick=this.onDropDownMenuClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onCopy=this.onCopy.bind(this),this.collapseAllDetails=this.collapseAllDetails.bind(this)}enable(e){this.lhr=e,this._dom.rootEl.addEventListener("keyup",this.onKeyUp),this._dom.document().addEventListener("copy",this.onCopy),this._dropDownMenu.setup(this.onDropDownMenuClick),this._setUpCollapseDetailsAfterPrinting(),this._dom.find(".lh-topbar__logo",this._dom.rootEl).addEventListener("click",()=>U(this._dom)),this._setupStickyHeader()}onDropDownMenuClick(e){e.preventDefault();let t=e.target;if(!(!t||!t.hasAttribute("data-action"))){switch(t.getAttribute("data-action")){case"copy":this.onCopyButtonClick();break;case"print-summary":this.collapseAllDetails(),this._print();break;case"print-expanded":this.expandAllDetails(),this._print();break;case"save-json":{let n=JSON.stringify(this.lhr,null,2);this._reportUIFeatures._saveFile(new Blob([n],{type:"application/json"}));break}case"save-html":{let n=this._reportUIFeatures.getReportHtml();try{this._reportUIFeatures._saveFile(new Blob([n],{type:"text/html"}))}catch(r){this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"error",msg:"Could not export as HTML. "+r.message})}break}case"open-viewer":{this._dom.isDevTools()?ae(this.lhr):le(this.lhr);break}case"save-gist":{this._reportUIFeatures.saveAsGist();break}case"toggle-dark":{U(this._dom);break}case"view-unthrottled-trace":this._reportUIFeatures._opts.onViewTrace?.()}this._dropDownMenu.close()}}onCopy(e){this._copyAttempt&&e.clipboardData&&(e.preventDefault(),e.clipboardData.setData("text/plain",JSON.stringify(this.lhr,null,2)),this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"log",msg:"Report JSON copied to clipboard"})),this._copyAttempt=!1}onCopyButtonClick(){this._dom.fireEventOn("lh-analytics",this._dom.document(),{cmd:"send",fields:{hitType:"event",eventCategory:"report",eventAction:"copy"}});try{this._dom.document().queryCommandSupported("copy")&&(this._copyAttempt=!0,this._dom.document().execCommand("copy")||(this._copyAttempt=!1,this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"warn",msg:"Your browser does not support copy to clipboard."})))}catch(e){this._copyAttempt=!1,this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"log",msg:e.message})}}onKeyUp(e){(e.ctrlKey||e.metaKey)&&e.keyCode===80&&this._dropDownMenu.close()}expandAllDetails(){this._dom.findAll(".lh-categories details",this._dom.rootEl).map(t=>t.open=!0)}collapseAllDetails(){this._dom.findAll(".lh-categories details",this._dom.rootEl).map(t=>t.open=!1)}_print(){this._reportUIFeatures._opts.onPrintOverride?this._reportUIFeatures._opts.onPrintOverride(this._dom.rootEl):self.print()}resetUIState(){this._dropDownMenu.close()}_getScrollParent(e){let{overflowY:t}=window.getComputedStyle(e);return t!=="visible"&&t!=="hidden"?e:e.parentElement?this._getScrollParent(e.parentElement):document}_setUpCollapseDetailsAfterPrinting(){"onbeforeprint"in self?self.addEventListener("afterprint",this.collapseAllDetails):self.matchMedia("print").addListener(t=>{t.matches?this.expandAllDetails():this.collapseAllDetails()})}_setupStickyHeader(){this.topbarEl=this._dom.find("div.lh-topbar",this._dom.rootEl),this.categoriesEl=this._dom.find("div.lh-categories",this._dom.rootEl),window.requestAnimationFrame(()=>window.requestAnimationFrame(()=>{try{this.stickyHeaderEl=this._dom.find("div.lh-sticky-header",this._dom.rootEl)}catch{return}this.highlightEl=this._dom.createChildOf(this.stickyHeaderEl,"div","lh-highlighter");let e=this._getScrollParent(this._dom.find(".lh-container",this._dom.rootEl));e.addEventListener("scroll",()=>this._updateStickyHeader());let t=e instanceof window.Document?document.documentElement:e;new window.ResizeObserver(()=>this._updateStickyHeader()).observe(t)}))}_updateStickyHeader(){if(!this.stickyHeaderEl)return;let e=this.topbarEl.getBoundingClientRect().bottom,t=this.categoriesEl.getBoundingClientRect().top,n=e>=t,i=Array.from(this._dom.rootEl.querySelectorAll(".lh-category")).filter(p=>p.getBoundingClientRect().top-window.innerHeight/2<0),a=i.length>0?i.length-1:0,l=this.stickyHeaderEl.querySelectorAll(".lh-gauge__wrapper, .lh-fraction__wrapper"),s=l[a],c=l[0].getBoundingClientRect().left,d=s.getBoundingClientRect().left-c;this.highlightEl.style.transform=`translate(${d}px)`,this.stickyHeaderEl.classList.toggle("lh-sticky-header--visible",n)}};function qe(o,e){let t=e?new Date(e):new Date,n=t.toLocaleTimeString("en-US",{hour12:!1}),r=t.toLocaleDateString("en-US",{year:"numeric",month:"2-digit",day:"2-digit"}).split("/");r.unshift(r.pop());let i=r.join("-");return`${o}_${i}_${n}`.replace(/[/?<>\\:*|"]/g,"-")}function ce(o){let e=new URL(o.finalDisplayedUrl).hostname;return qe(e,o.fetchTime)}function Ke(o){return Array.from(o.tBodies[0].rows)}var B=class{constructor(e,t={}){this.json,this._dom=e,this._opts=t,this._topbar=t.omitTopbar?null:new K(this,e),this.onMediaQueryChange=this.onMediaQueryChange.bind(this)}initFeatures(e){this.json=e,this._fullPageScreenshot=k.getFullPageScreenshot(e),this._topbar&&(this._topbar.enable(e),this._topbar.resetUIState()),this._setupMediaQueryListeners(),this._setupThirdPartyFilter(),this._setupElementScreenshotOverlay(this._dom.rootEl);let t=this._dom.isDevTools()||this._opts.disableDarkMode||this._opts.disableAutoDarkModeAndFireworks;!t&&window.matchMedia("(prefers-color-scheme: dark)").matches&&U(this._dom,!0);let r=["performance","accessibility","best-practices","seo"].every(s=>{let c=e.categories[s];return c&&c.score===1}),i=this._opts.disableFireworks||this._opts.disableAutoDarkModeAndFireworks;if(r&&!i&&(this._enableFireworks(),t||U(this._dom,!0)),e.categories.performance&&e.categories.performance.auditRefs.some(s=>!!(s.group==="metrics"&&e.audits[s.id].errorMessage))){let s=this._dom.find("input.lh-metrics-toggle__input",this._dom.rootEl);s.checked=!0}this.json.audits["script-treemap-data"]&&this.json.audits["script-treemap-data"].details&&this.addButton({text:g.strings.viewTreemapLabel,icon:"treemap",onClick:()=>se(this.json)}),this._opts.onViewTrace&&(e.configSettings.throttlingMethod==="simulate"?this._dom.find('a[data-action="view-unthrottled-trace"]',this._dom.rootEl).classList.remove("lh-hidden"):this.addButton({text:g.strings.viewTraceLabel,onClick:()=>this._opts.onViewTrace?.()})),this._opts.getStandaloneReportHTML&&this._dom.find('a[data-action="save-html"]',this._dom.rootEl).classList.remove("lh-hidden");for(let s of this._dom.findAll("[data-i18n]",this._dom.rootEl)){let d=s.getAttribute("data-i18n");s.textContent=g.strings[d]}}addButton(e){let t=this._dom.rootEl.querySelector(".lh-audit-group--metrics");if(!t)return;let n=t.querySelector(".lh-buttons");n||(n=this._dom.createChildOf(t,"div","lh-buttons"));let r=["lh-button"];e.icon&&(r.push("lh-report-icon"),r.push(`lh-report-icon--${e.icon}`));let i=this._dom.createChildOf(n,"button",r.join(" "));return i.textContent=e.text,i.addEventListener("click",e.onClick),i}resetUIState(){this._topbar&&this._topbar.resetUIState()}getReportHtml(){if(!this._opts.getStandaloneReportHTML)throw new Error("`getStandaloneReportHTML` is not set");return this.resetUIState(),this._opts.getStandaloneReportHTML()}saveAsGist(){throw new Error("Cannot save as gist from base report")}_enableFireworks(){this._dom.find(".lh-scores-container",this._dom.rootEl).classList.add("lh-score100")}_setupMediaQueryListeners(){let e=self.matchMedia("(max-width: 500px)");e.addListener(this.onMediaQueryChange),this.onMediaQueryChange(e)}_resetUIState(){this._topbar&&this._topbar.resetUIState()}onMediaQueryChange(e){this._dom.rootEl.classList.toggle("lh-narrow",e.matches)}_setupThirdPartyFilter(){let e=["uses-rel-preconnect","third-party-facades"],t=["legacy-javascript"];Array.from(this._dom.rootEl.querySelectorAll("table.lh-table")).filter(i=>i.querySelector("td.lh-table-column--url, td.lh-table-column--source-location")).filter(i=>{let a=i.closest(".lh-audit");if(!a)throw new Error(".lh-table not within audit");return!e.includes(a.id)}).forEach(i=>{let a=Ke(i),l=a.filter(_=>!_.classList.contains("lh-sub-item-row")),s=this._getThirdPartyRows(l,k.getFinalDisplayedUrl(this.json)),c=a.some(_=>_.classList.contains("lh-row--even")),d=this._dom.createComponent("3pFilter"),p=this._dom.find("input",d);p.addEventListener("change",_=>{let m=_.target instanceof HTMLInputElement&&!_.target.checked,w=!0,v=l[0];for(;v;){let x=m&&s.includes(v);do v.classList.toggle("lh-row--hidden",x),c&&(v.classList.toggle("lh-row--even",!x&&w),v.classList.toggle("lh-row--odd",!x&&!w)),v=v.nextElementSibling;while(v&&v.classList.contains("lh-sub-item-row"));x||(w=!w)}});let h=s.filter(_=>!_.classList.contains("lh-row--group")).length;this._dom.find(".lh-3p-filter-count",d).textContent=`${h}`,this._dom.find(".lh-3p-ui-string",d).textContent=g.strings.thirdPartyResourcesLabel;let u=s.length===l.length,f=!s.length;if((u||f)&&(this._dom.find("div.lh-3p-filter",d).hidden=!0),!i.parentNode)return;i.parentNode.insertBefore(d,i);let b=i.closest(".lh-audit");if(!b)throw new Error(".lh-table not within audit");t.includes(b.id)&&!u&&p.click()})}_setupElementScreenshotOverlay(e){this._fullPageScreenshot&&P.installOverlayFeature({dom:this._dom,rootEl:e,overlayContainerEl:e,fullPageScreenshot:this._fullPageScreenshot})}_getThirdPartyRows(e,t){let n=k.getRootDomain(t),r=this.json.entities?.find(a=>a.isFirstParty===!0)?.name,i=[];for(let a of e){if(r){if(!a.dataset.entity||a.dataset.entity===r)continue}else{let l=a.querySelector("div.lh-text__url");if(!l)continue;let s=l.dataset.url;if(!s||!(k.getRootDomain(s)!==n))continue}i.push(a)}return i}_saveFile(e){let t=e.type.match("json")?".json":".html",n=ce({finalDisplayedUrl:k.getFinalDisplayedUrl(this.json),fetchTime:this.json.fetchTime})+t;this._opts.onSaveFileOverride?this._opts.onSaveFileOverride(e,n):this._dom.saveFile(e,n)}};function Je(o,e={}){let t=document.createElement("article");t.classList.add("lh-root","lh-vars");let n=new I(t.ownerDocument,t);return new $(n).renderReport(o,t,e),new B(n,e).initFeatures(o),t}function Ze(o,e){return{lhr:o,missingIcuMessageIds:[]}}function Qe(o,e){}function Ye(o){return!1}var Xe={registerLocaleData:Qe,hasLocale:Ye};export{I as DOM,$ as ReportRenderer,B as ReportUIFeatures,Xe as format,Je as renderReport,Ze as swapLocale};
+/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 /**
  * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
  */
-
-/** @typedef {import('./i18n-formatter').I18nFormatter} I18nFormatter */
-
-let svgSuffix = 0;
-
-class Globals {
-  /** @type {I18nFormatter} */
-  // @ts-expect-error: Set in report renderer.
-  static i18n = null;
-
-  /** @type {typeof UIStrings} */
-  // @ts-expect-error: Set in report renderer.
-  static strings = {};
-
-  /** @type {LH.ReportResult | null} */
-  static reportJson = null;
-
-  /**
-   * @param {{providedStrings: Record<string, string>; i18n: I18nFormatter; reportJson: LH.ReportResult | null}} options
-   */
-  static apply(options) {
-    Globals.strings = {
-      // Set missing renderer strings to default (english) values.
-      ...UIStrings,
-      ...options.providedStrings,
-    };
-    Globals.i18n = options.i18n;
-    Globals.reportJson = options.reportJson;
-  }
-
-  static getUniqueSuffix() {
-    return svgSuffix++;
-  }
-
-  static resetUniqueSuffix() {
-    svgSuffix = 0;
-  }
-}
-
-/**
- * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-
-const SCREENSHOT_PREFIX = 'data:image/jpeg;base64,';
-
-/** @typedef {import('../../types/lhr/audit-details').default.ItemValueType} ItemValueType */
-
-/**
- * Upgrades an lhr object in-place to account for changes in the data structure over major versions.
- * @param {LH.Result} lhr
- */
-function upgradeLhrForCompatibility(lhr) {
-  // If LHR is older (≤3.0.3), it has no locale setting. Set default.
-  if (!lhr.configSettings.locale) {
-    lhr.configSettings.locale = 'en';
-  }
-  if (!lhr.configSettings.formFactor) {
-    // @ts-expect-error fallback handling for emulatedFormFactor
-    lhr.configSettings.formFactor = lhr.configSettings.emulatedFormFactor;
-  }
-
-  lhr.finalDisplayedUrl = Util.getFinalDisplayedUrl(lhr);
-  lhr.mainDocumentUrl = Util.getMainDocumentUrl(lhr);
-
-  for (const audit of Object.values(lhr.audits)) {
-    // Turn 'not-applicable' (LHR <4.0) and 'not_applicable' (older proto versions)
-    // into 'notApplicable' (LHR ≥4.0).
-    // @ts-expect-error tsc rightly flags that these values shouldn't occur.
-    // eslint-disable-next-line max-len
-    if (audit.scoreDisplayMode === 'not_applicable' || audit.scoreDisplayMode === 'not-applicable') {
-      audit.scoreDisplayMode = 'notApplicable';
-    }
-
-    if (audit.details) {
-      // Turn `auditDetails.type` of undefined (LHR <4.2) and 'diagnostic' (LHR <5.0)
-      // into 'debugdata' (LHR ≥5.0).
-      // @ts-expect-error tsc rightly flags that these values shouldn't occur.
-      if (audit.details.type === undefined || audit.details.type === 'diagnostic') {
-        // @ts-expect-error details is of type never.
-        audit.details.type = 'debugdata';
-      }
-
-      // Add the jpg data URL prefix to filmstrip screenshots without them (LHR <5.0).
-      if (audit.details.type === 'filmstrip') {
-        for (const screenshot of audit.details.items) {
-          if (!screenshot.data.startsWith(SCREENSHOT_PREFIX)) {
-            screenshot.data = SCREENSHOT_PREFIX + screenshot.data;
-          }
-        }
-      }
-
-      // Circa 10.0, table items were refactored.
-      if (audit.details.type === 'table') {
-        for (const heading of audit.details.headings) {
-          /** @type {{itemType: ItemValueType|undefined, text: string|undefined}} */
-          // @ts-expect-error
-          const {itemType, text} = heading;
-          if (itemType !== undefined) {
-            heading.valueType = itemType;
-            // @ts-expect-error
-            delete heading.itemType;
-          }
-          if (text !== undefined) {
-            heading.label = text;
-            // @ts-expect-error
-            delete heading.text;
-          }
-
-          // @ts-expect-error
-          const subItemsItemType = heading.subItemsHeading?.itemType;
-          if (heading.subItemsHeading && subItemsItemType !== undefined) {
-            heading.subItemsHeading.valueType = subItemsItemType;
-            // @ts-expect-error
-            delete heading.subItemsHeading.itemType;
-          }
-        }
-      }
-
-      // In 10.0, third-party-summary deprecated entity: LinkValue and switched to entity name string
-      if (audit.id === 'third-party-summary') {
-        if (audit.details.type === 'opportunity' || audit.details.type === 'table') {
-          const {headings, items} = audit.details;
-          if (headings[0].valueType === 'link') {
-            // Apply upgrade only if we are dealing with an older version (valueType=link marker).
-            headings[0].valueType = 'text';
-            for (const item of items) {
-              if (typeof item.entity === 'object' && item.entity.type === 'link') {
-                item.entity = item.entity.text;
-              }
-            }
-            audit.details.isEntityGrouped = true;
-          }
-        }
-      }
-
-      // TODO: convert printf-style displayValue.
-      // Added:   #5099, v3
-      // Removed: #6767, v4
-    }
-  }
-
-  // This backcompat converts old LHRs (<9.0.0) to use the new "hidden" group.
-  // Old LHRs used "no group" to identify audits that should be hidden in performance instead of the "hidden" group.
-  // Newer LHRs use "no group" to identify opportunities and diagnostics whose groups are assigned by details type.
-  const [majorVersion] = lhr.lighthouseVersion.split('.').map(Number);
-  const perfCategory = lhr.categories['performance'];
-  if (majorVersion < 9 && perfCategory) {
-    if (!lhr.categoryGroups) lhr.categoryGroups = {};
-    lhr.categoryGroups['hidden'] = {title: ''};
-    for (const auditRef of perfCategory.auditRefs) {
-      if (!auditRef.group) {
-        auditRef.group = 'hidden';
-      } else if (['load-opportunities', 'diagnostics'].includes(auditRef.group)) {
-        delete auditRef.group;
-      }
-    }
-  }
-
-  // Add some minimal stuff so older reports still work.
-  if (!lhr.environment) {
-    lhr.environment = {
-      benchmarkIndex: 0,
-      networkUserAgent: lhr.userAgent,
-      hostUserAgent: lhr.userAgent,
-    };
-  }
-  if (!lhr.configSettings.screenEmulation) {
-    lhr.configSettings.screenEmulation = {
-      width: -1,
-      height: -1,
-      deviceScaleFactor: -1,
-      mobile: /mobile/i.test(lhr.environment.hostUserAgent),
-      disabled: false,
-    };
-  }
-  if (!lhr.i18n) {
-    // @ts-expect-error
-    lhr.i18n = {};
-  }
-
-  // In 10.0, full-page-screenshot became a top-level property on the LHR.
-  if (lhr.audits['full-page-screenshot']) {
-    const details = /** @type {LH.Result.FullPageScreenshot=} */ (
-      lhr.audits['full-page-screenshot'].details);
-    if (details) {
-      lhr.fullPageScreenshot = {
-        screenshot: details.screenshot,
-        nodes: details.nodes,
-      };
-    } else {
-      lhr.fullPageScreenshot = null;
-    }
-    delete lhr.audits['full-page-screenshot'];
-  }
-}
-
-/**
- * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-
-const RATINGS = Util.RATINGS;
-
-class ReportUtils {
-  /**
-   * Returns a new LHR that's reshaped for slightly better ergonomics within the report rendereer.
-   * Also, sets up the localized UI strings used within renderer and makes changes to old LHRs to be
-   * compatible with current renderer.
-   * The LHR passed in is not mutated.
-   * TODO(team): we all agree the LHR shape change is technical debt we should fix
-   * @param {LH.Result} lhr
-   * @return {LH.ReportResult}
-   */
-  static prepareReportResult(lhr) {
-    // If any mutations happen to the report within the renderers, we want the original object untouched
-    const clone = /** @type {LH.ReportResult} */ (JSON.parse(JSON.stringify(lhr)));
-    upgradeLhrForCompatibility(clone);
-
-    for (const audit of Object.values(clone.audits)) {
-      // Attach table/opportunity items with entity information.
-      if (audit.details) {
-        if (audit.details.type === 'opportunity' || audit.details.type === 'table') {
-          if (!audit.details.isEntityGrouped && clone.entities) {
-            ReportUtils.classifyEntities(clone.entities, audit.details);
-          }
-        }
-      }
-    }
-
-    // For convenience, smoosh all AuditResults into their auditRef (which has just weight & group)
-    if (typeof clone.categories !== 'object') throw new Error('No categories provided.');
-
-    /** @type {Map<string, Array<LH.ReportResult.AuditRef>>} */
-    const relevantAuditToMetricsMap = new Map();
-
-    for (const category of Object.values(clone.categories)) {
-      // Make basic lookup table for relevantAudits
-      category.auditRefs.forEach(metricRef => {
-        if (!metricRef.relevantAudits) return;
-        metricRef.relevantAudits.forEach(auditId => {
-          const arr = relevantAuditToMetricsMap.get(auditId) || [];
-          arr.push(metricRef);
-          relevantAuditToMetricsMap.set(auditId, arr);
-        });
-      });
-
-      category.auditRefs.forEach(auditRef => {
-        const result = clone.audits[auditRef.id];
-        auditRef.result = result;
-
-        // Attach any relevantMetric auditRefs
-        if (relevantAuditToMetricsMap.has(auditRef.id)) {
-          auditRef.relevantMetrics = relevantAuditToMetricsMap.get(auditRef.id);
-        }
-
-        // attach the stackpacks to the auditRef object
-        if (clone.stackPacks) {
-          clone.stackPacks.forEach(pack => {
-            if (pack.descriptions[auditRef.id]) {
-              auditRef.stackPacks = auditRef.stackPacks || [];
-              auditRef.stackPacks.push({
-                title: pack.title,
-                iconDataURL: pack.iconDataURL,
-                description: pack.descriptions[auditRef.id],
-              });
-            }
-          });
-        }
-      });
-    }
-
-    return clone;
-  }
-
-  /**
-   * Given an audit's details, identify and return a URL locator function that
-   * can be called later with an `item` to extract the URL of it.
-   * @param {LH.FormattedIcu<LH.Audit.Details.TableColumnHeading[]>} headings
-   * @return {((item: LH.FormattedIcu<LH.Audit.Details.TableItem>) => string|undefined)=}
-   */
-  static getUrlLocatorFn(headings) {
-    // The most common type, valueType=url.
-    const urlKey = headings.find(heading => heading.valueType === 'url')?.key;
-    if (urlKey && typeof urlKey === 'string') {
-      // Return a function that extracts item.url.
-      return (item) => {
-        const url = item[urlKey];
-        if (typeof url === 'string') return url;
-      };
-    }
-
-    // The second common type, valueType=source-location.
-    const srcLocationKey = headings.find(heading => heading.valueType === 'source-location')?.key;
-    if (srcLocationKey) {
-      // Return a function that extracts item.source.url.
-      return (item) => {
-        const sourceLocation = item[srcLocationKey];
-        if (typeof sourceLocation === 'object' && sourceLocation.type === 'source-location') {
-          return sourceLocation.url;
-        }
-      };
-    }
-
-    // More specific tests go here, as we need to identify URLs in more audits.
-  }
-
-  /**
-   * Mark TableItems/OpportunityItems with entity names.
-   * @param {LH.Result.Entities} entities
-   * @param {LH.FormattedIcu<LH.Audit.Details.Opportunity|LH.Audit.Details.Table>} details
-   */
-  static classifyEntities(entities, details) {
-    // If details.items are already marked with entity attribute during an audit, nothing to do here.
-    const {items, headings} = details;
-    if (!items.length || items.some(item => item.entity)) return;
-
-    // Identify a URL-locator function that we could call against each item to get its URL.
-    const urlLocatorFn = ReportUtils.getUrlLocatorFn(headings);
-    if (!urlLocatorFn) return;
-
-    for (const item of items) {
-      const url = urlLocatorFn(item);
-      if (!url) continue;
-
-      let origin = '';
-      try {
-        // Non-URLs can appear in valueType: url columns, like 'Unattributable'
-        origin = Util.parseURL(url).origin;
-      } catch {}
-      if (!origin) continue;
-
-      const entity = entities.find(e => e.origins.includes(origin));
-      if (entity) item.entity = entity.name;
-    }
-  }
-
-  /**
-   * Returns a comparator created from the supplied list of keys
-   * @param {Array<string>} sortedBy
-   * @return {((a: LH.Audit.Details.TableItem, b: LH.Audit.Details.TableItem) => number)}
-   */
-  static getTableItemSortComparator(sortedBy) {
-    return (a, b) => {
-      for (const key of sortedBy) {
-        const aVal = a[key];
-        const bVal = b[key];
-        if (typeof aVal !== typeof bVal || !['number', 'string'].includes(typeof aVal)) {
-          console.warn(`Warning: Attempting to sort unsupported value type: ${key}.`);
-        }
-        if (typeof aVal === 'number' && typeof bVal === 'number' && aVal !== bVal) {
-          return bVal - aVal;
-        }
-        if (typeof aVal === 'string' && typeof bVal === 'string' && aVal !== bVal) {
-          return aVal.localeCompare(bVal);
-        }
-      }
-      return 0;
-    };
-  }
-
-  /**
-   * @param {LH.Result['configSettings']} settings
-   * @return {!{deviceEmulation: string, screenEmulation?: string, networkThrottling: string, cpuThrottling: string, summary: string}}
-   */
-  static getEmulationDescriptions(settings) {
-    let cpuThrottling;
-    let networkThrottling;
-    let summary;
-
-    const throttling = settings.throttling;
-    const i18n = Globals.i18n;
-    const strings = Globals.strings;
-
-    switch (settings.throttlingMethod) {
-      case 'provided':
-        summary = networkThrottling = cpuThrottling = strings.throttlingProvided;
-        break;
-      case 'devtools': {
-        const {cpuSlowdownMultiplier, requestLatencyMs} = throttling;
-        // eslint-disable-next-line max-len
-        cpuThrottling = `${i18n.formatNumber(cpuSlowdownMultiplier)}x slowdown (DevTools)`;
-        networkThrottling = `${i18n.formatMilliseconds(requestLatencyMs)} HTTP RTT, ` +
-          `${i18n.formatKbps(throttling.downloadThroughputKbps)} down, ` +
-          `${i18n.formatKbps(throttling.uploadThroughputKbps)} up (DevTools)`;
-
-        const isSlow4G = () => {
-          return requestLatencyMs === 150 * 3.75 &&
-            throttling.downloadThroughputKbps === 1.6 * 1024 * 0.9 &&
-            throttling.uploadThroughputKbps === 750 * 0.9;
-        };
-        summary = isSlow4G() ? strings.runtimeSlow4g : strings.runtimeCustom;
-        break;
-      }
-      case 'simulate': {
-        const {cpuSlowdownMultiplier, rttMs, throughputKbps} = throttling;
-        // eslint-disable-next-line max-len
-        cpuThrottling = `${i18n.formatNumber(cpuSlowdownMultiplier)}x slowdown (Simulated)`;
-        networkThrottling = `${i18n.formatMilliseconds(rttMs)} TCP RTT, ` +
-          `${i18n.formatKbps(throughputKbps)} throughput (Simulated)`;
-
-        const isSlow4G = () => {
-          return rttMs === 150 && throughputKbps === 1.6 * 1024;
-        };
-        summary = isSlow4G() ?
-          strings.runtimeSlow4g : strings.runtimeCustom;
-        break;
-      }
-      default:
-        summary = cpuThrottling = networkThrottling = strings.runtimeUnknown;
-    }
-
-    // devtools-entry.js always sets `screenEmulation.disabled` when using mobile emulation,
-    // because we handle the emulation outside of Lighthouse. Since the screen truly is emulated
-    // as a mobile device, ignore `.disabled` in devtools and just check the form factor
-    const isScreenEmulationDisabled = settings.channel === 'devtools' ?
-      false :
-      settings.screenEmulation.disabled;
-    const isScreenEmulationMobile = settings.channel === 'devtools' ?
-      settings.formFactor === 'mobile' :
-      settings.screenEmulation.mobile;
-
-    let deviceEmulation = strings.runtimeMobileEmulation;
-    if (isScreenEmulationDisabled) {
-      deviceEmulation = strings.runtimeNoEmulation;
-    } else if (!isScreenEmulationMobile) {
-      deviceEmulation = strings.runtimeDesktopEmulation;
-    }
-
-    const screenEmulation = isScreenEmulationDisabled ?
-      undefined :
-      // eslint-disable-next-line max-len
-      `${settings.screenEmulation.width}x${settings.screenEmulation.height}, DPR ${settings.screenEmulation.deviceScaleFactor}`;
-
-    return {
-      deviceEmulation,
-      screenEmulation,
-      cpuThrottling,
-      networkThrottling,
-      summary,
-    };
-  }
-
-  /**
-   * Used to determine if the "passed" for the purposes of showing up in the "failed" or "passed"
-   * sections of the report.
-   *
-   * @param {{score: (number|null), scoreDisplayMode: string}} audit
-   * @return {boolean}
-   */
-  static showAsPassed(audit) {
-    switch (audit.scoreDisplayMode) {
-      case 'manual':
-      case 'notApplicable':
-        return true;
-      case 'error':
-      case 'informative':
-        return false;
-      case 'numeric':
-      case 'binary':
-      default:
-        return Number(audit.score) >= RATINGS.PASS.minScore;
-    }
-  }
-
-  /**
-   * Convert a score to a rating label.
-   * TODO: Return `'error'` for `score === null && !scoreDisplayMode`.
-   *
-   * @param {number|null} score
-   * @param {string=} scoreDisplayMode
-   * @return {string}
-   */
-  static calculateRating(score, scoreDisplayMode) {
-    // Handle edge cases first, manual and not applicable receive 'pass', errored audits receive 'error'
-    if (scoreDisplayMode === 'manual' || scoreDisplayMode === 'notApplicable') {
-      return RATINGS.PASS.label;
-    } else if (scoreDisplayMode === 'error') {
-      return RATINGS.ERROR.label;
-    } else if (score === null) {
-      return RATINGS.FAIL.label;
-    }
-
-    // At this point, we're rating a standard binary/numeric audit
-    let rating = RATINGS.FAIL.label;
-    if (score >= RATINGS.PASS.minScore) {
-      rating = RATINGS.PASS.label;
-    } else if (score >= RATINGS.AVERAGE.minScore) {
-      rating = RATINGS.AVERAGE.label;
-    }
-    return rating;
-  }
-
-  /**
-   * @param {LH.ReportResult.Category} category
-   */
-  static calculateCategoryFraction(category) {
-    let numPassableAudits = 0;
-    let numPassed = 0;
-    let numInformative = 0;
-    let totalWeight = 0;
-    for (const auditRef of category.auditRefs) {
-      const auditPassed = ReportUtils.showAsPassed(auditRef.result);
-
-      // Don't count the audit if it's manual, N/A, or isn't displayed.
-      if (auditRef.group === 'hidden' ||
-          auditRef.result.scoreDisplayMode === 'manual' ||
-          auditRef.result.scoreDisplayMode === 'notApplicable') {
-        continue;
-      } else if (auditRef.result.scoreDisplayMode === 'informative') {
-        if (!auditPassed) {
-          ++numInformative;
-        }
-        continue;
-      }
-
-      ++numPassableAudits;
-      totalWeight += auditRef.weight;
-      if (auditPassed) numPassed++;
-    }
-    return {numPassed, numPassableAudits, numInformative, totalWeight};
-  }
-
-  /**
-   * @param {string} categoryId
-   */
-  static isPluginCategory(categoryId) {
-    return categoryId.startsWith('lighthouse-plugin-');
-  }
-
-  /**
-   * @param {LH.Result.GatherMode} gatherMode
-   */
-  static shouldDisplayAsFraction(gatherMode) {
-    return gatherMode === 'timespan' || gatherMode === 'snapshot';
-  }
-}
-
-/**
- * Report-renderer-specific strings.
- */
-const UIStrings = {
-  /** Disclaimer shown to users below the metric values (First Contentful Paint, Time to Interactive, etc) to warn them that the numbers they see will likely change slightly the next time they run Lighthouse. */
-  varianceDisclaimer: 'Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.',
-  /** Text link pointing to an interactive calculator that explains Lighthouse scoring. The link text should be fairly short. */
-  calculatorLink: 'See calculator.',
-  /** Label preceding a radio control for filtering the list of audits. The radio choices are various performance metrics (FCP, LCP, TBT), and if chosen, the audits in the report are hidden if they are not relevant to the selected metric. */
-  showRelevantAudits: 'Show audits relevant to:',
-  /** Column heading label for the listing of opportunity audits. Each audit title represents an opportunity. There are only 2 columns, so no strict character limit.  */
-  opportunityResourceColumnLabel: 'Opportunity',
-  /** Column heading label for the estimated page load savings of opportunity audits. Estimated Savings is the total amount of time (in seconds) that Lighthouse computed could be reduced from the total page load time, if the suggested action is taken. There are only 2 columns, so no strict character limit. */
-  opportunitySavingsColumnLabel: 'Estimated Savings',
-
-  /** An error string displayed next to a particular audit when it has errored, but not provided any specific error message. */
-  errorMissingAuditInfo: 'Report error: no audit information',
-  /** A label, shown next to an audit title or metric title, indicating that there was an error computing it. The user can hover on the label to reveal a tooltip with the extended error message. Translation should be short (< 20 characters). */
-  errorLabel: 'Error!',
-  /** This label is shown above a bulleted list of warnings. It is shown directly below an audit that produced warnings. Warnings describe situations the user should be aware of, as Lighthouse was unable to complete all the work required on this audit. For example, The 'Unable to decode image (biglogo.jpg)' warning may show up below an image encoding audit. */
-  warningHeader: 'Warnings: ',
-  /** Section heading shown above a list of passed audits that contain warnings. Audits under this section do not negatively impact the score, but Lighthouse has generated some potentially actionable suggestions that should be reviewed. This section is expanded by default and displays after the failing audits. */
-  warningAuditsGroupTitle: 'Passed audits but with warnings',
-  /** Section heading shown above a list of audits that are passing. 'Passed' here refers to a passing grade. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */
-  passedAuditsGroupTitle: 'Passed audits',
-  /** Section heading shown above a list of audits that do not apply to the page. For example, if an audit is 'Are images optimized?', but the page has no images on it, the audit will be marked as not applicable. This is neither passing or failing. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */
-  notApplicableAuditsGroupTitle: 'Not applicable',
-  /** Section heading shown above a list of audits that were not computed by Lighthouse. They serve as a list of suggestions for the user to go and manually check. For example, Lighthouse can't automate testing cross-browser compatibility, so that is listed within this section, so the user is reminded to test it themselves. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */
-  manualAuditsGroupTitle: 'Additional items to manually check',
-
-  /** Label shown preceding any important warnings that may have invalidated the entire report. For example, if the user has Chrome extensions installed, they may add enough performance overhead that Lighthouse's performance metrics are unreliable. If shown, this will be displayed at the top of the report UI. */
-  toplevelWarningsMessage: 'There were issues affecting this run of Lighthouse:',
-
-  /** String of text shown in a graphical representation of the flow of network requests for the web page. This label represents the initial network request that fetches an HTML page. This navigation may be redirected (eg. Initial navigation to http://example.com redirects to https://www.example.com). */
-  crcInitialNavigation: 'Initial Navigation',
-  /** Label of value shown in the summary of critical request chains. Refers to the total amount of time (milliseconds) of the longest critical path chain/sequence of network requests. Example value: 2310 ms */
-  crcLongestDurationLabel: 'Maximum critical path latency:',
-
-  /** Label for button that shows all lines of the snippet when clicked */
-  snippetExpandButtonLabel: 'Expand snippet',
-  /** Label for button that only shows a few lines of the snippet when clicked */
-  snippetCollapseButtonLabel: 'Collapse snippet',
-
-  /** Explanation shown to users below performance results to inform them that the test was done with a 4G network connection and to warn them that the numbers they see will likely change slightly the next time they run Lighthouse. 'Lighthouse' becomes link text to additional documentation. */
-  lsPerformanceCategoryDescription: '[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.',
-  /** Title of the lab data section of the Performance category. Within this section are various speed metrics which quantify the pageload performance into values presented in seconds and milliseconds. "Lab" is an abbreviated form of "laboratory", and refers to the fact that the data is from a controlled test of a website, not measurements from real users visiting that site.  */
-  labDataTitle: 'Lab Data',
-
-  /** This label is for a checkbox above a table of items loaded by a web page. The checkbox is used to show or hide third-party (or "3rd-party") resources in the table, where "third-party resources" refers to items loaded by a web page from URLs that aren't controlled by the owner of the web page. */
-  thirdPartyResourcesLabel: 'Show 3rd-party resources',
-  /** This label is for a button that opens a new tab to a webapp called "Treemap", which is a nested visual representation of a heierarchy of data related to the reports (script bytes and coverage, resource breakdown, etc.) */
-  viewTreemapLabel: 'View Treemap',
-  /** This label is for a button that will show the user a trace of the page. */
-  viewTraceLabel: 'View Trace',
-  /** This label is for a button that will show the user a trace of the page. */
-  viewOriginalTraceLabel: 'View Original Trace',
-
-  /** Option in a dropdown menu that opens a small, summary report in a print dialog.  */
-  dropdownPrintSummary: 'Print Summary',
-  /** Option in a dropdown menu that opens a full Lighthouse report in a print dialog.  */
-  dropdownPrintExpanded: 'Print Expanded',
-  /** Option in a dropdown menu that copies the Lighthouse JSON object to the system clipboard. */
-  dropdownCopyJSON: 'Copy JSON',
-  /** Option in a dropdown menu that saves the Lighthouse report HTML locally to the system as a '.html' file. */
-  dropdownSaveHTML: 'Save as HTML',
-  /** Option in a dropdown menu that saves the Lighthouse JSON object to the local system as a '.json' file. */
-  dropdownSaveJSON: 'Save as JSON',
-  /** Option in a dropdown menu that opens the current report in the Lighthouse Viewer Application. */
-  dropdownViewer: 'Open in Viewer',
-  /** Option in a dropdown menu that saves the current report as a new GitHub Gist. */
-  dropdownSaveGist: 'Save as Gist',
-  /** Option in a dropdown menu that toggles the themeing of the report between Light(default) and Dark themes. */
-  dropdownDarkTheme: 'Toggle Dark Theme',
-
-  /** Label for a row in a table that describes the kind of device that was emulated for the Lighthouse run.  Example values for row elements: 'No Emulation', 'Emulated Desktop', etc. */
-  runtimeSettingsDevice: 'Device',
-  /** Label for a row in a table that describes the network throttling conditions that were used during a Lighthouse run, if any. */
-  runtimeSettingsNetworkThrottling: 'Network throttling',
-  /** Label for a row in a table that describes the CPU throttling conditions that were used during a Lighthouse run, if any.*/
-  runtimeSettingsCPUThrottling: 'CPU throttling',
-  /** Label for a row in a table that shows the User Agent that was used to send out all network requests during the Lighthouse run. */
-  runtimeSettingsUANetwork: 'User agent (network)',
-  /** Label for a row in a table that shows the estimated CPU power of the machine running Lighthouse. Example row values: 532, 1492, 783. */
-  runtimeSettingsBenchmark: 'Unthrottled CPU/Memory Power',
-  /** Label for a row in a table that shows the version of the Axe library used. Example row values: 2.1.0, 3.2.3 */
-  runtimeSettingsAxeVersion: 'Axe version',
-  /** Label for a row in a table that shows the screen resolution and DPR that was emulated for the Lighthouse run. Example values: '800x600, DPR: 3' */
-  runtimeSettingsScreenEmulation: 'Screen emulation',
-
-  /** Label for button to create an issue against the Lighthouse GitHub project. */
-  footerIssue: 'File an issue',
-
-  /** Descriptive explanation for emulation setting when no device emulation is set. */
-  runtimeNoEmulation: 'No emulation',
-  /** Descriptive explanation for emulation setting when emulating a Moto G Power mobile device. */
-  runtimeMobileEmulation: 'Emulated Moto G Power',
-  /** Descriptive explanation for emulation setting when emulating a generic desktop form factor, as opposed to a mobile-device like form factor. */
-  runtimeDesktopEmulation: 'Emulated Desktop',
-  /** Descriptive explanation for a runtime setting that is set to an unknown value. */
-  runtimeUnknown: 'Unknown',
-  /** Descriptive label that this analysis run was from a single pageload of a browser (not a summary of hundreds of loads) */
-  runtimeSingleLoad: 'Single page load',
-  /** Descriptive label that this analysis only considers the initial load of the page, and no interaction beyond when the page had "fully loaded" */
-  runtimeAnalysisWindow: 'Initial page load',
-  /** Descriptive explanation that this analysis run was from a single pageload of a browser, whereas field data often summarizes hundreds+ of page loads */
-  runtimeSingleLoadTooltip: 'This data is taken from a single page load, as opposed to field data summarizing many sessions.', // eslint-disable-line max-len
-
-  /** Descriptive explanation for environment throttling that was provided by the runtime environment instead of provided by Lighthouse throttling. */
-  throttlingProvided: 'Provided by environment',
-  /** Label for an interactive control that will reveal or hide a group of content. This control toggles between the text 'Show' and 'Hide'. */
-  show: 'Show',
-  /** Label for an interactive control that will reveal or hide a group of content. This control toggles between the text 'Show' and 'Hide'. */
-  hide: 'Hide',
-  /** Label for an interactive control that will reveal or hide a group of content. This control toggles between the text 'Expand view' and 'Collapse view'. */
-  expandView: 'Expand view',
-  /** Label for an interactive control that will reveal or hide a group of content. This control toggles between the text 'Expand view' and 'Collapse view'. */
-  collapseView: 'Collapse view',
-  /** Label indicating that Lighthouse throttled the page to emulate a slow 4G network connection. */
-  runtimeSlow4g: 'Slow 4G throttling',
-  /** Label indicating that Lighthouse throttled the page using custom throttling settings. */
-  runtimeCustom: 'Custom throttling',
-
-  /** This label is for a decorative chip that is included in a table row. The label indicates that the entity/company name in the row belongs to the first-party (or "1st-party"). First-party label is used to identify resources that are directly controlled by the owner of the web page. */
-  firstPartyChipLabel: '1st party',
-  /** Descriptive explanation in a tooltip form for a link to be opened in a new tab of the browser. */
-  openInANewTabTooltip: 'Open in a new tab',
-  /** Generic category name for all resources that could not be attributed to a 1st or 3rd party entity. */
-  unattributable: 'Unattributable',
-};
-
-/**
- * @license
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-class CategoryRenderer {
-  /**
-   * @param {DOM} dom
-   * @param {DetailsRenderer} detailsRenderer
-   */
-  constructor(dom, detailsRenderer) {
-    /** @type {DOM} */
-    this.dom = dom;
-    /** @type {DetailsRenderer} */
-    this.detailsRenderer = detailsRenderer;
-  }
-
-  /**
-   * Display info per top-level clump. Define on class to avoid race with Util init.
-   */
-  get _clumpTitles() {
-    return {
-      warning: Globals.strings.warningAuditsGroupTitle,
-      manual: Globals.strings.manualAuditsGroupTitle,
-      passed: Globals.strings.passedAuditsGroupTitle,
-      notApplicable: Globals.strings.notApplicableAuditsGroupTitle,
-    };
-  }
-
-  /**
-   * @param {LH.ReportResult.AuditRef} audit
-   * @return {Element}
-   */
-  renderAudit(audit) {
-    const component = this.dom.createComponent('audit');
-    return this.populateAuditValues(audit, component);
-  }
-
-  /**
-   * Populate an DOM tree with audit details. Used by renderAudit and renderOpportunity
-   * @param {LH.ReportResult.AuditRef} audit
-   * @param {DocumentFragment} component
-   * @return {!Element}
-   */
-  populateAuditValues(audit, component) {
-    const strings = Globals.strings;
-    const auditEl = this.dom.find('.lh-audit', component);
-    auditEl.id = audit.result.id;
-    const scoreDisplayMode = audit.result.scoreDisplayMode;
-
-    if (audit.result.displayValue) {
-      this.dom.find('.lh-audit__display-text', auditEl).textContent = audit.result.displayValue;
-    }
-
-    const titleEl = this.dom.find('.lh-audit__title', auditEl);
-    titleEl.append(this.dom.convertMarkdownCodeSnippets(audit.result.title));
-    const descEl = this.dom.find('.lh-audit__description', auditEl);
-    descEl.append(this.dom.convertMarkdownLinkSnippets(audit.result.description));
-
-    for (const relevantMetric of audit.relevantMetrics || []) {
-      const adornEl = this.dom.createChildOf(descEl, 'span', 'lh-audit__adorn');
-      adornEl.title = `Relevant to ${relevantMetric.result.title}`;
-      adornEl.textContent = relevantMetric.acronym || relevantMetric.id;
-    }
-
-    if (audit.stackPacks) {
-      audit.stackPacks.forEach(pack => {
-        const packElmImg = this.dom.createElement('img', 'lh-audit__stackpack__img');
-        packElmImg.src = pack.iconDataURL;
-        packElmImg.alt = pack.title;
-
-        const snippets = this.dom.convertMarkdownLinkSnippets(pack.description, {
-          alwaysAppendUtmSource: true,
-        });
-        const packElm = this.dom.createElement('div', 'lh-audit__stackpack');
-        packElm.append(packElmImg, snippets);
-
-        this.dom.find('.lh-audit__stackpacks', auditEl)
-          .append(packElm);
-      });
-    }
-
-    const header = this.dom.find('details', auditEl);
-    if (audit.result.details) {
-      const elem = this.detailsRenderer.render(audit.result.details);
-      if (elem) {
-        elem.classList.add('lh-details');
-        header.append(elem);
-      }
-    }
-
-    // Add chevron SVG to the end of the summary
-    this.dom.find('.lh-chevron-container', auditEl).append(this._createChevron());
-    this._setRatingClass(auditEl, audit.result.score, scoreDisplayMode);
-
-    if (audit.result.scoreDisplayMode === 'error') {
-      auditEl.classList.add(`lh-audit--error`);
-      const textEl = this.dom.find('.lh-audit__display-text', auditEl);
-      textEl.textContent = strings.errorLabel;
-      textEl.classList.add('lh-tooltip-boundary');
-      const tooltip = this.dom.createChildOf(textEl, 'div', 'lh-tooltip lh-tooltip--error');
-      tooltip.textContent = audit.result.errorMessage || strings.errorMissingAuditInfo;
-    } else if (audit.result.explanation) {
-      const explEl = this.dom.createChildOf(titleEl, 'div', 'lh-audit-explanation');
-      explEl.textContent = audit.result.explanation;
-    }
-    const warnings = audit.result.warnings;
-    if (!warnings || warnings.length === 0) return auditEl;
-
-    // Add list of warnings or singular warning
-    const summaryEl = this.dom.find('summary', header);
-    const warningsEl = this.dom.createChildOf(summaryEl, 'div', 'lh-warnings');
-    this.dom.createChildOf(warningsEl, 'span').textContent = strings.warningHeader;
-    if (warnings.length === 1) {
-      warningsEl.append(this.dom.createTextNode(warnings.join('')));
-    } else {
-      const warningsUl = this.dom.createChildOf(warningsEl, 'ul');
-      for (const warning of warnings) {
-        const item = this.dom.createChildOf(warningsUl, 'li');
-        item.textContent = warning;
-      }
-    }
-    return auditEl;
-  }
-
-  /**
-   * Inject the final screenshot next to the score gauge of the first category (likely Performance)
-   * @param {HTMLElement} categoriesEl
-   * @param {LH.ReportResult['audits']} audits
-   * @param {Element} scoreScaleEl
-   */
-  injectFinalScreenshot(categoriesEl, audits, scoreScaleEl) {
-    const audit = audits['final-screenshot'];
-    if (!audit || audit.scoreDisplayMode === 'error') return null;
-    if (!audit.details || audit.details.type !== 'screenshot') return null;
-
-    const imgEl = this.dom.createElement('img', 'lh-final-ss-image');
-    const finalScreenshotDataUri = audit.details.data;
-    imgEl.src = finalScreenshotDataUri;
-    imgEl.alt = audit.title;
-
-    const firstCatHeaderEl = this.dom.find('.lh-category .lh-category-header', categoriesEl);
-    const leftColEl = this.dom.createElement('div', 'lh-category-headercol');
-    const separatorEl = this.dom.createElement('div',
-        'lh-category-headercol lh-category-headercol--separator');
-    const rightColEl = this.dom.createElement('div', 'lh-category-headercol');
-
-    leftColEl.append(...firstCatHeaderEl.childNodes);
-    leftColEl.append(scoreScaleEl);
-    rightColEl.append(imgEl);
-    firstCatHeaderEl.append(leftColEl, separatorEl, rightColEl);
-    firstCatHeaderEl.classList.add('lh-category-header__finalscreenshot');
-  }
-
-  /**
-   * @return {Element}
-   */
-  _createChevron() {
-    const component = this.dom.createComponent('chevron');
-    const chevronEl = this.dom.find('svg.lh-chevron', component);
-    return chevronEl;
-  }
-
-  /**
-   * @param {Element} element DOM node to populate with values.
-   * @param {number|null} score
-   * @param {string} scoreDisplayMode
-   * @return {!Element}
-   */
-  _setRatingClass(element, score, scoreDisplayMode) {
-    const rating = ReportUtils.calculateRating(score, scoreDisplayMode);
-    element.classList.add(`lh-audit--${scoreDisplayMode.toLowerCase()}`);
-    if (scoreDisplayMode !== 'informative') {
-      element.classList.add(`lh-audit--${rating}`);
-    }
-    return element;
-  }
-
-  /**
-   * @param {LH.ReportResult.Category} category
-   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
-   * @param {{gatherMode: LH.Result.GatherMode}=} options
-   * @return {DocumentFragment}
-   */
-  renderCategoryHeader(category, groupDefinitions, options) {
-    const component = this.dom.createComponent('categoryHeader');
-
-    const gaugeContainerEl = this.dom.find('.lh-score__gauge', component);
-    const gaugeEl = this.renderCategoryScore(category, groupDefinitions, options);
-    gaugeContainerEl.append(gaugeEl);
-
-    if (category.description) {
-      const descEl = this.dom.convertMarkdownLinkSnippets(category.description);
-      this.dom.find('.lh-category-header__description', component).append(descEl);
-    }
-
-    return component;
-  }
-
-  /**
-   * Renders the group container for a group of audits. Individual audit elements can be added
-   * directly to the returned element.
-   * @param {LH.Result.ReportGroup} group
-   * @return {[Element, Element | null]}
-   */
-  renderAuditGroup(group) {
-    const groupEl = this.dom.createElement('div', 'lh-audit-group');
-
-    const auditGroupHeader = this.dom.createElement('div', 'lh-audit-group__header');
-
-    this.dom.createChildOf(auditGroupHeader, 'span', 'lh-audit-group__title')
-      .textContent = group.title;
-    groupEl.append(auditGroupHeader);
-
-    let footerEl = null;
-    if (group.description) {
-      footerEl = this.dom.convertMarkdownLinkSnippets(group.description);
-      footerEl.classList.add('lh-audit-group__description', 'lh-audit-group__footer');
-      groupEl.append(footerEl);
-    }
-
-    return [groupEl, footerEl];
-  }
-
-  /**
-   * Takes an array of auditRefs, groups them if requested, then returns an
-   * array of audit and audit-group elements.
-   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
-   * @param {Object<string, LH.Result.ReportGroup>} groupDefinitions
-   * @return {Array<Element>}
-   */
-  _renderGroupedAudits(auditRefs, groupDefinitions) {
-    // Audits grouped by their group (or under notAGroup).
-    /** @type {Map<string, Array<LH.ReportResult.AuditRef>>} */
-    const grouped = new Map();
-
-    // Add audits without a group first so they will appear first.
-    const notAGroup = 'NotAGroup';
-    grouped.set(notAGroup, []);
-
-    for (const auditRef of auditRefs) {
-      const groupId = auditRef.group || notAGroup;
-      if (groupId === 'hidden') continue;
-      const groupAuditRefs = grouped.get(groupId) || [];
-      groupAuditRefs.push(auditRef);
-      grouped.set(groupId, groupAuditRefs);
-    }
-
-    /** @type {Array<Element>} */
-    const auditElements = [];
-
-    for (const [groupId, groupAuditRefs] of grouped) {
-      if (groupId === notAGroup) {
-        // Push not-grouped audits individually.
-        for (const auditRef of groupAuditRefs) {
-          auditElements.push(this.renderAudit(auditRef));
-        }
-        continue;
-      }
-
-      // Push grouped audits as a group.
-      const groupDef = groupDefinitions[groupId];
-      const [auditGroupElem, auditGroupFooterEl] = this.renderAuditGroup(groupDef);
-      for (const auditRef of groupAuditRefs) {
-        auditGroupElem.insertBefore(this.renderAudit(auditRef), auditGroupFooterEl);
-      }
-      auditGroupElem.classList.add(`lh-audit-group--${groupId}`);
-      auditElements.push(auditGroupElem);
-    }
-
-    return auditElements;
-  }
-
-  /**
-   * Take a set of audits, group them if they have groups, then render in a top-level
-   * clump that can't be expanded/collapsed.
-   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
-   * @param {Object<string, LH.Result.ReportGroup>} groupDefinitions
-   * @return {Element}
-   */
-  renderUnexpandableClump(auditRefs, groupDefinitions) {
-    const clumpElement = this.dom.createElement('div');
-    const elements = this._renderGroupedAudits(auditRefs, groupDefinitions);
-    elements.forEach(elem => clumpElement.append(elem));
-    return clumpElement;
-  }
-
-  /**
-   * Take a set of audits and render in a top-level, expandable clump that starts
-   * in a collapsed state.
-   * @param {Exclude<TopLevelClumpId, 'failed'>} clumpId
-   * @param {{auditRefs: Array<LH.ReportResult.AuditRef>, description?: string}} clumpOpts
-   * @return {!Element}
-   */
-  renderClump(clumpId, {auditRefs, description}) {
-    const clumpComponent = this.dom.createComponent('clump');
-    const clumpElement = this.dom.find('.lh-clump', clumpComponent);
-
-    if (clumpId === 'warning') {
-      clumpElement.setAttribute('open', '');
-    }
-
-    const headerEl = this.dom.find('.lh-audit-group__header', clumpElement);
-    const title = this._clumpTitles[clumpId];
-    this.dom.find('.lh-audit-group__title', headerEl).textContent = title;
-
-    const itemCountEl = this.dom.find('.lh-audit-group__itemcount', clumpElement);
-    itemCountEl.textContent = `(${auditRefs.length})`;
-
-    // Add all audit results to the clump.
-    const auditElements = auditRefs.map(this.renderAudit.bind(this));
-    clumpElement.append(...auditElements);
-
-    const el = this.dom.find('.lh-audit-group', clumpComponent);
-    if (description) {
-      const descriptionEl = this.dom.convertMarkdownLinkSnippets(description);
-      descriptionEl.classList.add('lh-audit-group__description', 'lh-audit-group__footer');
-      el.append(descriptionEl);
-    }
-
-    this.dom.find('.lh-clump-toggletext--show', el).textContent = Globals.strings.show;
-    this.dom.find('.lh-clump-toggletext--hide', el).textContent = Globals.strings.hide;
-
-    clumpElement.classList.add(`lh-clump--${clumpId.toLowerCase()}`);
-    return el;
-  }
-
-  /**
-   * @param {LH.ReportResult.Category} category
-   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
-   * @param {{gatherMode: LH.Result.GatherMode, omitLabel?: boolean, onPageAnchorRendered?: (link: HTMLAnchorElement) => void}=} options
-   * @return {DocumentFragment}
-   */
-  renderCategoryScore(category, groupDefinitions, options) {
-    let categoryScore;
-    if (options && ReportUtils.shouldDisplayAsFraction(options.gatherMode)) {
-      categoryScore = this.renderCategoryFraction(category);
-    } else {
-      categoryScore = this.renderScoreGauge(category, groupDefinitions);
-    }
-
-    if (options?.omitLabel) {
-      const label = this.dom.find('.lh-gauge__label,.lh-fraction__label', categoryScore);
-      label.remove();
-    }
-
-    if (options?.onPageAnchorRendered) {
-      const anchor = this.dom.find('a', categoryScore);
-      options.onPageAnchorRendered(anchor);
-    }
-
-    return categoryScore;
-  }
-
-  /**
-   * @param {LH.ReportResult.Category} category
-   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
-   * @return {DocumentFragment}
-   */
-  renderScoreGauge(category, groupDefinitions) { // eslint-disable-line no-unused-vars
-    const tmpl = this.dom.createComponent('gauge');
-    const wrapper = this.dom.find('a.lh-gauge__wrapper', tmpl);
-
-    if (ReportUtils.isPluginCategory(category.id)) {
-      wrapper.classList.add('lh-gauge__wrapper--plugin');
-    }
-
-    // Cast `null` to 0
-    const numericScore = Number(category.score);
-    const gauge = this.dom.find('.lh-gauge', tmpl);
-    const gaugeArc = this.dom.find('circle.lh-gauge-arc', gauge);
-
-    if (gaugeArc) this._setGaugeArc(gaugeArc, numericScore);
-
-    const scoreOutOf100 = Math.round(numericScore * 100);
-    const percentageEl = this.dom.find('div.lh-gauge__percentage', tmpl);
-    percentageEl.textContent = scoreOutOf100.toString();
-    if (category.score === null) {
-      percentageEl.classList.add('lh-gauge--error');
-      percentageEl.textContent = '';
-      percentageEl.title = Globals.strings.errorLabel;
-    }
-
-    // Render a numerical score if the category has applicable audits, or no audits whatsoever.
-    if (category.auditRefs.length === 0 || this.hasApplicableAudits(category)) {
-      wrapper.classList.add(`lh-gauge__wrapper--${ReportUtils.calculateRating(category.score)}`);
-    } else {
-      wrapper.classList.add(`lh-gauge__wrapper--not-applicable`);
-      percentageEl.textContent = '-';
-      percentageEl.title = Globals.strings.notApplicableAuditsGroupTitle;
-    }
-
-    this.dom.find('.lh-gauge__label', tmpl).textContent = category.title;
-    return tmpl;
-  }
-
-  /**
-   * @param {LH.ReportResult.Category} category
-   * @return {DocumentFragment}
-   */
-  renderCategoryFraction(category) {
-    const tmpl = this.dom.createComponent('fraction');
-    const wrapper = this.dom.find('a.lh-fraction__wrapper', tmpl);
-
-    const {numPassed, numPassableAudits, totalWeight} =
-      ReportUtils.calculateCategoryFraction(category);
-
-    const fraction = numPassed / numPassableAudits;
-    const content = this.dom.find('.lh-fraction__content', tmpl);
-    const text = this.dom.createElement('span');
-    text.textContent = `${numPassed}/${numPassableAudits}`;
-    content.append(text);
-
-    let rating = ReportUtils.calculateRating(fraction);
-
-    // If none of the available audits can affect the score, a rating isn't useful.
-    // The flow report should display the fraction with neutral icon and coloring in this case.
-    if (totalWeight === 0) {
-      rating = 'null';
-    }
-
-    wrapper.classList.add(`lh-fraction__wrapper--${rating}`);
-
-    this.dom.find('.lh-fraction__label', tmpl).textContent = category.title;
-    return tmpl;
-  }
-
-  /**
-   * Returns true if an LH category has any non-"notApplicable" audits.
-   * @param {LH.ReportResult.Category} category
-   * @return {boolean}
-   */
-  hasApplicableAudits(category) {
-    return category.auditRefs.some(ref => ref.result.scoreDisplayMode !== 'notApplicable');
-  }
-
-  /**
-   * Define the score arc of the gauge
-   * Credit to xgad for the original technique: https://codepen.io/xgad/post/svg-radial-progress-meters
-   * @param {SVGCircleElement} arcElem
-   * @param {number} percent
-   */
-  _setGaugeArc(arcElem, percent) {
-    const circumferencePx = 2 * Math.PI * Number(arcElem.getAttribute('r'));
-    // The rounded linecap of the stroke extends the arc past its start and end.
-    // First, we tweak the -90deg rotation to start exactly at the top of the circle.
-    const strokeWidthPx = Number(arcElem.getAttribute('stroke-width'));
-    const rotationalAdjustmentPercent = 0.25 * strokeWidthPx / circumferencePx;
-    arcElem.style.transform = `rotate(${-90 + rotationalAdjustmentPercent * 360}deg)`;
-
-    // Then, we terminate the line a little early as well.
-    let arcLengthPx = percent * circumferencePx - strokeWidthPx / 2;
-    // Special cases. No dot for 0, and full ring if 100
-    if (percent === 0) arcElem.style.opacity = '0';
-    if (percent === 1) arcLengthPx = circumferencePx;
-
-    arcElem.style.strokeDasharray = `${Math.max(arcLengthPx, 0)} ${circumferencePx}`;
-  }
-
-  /**
-   * @param {LH.ReportResult.AuditRef} audit
-   * @return {boolean}
-   */
-  _auditHasWarning(audit) {
-    return Boolean(audit.result.warnings?.length);
-  }
-
-  /**
-   * Returns the id of the top-level clump to put this audit in.
-   * @param {LH.ReportResult.AuditRef} auditRef
-   * @return {TopLevelClumpId}
-   */
-  _getClumpIdForAuditRef(auditRef) {
-    const scoreDisplayMode = auditRef.result.scoreDisplayMode;
-    if (scoreDisplayMode === 'manual' || scoreDisplayMode === 'notApplicable') {
-      return scoreDisplayMode;
-    }
-
-    if (ReportUtils.showAsPassed(auditRef.result)) {
-      if (this._auditHasWarning(auditRef)) {
-        return 'warning';
-      } else {
-        return 'passed';
-      }
-    } else {
-      return 'failed';
-    }
-  }
-
-  /**
-   * Renders a set of top level sections (clumps), under a status of failed, warning,
-   * manual, passed, or notApplicable. The result ends up something like:
-   *
-   * failed clump
-   *   ├── audit 1 (w/o group)
-   *   ├── audit 2 (w/o group)
-   *   ├── audit group
-   *   |  ├── audit 3
-   *   |  └── audit 4
-   *   └── audit group
-   *      ├── audit 5
-   *      └── audit 6
-   * other clump (e.g. 'manual')
-   *   ├── audit 1
-   *   ├── audit 2
-   *   ├── …
-   *   ⋮
-   * @param {LH.ReportResult.Category} category
-   * @param {Object<string, LH.Result.ReportGroup>=} groupDefinitions
-   * @param {{gatherMode: LH.Result.GatherMode}=} options
-   * @return {Element}
-   */
-  render(category, groupDefinitions = {}, options) {
-    const element = this.dom.createElement('div', 'lh-category');
-    element.id = category.id;
-    element.append(this.renderCategoryHeader(category, groupDefinitions, options));
-
-    // Top level clumps for audits, in order they will appear in the report.
-    /** @type {Map<TopLevelClumpId, Array<LH.ReportResult.AuditRef>>} */
-    const clumps = new Map();
-    clumps.set('failed', []);
-    clumps.set('warning', []);
-    clumps.set('manual', []);
-    clumps.set('passed', []);
-    clumps.set('notApplicable', []);
-
-    // Sort audits into clumps.
-    for (const auditRef of category.auditRefs) {
-      const clumpId = this._getClumpIdForAuditRef(auditRef);
-      const clump = /** @type {Array<LH.ReportResult.AuditRef>} */ (clumps.get(clumpId)); // already defined
-      clump.push(auditRef);
-      clumps.set(clumpId, clump);
-    }
-
-    // Sort audits by weight.
-    for (const auditRefs of clumps.values()) {
-      auditRefs.sort((a, b) => {
-        return b.weight - a.weight;
-      });
-    }
-
-    // Render each clump.
-    for (const [clumpId, auditRefs] of clumps) {
-      if (auditRefs.length === 0) continue;
-
-      if (clumpId === 'failed') {
-        const clumpElem = this.renderUnexpandableClump(auditRefs, groupDefinitions);
-        clumpElem.classList.add(`lh-clump--failed`);
-        element.append(clumpElem);
-        continue;
-      }
-
-      const description = clumpId === 'manual' ? category.manualDescription : undefined;
-      const clumpElem = this.renderClump(clumpId, {auditRefs, description});
-      element.append(clumpElem);
-    }
-
-    return element;
-  }
-}
-
-/**
- * @license
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/** @typedef {import('./dom.js').DOM} DOM */
-/** @typedef {import('./details-renderer.js').DetailsRenderer} DetailsRenderer */
-/**
- * @typedef CRCSegment
- * @property {LH.Audit.Details.SimpleCriticalRequestNode[string]} node
- * @property {boolean} isLastChild
- * @property {boolean} hasChildren
- * @property {number} startTime
- * @property {number} transferSize
- * @property {boolean[]} treeMarkers
- */
-
-class CriticalRequestChainRenderer {
-  /**
-   * Create render context for critical-request-chain tree display.
-   * @param {LH.Audit.Details.SimpleCriticalRequestNode} tree
-   * @return {{tree: LH.Audit.Details.SimpleCriticalRequestNode, startTime: number, transferSize: number}}
-   */
-  static initTree(tree) {
-    let startTime = 0;
-    const rootNodes = Object.keys(tree);
-    if (rootNodes.length > 0) {
-      const node = tree[rootNodes[0]];
-      startTime = node.request.startTime;
-    }
-
-    return {tree, startTime, transferSize: 0};
-  }
-
-  /**
-   * Helper to create context for each critical-request-chain node based on its
-   * parent. Calculates if this node is the last child, whether it has any
-   * children itself and what the tree looks like all the way back up to the root,
-   * so the tree markers can be drawn correctly.
-   * @param {LH.Audit.Details.SimpleCriticalRequestNode} parent
-   * @param {string} id
-   * @param {number} startTime
-   * @param {number} transferSize
-   * @param {Array<boolean>=} treeMarkers
-   * @param {boolean=} parentIsLastChild
-   * @return {CRCSegment}
-   */
-  static createSegment(parent, id, startTime, transferSize, treeMarkers, parentIsLastChild) {
-    const node = parent[id];
-    const siblings = Object.keys(parent);
-    const isLastChild = siblings.indexOf(id) === (siblings.length - 1);
-    const hasChildren = !!node.children && Object.keys(node.children).length > 0;
-
-    // Copy the tree markers so that we don't change by reference.
-    const newTreeMarkers = Array.isArray(treeMarkers) ? treeMarkers.slice(0) : [];
-
-    // Add on the new entry.
-    if (typeof parentIsLastChild !== 'undefined') {
-      newTreeMarkers.push(!parentIsLastChild);
-    }
-
-    return {
-      node,
-      isLastChild,
-      hasChildren,
-      startTime,
-      transferSize: transferSize + node.request.transferSize,
-      treeMarkers: newTreeMarkers,
-    };
-  }
-
-  /**
-   * Creates the DOM for a tree segment.
-   * @param {DOM} dom
-   * @param {CRCSegment} segment
-   * @param {DetailsRenderer} detailsRenderer
-   * @return {Node}
-   */
-  static createChainNode(dom, segment, detailsRenderer) {
-    const chainEl = dom.createComponent('crcChain');
-
-    // Hovering over request shows full URL.
-    dom.find('.lh-crc-node', chainEl).setAttribute('title', segment.node.request.url);
-
-    const treeMarkeEl = dom.find('.lh-crc-node__tree-marker', chainEl);
-
-    // Construct lines and add spacers for sub requests.
-    segment.treeMarkers.forEach(separator => {
-      const classSeparator = separator ?
-        'lh-tree-marker lh-vert' :
-        'lh-tree-marker';
-      treeMarkeEl.append(
-        dom.createElement('span', classSeparator),
-        dom.createElement('span', 'lh-tree-marker')
-      );
-    });
-
-    const classLastChild = segment.isLastChild ?
-      'lh-tree-marker lh-up-right' :
-      'lh-tree-marker lh-vert-right';
-    const classHasChildren = segment.hasChildren ?
-      'lh-tree-marker lh-horiz-down' :
-      'lh-tree-marker lh-right';
-
-    treeMarkeEl.append(
-      dom.createElement('span', classLastChild),
-      dom.createElement('span', 'lh-tree-marker lh-right'),
-      dom.createElement('span', classHasChildren)
-    );
-
-    // Fill in url, host, and request size information.
-    const url = segment.node.request.url;
-    const linkEl = detailsRenderer.renderTextURL(url);
-    const treevalEl = dom.find('.lh-crc-node__tree-value', chainEl);
-    treevalEl.append(linkEl);
-
-    if (!segment.hasChildren) {
-      const {startTime, endTime, transferSize} = segment.node.request;
-      const span = dom.createElement('span', 'lh-crc-node__chain-duration');
-      span.textContent =
-        ' - ' + Globals.i18n.formatMilliseconds((endTime - startTime) * 1000) + ', ';
-      const span2 = dom.createElement('span', 'lh-crc-node__chain-duration');
-      span2.textContent = Globals.i18n.formatBytesToKiB(transferSize, 0.01);
-
-      treevalEl.append(span, span2);
-    }
-
-    return chainEl;
-  }
-
-  /**
-   * Recursively builds a tree from segments.
-   * @param {DOM} dom
-   * @param {DocumentFragment} tmpl
-   * @param {CRCSegment} segment
-   * @param {Element} elem Parent element.
-   * @param {LH.Audit.Details.CriticalRequestChain} details
-   * @param {DetailsRenderer} detailsRenderer
-   */
-  static buildTree(dom, tmpl, segment, elem, details, detailsRenderer) {
-    elem.append(CRCRenderer.createChainNode(dom, segment, detailsRenderer));
-    if (segment.node.children) {
-      for (const key of Object.keys(segment.node.children)) {
-        const childSegment = CRCRenderer.createSegment(segment.node.children, key,
-          segment.startTime, segment.transferSize, segment.treeMarkers, segment.isLastChild);
-        CRCRenderer.buildTree(dom, tmpl, childSegment, elem, details, detailsRenderer);
-      }
-    }
-  }
-
-  /**
-   * @param {DOM} dom
-   * @param {LH.Audit.Details.CriticalRequestChain} details
-   * @param {DetailsRenderer} detailsRenderer
-   * @return {Element}
-   */
-  static render(dom, details, detailsRenderer) {
-    const tmpl = dom.createComponent('crc');
-    const containerEl = dom.find('.lh-crc', tmpl);
-
-    // Fill in top summary.
-    dom.find('.lh-crc-initial-nav', tmpl).textContent = Globals.strings.crcInitialNavigation;
-    dom.find('.lh-crc__longest_duration_label', tmpl).textContent =
-        Globals.strings.crcLongestDurationLabel;
-    dom.find('.lh-crc__longest_duration', tmpl).textContent =
-        Globals.i18n.formatMilliseconds(details.longestChain.duration);
-
-    // Construct visual tree.
-    const root = CRCRenderer.initTree(details.chains);
-    for (const key of Object.keys(root.tree)) {
-      const segment = CRCRenderer.createSegment(root.tree, key, root.startTime, root.transferSize);
-      CRCRenderer.buildTree(dom, tmpl, segment, containerEl, details, detailsRenderer);
-    }
-
-    return dom.find('.lh-crc-container', tmpl);
-  }
-}
-
-// Alias b/c the name is really long.
-const CRCRenderer = CriticalRequestChainRenderer;
-
 /**
  * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
  */
-
-/** @typedef {import('./dom.js').DOM} DOM */
-/** @typedef {LH.Audit.Details.Rect} Rect */
-/** @typedef {{width: number, height: number}} Size */
-
-/**
- * @typedef InstallOverlayFeatureParams
- * @property {DOM} dom
- * @property {Element} rootEl
- * @property {Element} overlayContainerEl
- * @property {LH.Result.FullPageScreenshot} fullPageScreenshot
- */
-
-/**
- * @param {LH.Result.FullPageScreenshot['screenshot']} screenshot
- * @param {LH.Audit.Details.Rect} rect
- * @return {boolean}
- */
-function screenshotOverlapsRect(screenshot, rect) {
-  return rect.left <= screenshot.width &&
-    0 <= rect.right &&
-    rect.top <= screenshot.height &&
-    0 <= rect.bottom;
-}
-
-/**
- * @param {number} value
- * @param {number} min
- * @param {number} max
- */
-function clamp(value, min, max) {
-  if (value < min) return min;
-  if (value > max) return max;
-  return value;
-}
-
-/**
- * @param {Rect} rect
- */
-function getElementRectCenterPoint(rect) {
-  return {
-    x: rect.left + rect.width / 2,
-    y: rect.top + rect.height / 2,
-  };
-}
-
-class ElementScreenshotRenderer {
-  /**
-   * Given the location of an element and the sizes of the preview and screenshot,
-   * compute the absolute positions (in screenshot coordinate scale) of the screenshot content
-   * and the highlighted rect around the element.
-   * @param {Rect} elementRectSC
-   * @param {Size} elementPreviewSizeSC
-   * @param {Size} screenshotSize
-   */
-  static getScreenshotPositions(elementRectSC, elementPreviewSizeSC, screenshotSize) {
-    const elementRectCenter = getElementRectCenterPoint(elementRectSC);
-
-    // Try to center clipped region.
-    const screenshotLeftVisibleEdge = clamp(
-      elementRectCenter.x - elementPreviewSizeSC.width / 2,
-      0, screenshotSize.width - elementPreviewSizeSC.width
-    );
-    const screenshotTopVisisbleEdge = clamp(
-      elementRectCenter.y - elementPreviewSizeSC.height / 2,
-      0, screenshotSize.height - elementPreviewSizeSC.height
-    );
-
-    return {
-      screenshot: {
-        left: screenshotLeftVisibleEdge,
-        top: screenshotTopVisisbleEdge,
-      },
-      clip: {
-        left: elementRectSC.left - screenshotLeftVisibleEdge,
-        top: elementRectSC.top - screenshotTopVisisbleEdge,
-      },
-    };
-  }
-
-  /**
-   * Render a clipPath SVG element to assist marking the element's rect.
-   * The elementRect and previewSize are in screenshot coordinate scale.
-   * @param {DOM} dom
-   * @param {HTMLElement} maskEl
-   * @param {{left: number, top: number}} positionClip
-   * @param {Rect} elementRect
-   * @param {Size} elementPreviewSize
-   */
-  static renderClipPathInScreenshot(dom, maskEl, positionClip, elementRect, elementPreviewSize) {
-    const clipPathEl = dom.find('clipPath', maskEl);
-    const clipId = `clip-${Globals.getUniqueSuffix()}`;
-    clipPathEl.id = clipId;
-    maskEl.style.clipPath = `url(#${clipId})`;
-
-    // Normalize values between 0-1.
-    const top = positionClip.top / elementPreviewSize.height;
-    const bottom = top + elementRect.height / elementPreviewSize.height;
-    const left = positionClip.left / elementPreviewSize.width;
-    const right = left + elementRect.width / elementPreviewSize.width;
-
-    const polygonsPoints = [
-      `0,0             1,0            1,${top}          0,${top}`,
-      `0,${bottom}     1,${bottom}    1,1               0,1`,
-      `0,${top}        ${left},${top} ${left},${bottom} 0,${bottom}`,
-      `${right},${top} 1,${top}       1,${bottom}       ${right},${bottom}`,
-    ];
-    for (const points of polygonsPoints) {
-      const pointEl = dom.createElementNS('http://www.w3.org/2000/svg', 'polygon');
-      pointEl.setAttribute('points', points);
-      clipPathEl.append(pointEl);
-    }
-  }
-
-  /**
-   * Called by report renderer. Defines a css variable used by any element screenshots
-   * in the provided report element.
-   * Allows for multiple Lighthouse reports to be rendered on the page, each with their
-   * own full page screenshot.
-   * @param {HTMLElement} el
-   * @param {LH.Result.FullPageScreenshot['screenshot']} screenshot
-   */
-  static installFullPageScreenshot(el, screenshot) {
-    el.style.setProperty('--element-screenshot-url', `url('${screenshot.data}')`);
-  }
-
-  /**
-   * Installs the lightbox elements and wires up click listeners to all .lh-element-screenshot elements.
-   * @param {InstallOverlayFeatureParams} opts
-   */
-  static installOverlayFeature(opts) {
-    const {dom, rootEl, overlayContainerEl, fullPageScreenshot} = opts;
-    const screenshotOverlayClass = 'lh-screenshot-overlay--enabled';
-    // Don't install the feature more than once.
-    if (rootEl.classList.contains(screenshotOverlayClass)) return;
-    rootEl.classList.add(screenshotOverlayClass);
-
-    // Add a single listener to the provided element to handle all clicks within (event delegation).
-    rootEl.addEventListener('click', e => {
-      const target = /** @type {?HTMLElement} */ (e.target);
-      if (!target) return;
-      // Only activate the overlay for clicks on the screenshot *preview* of an element, not the full-size too.
-      const el = /** @type {?HTMLElement} */ (target.closest('.lh-node > .lh-element-screenshot'));
-      if (!el) return;
-
-      const overlay = dom.createElement('div', 'lh-element-screenshot__overlay');
-      overlayContainerEl.append(overlay);
-
-      // The newly-added overlay has the dimensions we need.
-      const maxLightboxSize = {
-        width: overlay.clientWidth * 0.95,
-        height: overlay.clientHeight * 0.80,
-      };
-
-      const elementRectSC = {
-        width: Number(el.dataset['rectWidth']),
-        height: Number(el.dataset['rectHeight']),
-        left: Number(el.dataset['rectLeft']),
-        right: Number(el.dataset['rectLeft']) + Number(el.dataset['rectWidth']),
-        top: Number(el.dataset['rectTop']),
-        bottom: Number(el.dataset['rectTop']) + Number(el.dataset['rectHeight']),
-      };
-      const screenshotElement = ElementScreenshotRenderer.render(
-        dom,
-        fullPageScreenshot.screenshot,
-        elementRectSC,
-        maxLightboxSize
-      );
-
-      // This would be unexpected here.
-      // When `screenshotElement` is `null`, there is also no thumbnail element for the user to have clicked to make it this far.
-      if (!screenshotElement) {
-        overlay.remove();
-        return;
-      }
-      overlay.append(screenshotElement);
-      overlay.addEventListener('click', () => overlay.remove());
-    });
-  }
-
-  /**
-   * Given the size of the element in the screenshot and the total available size of our preview container,
-   * compute the factor by which we need to zoom out to view the entire element with context.
-   * @param {Rect} elementRectSC
-   * @param {Size} renderContainerSizeDC
-   * @return {number}
-   */
-  static _computeZoomFactor(elementRectSC, renderContainerSizeDC) {
-    const targetClipToViewportRatio = 0.75;
-    const zoomRatioXY = {
-      x: renderContainerSizeDC.width / elementRectSC.width,
-      y: renderContainerSizeDC.height / elementRectSC.height,
-    };
-    const zoomFactor = targetClipToViewportRatio * Math.min(zoomRatioXY.x, zoomRatioXY.y);
-    return Math.min(1, zoomFactor);
-  }
-
-  /**
-   * Renders an element with surrounding context from the full page screenshot.
-   * Used to render both the thumbnail preview in details tables and the full-page screenshot in the lightbox.
-   * Returns null if element rect is outside screenshot bounds.
-   * @param {DOM} dom
-   * @param {LH.Result.FullPageScreenshot['screenshot']} screenshot
-   * @param {Rect} elementRectSC Region of screenshot to highlight.
-   * @param {Size} maxRenderSizeDC e.g. maxThumbnailSize or maxLightboxSize.
-   * @return {Element|null}
-   */
-  static render(dom, screenshot, elementRectSC, maxRenderSizeDC) {
-    if (!screenshotOverlapsRect(screenshot, elementRectSC)) {
-      return null;
-    }
-
-    const tmpl = dom.createComponent('elementScreenshot');
-    const containerEl = dom.find('div.lh-element-screenshot', tmpl);
-
-    containerEl.dataset['rectWidth'] = elementRectSC.width.toString();
-    containerEl.dataset['rectHeight'] = elementRectSC.height.toString();
-    containerEl.dataset['rectLeft'] = elementRectSC.left.toString();
-    containerEl.dataset['rectTop'] = elementRectSC.top.toString();
-
-    // Zoom out when highlighted region takes up most of the viewport.
-    // This provides more context for where on the page this element is.
-    const zoomFactor = this._computeZoomFactor(elementRectSC, maxRenderSizeDC);
-
-    const elementPreviewSizeSC = {
-      width: maxRenderSizeDC.width / zoomFactor,
-      height: maxRenderSizeDC.height / zoomFactor,
-    };
-
-    elementPreviewSizeSC.width = Math.min(screenshot.width, elementPreviewSizeSC.width);
-    elementPreviewSizeSC.height = Math.min(screenshot.height, elementPreviewSizeSC.height);
-
-    /* This preview size is either the size of the thumbnail or size of the Lightbox */
-    const elementPreviewSizeDC = {
-      width: elementPreviewSizeSC.width * zoomFactor,
-      height: elementPreviewSizeSC.height * zoomFactor,
-    };
-
-    const positions = ElementScreenshotRenderer.getScreenshotPositions(
-      elementRectSC,
-      elementPreviewSizeSC,
-      {width: screenshot.width, height: screenshot.height}
-    );
-
-    const imageEl = dom.find('div.lh-element-screenshot__image', containerEl);
-    imageEl.style.width = elementPreviewSizeDC.width + 'px';
-    imageEl.style.height = elementPreviewSizeDC.height + 'px';
-
-    imageEl.style.backgroundPositionY = -(positions.screenshot.top * zoomFactor) + 'px';
-    imageEl.style.backgroundPositionX = -(positions.screenshot.left * zoomFactor) + 'px';
-    imageEl.style.backgroundSize =
-      `${screenshot.width * zoomFactor}px ${screenshot.height * zoomFactor}px`;
-
-    const markerEl = dom.find('div.lh-element-screenshot__element-marker', containerEl);
-    markerEl.style.width = elementRectSC.width * zoomFactor + 'px';
-    markerEl.style.height = elementRectSC.height * zoomFactor + 'px';
-    markerEl.style.left = positions.clip.left * zoomFactor + 'px';
-    markerEl.style.top = positions.clip.top * zoomFactor + 'px';
-
-    const maskEl = dom.find('div.lh-element-screenshot__mask', containerEl);
-    maskEl.style.width = elementPreviewSizeDC.width + 'px';
-    maskEl.style.height = elementPreviewSizeDC.height + 'px';
-
-    ElementScreenshotRenderer.renderClipPathInScreenshot(
-      dom,
-      maskEl,
-      positions.clip,
-      elementRectSC,
-      elementPreviewSizeSC
-    );
-
-    return containerEl;
-  }
-}
-
-/**
- * @license
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const URL_PREFIXES = ['http://', 'https://', 'data:'];
-const SUMMABLE_VALUETYPES = ['bytes', 'numeric', 'ms', 'timespanMs'];
-
-class DetailsRenderer {
-  /**
-   * @param {DOM} dom
-   * @param {{fullPageScreenshot?: LH.Result.FullPageScreenshot, entities?: LH.Result.Entities}} [options]
-   */
-  constructor(dom, options = {}) {
-    this._dom = dom;
-    this._fullPageScreenshot = options.fullPageScreenshot;
-    this._entities = options.entities;
-  }
-
-  /**
-   * @param {AuditDetails} details
-   * @return {Element|null}
-   */
-  render(details) {
-    switch (details.type) {
-      case 'filmstrip':
-        return this._renderFilmstrip(details);
-      case 'list':
-        return this._renderList(details);
-      case 'table':
-      case 'opportunity':
-        return this._renderTable(details);
-      case 'criticalrequestchain':
-        return CriticalRequestChainRenderer.render(this._dom, details, this);
-
-      // Internal-only details, not for rendering.
-      case 'screenshot':
-      case 'debugdata':
-      case 'treemap-data':
-        return null;
-
-      default: {
-        // @ts-expect-error - all detail types need to be handled above so tsc thinks this is unreachable.
-        // Call _renderUnknown() to be forward compatible with new, unexpected detail types.
-        return this._renderUnknown(details.type, details);
-      }
-    }
-  }
-
-  /**
-   * @param {{value: number, granularity?: number}} details
-   * @return {Element}
-   */
-  _renderBytes(details) {
-    // TODO: handle displayUnit once we have something other than 'KiB'
-    const value = Globals.i18n.formatBytesToKiB(details.value, details.granularity || 0.1);
-    const textEl = this._renderText(value);
-    textEl.title = Globals.i18n.formatBytes(details.value);
-    return textEl;
-  }
-
-  /**
-   * @param {{value: number, granularity?: number, displayUnit?: string}} details
-   * @return {Element}
-   */
-  _renderMilliseconds(details) {
-    let value;
-    if (details.displayUnit === 'duration') {
-      value = Globals.i18n.formatDuration(details.value);
-    } else {
-      value = Globals.i18n.formatMilliseconds(details.value, details.granularity || 10);
-    }
-
-    return this._renderText(value);
-  }
-
-  /**
-   * @param {string} text
-   * @return {HTMLElement}
-   */
-  renderTextURL(text) {
-    const url = text;
-
-    let displayedPath;
-    let displayedHost;
-    let title;
-    try {
-      const parsed = Util.parseURL(url);
-      displayedPath = parsed.file === '/' ? parsed.origin : parsed.file;
-      displayedHost = parsed.file === '/' || parsed.hostname === '' ? '' : `(${parsed.hostname})`;
-      title = url;
-    } catch (e) {
-      displayedPath = url;
-    }
-
-    const element = this._dom.createElement('div', 'lh-text__url');
-    element.append(this._renderLink({text: displayedPath, url}));
-
-    if (displayedHost) {
-      const hostElem = this._renderText(displayedHost);
-      hostElem.classList.add('lh-text__url-host');
-      element.append(hostElem);
-    }
-
-    if (title) {
-      element.title = url;
-      // set the url on the element's dataset which we use to check 3rd party origins
-      element.dataset.url = url;
-    }
-    return element;
-  }
-
-  /**
-   * @param {{text: string, url: string}} details
-   * @return {HTMLElement}
-   */
-  _renderLink(details) {
-    const a = this._dom.createElement('a');
-    this._dom.safelySetHref(a, details.url);
-
-    if (!a.href) {
-      // Fall back to just the link text if invalid or protocol not allowed.
-      const element = this._renderText(details.text);
-      element.classList.add('lh-link');
-      return element;
-    }
-
-    a.rel = 'noopener';
-    a.target = '_blank';
-    a.textContent = details.text;
-    a.classList.add('lh-link');
-    return a;
-  }
-
-  /**
-   * @param {string} text
-   * @return {HTMLDivElement}
-   */
-  _renderText(text) {
-    const element = this._dom.createElement('div', 'lh-text');
-    element.textContent = text;
-    return element;
-  }
-
-  /**
-   * @param {{value: number, granularity?: number}} details
-   * @return {Element}
-   */
-  _renderNumeric(details) {
-    const value = Globals.i18n.formatNumber(details.value, details.granularity || 0.1);
-    const element = this._dom.createElement('div', 'lh-numeric');
-    element.textContent = value;
-    return element;
-  }
-
-  /**
-   * Create small thumbnail with scaled down image asset.
-   * @param {string} details
-   * @return {Element}
-   */
-  _renderThumbnail(details) {
-    const element = this._dom.createElement('img', 'lh-thumbnail');
-    const strValue = details;
-    element.src = strValue;
-    element.title = strValue;
-    element.alt = '';
-    return element;
-  }
-
-  /**
-   * @param {string} type
-   * @param {*} value
-   */
-  _renderUnknown(type, value) {
-    // eslint-disable-next-line no-console
-    console.error(`Unknown details type: ${type}`, value);
-    const element = this._dom.createElement('details', 'lh-unknown');
-    this._dom.createChildOf(element, 'summary').textContent =
-      `We don't know how to render audit details of type \`${type}\`. ` +
-      'The Lighthouse version that collected this data is likely newer than the Lighthouse ' +
-      'version of the report renderer. Expand for the raw JSON.';
-    this._dom.createChildOf(element, 'pre').textContent = JSON.stringify(value, null, 2);
-    return element;
-  }
-
-  /**
-   * Render a details item value for embedding in a table. Renders the value
-   * based on the heading's valueType, unless the value itself has a `type`
-   * property to override it.
-   * @param {TableItemValue} value
-   * @param {LH.Audit.Details.TableColumnHeading} heading
-   * @return {Element|null}
-   */
-  _renderTableValue(value, heading) {
-    if (value === undefined || value === null) {
-      return null;
-    }
-
-    // First deal with the possible object forms of value.
-    if (typeof value === 'object') {
-      // The value's type overrides the heading's for this column.
-      switch (value.type) {
-        case 'code': {
-          return this._renderCode(value.value);
-        }
-        case 'link': {
-          return this._renderLink(value);
-        }
-        case 'node': {
-          return this.renderNode(value);
-        }
-        case 'numeric': {
-          return this._renderNumeric(value);
-        }
-        case 'source-location': {
-          return this.renderSourceLocation(value);
-        }
-        case 'url': {
-          return this.renderTextURL(value.value);
-        }
-        default: {
-          return this._renderUnknown(value.type, value);
-        }
-      }
-    }
-
-    // Next, deal with primitives.
-    switch (heading.valueType) {
-      case 'bytes': {
-        const numValue = Number(value);
-        return this._renderBytes({value: numValue, granularity: heading.granularity});
-      }
-      case 'code': {
-        const strValue = String(value);
-        return this._renderCode(strValue);
-      }
-      case 'ms': {
-        const msValue = {
-          value: Number(value),
-          granularity: heading.granularity,
-          displayUnit: heading.displayUnit,
-        };
-        return this._renderMilliseconds(msValue);
-      }
-      case 'numeric': {
-        const numValue = Number(value);
-        return this._renderNumeric({value: numValue, granularity: heading.granularity});
-      }
-      case 'text': {
-        const strValue = String(value);
-        return this._renderText(strValue);
-      }
-      case 'thumbnail': {
-        const strValue = String(value);
-        return this._renderThumbnail(strValue);
-      }
-      case 'timespanMs': {
-        const numValue = Number(value);
-        return this._renderMilliseconds({value: numValue});
-      }
-      case 'url': {
-        const strValue = String(value);
-        if (URL_PREFIXES.some(prefix => strValue.startsWith(prefix))) {
-          return this.renderTextURL(strValue);
-        } else {
-          // Fall back to <pre> rendering if not actually a URL.
-          return this._renderCode(strValue);
-        }
-      }
-      default: {
-        return this._renderUnknown(heading.valueType, value);
-      }
-    }
-  }
-
-  /**
-   * Returns a new heading where the values are defined first by `heading.subItemsHeading`,
-   * and secondly by `heading`. If there is no subItemsHeading, returns null, which will
-   * be rendered as an empty column.
-   * @param {LH.Audit.Details.TableColumnHeading} heading
-   * @return {LH.Audit.Details.TableColumnHeading | null}
-   */
-  _getDerivedSubItemsHeading(heading) {
-    if (!heading.subItemsHeading) return null;
-    return {
-      key: heading.subItemsHeading.key || '',
-      valueType: heading.subItemsHeading.valueType || heading.valueType,
-      granularity: heading.subItemsHeading.granularity || heading.granularity,
-      displayUnit: heading.subItemsHeading.displayUnit || heading.displayUnit,
-      label: '',
-    };
-  }
-
-  /**
-   * @param {TableItem} item
-   * @param {(LH.Audit.Details.TableColumnHeading | null)[]} headings
-   */
-  _renderTableRow(item, headings) {
-    const rowElem = this._dom.createElement('tr');
-
-    for (const heading of headings) {
-      // Empty cell if no heading or heading key for this column.
-      if (!heading || !heading.key) {
-        this._dom.createChildOf(rowElem, 'td', 'lh-table-column--empty');
-        continue;
-      }
-
-      const value = item[heading.key];
-      let valueElement;
-      if (value !== undefined && value !== null) {
-        valueElement = this._renderTableValue(value, heading);
-      }
-
-      if (valueElement) {
-        const classes = `lh-table-column--${heading.valueType}`;
-        this._dom.createChildOf(rowElem, 'td', classes).append(valueElement);
-      } else {
-        // Empty cell is rendered for a column if:
-        // - the pair is null
-        // - the heading key is null
-        // - the value is undefined/null
-        this._dom.createChildOf(rowElem, 'td', 'lh-table-column--empty');
-      }
-    }
-
-    return rowElem;
-  }
-
-  /**
-   * Renders one or more rows from a details table item. A single table item can
-   * expand into multiple rows, if there is a subItemsHeading.
-   * @param {TableItem} item
-   * @param {LH.Audit.Details.TableColumnHeading[]} headings
-   */
-  _renderTableRowsFromItem(item, headings) {
-    const fragment = this._dom.createFragment();
-    fragment.append(this._renderTableRow(item, headings));
-
-    if (!item.subItems) return fragment;
-
-    const subItemsHeadings = headings.map(this._getDerivedSubItemsHeading);
-    if (!subItemsHeadings.some(Boolean)) return fragment;
-
-    for (const subItem of item.subItems.items) {
-      const rowEl = this._renderTableRow(subItem, subItemsHeadings);
-      rowEl.classList.add('lh-sub-item-row');
-      fragment.append(rowEl);
-    }
-
-    return fragment;
-  }
-
-  /**
-   * Adorn a table row element with entity chips based on [data-entity] attribute.
-   * @param {HTMLTableRowElement} rowEl
-   */
-  _adornEntityGroupRow(rowEl) {
-    const entityName = rowEl.dataset.entity;
-    if (!entityName) return;
-    const matchedEntity = this._entities?.find(e => e.name === entityName);
-    if (!matchedEntity) return;
-
-    const firstTdEl = this._dom.find('td', rowEl);
-
-    if (matchedEntity.category) {
-      const categoryChipEl = this._dom.createElement('span');
-      categoryChipEl.classList.add('lh-audit__adorn');
-      categoryChipEl.textContent = matchedEntity.category;
-      firstTdEl.append(' ', categoryChipEl);
-    }
-
-    if (matchedEntity.isFirstParty) {
-      const firstPartyChipEl = this._dom.createElement('span');
-      firstPartyChipEl.classList.add('lh-audit__adorn', 'lh-audit__adorn1p');
-      firstPartyChipEl.textContent = Globals.strings.firstPartyChipLabel;
-      firstTdEl.append(' ', firstPartyChipEl);
-    }
-
-    if (matchedEntity.homepage) {
-      const entityLinkEl = this._dom.createElement('a');
-      entityLinkEl.href = matchedEntity.homepage;
-      entityLinkEl.target = '_blank';
-      entityLinkEl.title = Globals.strings.openInANewTabTooltip;
-      entityLinkEl.classList.add('lh-report-icon--external');
-      firstTdEl.append(' ', entityLinkEl);
-    }
-  }
-
-  /**
-   * Renders an entity-grouped row.
-   * @param {TableItem} item
-   * @param {LH.Audit.Details.TableColumnHeading[]} headings
-   */
-  _renderEntityGroupRow(item, headings) {
-    const entityColumnHeading = {...headings[0]};
-    // In subitem-situations (unused-javascript), ensure Entity name is not rendered as code, etc.
-    entityColumnHeading.valueType = 'text';
-    const groupedRowHeadings = [entityColumnHeading, ...headings.slice(1)];
-    const fragment = this._dom.createFragment();
-    fragment.append(this._renderTableRow(item, groupedRowHeadings));
-    this._dom.find('tr', fragment).classList.add('lh-row--group');
-    return fragment;
-  }
-
-  /**
-   * Returns an array of entity-grouped TableItems to use as the top-level rows in
-   * an grouped table. Each table item returned represents a unique entity, with every
-   * applicable key that can be grouped as a property. Optionally, supported columns are
-   * summed by entity, and sorted by specified keys.
-   * @param {TableLike} details
-   * @return {TableItem[]}
-   */
-  _getEntityGroupItems(details) {
-    const {items, headings, sortedBy} = details;
-    // Exclude entity-grouped audits and results without entity classification.
-    // Eg. Third-party Summary comes entity-grouped.
-    if (!items.length || details.isEntityGrouped || !items.some(item => item.entity)) {
-      return [];
-    }
-
-    const skippedColumns = new Set(details.skipSumming || []);
-    /** @type {string[]} */
-    const summableColumns = [];
-    for (const heading of headings) {
-      if (!heading.key || skippedColumns.has(heading.key)) continue;
-      if (SUMMABLE_VALUETYPES.includes(heading.valueType)) {
-        summableColumns.push(heading.key);
-      }
-    }
-
-    // Grab the first column's key to group by entity
-    const firstColumnKey = headings[0].key;
-    if (!firstColumnKey) return [];
-
-    /** @type {Map<string | undefined, TableItem>} */
-    const byEntity = new Map();
-    for (const item of items) {
-      const entityName = typeof item.entity === 'string' ? item.entity : undefined;
-      const groupedItem = byEntity.get(entityName) || {
-        [firstColumnKey]: entityName || Globals.strings.unattributable,
-        entity: entityName,
-      };
-      for (const key of summableColumns) {
-        groupedItem[key] = Number(groupedItem[key] || 0) + Number(item[key] || 0);
-      }
-      byEntity.set(entityName, groupedItem);
-    }
-
-    const result = [...byEntity.values()];
-    if (sortedBy) {
-      result.sort(ReportUtils.getTableItemSortComparator(sortedBy));
-    }
-    return result;
-  }
-
-  /**
-   * @param {TableLike} details
-   * @return {Element}
-   */
-  _renderTable(details) {
-    if (!details.items.length) return this._dom.createElement('span');
-
-    const tableElem = this._dom.createElement('table', 'lh-table');
-    const theadElem = this._dom.createChildOf(tableElem, 'thead');
-    const theadTrElem = this._dom.createChildOf(theadElem, 'tr');
-
-    for (const heading of details.headings) {
-      const valueType = heading.valueType || 'text';
-      const classes = `lh-table-column--${valueType}`;
-      const labelEl = this._dom.createElement('div', 'lh-text');
-      labelEl.textContent = heading.label;
-      this._dom.createChildOf(theadTrElem, 'th', classes).append(labelEl);
-    }
-
-    const entityItems = this._getEntityGroupItems(details);
-    const tbodyElem = this._dom.createChildOf(tableElem, 'tbody');
-    if (entityItems.length) {
-      for (const entityItem of entityItems) {
-        const entityName = typeof entityItem.entity === 'string' ? entityItem.entity : undefined;
-        const entityGroupFragment = this._renderEntityGroupRow(entityItem, details.headings);
-        // Render all the items that match the heading row
-        for (const item of details.items.filter((item) => item.entity === entityName)) {
-          entityGroupFragment.append(this._renderTableRowsFromItem(item, details.headings));
-        }
-        const rowEls = this._dom.findAll('tr', entityGroupFragment);
-        if (entityName && rowEls.length) {
-          rowEls.forEach(row => row.dataset.entity = entityName);
-          this._adornEntityGroupRow(rowEls[0]);
-        }
-        tbodyElem.append(entityGroupFragment);
-      }
-    } else {
-      let even = true;
-      for (const item of details.items) {
-        const rowsFragment = this._renderTableRowsFromItem(item, details.headings);
-        const rowEls = this._dom.findAll('tr', rowsFragment);
-        const firstRowEl = rowEls[0];
-        if (typeof item.entity === 'string') {
-          firstRowEl.dataset.entity = item.entity;
-        }
-        if (details.isEntityGrouped && item.entity) {
-          // If the audit is already grouped, consider first row as a heading row.
-          firstRowEl.classList.add('lh-row--group');
-          this._adornEntityGroupRow(firstRowEl);
-        } else {
-          for (const rowEl of rowEls) {
-            // For zebra styling (same shade for a row and its sub-rows).
-            rowEl.classList.add(even ? 'lh-row--even' : 'lh-row--odd');
-          }
-        }
-        even = !even;
-        tbodyElem.append(rowsFragment);
-      }
-    }
-
-    return tableElem;
-  }
-
-  /**
-   * @param {LH.FormattedIcu<LH.Audit.Details.List>} details
-   * @return {Element}
-   */
-  _renderList(details) {
-    const listContainer = this._dom.createElement('div', 'lh-list');
-
-    details.items.forEach(item => {
-      const listItem = this.render(item);
-      if (!listItem) return;
-      listContainer.append(listItem);
-    });
-
-    return listContainer;
-  }
-
-  /**
-   * @param {LH.Audit.Details.NodeValue} item
-   * @return {Element}
-   */
-  renderNode(item) {
-    const element = this._dom.createElement('span', 'lh-node');
-    if (item.nodeLabel) {
-      const nodeLabelEl = this._dom.createElement('div');
-      nodeLabelEl.textContent = item.nodeLabel;
-      element.append(nodeLabelEl);
-    }
-    if (item.snippet) {
-      const snippetEl = this._dom.createElement('div');
-      snippetEl.classList.add('lh-node__snippet');
-      snippetEl.textContent = item.snippet;
-      element.append(snippetEl);
-    }
-    if (item.selector) {
-      element.title = item.selector;
-    }
-    if (item.path) element.setAttribute('data-path', item.path);
-    if (item.selector) element.setAttribute('data-selector', item.selector);
-    if (item.snippet) element.setAttribute('data-snippet', item.snippet);
-
-    if (!this._fullPageScreenshot) return element;
-
-    const rect = item.lhId && this._fullPageScreenshot.nodes[item.lhId];
-    if (!rect || rect.width === 0 || rect.height === 0) return element;
-
-    const maxThumbnailSize = {width: 147, height: 100};
-    const elementScreenshot = ElementScreenshotRenderer.render(
-      this._dom,
-      this._fullPageScreenshot.screenshot,
-      rect,
-      maxThumbnailSize
-    );
-    if (elementScreenshot) element.prepend(elementScreenshot);
-
-    return element;
-  }
-
-  /**
-   * @param {LH.Audit.Details.SourceLocationValue} item
-   * @return {Element|null}
-   * @protected
-   */
-  renderSourceLocation(item) {
-    if (!item.url) {
-      return null;
-    }
-
-    // Lines are shown as one-indexed.
-    const generatedLocation = `${item.url}:${item.line + 1}:${item.column}`;
-    let sourceMappedOriginalLocation;
-    if (item.original) {
-      const file = item.original.file || '<unmapped>';
-      sourceMappedOriginalLocation = `${file}:${item.original.line + 1}:${item.original.column}`;
-    }
-
-    // We render slightly differently based on presence of source map and provenance of URL.
-    let element;
-    if (item.urlProvider === 'network' && sourceMappedOriginalLocation) {
-      element = this._renderLink({
-        url: item.url,
-        text: sourceMappedOriginalLocation,
-      });
-      element.title = `maps to generated location ${generatedLocation}`;
-    } else if (item.urlProvider === 'network' && !sourceMappedOriginalLocation) {
-      element = this.renderTextURL(item.url);
-      this._dom.find('.lh-link', element).textContent += `:${item.line + 1}:${item.column}`;
-    } else if (item.urlProvider === 'comment' && sourceMappedOriginalLocation) {
-      element = this._renderText(`${sourceMappedOriginalLocation} (from source map)`);
-      element.title = `${generatedLocation} (from sourceURL)`;
-    } else if (item.urlProvider === 'comment' && !sourceMappedOriginalLocation) {
-      element = this._renderText(`${generatedLocation} (from sourceURL)`);
-    } else {
-      return null;
-    }
-
-    element.classList.add('lh-source-location');
-    element.setAttribute('data-source-url', item.url);
-    // DevTools expects zero-indexed lines.
-    element.setAttribute('data-source-line', String(item.line));
-    element.setAttribute('data-source-column', String(item.column));
-
-    return element;
-  }
-
-  /**
-   * @param {LH.Audit.Details.Filmstrip} details
-   * @return {Element}
-   */
-  _renderFilmstrip(details) {
-    const filmstripEl = this._dom.createElement('div', 'lh-filmstrip');
-
-    for (const thumbnail of details.items) {
-      const frameEl = this._dom.createChildOf(filmstripEl, 'div', 'lh-filmstrip__frame');
-      const imgEl = this._dom.createChildOf(frameEl, 'img', 'lh-filmstrip__thumbnail');
-      imgEl.src = thumbnail.data;
-      imgEl.alt = `Screenshot`;
-    }
-    return filmstripEl;
-  }
-
-  /**
-   * @param {string} text
-   * @return {Element}
-   */
-  _renderCode(text) {
-    const pre = this._dom.createElement('pre', 'lh-code');
-    pre.textContent = text;
-    return pre;
-  }
-}
-
-/**
- * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-
-// Not named `NBSP` because that creates a duplicate identifier (util.js).
-const NBSP2 = '\xa0';
-const KiB = 1024;
-const MiB = KiB * KiB;
-
-class I18nFormatter {
-  /**
-   * @param {LH.Locale} locale
-   */
-  constructor(locale) {
-    // When testing, use a locale with more exciting numeric formatting.
-    if (locale === 'en-XA') locale = 'de';
-
-    this._locale = locale;
-    this._cachedNumberFormatters = new Map();
-  }
-
-  /**
-   * @param {number} number
-   * @param {number|undefined} granularity
-   * @param {Intl.NumberFormatOptions=} opts
-   * @return {string}
-   */
-  _formatNumberWithGranularity(number, granularity, opts = {}) {
-    if (granularity !== undefined) {
-      const log10 = -Math.log10(granularity);
-      if (!Number.isInteger(log10)) {
-        console.warn(`granularity of ${granularity} is invalid. Using 1 instead`);
-        granularity = 1;
-      }
-
-      if (granularity < 1) {
-        opts = {...opts};
-        opts.minimumFractionDigits = opts.maximumFractionDigits = Math.ceil(log10);
-      }
-
-      number = Math.round(number / granularity) * granularity;
-
-      // Avoid displaying a negative value that rounds to zero as "0".
-      if (Object.is(number, -0)) number = 0;
-    } else if (Math.abs(number) < 0.0005) {
-      // Also avoids "-0".
-      number = 0;
-    }
-
-    let formatter;
-    // eslint-disable-next-line max-len
-    const cacheKey = [
-      opts.minimumFractionDigits,
-      opts.maximumFractionDigits,
-      opts.style,
-      opts.unit,
-      opts.unitDisplay,
-      this._locale,
-    ].join('');
-
-    formatter = this._cachedNumberFormatters.get(cacheKey);
-    if (!formatter) {
-      formatter = new Intl.NumberFormat(this._locale, opts);
-      this._cachedNumberFormatters.set(cacheKey, formatter);
-    }
-
-    return formatter.format(number).replace(' ', NBSP2);
-  }
-
-  /**
-   * Format number.
-   * @param {number} number
-   * @param {number=} granularity Controls how coarse the displayed value is.
-   *                              If undefined, the number will be displayed as described
-   *                              by the Intl defaults: tinyurl.com/7s67w5x7
-   * @return {string}
-   */
-  formatNumber(number, granularity) {
-    return this._formatNumberWithGranularity(number, granularity);
-  }
-
-  /**
-   * Format integer.
-   * Just like {@link formatNumber} but uses a granularity of 1, rounding to the nearest
-   * whole number.
-   * @param {number} number
-   * @return {string}
-   */
-  formatInteger(number) {
-    return this._formatNumberWithGranularity(number, 1);
-  }
-
-  /**
-   * Format percent.
-   * @param {number} number 0–1
-   * @return {string}
-   */
-  formatPercent(number) {
-    return new Intl.NumberFormat(this._locale, {style: 'percent'}).format(number);
-  }
-
-  /**
-   * @param {number} size
-   * @param {number=} granularity Controls how coarse the displayed value is.
-   *                              If undefined, the number will be displayed in full.
-   * @return {string}
-   */
-  formatBytesToKiB(size, granularity = undefined) {
-    return this._formatNumberWithGranularity(size / KiB, granularity) + `${NBSP2}KiB`;
-  }
-
-  /**
-   * @param {number} size
-   * @param {number=} granularity Controls how coarse the displayed value is.
-   *                              If undefined, the number will be displayed in full.
-   * @return {string}
-   */
-  formatBytesToMiB(size, granularity = undefined) {
-    return this._formatNumberWithGranularity(size / MiB, granularity) + `${NBSP2}MiB`;
-  }
-
-  /**
-   * @param {number} size
-   * @param {number=} granularity Controls how coarse the displayed value is.
-   *                              If undefined, the number will be displayed in full.
-   * @return {string}
-   */
-  formatBytes(size, granularity = 1) {
-    return this._formatNumberWithGranularity(size, granularity, {
-      style: 'unit',
-      unit: 'byte',
-      unitDisplay: 'long',
-    });
-  }
-
-  /**
-   * @param {number} size
-   * @param {number=} granularity Controls how coarse the displayed value is.
-   *                              If undefined, the number will be displayed in full.
-   * @return {string}
-   */
-  formatBytesWithBestUnit(size, granularity = undefined) {
-    if (size >= MiB) return this.formatBytesToMiB(size, granularity);
-    if (size >= KiB) return this.formatBytesToKiB(size, granularity);
-    return this._formatNumberWithGranularity(size, granularity, {
-      style: 'unit',
-      unit: 'byte',
-      unitDisplay: 'narrow',
-    });
-  }
-
-  /**
-   * @param {number} size
-   * @param {number=} granularity Controls how coarse the displayed value is.
-   *                              If undefined, the number will be displayed in full.
-   * @return {string}
-   */
-  formatKbps(size, granularity = undefined) {
-    return this._formatNumberWithGranularity(size, granularity, {
-      style: 'unit',
-      unit: 'kilobit-per-second',
-      unitDisplay: 'short',
-    });
-  }
-
-  /**
-   * @param {number} ms
-   * @param {number=} granularity Controls how coarse the displayed value is.
-   *                              If undefined, the number will be displayed in full.
-   * @return {string}
-   */
-  formatMilliseconds(ms, granularity = undefined) {
-    return this._formatNumberWithGranularity(ms, granularity, {
-      style: 'unit',
-      unit: 'millisecond',
-      unitDisplay: 'short',
-    });
-  }
-
-  /**
-   * @param {number} ms
-   * @param {number=} granularity Controls how coarse the displayed value is.
-   *                              If undefined, the number will be displayed in full.
-   * @return {string}
-   */
-  formatSeconds(ms, granularity = undefined) {
-    return this._formatNumberWithGranularity(ms / 1000, granularity, {
-      style: 'unit',
-      unit: 'second',
-      unitDisplay: 'narrow',
-    });
-  }
-
-  /**
-   * Format time.
-   * @param {string} date
-   * @return {string}
-   */
-  formatDateTime(date) {
-    /** @type {Intl.DateTimeFormatOptions} */
-    const options = {
-      month: 'short', day: 'numeric', year: 'numeric',
-      hour: 'numeric', minute: 'numeric', timeZoneName: 'short',
-    };
-
-    // Force UTC if runtime timezone could not be detected.
-    // See https://github.com/GoogleChrome/lighthouse/issues/1056
-    // and https://github.com/GoogleChrome/lighthouse/pull/9822
-    let formatter;
-    try {
-      formatter = new Intl.DateTimeFormat(this._locale, options);
-    } catch (err) {
-      options.timeZone = 'UTC';
-      formatter = new Intl.DateTimeFormat(this._locale, options);
-    }
-
-    return formatter.format(new Date(date));
-  }
-
-  /**
-   * Converts a time in milliseconds into a duration string, i.e. `1d 2h 13m 52s`
-   * @param {number} timeInMilliseconds
-   * @return {string}
-   */
-  formatDuration(timeInMilliseconds) {
-    // There is a proposal for a Intl.DurationFormat.
-    // https://github.com/tc39/proposal-intl-duration-format
-    // Until then, we do things a bit more manually.
-
-    let timeInSeconds = timeInMilliseconds / 1000;
-    if (Math.round(timeInSeconds) === 0) {
-      return 'None';
-    }
-
-    /** @type {Array<string>} */
-    const parts = [];
-    /** @type {Record<string, number>} */
-    const unitToSecondsPer = {
-      day: 60 * 60 * 24,
-      hour: 60 * 60,
-      minute: 60,
-      second: 1,
-    };
-
-    Object.keys(unitToSecondsPer).forEach(unit => {
-      const secondsPerUnit = unitToSecondsPer[unit];
-      const numberOfUnits = Math.floor(timeInSeconds / secondsPerUnit);
-      if (numberOfUnits > 0) {
-        timeInSeconds -= numberOfUnits * secondsPerUnit;
-        const part = this._formatNumberWithGranularity(numberOfUnits, 1, {
-          style: 'unit',
-          unit,
-          unitDisplay: 'narrow',
-        });
-        parts.push(part);
-      }
-    });
-
-    return parts.join(' ');
-  }
-}
-
 /**
  * @license
  * Copyright 2018 The Lighthouse Authors. All Rights Reserved.
@@ -4052,564 +2520,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-class PerformanceCategoryRenderer extends CategoryRenderer {
-  /**
-   * @param {LH.ReportResult.AuditRef} audit
-   * @return {!Element}
-   */
-  _renderMetric(audit) {
-    const tmpl = this.dom.createComponent('metric');
-    const element = this.dom.find('.lh-metric', tmpl);
-    element.id = audit.result.id;
-    const rating = ReportUtils.calculateRating(audit.result.score, audit.result.scoreDisplayMode);
-    element.classList.add(`lh-metric--${rating}`);
-
-    const titleEl = this.dom.find('.lh-metric__title', tmpl);
-    titleEl.textContent = audit.result.title;
-
-    const valueEl = this.dom.find('.lh-metric__value', tmpl);
-    valueEl.textContent = audit.result.displayValue || '';
-
-    const descriptionEl = this.dom.find('.lh-metric__description', tmpl);
-    descriptionEl.append(this.dom.convertMarkdownLinkSnippets(audit.result.description));
-
-    if (audit.result.scoreDisplayMode === 'error') {
-      descriptionEl.textContent = '';
-      valueEl.textContent = 'Error!';
-      const tooltip = this.dom.createChildOf(descriptionEl, 'span');
-      tooltip.textContent = audit.result.errorMessage || 'Report error: no metric information';
-    } else if (audit.result.scoreDisplayMode === 'notApplicable') {
-      valueEl.textContent = '--';
-    }
-
-    return element;
-  }
-
-  /**
-   * @param {LH.ReportResult.AuditRef} audit
-   * @param {number} scale
-   * @return {!Element}
-   */
-  _renderOpportunity(audit, scale) {
-    const oppTmpl = this.dom.createComponent('opportunity');
-    const element = this.populateAuditValues(audit, oppTmpl);
-    element.id = audit.result.id;
-
-    if (!audit.result.details || audit.result.scoreDisplayMode === 'error') {
-      return element;
-    }
-    const details = audit.result.details;
-    if (details.overallSavingsMs === undefined) {
-      return element;
-    }
-
-    // Overwrite the displayValue with opportunity's wastedMs
-    // TODO: normalize this to one tagName.
-    const displayEl =
-      this.dom.find('span.lh-audit__display-text, div.lh-audit__display-text', element);
-    const sparklineWidthPct = `${details.overallSavingsMs / scale * 100}%`;
-    this.dom.find('div.lh-sparkline__bar', element).style.width = sparklineWidthPct;
-    displayEl.textContent = Globals.i18n.formatSeconds(details.overallSavingsMs, 0.01);
-
-    // Set [title] tooltips
-    if (audit.result.displayValue) {
-      const displayValue = audit.result.displayValue;
-      this.dom.find('div.lh-load-opportunity__sparkline', element).title = displayValue;
-      displayEl.title = displayValue;
-    }
-
-    return element;
-  }
-
-  /**
-   * Get an audit's wastedMs to sort the opportunity by, and scale the sparkline width
-   * Opportunities with an error won't have a details object, so MIN_VALUE is returned to keep any
-   * erroring opportunities last in sort order.
-   * @param {LH.ReportResult.AuditRef} audit
-   * @return {number}
-   */
-  _getWastedMs(audit) {
-    if (audit.result.details) {
-      const details = audit.result.details;
-      if (typeof details.overallSavingsMs !== 'number') {
-        throw new Error('non-opportunity details passed to _getWastedMs');
-      }
-      return details.overallSavingsMs;
-    } else {
-      return Number.MIN_VALUE;
-    }
-  }
-
-  /**
-   * Get a link to the interactive scoring calculator with the metric values.
-   * @param {LH.ReportResult.AuditRef[]} auditRefs
-   * @return {string}
-   */
-  _getScoringCalculatorHref(auditRefs) {
-    // TODO: filter by !!acronym when dropping renderer support of v7 LHRs.
-    const metrics = auditRefs.filter(audit => audit.group === 'metrics');
-    const tti = auditRefs.find(audit => audit.id === 'interactive');
-    const fci = auditRefs.find(audit => audit.id === 'first-cpu-idle');
-    const fmp = auditRefs.find(audit => audit.id === 'first-meaningful-paint');
-    if (tti) metrics.push(tti);
-    if (fci) metrics.push(fci);
-    if (fmp) metrics.push(fmp);
-
-    /**
-     * Clamp figure to 2 decimal places
-     * @param {number} val
-     * @return {number}
-     */
-    const clampTo2Decimals = val => Math.round(val * 100) / 100;
-
-    const metricPairs = metrics.map(audit => {
-      let value;
-      if (typeof audit.result.numericValue === 'number') {
-        value = audit.id === 'cumulative-layout-shift' ?
-          clampTo2Decimals(audit.result.numericValue) :
-          Math.round(audit.result.numericValue);
-        value = value.toString();
-      } else {
-        value = 'null';
-      }
-      return [audit.acronym || audit.id, value];
-    });
-    const paramPairs = [...metricPairs];
-
-    if (Globals.reportJson) {
-      paramPairs.push(['device', Globals.reportJson.configSettings.formFactor]);
-      paramPairs.push(['version', Globals.reportJson.lighthouseVersion]);
-    }
-
-    const params = new URLSearchParams(paramPairs);
-    const url = new URL('https://googlechrome.github.io/lighthouse/scorecalc/');
-    url.hash = params.toString();
-    return url.href;
-  }
-
-  /**
-   * For performance, audits with no group should be a diagnostic or opportunity.
-   * The audit details type will determine which of the two groups an audit is in.
-   *
-   * @param {LH.ReportResult.AuditRef} audit
-   * @return {'load-opportunity'|'diagnostic'|null}
-   */
-  _classifyPerformanceAudit(audit) {
-    if (audit.group) return null;
-    if (audit.result.details?.overallSavingsMs !== undefined) {
-      return 'load-opportunity';
-    }
-    return 'diagnostic';
-  }
-
-  /**
-   * @param {LH.ReportResult.Category} category
-   * @param {Object<string, LH.Result.ReportGroup>} groups
-   * @param {{gatherMode: LH.Result.GatherMode}=} options
-   * @return {Element}
-   * @override
-   */
-  render(category, groups, options) {
-    const strings = Globals.strings;
-    const element = this.dom.createElement('div', 'lh-category');
-    element.id = category.id;
-    element.append(this.renderCategoryHeader(category, groups, options));
-
-    // Metrics.
-    const metricAudits = category.auditRefs.filter(audit => audit.group === 'metrics');
-    if (metricAudits.length) {
-      const [metricsGroupEl, metricsFooterEl] = this.renderAuditGroup(groups.metrics);
-
-      // Metric descriptions toggle.
-      const checkboxEl = this.dom.createElement('input', 'lh-metrics-toggle__input');
-      const checkboxId = `lh-metrics-toggle${Globals.getUniqueSuffix()}`;
-      checkboxEl.setAttribute('aria-label', 'Toggle the display of metric descriptions');
-      checkboxEl.type = 'checkbox';
-      checkboxEl.id = checkboxId;
-      metricsGroupEl.prepend(checkboxEl);
-      const metricHeaderEl = this.dom.find('.lh-audit-group__header', metricsGroupEl);
-      const labelEl = this.dom.createChildOf(metricHeaderEl, 'label', 'lh-metrics-toggle__label');
-      labelEl.htmlFor = checkboxId;
-      const showEl = this.dom.createChildOf(labelEl, 'span', 'lh-metrics-toggle__labeltext--show');
-      const hideEl = this.dom.createChildOf(labelEl, 'span', 'lh-metrics-toggle__labeltext--hide');
-      showEl.textContent = Globals.strings.expandView;
-      hideEl.textContent = Globals.strings.collapseView;
-
-      const metricsBoxesEl = this.dom.createElement('div', 'lh-metrics-container');
-      metricsGroupEl.insertBefore(metricsBoxesEl, metricsFooterEl);
-      metricAudits.forEach(item => {
-        metricsBoxesEl.append(this._renderMetric(item));
-      });
-
-      // Only add the disclaimer with the score calculator link if the category was rendered with a score gauge.
-      if (element.querySelector('.lh-gauge__wrapper')) {
-        const descriptionEl = this.dom.find('.lh-category-header__description', element);
-        const estValuesEl = this.dom.createChildOf(descriptionEl, 'div', 'lh-metrics__disclaimer');
-        const disclaimerEl = this.dom.convertMarkdownLinkSnippets(strings.varianceDisclaimer);
-        estValuesEl.append(disclaimerEl);
-
-        // Add link to score calculator.
-        const calculatorLink = this.dom.createChildOf(estValuesEl, 'a', 'lh-calclink');
-        calculatorLink.target = '_blank';
-        calculatorLink.textContent = strings.calculatorLink;
-        this.dom.safelySetHref(calculatorLink, this._getScoringCalculatorHref(category.auditRefs));
-      }
-
-      metricsGroupEl.classList.add('lh-audit-group--metrics');
-      element.append(metricsGroupEl);
-    }
-
-    // Filmstrip
-    const timelineEl = this.dom.createChildOf(element, 'div', 'lh-filmstrip-container');
-    const thumbnailAudit = category.auditRefs.find(audit => audit.id === 'screenshot-thumbnails');
-    const thumbnailResult = thumbnailAudit?.result;
-    if (thumbnailResult?.details) {
-      timelineEl.id = thumbnailResult.id;
-      const filmstripEl = this.detailsRenderer.render(thumbnailResult.details);
-      filmstripEl && timelineEl.append(filmstripEl);
-    }
-
-    // Opportunities
-    const opportunityAudits = category.auditRefs
-        .filter(audit => this._classifyPerformanceAudit(audit) === 'load-opportunity')
-        .filter(audit => !ReportUtils.showAsPassed(audit.result))
-        .sort((auditA, auditB) => this._getWastedMs(auditB) - this._getWastedMs(auditA));
-
-    const filterableMetrics = metricAudits.filter(a => !!a.relevantAudits);
-    // TODO: only add if there are opportunities & diagnostics rendered.
-    if (filterableMetrics.length) {
-      this.renderMetricAuditFilter(filterableMetrics, element);
-    }
-
-    if (opportunityAudits.length) {
-      // Scale the sparklines relative to savings, minimum 2s to not overstate small savings
-      const minimumScale = 2000;
-      const wastedMsValues = opportunityAudits.map(audit => this._getWastedMs(audit));
-      const maxWaste = Math.max(...wastedMsValues);
-      const scale = Math.max(Math.ceil(maxWaste / 1000) * 1000, minimumScale);
-      const [groupEl, footerEl] = this.renderAuditGroup(groups['load-opportunities']);
-      const tmpl = this.dom.createComponent('opportunityHeader');
-
-      this.dom.find('.lh-load-opportunity__col--one', tmpl).textContent =
-        strings.opportunityResourceColumnLabel;
-      this.dom.find('.lh-load-opportunity__col--two', tmpl).textContent =
-        strings.opportunitySavingsColumnLabel;
-
-      const headerEl = this.dom.find('.lh-load-opportunity__header', tmpl);
-      groupEl.insertBefore(headerEl, footerEl);
-      opportunityAudits.forEach(item =>
-        groupEl.insertBefore(this._renderOpportunity(item, scale), footerEl));
-      groupEl.classList.add('lh-audit-group--load-opportunities');
-      element.append(groupEl);
-    }
-
-    // Diagnostics
-    const diagnosticAudits = category.auditRefs
-        .filter(audit => this._classifyPerformanceAudit(audit) === 'diagnostic')
-        .filter(audit => !ReportUtils.showAsPassed(audit.result))
-        .sort((a, b) => {
-          const scoreA = a.result.scoreDisplayMode === 'informative' ? 100 : Number(a.result.score);
-          const scoreB = b.result.scoreDisplayMode === 'informative' ? 100 : Number(b.result.score);
-          return scoreA - scoreB;
-        });
-
-    if (diagnosticAudits.length) {
-      const [groupEl, footerEl] = this.renderAuditGroup(groups['diagnostics']);
-      diagnosticAudits.forEach(item => groupEl.insertBefore(this.renderAudit(item), footerEl));
-      groupEl.classList.add('lh-audit-group--diagnostics');
-      element.append(groupEl);
-    }
-
-    // Passed audits
-    const passedAudits = category.auditRefs
-        .filter(audit =>
-          this._classifyPerformanceAudit(audit) && ReportUtils.showAsPassed(audit.result));
-
-    if (!passedAudits.length) return element;
-
-    const clumpOpts = {
-      auditRefs: passedAudits,
-      groupDefinitions: groups,
-    };
-    const passedElem = this.renderClump('passed', clumpOpts);
-    element.append(passedElem);
-
-    // Budgets
-    /** @type {Array<Element>} */
-    const budgetTableEls = [];
-    ['performance-budget', 'timing-budget'].forEach((id) => {
-      const audit = category.auditRefs.find(audit => audit.id === id);
-      if (audit?.result.details) {
-        const table = this.detailsRenderer.render(audit.result.details);
-        if (table) {
-          table.id = id;
-          table.classList.add('lh-details', 'lh-details--budget', 'lh-audit');
-          budgetTableEls.push(table);
-        }
-      }
-    });
-    if (budgetTableEls.length > 0) {
-      const [groupEl, footerEl] = this.renderAuditGroup(groups.budgets);
-      budgetTableEls.forEach(table => groupEl.insertBefore(table, footerEl));
-      groupEl.classList.add('lh-audit-group--budgets');
-      element.append(groupEl);
-    }
-
-    return element;
-  }
-
-  /**
-   * Render the control to filter the audits by metric. The filtering is done at runtime by CSS only
-   * @param {LH.ReportResult.AuditRef[]} filterableMetrics
-   * @param {HTMLDivElement} categoryEl
-   */
-  renderMetricAuditFilter(filterableMetrics, categoryEl) {
-    const metricFilterEl = this.dom.createElement('div', 'lh-metricfilter');
-    const textEl = this.dom.createChildOf(metricFilterEl, 'span', 'lh-metricfilter__text');
-    textEl.textContent = Globals.strings.showRelevantAudits;
-
-    const filterChoices = /** @type {LH.ReportResult.AuditRef[]} */ ([
-      ({acronym: 'All'}),
-      ...filterableMetrics,
-    ]);
-
-    // Form labels need to reference unique IDs, but multiple reports rendered in the same DOM (eg PSI)
-    // would mean ID conflict.  To address this, we 'scope' these radio inputs with a unique suffix.
-    const uniqSuffix = Globals.getUniqueSuffix();
-    for (const metric of filterChoices) {
-      const elemId = `metric-${metric.acronym}-${uniqSuffix}`;
-      const radioEl = this.dom.createChildOf(metricFilterEl, 'input', 'lh-metricfilter__radio');
-      radioEl.type = 'radio';
-      radioEl.name = `metricsfilter-${uniqSuffix}`;
-      radioEl.id = elemId;
-
-      const labelEl = this.dom.createChildOf(metricFilterEl, 'label', 'lh-metricfilter__label');
-      labelEl.htmlFor = elemId;
-      labelEl.title = metric.result?.title;
-      labelEl.textContent = metric.acronym || metric.id;
-
-      if (metric.acronym === 'All') {
-        radioEl.checked = true;
-        labelEl.classList.add('lh-metricfilter__label--active');
-      }
-      categoryEl.append(metricFilterEl);
-
-      // Toggle class/hidden state based on filter choice.
-      radioEl.addEventListener('input', _ => {
-        for (const elem of categoryEl.querySelectorAll('label.lh-metricfilter__label')) {
-          elem.classList.toggle('lh-metricfilter__label--active', elem.htmlFor === elemId);
-        }
-        categoryEl.classList.toggle('lh-category--filtered', metric.acronym !== 'All');
-
-        for (const perfAuditEl of categoryEl.querySelectorAll('div.lh-audit')) {
-          if (metric.acronym === 'All') {
-            perfAuditEl.hidden = false;
-            continue;
-          }
-
-          perfAuditEl.hidden = true;
-          if (metric.relevantAudits && metric.relevantAudits.includes(perfAuditEl.id)) {
-            perfAuditEl.hidden = false;
-          }
-        }
-
-        // Hide groups/clumps if all child audits are also hidden.
-        const groupEls = categoryEl.querySelectorAll('div.lh-audit-group, details.lh-audit-group');
-        for (const groupEl of groupEls) {
-          groupEl.hidden = false;
-          const childEls = Array.from(groupEl.querySelectorAll('div.lh-audit'));
-          const areAllHidden = !!childEls.length && childEls.every(auditEl => auditEl.hidden);
-          groupEl.hidden = areAllHidden;
-        }
-      });
-    }
-  }
-}
-
-/**
- * @license
- * Copyright 2018 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-class PwaCategoryRenderer extends CategoryRenderer {
-  /**
-   * @param {LH.ReportResult.Category} category
-   * @param {Object<string, LH.Result.ReportGroup>} [groupDefinitions]
-   * @return {Element}
-   */
-  render(category, groupDefinitions = {}) {
-    const categoryElem = this.dom.createElement('div', 'lh-category');
-    categoryElem.id = category.id;
-    categoryElem.append(this.renderCategoryHeader(category, groupDefinitions));
-
-    const auditRefs = category.auditRefs;
-
-    // Regular audits aren't split up into pass/fail/notApplicable clumps, they're
-    // all put in a top-level clump that isn't expandable/collapsible.
-    const regularAuditRefs = auditRefs.filter(ref => ref.result.scoreDisplayMode !== 'manual');
-    const auditsElem = this._renderAudits(regularAuditRefs, groupDefinitions);
-    categoryElem.append(auditsElem);
-
-    // Manual audits are still in a manual clump.
-    const manualAuditRefs = auditRefs.filter(ref => ref.result.scoreDisplayMode === 'manual');
-    const manualElem = this.renderClump('manual',
-      {auditRefs: manualAuditRefs, description: category.manualDescription});
-    categoryElem.append(manualElem);
-
-    return categoryElem;
-  }
-
-  /**
-   * @param {LH.ReportResult.Category} category
-   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
-   * @return {DocumentFragment}
-   */
-  renderCategoryScore(category, groupDefinitions) {
-    // Defer to parent-gauge style if category error.
-    if (category.score === null) {
-      return super.renderScoreGauge(category, groupDefinitions);
-    }
-
-    const tmpl = this.dom.createComponent('gaugePwa');
-    const wrapper = this.dom.find('a.lh-gauge--pwa__wrapper', tmpl);
-
-    // Correct IDs in case multiple instances end up in the page.
-    const svgRoot = tmpl.querySelector('svg');
-    if (!svgRoot) throw new Error('no SVG element found in PWA score gauge template');
-    PwaCategoryRenderer._makeSvgReferencesUnique(svgRoot);
-
-    const allGroups = this._getGroupIds(category.auditRefs);
-    const passingGroupIds = this._getPassingGroupIds(category.auditRefs);
-
-    if (passingGroupIds.size === allGroups.size) {
-      wrapper.classList.add('lh-badged--all');
-    } else {
-      for (const passingGroupId of passingGroupIds) {
-        wrapper.classList.add(`lh-badged--${passingGroupId}`);
-      }
-    }
-
-    this.dom.find('.lh-gauge__label', tmpl).textContent = category.title;
-    wrapper.title = this._getGaugeTooltip(category.auditRefs, groupDefinitions);
-    return tmpl;
-  }
-
-  /**
-   * Returns the group IDs found in auditRefs.
-   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
-   * @return {!Set<string>}
-   */
-  _getGroupIds(auditRefs) {
-    const groupIds = auditRefs.map(ref => ref.group).filter(/** @return {g is string} */ g => !!g);
-    return new Set(groupIds);
-  }
-
-  /**
-   * Returns the group IDs whose audits are all considered passing.
-   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
-   * @return {Set<string>}
-   */
-  _getPassingGroupIds(auditRefs) {
-    const uniqueGroupIds = this._getGroupIds(auditRefs);
-
-    // Remove any that have a failing audit.
-    for (const auditRef of auditRefs) {
-      if (!ReportUtils.showAsPassed(auditRef.result) && auditRef.group) {
-        uniqueGroupIds.delete(auditRef.group);
-      }
-    }
-
-    return uniqueGroupIds;
-  }
-
-  /**
-   * Returns a tooltip string summarizing group pass rates.
-   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
-   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
-   * @return {string}
-   */
-  _getGaugeTooltip(auditRefs, groupDefinitions) {
-    const groupIds = this._getGroupIds(auditRefs);
-
-    const tips = [];
-    for (const groupId of groupIds) {
-      const groupAuditRefs = auditRefs.filter(ref => ref.group === groupId);
-      const auditCount = groupAuditRefs.length;
-      const passedCount = groupAuditRefs.filter(ref => ReportUtils.showAsPassed(ref.result)).length;
-
-      const title = groupDefinitions[groupId].title;
-      tips.push(`${title}: ${passedCount}/${auditCount}`);
-    }
-
-    return tips.join(', ');
-  }
-
-  /**
-   * Render non-manual audits in groups, giving a badge to any group that has
-   * all passing audits.
-   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
-   * @param {Object<string, LH.Result.ReportGroup>} groupDefinitions
-   * @return {Element}
-   */
-  _renderAudits(auditRefs, groupDefinitions) {
-    const auditsElem = this.renderUnexpandableClump(auditRefs, groupDefinitions);
-
-    // Add a 'badged' class to group if all audits in that group pass.
-    const passsingGroupIds = this._getPassingGroupIds(auditRefs);
-    for (const groupId of passsingGroupIds) {
-      const groupElem = this.dom.find(`.lh-audit-group--${groupId}`, auditsElem);
-      groupElem.classList.add('lh-badged');
-    }
-
-    return auditsElem;
-  }
-
-  /**
-   * Alters SVG id references so multiple instances of an SVG element can coexist
-   * in a single page. If `svgRoot` has a `<defs>` block, gives all elements defined
-   * in it unique ids, then updates id references (`<use xlink:href="...">`,
-   * `fill="url(#...)"`) to the altered ids in all descendents of `svgRoot`.
-   * @param {SVGElement} svgRoot
-   */
-  static _makeSvgReferencesUnique(svgRoot) {
-    const defsEl = svgRoot.querySelector('defs');
-    if (!defsEl) return;
-
-    const idSuffix = Globals.getUniqueSuffix();
-    const elementsToUpdate = defsEl.querySelectorAll('[id]');
-    for (const el of elementsToUpdate) {
-      const oldId = el.id;
-      const newId = `${oldId}-${idSuffix}`;
-      el.id = newId;
-
-      // Update all <use>s.
-      const useEls = svgRoot.querySelectorAll(`use[href="#${oldId}"]`);
-      for (const useEl of useEls) {
-        useEl.setAttribute('href', `#${newId}`);
-      }
-
-      // Update all fill="url(#...)"s.
-      const fillEls = svgRoot.querySelectorAll(`[fill="url(#${oldId})"]`);
-      for (const fillEl of fillEls) {
-        fillEl.setAttribute('fill', `url(#${newId})`);
-      }
-    }
-  }
-}
-
 /**
  * @license
  * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
@@ -4626,429 +2536,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * Dummy text for ensuring report robustness: </script> pre$`post %%LIGHTHOUSE_JSON%%
+ * Dummy text for ensuring report robustness: <\/script> pre$`post %%LIGHTHOUSE_JSON%%
  * (this is handled by terser)
  */
-
-class ReportRenderer {
-  /**
-   * @param {DOM} dom
-   */
-  constructor(dom) {
-    /** @type {DOM} */
-    this._dom = dom;
-    /** @type {LH.Renderer.Options} */
-    this._opts = {};
-  }
-
-  /**
-   * @param {LH.Result} lhr
-   * @param {HTMLElement?} rootEl Report root element containing the report
-   * @param {LH.Renderer.Options=} opts
-   * @return {!Element}
-   */
-  renderReport(lhr, rootEl, opts) {
-    // Allow legacy report rendering API
-    if (!this._dom.rootEl && rootEl) {
-      console.warn('Please adopt the new report API in renderer/api.js.');
-      const closestRoot = rootEl.closest('.lh-root');
-      if (closestRoot) {
-        this._dom.rootEl = /** @type {HTMLElement} */ (closestRoot);
-      } else {
-        rootEl.classList.add('lh-root', 'lh-vars');
-        this._dom.rootEl = rootEl;
-      }
-    } else if (this._dom.rootEl && rootEl) {
-      // Handle legacy flow-report case
-      this._dom.rootEl = rootEl;
-    }
-    if (opts) {
-      this._opts = opts;
-    }
-
-    this._dom.setLighthouseChannel(lhr.configSettings.channel || 'unknown');
-
-    const report = ReportUtils.prepareReportResult(lhr);
-
-    this._dom.rootEl.textContent = ''; // Remove previous report.
-    this._dom.rootEl.append(this._renderReport(report));
-
-    return this._dom.rootEl;
-  }
-
-  /**
-   * @param {LH.ReportResult} report
-   * @return {DocumentFragment}
-   */
-  _renderReportTopbar(report) {
-    const el = this._dom.createComponent('topbar');
-    const metadataUrl = this._dom.find('a.lh-topbar__url', el);
-    metadataUrl.textContent = report.finalDisplayedUrl;
-    metadataUrl.title = report.finalDisplayedUrl;
-    this._dom.safelySetHref(metadataUrl, report.finalDisplayedUrl);
-    return el;
-  }
-
-  /**
-   * @return {DocumentFragment}
-   */
-  _renderReportHeader() {
-    const el = this._dom.createComponent('heading');
-    const domFragment = this._dom.createComponent('scoresWrapper');
-    const placeholder = this._dom.find('.lh-scores-wrapper-placeholder', el);
-    placeholder.replaceWith(domFragment);
-    return el;
-  }
-
-  /**
-   * @param {LH.ReportResult} report
-   * @return {DocumentFragment}
-   */
-  _renderReportFooter(report) {
-    const footer = this._dom.createComponent('footer');
-
-    this._renderMetaBlock(report, footer);
-
-    this._dom.find('.lh-footer__version_issue', footer).textContent = Globals.strings.footerIssue;
-    this._dom.find('.lh-footer__version', footer).textContent = report.lighthouseVersion;
-    return footer;
-  }
-
-  /**
-   * @param {LH.ReportResult} report
-   * @param {DocumentFragment} footer
-   */
-  _renderMetaBlock(report, footer) {
-    const envValues = ReportUtils.getEmulationDescriptions(report.configSettings || {});
-    const match = report.userAgent.match(/(\w*Chrome\/[\d.]+)/); // \w* to include 'HeadlessChrome'
-    const chromeVer = Array.isArray(match)
-      ? match[1].replace('/', ' ').replace('Chrome', 'Chromium')
-      : 'Chromium';
-    const channel = report.configSettings.channel;
-    const benchmarkIndex = report.environment.benchmarkIndex.toFixed(0);
-    const axeVersion = report.environment.credits?.['axe-core'];
-
-    const devicesTooltipTextLines = [
-      `${Globals.strings.runtimeSettingsBenchmark}: ${benchmarkIndex}`,
-      `${Globals.strings.runtimeSettingsCPUThrottling}: ${envValues.cpuThrottling}`,
-    ];
-    if (envValues.screenEmulation) {
-      devicesTooltipTextLines.push(
-        `${Globals.strings.runtimeSettingsScreenEmulation}: ${envValues.screenEmulation}`);
-    }
-    if (axeVersion) {
-      devicesTooltipTextLines.push(`${Globals.strings.runtimeSettingsAxeVersion}: ${axeVersion}`);
-    }
-
-    // [CSS icon class, textContent, tooltipText]
-    const metaItems = [
-      ['date',
-        `Captured at ${Globals.i18n.formatDateTime(report.fetchTime)}`],
-      ['devices',
-        `${envValues.deviceEmulation} with Lighthouse ${report.lighthouseVersion}`,
-        devicesTooltipTextLines.join('\n')],
-      ['samples-one',
-        Globals.strings.runtimeSingleLoad,
-        Globals.strings.runtimeSingleLoadTooltip],
-      ['stopwatch',
-        Globals.strings.runtimeAnalysisWindow],
-      ['networkspeed',
-        `${envValues.summary}`,
-        `${Globals.strings.runtimeSettingsNetworkThrottling}: ${envValues.networkThrottling}`],
-      ['chrome',
-        `Using ${chromeVer}` + (channel ? ` with ${channel}` : ''),
-        `${Globals.strings.runtimeSettingsUANetwork}: "${report.environment.networkUserAgent}"`],
-    ];
-
-    const metaItemsEl = this._dom.find('.lh-meta__items', footer);
-    for (const [iconname, text, tooltip] of metaItems) {
-      const itemEl = this._dom.createChildOf(metaItemsEl, 'li', 'lh-meta__item');
-      itemEl.textContent = text;
-      if (tooltip) {
-        itemEl.classList.add('lh-tooltip-boundary');
-        const tooltipEl = this._dom.createChildOf(itemEl, 'div', 'lh-tooltip');
-        tooltipEl.textContent = tooltip;
-      }
-      itemEl.classList.add('lh-report-icon', `lh-report-icon--${iconname}`);
-    }
-  }
-
-  /**
-   * Returns a div with a list of top-level warnings, or an empty div if no warnings.
-   * @param {LH.ReportResult} report
-   * @return {Node}
-   */
-  _renderReportWarnings(report) {
-    if (!report.runWarnings || report.runWarnings.length === 0) {
-      return this._dom.createElement('div');
-    }
-
-    const container = this._dom.createComponent('warningsToplevel');
-    const message = this._dom.find('.lh-warnings__msg', container);
-    message.textContent = Globals.strings.toplevelWarningsMessage;
-
-    const warnings = [];
-    for (const warningString of report.runWarnings) {
-      const warning = this._dom.createElement('li');
-      warning.append(this._dom.convertMarkdownLinkSnippets(warningString));
-      warnings.push(warning);
-    }
-    this._dom.find('ul', container).append(...warnings);
-
-    return container;
-  }
-
-  /**
-   * @param {LH.ReportResult} report
-   * @param {CategoryRenderer} categoryRenderer
-   * @param {Record<string, CategoryRenderer>} specificCategoryRenderers
-   * @return {!DocumentFragment[]}
-   */
-  _renderScoreGauges(report, categoryRenderer, specificCategoryRenderers) {
-    // Group gauges in this order: default, pwa, plugins.
-    const defaultGauges = [];
-    const customGauges = []; // PWA.
-    const pluginGauges = [];
-
-    for (const category of Object.values(report.categories)) {
-      const renderer = specificCategoryRenderers[category.id] || categoryRenderer;
-      const categoryGauge = renderer.renderCategoryScore(
-        category,
-        report.categoryGroups || {},
-        {gatherMode: report.gatherMode}
-      );
-
-      const gaugeWrapperEl = this._dom.find('a.lh-gauge__wrapper, a.lh-fraction__wrapper',
-        categoryGauge);
-      if (gaugeWrapperEl) {
-        this._dom.safelySetHref(gaugeWrapperEl, `#${category.id}`);
-        // Handle navigation clicks by scrolling to target without changing the page's URL.
-        // Why? Some report embedding clients have their own routing and updating the location.hash
-        // can introduce problems. Others may have an unpredictable `<base>` URL which ensures
-        // navigation to `${baseURL}#categoryid` will be unintended.
-        gaugeWrapperEl.addEventListener('click', e => {
-          if (!gaugeWrapperEl.matches('[href^="#"]')) return;
-          const selector = gaugeWrapperEl.getAttribute('href');
-          const reportRoot = this._dom.rootEl;
-          if (!selector || !reportRoot) return;
-          const destEl = this._dom.find(selector, reportRoot);
-          e.preventDefault();
-          destEl.scrollIntoView();
-        });
-        this._opts.onPageAnchorRendered?.(gaugeWrapperEl);
-      }
-
-
-      if (ReportUtils.isPluginCategory(category.id)) {
-        pluginGauges.push(categoryGauge);
-      } else if (renderer.renderCategoryScore === categoryRenderer.renderCategoryScore) {
-        // The renderer for default categories is just the default CategoryRenderer.
-        // If the functions are equal, then renderer is an instance of CategoryRenderer.
-        // For example, the PWA category uses PwaCategoryRenderer, which overrides
-        // CategoryRenderer.renderCategoryScore, so it would fail this check and be placed
-        // in the customGauges bucket.
-        defaultGauges.push(categoryGauge);
-      } else {
-        customGauges.push(categoryGauge);
-      }
-    }
-
-    return [...defaultGauges, ...customGauges, ...pluginGauges];
-  }
-
-  /**
-   * @param {LH.ReportResult} report
-   * @return {!DocumentFragment}
-   */
-  _renderReport(report) {
-    Globals.apply({
-      providedStrings: report.i18n.rendererFormattedStrings,
-      i18n: new I18nFormatter(report.configSettings.locale),
-      reportJson: report,
-    });
-
-    const detailsRenderer = new DetailsRenderer(this._dom, {
-      fullPageScreenshot: report.fullPageScreenshot ?? undefined,
-      entities: report.entities,
-    });
-
-    const categoryRenderer = new CategoryRenderer(this._dom, detailsRenderer);
-
-    /** @type {Record<string, CategoryRenderer>} */
-    const specificCategoryRenderers = {
-      performance: new PerformanceCategoryRenderer(this._dom, detailsRenderer),
-      pwa: new PwaCategoryRenderer(this._dom, detailsRenderer),
-    };
-
-    const headerContainer = this._dom.createElement('div');
-    headerContainer.append(this._renderReportHeader());
-
-    const reportContainer = this._dom.createElement('div', 'lh-container');
-    const reportSection = this._dom.createElement('div', 'lh-report');
-    reportSection.append(this._renderReportWarnings(report));
-
-    let scoreHeader;
-    const isSoloCategory = Object.keys(report.categories).length === 1;
-    if (!isSoloCategory) {
-      scoreHeader = this._dom.createElement('div', 'lh-scores-header');
-    } else {
-      headerContainer.classList.add('lh-header--solo-category');
-    }
-
-    const scoreScale = this._dom.createElement('div');
-    scoreScale.classList.add('lh-scorescale-wrap');
-    scoreScale.append(this._dom.createComponent('scorescale'));
-    if (scoreHeader) {
-      const scoresContainer = this._dom.find('.lh-scores-container', headerContainer);
-      scoreHeader.append(
-        ...this._renderScoreGauges(report, categoryRenderer, specificCategoryRenderers));
-      scoresContainer.append(scoreHeader, scoreScale);
-
-      const stickyHeader = this._dom.createElement('div', 'lh-sticky-header');
-      stickyHeader.append(
-        ...this._renderScoreGauges(report, categoryRenderer, specificCategoryRenderers));
-      reportContainer.append(stickyHeader);
-    }
-
-    const categories = this._dom.createElement('div', 'lh-categories');
-    reportSection.append(categories);
-    const categoryOptions = {gatherMode: report.gatherMode};
-    for (const category of Object.values(report.categories)) {
-      const renderer = specificCategoryRenderers[category.id] || categoryRenderer;
-      // .lh-category-wrapper is full-width and provides horizontal rules between categories.
-      // .lh-category within has the max-width: var(--report-content-max-width);
-      const wrapper = renderer.dom.createChildOf(categories, 'div', 'lh-category-wrapper');
-      wrapper.append(renderer.render(
-        category,
-        report.categoryGroups,
-        categoryOptions
-      ));
-    }
-
-    categoryRenderer.injectFinalScreenshot(categories, report.audits, scoreScale);
-
-    const reportFragment = this._dom.createFragment();
-    if (!this._opts.omitGlobalStyles) {
-      reportFragment.append(this._dom.createComponent('styles'));
-    }
-
-    if (!this._opts.omitTopbar) {
-      reportFragment.append(this._renderReportTopbar(report));
-    }
-
-    reportFragment.append(reportContainer);
-    reportSection.append(this._renderReportFooter(report));
-    reportContainer.append(headerContainer, reportSection);
-
-    if (report.fullPageScreenshot) {
-      ElementScreenshotRenderer.installFullPageScreenshot(
-        this._dom.rootEl, report.fullPageScreenshot.screenshot);
-    }
-
-    return reportFragment;
-  }
-}
-
 /**
  * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
  */
-
-/* eslint-env browser */
-
-/** @typedef {import('./dom.js').DOM} DOM */
-
-/**
- * @param {DOM} dom
- * @param {boolean} [force]
- */
-function toggleDarkTheme(dom, force) {
-  const el = dom.rootEl;
-  // This seems unnecessary, but in DevTools, passing "undefined" as the second
-  // parameter acts like passing "false".
-  // https://github.com/ChromeDevTools/devtools-frontend/blob/dd6a6d4153647c2a4203c327c595692c5e0a4256/front_end/dom_extension/DOMExtension.js#L809-L819
-  if (typeof force === 'undefined') {
-    el.classList.toggle('lh-dark');
-  } else {
-    el.classList.toggle('lh-dark', force);
-  }
-}
-
-/**
- * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-
-/* global CompressionStream */
-
-const btoa_ = typeof btoa !== 'undefined' ?
-  btoa :
-  /** @param {string} str */
-  (str) => Buffer.from(str).toString('base64');
-const atob_ = typeof atob !== 'undefined' ?
-  atob :
-  /** @param {string} str */
-  (str) => Buffer.from(str, 'base64').toString();
-
-/**
- * Takes an UTF-8 string and returns a base64 encoded string.
- * If gzip is true, the UTF-8 bytes are gzipped before base64'd, using
- * CompressionStream (currently only in Chrome), falling back to pako
- * (which is only used to encode in our Node tests).
- * @param {string} string
- * @param {{gzip: boolean}} options
- * @return {Promise<string>}
- */
-async function toBase64(string, options) {
-  let bytes = new TextEncoder().encode(string);
-
-  if (options.gzip) {
-    if (typeof CompressionStream !== 'undefined') {
-      const cs = new CompressionStream('gzip');
-      const writer = cs.writable.getWriter();
-      writer.write(bytes);
-      writer.close();
-      const compAb = await new Response(cs.readable).arrayBuffer();
-      bytes = new Uint8Array(compAb);
-    } else {
-      /** @type {import('pako')=} */
-      const pako = window.pako;
-      bytes = pako.gzip(string);
-    }
-  }
-
-  let binaryString = '';
-  // This is ~25% faster than building the string one character at a time.
-  // https://jsbench.me/2gkoxazvjl
-  const chunkSize = 5000;
-  for (let i = 0; i < bytes.length; i += chunkSize) {
-    binaryString += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
-  }
-  return btoa_(binaryString);
-}
-
-/**
- * @param {string} encoded
- * @param {{gzip: boolean}} options
- * @return {string}
- */
-function fromBase64(encoded, options) {
-  const binaryString = atob_(encoded);
-  const bytes = Uint8Array.from(binaryString, c => c.charCodeAt(0));
-
-  if (options.gzip) {
-    /** @type {import('pako')=} */
-    const pako = window.pako;
-    return pako.ungzip(bytes, {to: 'string'});
-  } else {
-    return new TextDecoder().decode(bytes);
-  }
-}
-
-const TextEncoding = {toBase64, fromBase64};
-
 /**
  * @license
  * Copyright 2021 The Lighthouse Authors. All Rights Reserved.
@@ -5065,1114 +2560,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/* eslint-env browser */
-
-function getAppsOrigin() {
-  const isVercel = window.location.host.endsWith('.vercel.app');
-  const isDev = new URLSearchParams(window.location.search).has('dev');
-
-  if (isVercel) return `https://${window.location.host}/gh-pages`;
-  if (isDev) return 'http://localhost:7333';
-  return 'https://googlechrome.github.io/lighthouse';
-}
-
-/**
- * The popup's window.name is keyed by version+url+fetchTime, so we reuse/select tabs correctly.
- * @param {LH.Result} json
- * @protected
- */
-function computeWindowNameSuffix(json) {
-  // @ts-expect-error - If this is a v2 LHR, use old `generatedTime`.
-  const fallbackFetchTime = /** @type {string} */ (json.generatedTime);
-  const fetchTime = json.fetchTime || fallbackFetchTime;
-  return `${json.lighthouseVersion}-${json.finalDisplayedUrl}-${fetchTime}`;
-}
-
-/**
- * Opens a new tab to an external page and sends data using postMessage.
- * @param {{lhr: LH.Result} | LH.Treemap.Options} data
- * @param {string} url
- * @param {string} windowName
- * @protected
- */
-function openTabAndSendData(data, url, windowName) {
-  const origin = new URL(url).origin;
-  // Chrome doesn't allow us to immediately postMessage to a popup right
-  // after it's created. Normally, we could also listen for the popup window's
-  // load event, however it is cross-domain and won't fire. Instead, listen
-  // for a message from the target app saying "I'm open".
-  window.addEventListener('message', function msgHandler(messageEvent) {
-    if (messageEvent.origin !== origin) {
-      return;
-    }
-    if (popup && messageEvent.data.opened) {
-      popup.postMessage(data, origin);
-      window.removeEventListener('message', msgHandler);
-    }
-  });
-
-  const popup = window.open(url, windowName);
-}
-
-/**
- * Opens a new tab to an external page and sends data via base64 encoded url params.
- * @param {{lhr: LH.Result} | LH.Treemap.Options} data
- * @param {string} url_
- * @param {string} windowName
- * @protected
- */
-async function openTabWithUrlData(data, url_, windowName) {
-  const url = new URL(url_);
-  const gzip = Boolean(window.CompressionStream);
-  url.hash = await TextEncoding.toBase64(JSON.stringify(data), {
-    gzip,
-  });
-  if (gzip) url.searchParams.set('gzip', '1');
-  window.open(url.toString(), windowName);
-}
-
-/**
- * Opens a new tab to the online viewer and sends the local page's JSON results
- * to the online viewer using URL.fragment
- * @param {LH.Result} lhr
- * @protected
- */
-async function openViewer(lhr) {
-  const windowName = 'viewer-' + computeWindowNameSuffix(lhr);
-  const url = getAppsOrigin() + '/viewer/';
-  await openTabWithUrlData({lhr}, url, windowName);
-}
-
-/**
- * Same as openViewer, but uses postMessage.
- * @param {LH.Result} lhr
- * @protected
- */
-async function openViewerAndSendData(lhr) {
-  const windowName = 'viewer-' + computeWindowNameSuffix(lhr);
-  const url = getAppsOrigin() + '/viewer/';
-  openTabAndSendData({lhr}, url, windowName);
-}
-
-/**
- * Opens a new tab to the treemap app and sends the JSON results using URL.fragment
- * @param {LH.Result} json
- */
-function openTreemap(json) {
-  const treemapData = json.audits['script-treemap-data'].details;
-  if (!treemapData) {
-    throw new Error('no script treemap data found');
-  }
-
-  /** @type {LH.Treemap.Options} */
-  const treemapOptions = {
-    lhr: {
-      mainDocumentUrl: json.mainDocumentUrl,
-      finalUrl: json.finalUrl,
-      finalDisplayedUrl: json.finalDisplayedUrl,
-      audits: {
-        'script-treemap-data': json.audits['script-treemap-data'],
-      },
-      configSettings: {
-        locale: json.configSettings.locale,
-      },
-    },
-  };
-  const url = getAppsOrigin() + '/treemap/';
-  const windowName = 'treemap-' + computeWindowNameSuffix(json);
-
-  openTabWithUrlData(treemapOptions, url, windowName);
-}
-
-/**
- * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-
-/* eslint-env browser */
-
-/** @typedef {import('./dom.js').DOM} DOM */
-
-class DropDownMenu {
-  /**
-   * @param {DOM} dom
-   */
-  constructor(dom) {
-    /** @type {DOM} */
-    this._dom = dom;
-    /** @type {HTMLElement} */
-    this._toggleEl; // eslint-disable-line no-unused-expressions
-    /** @type {HTMLElement} */
-    this._menuEl; // eslint-disable-line no-unused-expressions
-
-    this.onDocumentKeyDown = this.onDocumentKeyDown.bind(this);
-    this.onToggleClick = this.onToggleClick.bind(this);
-    this.onToggleKeydown = this.onToggleKeydown.bind(this);
-    this.onMenuFocusOut = this.onMenuFocusOut.bind(this);
-    this.onMenuKeydown = this.onMenuKeydown.bind(this);
-
-    this._getNextMenuItem = this._getNextMenuItem.bind(this);
-    this._getNextSelectableNode = this._getNextSelectableNode.bind(this);
-    this._getPreviousMenuItem = this._getPreviousMenuItem.bind(this);
-  }
-
-  /**
-   * @param {function(MouseEvent): any} menuClickHandler
-   */
-  setup(menuClickHandler) {
-    this._toggleEl = this._dom.find('.lh-topbar button.lh-tools__button', this._dom.rootEl);
-    this._toggleEl.addEventListener('click', this.onToggleClick);
-    this._toggleEl.addEventListener('keydown', this.onToggleKeydown);
-
-    this._menuEl = this._dom.find('.lh-topbar div.lh-tools__dropdown', this._dom.rootEl);
-    this._menuEl.addEventListener('keydown', this.onMenuKeydown);
-    this._menuEl.addEventListener('click', menuClickHandler);
-  }
-
-  close() {
-    this._toggleEl.classList.remove('lh-active');
-    this._toggleEl.setAttribute('aria-expanded', 'false');
-    if (this._menuEl.contains(this._dom.document().activeElement)) {
-      // Refocus on the tools button if the drop down last had focus
-      this._toggleEl.focus();
-    }
-    this._menuEl.removeEventListener('focusout', this.onMenuFocusOut);
-    this._dom.document().removeEventListener('keydown', this.onDocumentKeyDown);
-  }
-
-  /**
-   * @param {HTMLElement} firstFocusElement
-   */
-  open(firstFocusElement) {
-    if (this._toggleEl.classList.contains('lh-active')) {
-      // If the drop down is already open focus on the element
-      firstFocusElement.focus();
-    } else {
-      // Wait for drop down transition to complete so options are focusable.
-      this._menuEl.addEventListener('transitionend', () => {
-        firstFocusElement.focus();
-      }, {once: true});
-    }
-
-    this._toggleEl.classList.add('lh-active');
-    this._toggleEl.setAttribute('aria-expanded', 'true');
-    this._menuEl.addEventListener('focusout', this.onMenuFocusOut);
-    this._dom.document().addEventListener('keydown', this.onDocumentKeyDown);
-  }
-
-  /**
-   * Click handler for tools button.
-   * @param {Event} e
-   */
-  onToggleClick(e) {
-    e.preventDefault();
-    e.stopImmediatePropagation();
-
-    if (this._toggleEl.classList.contains('lh-active')) {
-      this.close();
-    } else {
-      this.open(this._getNextMenuItem());
-    }
-  }
-
-  /**
-   * Handler for tool button.
-   * @param {KeyboardEvent} e
-   */
-  onToggleKeydown(e) {
-    switch (e.code) {
-      case 'ArrowUp':
-        e.preventDefault();
-        this.open(this._getPreviousMenuItem());
-        break;
-      case 'ArrowDown':
-      case 'Enter':
-      case ' ':
-        e.preventDefault();
-        this.open(this._getNextMenuItem());
-        break;
-       // no op
-    }
-  }
-
-  /**
-   * Handler for tool DropDown.
-   * @param {KeyboardEvent} e
-   */
-  onMenuKeydown(e) {
-    const el = /** @type {?HTMLElement} */ (e.target);
-
-    switch (e.code) {
-      case 'ArrowUp':
-        e.preventDefault();
-        this._getPreviousMenuItem(el).focus();
-        break;
-      case 'ArrowDown':
-        e.preventDefault();
-        this._getNextMenuItem(el).focus();
-        break;
-      case 'Home':
-        e.preventDefault();
-        this._getNextMenuItem().focus();
-        break;
-      case 'End':
-        e.preventDefault();
-        this._getPreviousMenuItem().focus();
-        break;
-       // no op
-    }
-  }
-
-  /**
-   * Keydown handler for the document.
-   * @param {KeyboardEvent} e
-   */
-  onDocumentKeyDown(e) {
-    if (e.keyCode === 27) { // ESC
-      this.close();
-    }
-  }
-
-  /**
-   * Focus out handler for the drop down menu.
-   * @param {FocusEvent} e
-   */
-  onMenuFocusOut(e) {
-    const focusedEl = /** @type {?HTMLElement} */ (e.relatedTarget);
-
-    if (!this._menuEl.contains(focusedEl)) {
-      this.close();
-    }
-  }
-
-  /**
-   * @param {Array<Node>} allNodes
-   * @param {?HTMLElement=} startNode
-   * @return {HTMLElement}
-   */
-  _getNextSelectableNode(allNodes, startNode) {
-    const nodes = allNodes.filter(/** @return {node is HTMLElement} */ (node) => {
-      if (!(node instanceof HTMLElement)) {
-        return false;
-      }
-
-      // 'Save as Gist' option may be disabled.
-      if (node.hasAttribute('disabled')) {
-        return false;
-      }
-
-      // 'Save as Gist' option may have display none.
-      if (window.getComputedStyle(node).display === 'none') {
-        return false;
-      }
-
-      return true;
-    });
-
-    let nextIndex = startNode ? (nodes.indexOf(startNode) + 1) : 0;
-    if (nextIndex >= nodes.length) {
-      nextIndex = 0;
-    }
-
-    return nodes[nextIndex];
-  }
-
-  /**
-   * @param {?HTMLElement=} startEl
-   * @return {HTMLElement}
-   */
-  _getNextMenuItem(startEl) {
-    const nodes = Array.from(this._menuEl.childNodes);
-    return this._getNextSelectableNode(nodes, startEl);
-  }
-
-  /**
-   * @param {?HTMLElement=} startEl
-   * @return {HTMLElement}
-   */
-  _getPreviousMenuItem(startEl) {
-    const nodes = Array.from(this._menuEl.childNodes).reverse();
-    return this._getNextSelectableNode(nodes, startEl);
-  }
-}
-
-/**
- * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-
-class TopbarFeatures {
-  /**
-   * @param {ReportUIFeatures} reportUIFeatures
-   * @param {DOM} dom
-   */
-  constructor(reportUIFeatures, dom) {
-    /** @type {LH.Result} */
-    this.lhr; // eslint-disable-line no-unused-expressions
-    this._reportUIFeatures = reportUIFeatures;
-    this._dom = dom;
-    this._dropDownMenu = new DropDownMenu(this._dom);
-    this._copyAttempt = false;
-    /** @type {HTMLElement} */
-    this.topbarEl; // eslint-disable-line no-unused-expressions
-    /** @type {HTMLElement} */
-    this.categoriesEl; // eslint-disable-line no-unused-expressions
-    /** @type {HTMLElement?} */
-    this.stickyHeaderEl; // eslint-disable-line no-unused-expressions
-    /** @type {HTMLElement} */
-    this.highlightEl; // eslint-disable-line no-unused-expressions
-    this.onDropDownMenuClick = this.onDropDownMenuClick.bind(this);
-    this.onKeyUp = this.onKeyUp.bind(this);
-    this.onCopy = this.onCopy.bind(this);
-    this.collapseAllDetails = this.collapseAllDetails.bind(this);
-  }
-
-  /**
-   * @param {LH.Result} lhr
-   */
-  enable(lhr) {
-    this.lhr = lhr;
-    this._dom.rootEl.addEventListener('keyup', this.onKeyUp);
-    this._dom.document().addEventListener('copy', this.onCopy);
-    this._dropDownMenu.setup(this.onDropDownMenuClick);
-    this._setUpCollapseDetailsAfterPrinting();
-
-    const topbarLogo = this._dom.find('.lh-topbar__logo', this._dom.rootEl);
-    topbarLogo.addEventListener('click', () => toggleDarkTheme(this._dom));
-
-    this._setupStickyHeader();
-  }
-
-  /**
-   * Handler for tool button.
-   * @param {Event} e
-   */
-  onDropDownMenuClick(e) {
-    e.preventDefault();
-
-    const el = /** @type {?Element} */ (e.target);
-
-    if (!el || !el.hasAttribute('data-action')) {
-      return;
-    }
-
-    switch (el.getAttribute('data-action')) {
-      case 'copy':
-        this.onCopyButtonClick();
-        break;
-      case 'print-summary':
-        this.collapseAllDetails();
-        this._print();
-        break;
-      case 'print-expanded':
-        this.expandAllDetails();
-        this._print();
-        break;
-      case 'save-json': {
-        const jsonStr = JSON.stringify(this.lhr, null, 2);
-        this._reportUIFeatures._saveFile(new Blob([jsonStr], {type: 'application/json'}));
-        break;
-      }
-      case 'save-html': {
-        const htmlStr = this._reportUIFeatures.getReportHtml();
-        try {
-          this._reportUIFeatures._saveFile(new Blob([htmlStr], {type: 'text/html'}));
-        } catch (e) {
-          this._dom.fireEventOn('lh-log', this._dom.document(), {
-            cmd: 'error', msg: 'Could not export as HTML. ' + e.message,
-          });
-        }
-        break;
-      }
-      case 'open-viewer': {
-        // DevTools cannot send data with postMessage, and we only want to use the URL fragment
-        // approach for viewer when needed, so check the environment and choose accordingly.
-        if (this._dom.isDevTools()) {
-          openViewer(this.lhr);
-        } else {
-          openViewerAndSendData(this.lhr);
-        }
-        break;
-      }
-      case 'save-gist': {
-        this._reportUIFeatures.saveAsGist();
-        break;
-      }
-      case 'toggle-dark': {
-        toggleDarkTheme(this._dom);
-        break;
-      }
-    }
-
-    this._dropDownMenu.close();
-  }
-
-  /**
-   * Handle copy events.
-   * @param {ClipboardEvent} e
-   */
-  onCopy(e) {
-    // Only handle copy button presses (e.g. ignore the user copying page text).
-    if (this._copyAttempt && e.clipboardData) {
-      // We want to write our own data to the clipboard, not the user's text selection.
-      e.preventDefault();
-      e.clipboardData.setData('text/plain', JSON.stringify(this.lhr, null, 2));
-
-      this._dom.fireEventOn('lh-log', this._dom.document(), {
-        cmd: 'log', msg: 'Report JSON copied to clipboard',
-      });
-    }
-
-    this._copyAttempt = false;
-  }
-
-  /**
-   * Copies the report JSON to the clipboard (if supported by the browser).
-   */
-  onCopyButtonClick() {
-    this._dom.fireEventOn('lh-analytics', this._dom.document(), {
-      cmd: 'send',
-      fields: {hitType: 'event', eventCategory: 'report', eventAction: 'copy'},
-    });
-
-    try {
-      if (this._dom.document().queryCommandSupported('copy')) {
-        this._copyAttempt = true;
-
-        // Note: In Safari 10.0.1, execCommand('copy') returns true if there's
-        // a valid text selection on the page. See http://caniuse.com/#feat=clipboard.
-        if (!this._dom.document().execCommand('copy')) {
-          this._copyAttempt = false; // Prevent event handler from seeing this as a copy attempt.
-
-          this._dom.fireEventOn('lh-log', this._dom.document(), {
-            cmd: 'warn', msg: 'Your browser does not support copy to clipboard.',
-          });
-        }
-      }
-    } catch (e) {
-      this._copyAttempt = false;
-      this._dom.fireEventOn('lh-log', this._dom.document(), {cmd: 'log', msg: e.message});
-    }
-  }
-
-  /**
-   * Keyup handler for the document.
-   * @param {KeyboardEvent} e
-   */
-  onKeyUp(e) {
-    // Ctrl+P - Expands audit details when user prints via keyboard shortcut.
-    if ((e.ctrlKey || e.metaKey) && e.keyCode === 80) {
-      this._dropDownMenu.close();
-    }
-  }
-
-  /**
-   * Expands all audit `<details>`.
-   * Ideally, a print stylesheet could take care of this, but CSS has no way to
-   * open a `<details>` element.
-   */
-  expandAllDetails() {
-    const details = this._dom.findAll('.lh-categories details', this._dom.rootEl);
-    details.map(detail => detail.open = true);
-  }
-
-  /**
-   * Collapses all audit `<details>`.
-   * open a `<details>` element.
-   */
-  collapseAllDetails() {
-    const details = this._dom.findAll('.lh-categories details', this._dom.rootEl);
-    details.map(detail => detail.open = false);
-  }
-
-  _print() {
-    if (this._reportUIFeatures._opts.onPrintOverride) {
-      this._reportUIFeatures._opts.onPrintOverride(this._dom.rootEl);
-    } else {
-      self.print();
-    }
-  }
-
-  /**
-   * Resets the state of page before capturing the page for export.
-   * When the user opens the exported HTML page, certain UI elements should
-   * be in their closed state (not opened) and the templates should be unstamped.
-   */
-  resetUIState() {
-    this._dropDownMenu.close();
-  }
-
-  /**
-   * Finds the first scrollable ancestor of `element`. Falls back to the document.
-   * @param {Element} element
-   * @return {Element | Document}
-   */
-  _getScrollParent(element) {
-    const {overflowY} = window.getComputedStyle(element);
-    const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
-
-    if (isScrollable) {
-      return element;
-    }
-
-    if (element.parentElement) {
-      return this._getScrollParent(element.parentElement);
-    }
-
-    return document;
-  }
-
-  /**
-   * Sets up listeners to collapse audit `<details>` when the user closes the
-   * print dialog, all `<details>` are collapsed.
-   */
-  _setUpCollapseDetailsAfterPrinting() {
-    // FF and IE implement these old events.
-    const supportsOldPrintEvents = 'onbeforeprint' in self;
-    if (supportsOldPrintEvents) {
-      self.addEventListener('afterprint', this.collapseAllDetails);
-    } else {
-      // Note: FF implements both window.onbeforeprint and media listeners. However,
-      // it doesn't matchMedia doesn't fire when matching 'print'.
-      self.matchMedia('print').addListener(mql => {
-        if (mql.matches) {
-          this.expandAllDetails();
-        } else {
-          this.collapseAllDetails();
-        }
-      });
-    }
-  }
-
-  _setupStickyHeader() {
-    // Cache these elements to avoid qSA on each onscroll.
-    this.topbarEl = this._dom.find('div.lh-topbar', this._dom.rootEl);
-    this.categoriesEl = this._dom.find('div.lh-categories', this._dom.rootEl);
-
-    // Defer behind rAF to avoid forcing layout.
-    window.requestAnimationFrame(() => window.requestAnimationFrame(() => {
-      // Only present in the DOM if it'll be used (>=2 categories)
-      try {
-        this.stickyHeaderEl = this._dom.find('div.lh-sticky-header', this._dom.rootEl);
-      } catch {
-        return;
-      }
-
-      // Highlighter will be absolutely positioned at first gauge, then transformed on scroll.
-      this.highlightEl = this._dom.createChildOf(this.stickyHeaderEl, 'div', 'lh-highlighter');
-
-      // Update sticky header visibility and highlight when page scrolls/resizes.
-      const scrollParent = this._getScrollParent(
-        this._dom.find('.lh-container', this._dom.rootEl));
-      // The 'scroll' handler must be should be on {Element | Document}...
-      scrollParent.addEventListener('scroll', () => this._updateStickyHeader());
-      // However resizeObserver needs an element, *not* the document.
-      const resizeTarget = scrollParent instanceof window.Document
-        ? document.documentElement
-        : scrollParent;
-      new window.ResizeObserver(() => this._updateStickyHeader()).observe(resizeTarget);
-    }));
-  }
-
-  /**
-   * Toggle visibility and update highlighter position
-   */
-  _updateStickyHeader() {
-    if (!this.stickyHeaderEl) return;
-
-    // Show sticky header when the main 5 gauges clear the topbar.
-    const topbarBottom = this.topbarEl.getBoundingClientRect().bottom;
-    const categoriesTop = this.categoriesEl.getBoundingClientRect().top;
-    const showStickyHeader = topbarBottom >= categoriesTop;
-
-    // Highlight mini gauge when section is in view.
-    // In view = the last category that starts above the middle of the window.
-    const categoryEls = Array.from(this._dom.rootEl.querySelectorAll('.lh-category'));
-    const categoriesAboveTheMiddle =
-      categoryEls.filter(el => el.getBoundingClientRect().top - window.innerHeight / 2 < 0);
-    const highlightIndex =
-      categoriesAboveTheMiddle.length > 0 ? categoriesAboveTheMiddle.length - 1 : 0;
-
-    // Category order matches gauge order in sticky header.
-    const gaugeWrapperEls =
-      this.stickyHeaderEl.querySelectorAll('.lh-gauge__wrapper, .lh-fraction__wrapper');
-    const gaugeToHighlight = gaugeWrapperEls[highlightIndex];
-    const origin = gaugeWrapperEls[0].getBoundingClientRect().left;
-    const offset = gaugeToHighlight.getBoundingClientRect().left - origin;
-
-    // Mutate at end to avoid layout thrashing.
-    this.highlightEl.style.transform = `translate(${offset}px)`;
-    this.stickyHeaderEl.classList.toggle('lh-sticky-header--visible', showStickyHeader);
-  }
-}
-
 /**
  * @license Copyright 2017 The Lighthouse Authors. All Rights Reserved.
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
  */
-
-/**
- * @fileoverview
- * @suppress {reportUnknownTypes}
- */
-
-/**
- * Generate a filenamePrefix of name_YYYY-MM-DD_HH-MM-SS
- * Date/time uses the local timezone, however Node has unreliable ICU
- * support, so we must construct a YYYY-MM-DD date format manually. :/
- * @param {string} name
- * @param {string|undefined} fetchTime
- */
-function getFilenamePrefix(name, fetchTime) {
-  const date = fetchTime ? new Date(fetchTime) : new Date();
-
-  const timeStr = date.toLocaleTimeString('en-US', {hour12: false});
-  const dateParts = date.toLocaleDateString('en-US', {
-    year: 'numeric', month: '2-digit', day: '2-digit',
-  }).split('/');
-  // @ts-expect-error - parts exists
-  dateParts.unshift(dateParts.pop());
-  const dateStr = dateParts.join('-');
-
-  const filenamePrefix = `${name}_${dateStr}_${timeStr}`;
-  // replace characters that are unfriendly to filenames
-  return filenamePrefix.replace(/[/?<>\\:*|"]/g, '-');
-}
-
-/**
- * Generate a filenamePrefix of hostname_YYYY-MM-DD_HH-MM-SS.
- * @param {{finalDisplayedUrl: string, fetchTime: string}} lhr
- * @return {string}
- */
-function getLhrFilenamePrefix(lhr) {
-  const hostname = new URL(lhr.finalDisplayedUrl).hostname;
-  return getFilenamePrefix(hostname, lhr.fetchTime);
-}
-
-/**
- * @license
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @param {HTMLTableElement} tableEl
- * @return {Array<HTMLElement>}
- */
-function getTableRows(tableEl) {
-  return Array.from(tableEl.tBodies[0].rows);
-}
-class ReportUIFeatures {
-  /**
-   * @param {DOM} dom
-   * @param {LH.Renderer.Options} opts
-   */
-  constructor(dom, opts = {}) {
-    /** @type {LH.Result} */
-    this.json; // eslint-disable-line no-unused-expressions
-    /** @type {DOM} */
-    this._dom = dom;
-
-    this._opts = opts;
-
-    this._topbar = opts.omitTopbar ? null : new TopbarFeatures(this, dom);
-    this.onMediaQueryChange = this.onMediaQueryChange.bind(this);
-  }
-
-  /**
-   * Adds tools button, print, and other functionality to the report. The method
-   * should be called whenever the report needs to be re-rendered.
-   * @param {LH.Result} lhr
-   */
-  initFeatures(lhr) {
-    this.json = lhr;
-    this._fullPageScreenshot = Util.getFullPageScreenshot(lhr);
-
-    if (this._topbar) {
-      this._topbar.enable(lhr);
-      this._topbar.resetUIState();
-    }
-    this._setupMediaQueryListeners();
-    this._setupThirdPartyFilter();
-    this._setupElementScreenshotOverlay(this._dom.rootEl);
-
-    // Do not query the system preferences for DevTools - DevTools should only apply dark theme
-    // if dark is selected in the settings panel.
-    // TODO: set `disableDarkMode` in devtools and delete this special case.
-    const disableDarkMode = this._dom.isDevTools() ||
-      this._opts.disableDarkMode || this._opts.disableAutoDarkModeAndFireworks;
-    if (!disableDarkMode && window.matchMedia('(prefers-color-scheme: dark)').matches) {
-      toggleDarkTheme(this._dom, true);
-    }
-
-    // Fireworks!
-    // To get fireworks you need 100 scores in all core categories, except PWA (because going the PWA route is discretionary).
-    const fireworksRequiredCategoryIds = ['performance', 'accessibility', 'best-practices', 'seo'];
-    const scoresAll100 = fireworksRequiredCategoryIds.every(id => {
-      const cat = lhr.categories[id];
-      return cat && cat.score === 1;
-    });
-    const disableFireworks =
-      this._opts.disableFireworks || this._opts.disableAutoDarkModeAndFireworks;
-    if (scoresAll100 && !disableFireworks) {
-      this._enableFireworks();
-      // If dark mode is allowed, force it on because it looks so much better.
-      if (!disableDarkMode) toggleDarkTheme(this._dom, true);
-    }
-
-    // Show the metric descriptions by default when there is an error.
-    const hasMetricError = lhr.categories.performance && lhr.categories.performance.auditRefs
-      .some(audit => Boolean(audit.group === 'metrics' && lhr.audits[audit.id].errorMessage));
-    if (hasMetricError) {
-      const toggleInputEl = this._dom.find('input.lh-metrics-toggle__input', this._dom.rootEl);
-      toggleInputEl.checked = true;
-    }
-
-    const showTreemapApp =
-      this.json.audits['script-treemap-data'] && this.json.audits['script-treemap-data'].details;
-    if (showTreemapApp) {
-      this.addButton({
-        text: Globals.strings.viewTreemapLabel,
-        icon: 'treemap',
-        onClick: () => openTreemap(this.json),
-      });
-    }
-
-    if (this._opts.onViewTrace) {
-      this.addButton({
-        text: lhr.configSettings.throttlingMethod === 'simulate' ?
-          Globals.strings.viewOriginalTraceLabel :
-          Globals.strings.viewTraceLabel,
-        onClick: () => this._opts.onViewTrace?.(),
-      });
-    }
-
-    if (this._opts.getStandaloneReportHTML) {
-      this._dom.find('a[data-action="save-html"]', this._dom.rootEl).classList.remove('lh-hidden');
-    }
-
-    // Fill in all i18n data.
-    for (const node of this._dom.findAll('[data-i18n]', this._dom.rootEl)) {
-      // These strings are guaranteed to (at least) have a default English string in UIStrings,
-      // so this cannot be undefined as long as `report-ui-features.data-i18n` test passes.
-      const i18nKey = node.getAttribute('data-i18n');
-      const i18nAttr = /** @type {keyof typeof Globals.strings} */ (i18nKey);
-      node.textContent = Globals.strings[i18nAttr];
-    }
-  }
-
-  /**
-   * @param {{text: string, icon?: string, onClick: () => void}} opts
-   */
-  addButton(opts) {
-    // Use qSA directly to as we don't want to throw (if this element is missing).
-    const metricsEl = this._dom.rootEl.querySelector('.lh-audit-group--metrics');
-    if (!metricsEl) return;
-
-    let buttonsEl = metricsEl.querySelector('.lh-buttons');
-    if (!buttonsEl) buttonsEl = this._dom.createChildOf(metricsEl, 'div', 'lh-buttons');
-
-    const classes = [
-      'lh-button',
-    ];
-    if (opts.icon) {
-      classes.push('lh-report-icon');
-      classes.push(`lh-report-icon--${opts.icon}`);
-    }
-    const buttonEl = this._dom.createChildOf(buttonsEl, 'button', classes.join(' '));
-    buttonEl.textContent = opts.text;
-    buttonEl.addEventListener('click', opts.onClick);
-    return buttonEl;
-  }
-
-  resetUIState() {
-    if (this._topbar) {
-      this._topbar.resetUIState();
-    }
-  }
-
-  /**
-   * Returns the html that recreates this report.
-   * @return {string}
-   */
-  getReportHtml() {
-    if (!this._opts.getStandaloneReportHTML) {
-      throw new Error('`getStandaloneReportHTML` is not set');
-    }
-
-    this.resetUIState();
-    return this._opts.getStandaloneReportHTML();
-  }
-
-  /**
-   * Save json as a gist. Unimplemented in base UI features.
-   */
-  saveAsGist() {
-    // TODO ?
-    throw new Error('Cannot save as gist from base report');
-  }
-
-  _enableFireworks() {
-    const scoresContainer = this._dom.find('.lh-scores-container', this._dom.rootEl);
-    scoresContainer.classList.add('lh-score100');
-  }
-
-  _setupMediaQueryListeners() {
-    const mediaQuery = self.matchMedia('(max-width: 500px)');
-    mediaQuery.addListener(this.onMediaQueryChange);
-    // Ensure the handler is called on init
-    this.onMediaQueryChange(mediaQuery);
-  }
-
-  /**
-   * Resets the state of page before capturing the page for export.
-   * When the user opens the exported HTML page, certain UI elements should
-   * be in their closed state (not opened) and the templates should be unstamped.
-   */
-  _resetUIState() {
-    if (this._topbar) {
-      this._topbar.resetUIState();
-    }
-  }
-
-  /**
-   * Handle media query change events.
-   * @param {MediaQueryList|MediaQueryListEvent} mql
-   */
-  onMediaQueryChange(mql) {
-    this._dom.rootEl.classList.toggle('lh-narrow', mql.matches);
-  }
-
-  _setupThirdPartyFilter() {
-    // Some audits should not display the third party filter option.
-    const thirdPartyFilterAuditExclusions = [
-      // These audits deal explicitly with third party resources.
-      'uses-rel-preconnect',
-      'third-party-facades',
-    ];
-    // Some audits should hide third party by default.
-    const thirdPartyFilterAuditHideByDefault = [
-      // Only first party resources are actionable.
-      'legacy-javascript',
-    ];
-
-    // Get all tables with a text url column.
-    const tables = Array.from(this._dom.rootEl.querySelectorAll('table.lh-table'));
-    const tablesWithUrls = tables
-      .filter(el =>
-        el.querySelector('td.lh-table-column--url, td.lh-table-column--source-location'))
-      .filter(el => {
-        const containingAudit = el.closest('.lh-audit');
-        if (!containingAudit) throw new Error('.lh-table not within audit');
-        return !thirdPartyFilterAuditExclusions.includes(containingAudit.id);
-      });
-
-    tablesWithUrls.forEach((tableEl) => {
-      const rowEls = getTableRows(tableEl);
-      const nonSubItemRows = rowEls.filter(rowEl => !rowEl.classList.contains('lh-sub-item-row'));
-      const thirdPartyRowEls = this._getThirdPartyRows(nonSubItemRows,
-        Util.getFinalDisplayedUrl(this.json));
-      // Entity-grouped tables don't have zebra lines.
-      const hasZebraStyle = rowEls.some(rowEl => rowEl.classList.contains('lh-row--even'));
-
-      // create input box
-      const filterTemplate = this._dom.createComponent('3pFilter');
-      const filterInput = this._dom.find('input', filterTemplate);
-
-      filterInput.addEventListener('change', e => {
-        const shouldHideThirdParty = e.target instanceof HTMLInputElement && !e.target.checked;
-        let even = true;
-        let rowEl = nonSubItemRows[0];
-        while (rowEl) {
-          const shouldHide = shouldHideThirdParty && thirdPartyRowEls.includes(rowEl);
-
-          // Iterate subsequent associated sub item rows.
-          do {
-            rowEl.classList.toggle('lh-row--hidden', shouldHide);
-
-            if (hasZebraStyle) {
-              // Adjust for zebra styling.
-              rowEl.classList.toggle('lh-row--even', !shouldHide && even);
-              rowEl.classList.toggle('lh-row--odd', !shouldHide && !even);
-            }
-
-            rowEl = /** @type {HTMLElement} */ (rowEl.nextElementSibling);
-          } while (rowEl && rowEl.classList.contains('lh-sub-item-row'));
-
-          if (!shouldHide) even = !even;
-        }
-      });
-
-      // thirdPartyRowEls contains both heading and item rows.
-      // Filter out heading rows to get third party resource count.
-      const thirdPartyResourceCount = thirdPartyRowEls.filter(
-        rowEl => !rowEl.classList.contains('lh-row--group')).length;
-      this._dom.find('.lh-3p-filter-count', filterTemplate).textContent =
-        `${thirdPartyResourceCount}`;
-      this._dom.find('.lh-3p-ui-string', filterTemplate).textContent =
-          Globals.strings.thirdPartyResourcesLabel;
-
-      const allThirdParty = thirdPartyRowEls.length === nonSubItemRows.length;
-      const allFirstParty = !thirdPartyRowEls.length;
-
-      // If all or none of the rows are 3rd party, hide the control.
-      if (allThirdParty || allFirstParty) {
-        this._dom.find('div.lh-3p-filter', filterTemplate).hidden = true;
-      }
-
-      // Add checkbox to the DOM.
-      if (!tableEl.parentNode) return; // Keep tsc happy.
-      tableEl.parentNode.insertBefore(filterTemplate, tableEl);
-
-      // Hide third-party rows for some audits by default.
-      const containingAudit = tableEl.closest('.lh-audit');
-      if (!containingAudit) throw new Error('.lh-table not within audit');
-      if (thirdPartyFilterAuditHideByDefault.includes(containingAudit.id) && !allThirdParty) {
-        filterInput.click();
-      }
-    });
-  }
-
-  /**
-   * @param {Element} rootEl
-   */
-  _setupElementScreenshotOverlay(rootEl) {
-    if (!this._fullPageScreenshot) return;
-
-    ElementScreenshotRenderer.installOverlayFeature({
-      dom: this._dom,
-      rootEl: rootEl,
-      overlayContainerEl: rootEl,
-      fullPageScreenshot: this._fullPageScreenshot,
-    });
-  }
-
-  /**
-   * From a table with URL entries, finds the rows containing third-party URLs
-   * and returns them.
-   * @param {HTMLElement[]} rowEls
-   * @param {string} finalDisplayedUrl
-   * @return {Array<HTMLElement>}
-   */
-  _getThirdPartyRows(rowEls, finalDisplayedUrl) {
-    const finalDisplayedUrlRootDomain = Util.getRootDomain(finalDisplayedUrl);
-    const firstPartyEntityName = this.json.entities?.find(e => e.isFirstParty === true)?.name;
-
-    /** @type {Array<HTMLElement>} */
-    const thirdPartyRowEls = [];
-    for (const rowEl of rowEls) {
-      if (firstPartyEntityName) {
-        // We rely on entity-classification for new LHRs that support it.
-        if (!rowEl.dataset.entity || rowEl.dataset.entity === firstPartyEntityName) continue;
-      } else {
-        // Without 10.0's entity classification, fallback to the older root domain-based filtering.
-        const urlItem = rowEl.querySelector('div.lh-text__url');
-        if (!urlItem) continue;
-        const datasetUrl = urlItem.dataset.url;
-        if (!datasetUrl) continue;
-        const isThirdParty = Util.getRootDomain(datasetUrl) !== finalDisplayedUrlRootDomain;
-        if (!isThirdParty) continue;
-      }
-
-      thirdPartyRowEls.push(rowEl);
-    }
-
-    return thirdPartyRowEls;
-  }
-
-  /**
-   * @param {Blob|File} blob
-   */
-  _saveFile(blob) {
-    const ext = blob.type.match('json') ? '.json' : '.html';
-    const filename = getLhrFilenamePrefix({
-      finalDisplayedUrl: Util.getFinalDisplayedUrl(this.json),
-      fetchTime: this.json.fetchTime,
-    }) + ext;
-    if (this._opts.onSaveFileOverride) {
-      this._opts.onSaveFileOverride(blob, filename);
-    } else {
-      this._dom.saveFile(blob, filename);
-    }
-  }
-}
-
-/**
- * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
- */
-
-/**
- * @param {LH.Result} lhr
- * @param {LH.Renderer.Options} opts
- * @return {HTMLElement}
- */
-function renderReport(lhr, opts = {}) {
-  const rootEl = document.createElement('article');
-  rootEl.classList.add('lh-root', 'lh-vars');
-
-  const dom = new DOM(rootEl.ownerDocument, rootEl);
-  const renderer = new ReportRenderer(dom);
-
-  renderer.renderReport(lhr, rootEl, opts);
-
-  // Hook in JS features and page-level event listeners after the report
-  // is in the document.
-  const features = new ReportUIFeatures(dom, opts);
-  features.initFeatures(lhr);
-  return rootEl;
-}
-
-/**
- * Returns a new LHR with all strings changed to the new requestedLocale.
- * @param {LH.Result} lhr
- * @param {LH.Locale} requestedLocale
- * @return {{lhr: LH.Result, missingIcuMessageIds: string[]}}
- */
-function swapLocale(lhr, requestedLocale) {
-  // Stub function only included for types
-  return {
-    lhr,
-    missingIcuMessageIds: [],
-  };
-}
-
-/**
- * Populate the i18n string lookup dict with locale data
- * Used when the host environment selects the locale and serves lighthouse the intended locale file
- * @see https://docs.google.com/document/d/1jnt3BqKB-4q3AE94UWFA0Gqspx8Sd_jivlB7gQMlmfk/edit
- * @param {LH.Locale} locale
- * @param {Record<string, {message: string}>} lhlMessages
- */
-function registerLocaleData(locale, lhlMessages) {
-  // Stub function only included for types
-}
-
-/**
- * Returns whether the requestedLocale is registered and available for use
- * @param {LH.Locale} requestedLocale
- * @return {boolean}
- */
-function hasLocale(requestedLocale) {
-  // Stub function only included for types
-  return false;
-}
-const format = {registerLocaleData, hasLocale};
-
-export { DOM, ReportRenderer, ReportUIFeatures, format, renderReport, swapLocale };
diff --git a/test/e2e/helpers/lighthouse-helpers.ts b/test/e2e/helpers/lighthouse-helpers.ts
index 69860d9..09a47e5 100644
--- a/test/e2e/helpers/lighthouse-helpers.ts
+++ b/test/e2e/helpers/lighthouse-helpers.ts
@@ -107,10 +107,6 @@
   }, enabled);
 }
 
-export async function setLegacyNavigation(enabled: boolean) {
-  return setToolbarCheckboxWithText(enabled, 'Legacy navigation');
-}
-
 export async function setThrottlingMethod(throttlingMethod: 'simulate'|'devtools') {
   const toolbarHandle = await waitFor('.lighthouse-settings-pane .toolbar');
   await toolbarHandle.evaluate((toolbar, throttlingMethod) => {
diff --git a/test/e2e/lighthouse/navigation_test.ts b/test/e2e/lighthouse/navigation_test.ts
index a6617b6..5f59f2a 100644
--- a/test/e2e/lighthouse/navigation_test.ts
+++ b/test/e2e/lighthouse/navigation_test.ts
@@ -24,7 +24,6 @@
   renderHtmlInIframe,
   selectCategories,
   selectDevice,
-  setLegacyNavigation,
   setThrottlingMethod,
   setToolbarCheckboxWithText,
   waitForResult,
@@ -69,217 +68,193 @@
     }
   });
 
-  const modes = ['legacy', 'FR'];
+  it('successfully returns a Lighthouse report', async () => {
+    await navigateToLighthouseTab('lighthouse/hello.html');
+    await registerServiceWorker();
 
-  for (const mode of modes) {
-    describe(`in ${mode} mode`, () => {
-      it('successfully returns a Lighthouse report', async () => {
-        await navigateToLighthouseTab('lighthouse/hello.html');
-        await registerServiceWorker();
+    await selectCategories([
+      'performance',
+      'accessibility',
+      'best-practices',
+      'seo',
+      'pwa',
+      'lighthouse-plugin-publisher-ads',
+    ]);
 
-        await setLegacyNavigation(mode === 'legacy');
-        await selectCategories([
-          'performance',
-          'accessibility',
-          'best-practices',
-          'seo',
-          'pwa',
-          'lighthouse-plugin-publisher-ads',
-        ]);
+    let numNavigations = 0;
+    const {target} = await getBrowserAndPages();
+    target.on('framenavigated', () => ++numNavigations);
 
-        let numNavigations = 0;
-        const {target} = await getBrowserAndPages();
-        target.on('framenavigated', () => ++numNavigations);
+    await clickStartButton();
 
-        await clickStartButton();
+    const {lhr, artifacts, reportEl} = await waitForResult();
 
-        const {lhr, artifacts, reportEl} = await waitForResult();
+    // 1 initial about:blank jump
+    // 1 about:blank jump + 1 navigation for the default pass
+    // 2 navigations to go to chrome://terms and back testing bfcache
+    // 1 navigation after auditing to reset state
+    assert.strictEqual(numNavigations, 6);
 
-        if (mode === 'legacy') {
-          // 1 initial about:blank jump
-          // 1 about:blank jump + 1 navigation for the default pass
-          // 1 about:blank jump + 1 navigation for the offline pass
-          // 2 navigations to go to chrome://terms and back testing bfcache
-          // 1 navigation after auditing to reset state
-          assert.strictEqual(numNavigations, 8);
-        } else {
-          // 1 initial about:blank jump
-          // 1 about:blank jump + 1 navigation for the default pass
-          // 2 navigations to go to chrome://terms and back testing bfcache
-          // 1 navigation after auditing to reset state
-          assert.strictEqual(numNavigations, 6);
-        }
+    assert.strictEqual(lhr.lighthouseVersion, '11.0.0');
+    assert.match(lhr.finalUrl, /^https:\/\/localhost:[0-9]+\/test\/e2e\/resources\/lighthouse\/hello.html/);
 
-        assert.strictEqual(lhr.lighthouseVersion, '10.4.0');
-        assert.match(lhr.finalUrl, /^https:\/\/localhost:[0-9]+\/test\/e2e\/resources\/lighthouse\/hello.html/);
+    assert.strictEqual(lhr.configSettings.throttlingMethod, 'simulate');
+    assert.strictEqual(lhr.configSettings.disableStorageReset, false);
+    assert.strictEqual(lhr.configSettings.formFactor, 'mobile');
+    assert.strictEqual(lhr.configSettings.throttling.rttMs, 150);
+    assert.strictEqual(lhr.configSettings.screenEmulation.disabled, true);
+    assert.include(lhr.configSettings.emulatedUserAgent, 'Mobile');
+    assert.include(lhr.environment.networkUserAgent, 'Mobile');
 
-        assert.strictEqual(lhr.configSettings.throttlingMethod, 'simulate');
-        assert.strictEqual(lhr.configSettings.disableStorageReset, false);
-        assert.strictEqual(lhr.configSettings.formFactor, 'mobile');
-        assert.strictEqual(lhr.configSettings.throttling.rttMs, 150);
-        assert.strictEqual(lhr.configSettings.screenEmulation.disabled, true);
-        assert.include(lhr.configSettings.emulatedUserAgent, 'Mobile');
-        assert.include(lhr.environment.networkUserAgent, 'Mobile');
-
-        assert.deepStrictEqual(artifacts.ViewportDimensions, {
-          innerHeight: 823,
-          innerWidth: 412,
-          outerHeight: 823,
-          outerWidth: 412,
-          devicePixelRatio: 1.75,
-        });
-
-        const {auditResults, erroredAudits, failedAudits} = getAuditsBreakdown(lhr, ['max-potential-fid']);
-        assert.strictEqual(auditResults.length, 185);
-        assert.deepStrictEqual(erroredAudits, []);
-        assert.deepStrictEqual(failedAudits.map(audit => audit.id), [
-          'service-worker',
-          'installable-manifest',
-          'splash-screen',
-          'themed-omnibox',
-          'maskable-icon',
-          'document-title',
-          'html-has-lang',
-          'meta-description',
-          'bf-cache',
-        ]);
-
-        const viewTraceButton = await $textContent('View Original Trace', reportEl);
-        if (!viewTraceButton) {
-          throw new Error('Could not find view trace button');
-        }
-
-        // Test view trace button behavior
-        await viewTraceButton.click();
-        let selectedTab = await waitFor('.tabbed-pane-header-tab.selected[aria-label="Performance"]');
-        let selectedTabText = await selectedTab.evaluate(selectedTabEl => {
-          return selectedTabEl.textContent;
-        });
-        assert.strictEqual(selectedTabText, 'Performance');
-
-        await navigateToLighthouseTab();
-
-        // Test element link behavior
-        const lcpElementAudit = await waitForElementWithTextContent('Largest Contentful Paint element', reportEl);
-        await lcpElementAudit.click();
-        const lcpElementLink = await waitForElementWithTextContent('button');
-        await lcpElementLink.click();
-
-        selectedTab = await waitFor('.tabbed-pane-header-tab.selected[aria-label="Elements"]');
-        selectedTabText = await selectedTab.evaluate(selectedTabEl => {
-          return selectedTabEl.textContent;
-        });
-        assert.strictEqual(selectedTabText, 'Elements');
-
-        const waitForJson = await interceptNextFileSave();
-
-        // For some reason the CDP click command doesn't work here even if the tools menu is open.
-        await reportEl.$eval(
-            'a[data-action="save-json"]:not(.hidden)', saveJsonEl => (saveJsonEl as HTMLElement).click());
-
-        const jsonContent = await waitForJson();
-        assert.strictEqual(jsonContent, JSON.stringify(lhr, null, 2));
-
-        const waitForHtml = await interceptNextFileSave();
-
-        // For some reason the CDP click command doesn't work here even if the tools menu is open.
-        await reportEl.$eval(
-            'a[data-action="save-html"]:not(.hidden)', saveHtmlEl => (saveHtmlEl as HTMLElement).click());
-
-        const htmlContent = await waitForHtml();
-        const iframeHandle = await renderHtmlInIframe(htmlContent);
-        const iframeAuditDivs = await iframeHandle.$$('.lh-audit');
-        const frontendAuditDivs = await reportEl.$$('.lh-audit');
-        assert.strictEqual(frontendAuditDivs.length, iframeAuditDivs.length);
-
-        // Ensure service worker was cleared.
-        assert.strictEqual(await getServiceWorkerCount(), 0);
-      });
-
-      it('successfully returns a Lighthouse report with DevTools throttling', async () => {
-        // [crbug.com/1427407] Flaky in legacy mode
-        if (mode === 'legacy') {
-          return;
-        }
-        await navigateToLighthouseTab('lighthouse/hello.html');
-
-        await setThrottlingMethod('devtools');
-        await setLegacyNavigation(mode === 'legacy');
-
-        await clickStartButton();
-
-        const {lhr, reportEl} = await waitForResult();
-
-        assert.strictEqual(lhr.configSettings.throttlingMethod, 'devtools');
-
-        // [crbug.com/1347220] DevTools throttling can force resources to load slow enough for these audits to fail sometimes.
-        const flakyAudits = [
-          'server-response-time',
-          'render-blocking-resources',
-        ];
-
-        const {auditResults, erroredAudits, failedAudits} = getAuditsBreakdown(lhr, flakyAudits);
-        assert.strictEqual(auditResults.length, 162);
-        assert.deepStrictEqual(erroredAudits, []);
-        assert.deepStrictEqual(failedAudits.map(audit => audit.id), [
-          'service-worker',
-          'installable-manifest',
-          'splash-screen',
-          'themed-omnibox',
-          'maskable-icon',
-          'document-title',
-          'html-has-lang',
-          'meta-description',
-          'bf-cache',
-        ]);
-
-        const viewTraceButton = await $textContent('View Trace', reportEl);
-        assert.ok(viewTraceButton);
-      });
-
-      it('successfully returns a Lighthouse report when settings changed', async () => {
-        await setDevToolsSettings({language: 'es'});
-        await navigateToLighthouseTab('lighthouse/hello.html');
-        await registerServiceWorker();
-
-        await setToolbarCheckboxWithText(mode === 'legacy', 'Navegación antigua');
-        await setToolbarCheckboxWithText(false, 'Borrar almacenamiento');
-        await selectCategories(['performance', 'best-practices']);
-        await selectDevice('desktop');
-
-        await clickStartButton();
-
-        const {reportEl, lhr, artifacts} = await waitForResult();
-
-        const {innerWidth, innerHeight, devicePixelRatio} = artifacts.ViewportDimensions;
-        // TODO: Figure out why outerHeight can be different depending on OS
-        assert.strictEqual(innerHeight, 720);
-        assert.strictEqual(innerWidth, 1280);
-        assert.strictEqual(devicePixelRatio, 1);
-
-        const {erroredAudits} = getAuditsBreakdown(lhr);
-        assert.deepStrictEqual(erroredAudits, []);
-
-        assert.deepStrictEqual(Object.keys(lhr.categories), ['performance', 'best-practices']);
-        assert.strictEqual(lhr.configSettings.disableStorageReset, true);
-        assert.strictEqual(lhr.configSettings.formFactor, 'desktop');
-        assert.strictEqual(lhr.configSettings.throttling.rttMs, 40);
-        assert.strictEqual(lhr.configSettings.screenEmulation.disabled, true);
-        assert.notInclude(lhr.configSettings.emulatedUserAgent, 'Mobile');
-        assert.notInclude(lhr.environment.networkUserAgent, 'Mobile');
-
-        const viewTraceButton = await $textContent('Ver rastro original', reportEl);
-        assert.ok(viewTraceButton);
-
-        const footerIssueText = await reportEl.$eval('.lh-footer__version_issue', footerIssueEl => {
-          return footerIssueEl.textContent;
-        });
-        assert.strictEqual(lhr.i18n.rendererFormattedStrings.footerIssue, 'Notificar un problema');
-        assert.strictEqual(footerIssueText, 'Notificar un problema');
-
-        // Ensure service worker is not cleared because we disable the storage reset.
-        assert.strictEqual(await getServiceWorkerCount(), 1);
-      });
+    assert.deepStrictEqual(artifacts.ViewportDimensions, {
+      innerHeight: 823,
+      innerWidth: 412,
+      outerHeight: 823,
+      outerWidth: 412,
+      devicePixelRatio: 1.75,
     });
-  }
+
+    const {auditResults, erroredAudits, failedAudits} = getAuditsBreakdown(lhr, ['max-potential-fid']);
+    assert.strictEqual(auditResults.length, 188);
+    assert.deepStrictEqual(erroredAudits, []);
+    assert.deepStrictEqual(failedAudits.map(audit => audit.id), [
+      'installable-manifest',
+      'splash-screen',
+      'themed-omnibox',
+      'maskable-icon',
+      'document-title',
+      'html-has-lang',
+      'meta-description',
+      'bf-cache',
+    ]);
+
+    const viewTraceButton = await $textContent('View Trace', reportEl);
+    assert.ok(!viewTraceButton);
+
+    // Test view trace button behavior
+    // For some reason the CDP click command doesn't work here even if the tools menu is open.
+    await reportEl.$eval(
+        'a[data-action="view-unthrottled-trace"]:not(.hidden)', saveJsonEl => (saveJsonEl as HTMLElement).click());
+    let selectedTab = await waitFor('.tabbed-pane-header-tab.selected[aria-label="Performance"]');
+    let selectedTabText = await selectedTab.evaluate(selectedTabEl => {
+      return selectedTabEl.textContent;
+    });
+    assert.strictEqual(selectedTabText, 'Performance');
+
+    await navigateToLighthouseTab();
+
+    // Test element link behavior
+    const lcpElementAudit = await waitForElementWithTextContent('Largest Contentful Paint element', reportEl);
+    await lcpElementAudit.click();
+    const lcpElementLink = await waitForElementWithTextContent('button');
+    await lcpElementLink.click();
+
+    selectedTab = await waitFor('.tabbed-pane-header-tab.selected[aria-label="Elements"]');
+    selectedTabText = await selectedTab.evaluate(selectedTabEl => {
+      return selectedTabEl.textContent;
+    });
+    assert.strictEqual(selectedTabText, 'Elements');
+
+    const waitForJson = await interceptNextFileSave();
+
+    // For some reason the CDP click command doesn't work here even if the tools menu is open.
+    await reportEl.$eval(
+        'a[data-action="save-json"]:not(.hidden)', saveJsonEl => (saveJsonEl as HTMLElement).click());
+
+    const jsonContent = await waitForJson();
+    assert.strictEqual(jsonContent, JSON.stringify(lhr, null, 2));
+
+    const waitForHtml = await interceptNextFileSave();
+
+    // For some reason the CDP click command doesn't work here even if the tools menu is open.
+    await reportEl.$eval(
+        'a[data-action="save-html"]:not(.hidden)', saveHtmlEl => (saveHtmlEl as HTMLElement).click());
+
+    const htmlContent = await waitForHtml();
+    const iframeHandle = await renderHtmlInIframe(htmlContent);
+    const iframeAuditDivs = await iframeHandle.$$('.lh-audit');
+    const frontendAuditDivs = await reportEl.$$('.lh-audit');
+    assert.strictEqual(frontendAuditDivs.length, iframeAuditDivs.length);
+
+    // Ensure service worker was cleared.
+    assert.strictEqual(await getServiceWorkerCount(), 0);
+  });
+
+  it('successfully returns a Lighthouse report with DevTools throttling', async () => {
+    await navigateToLighthouseTab('lighthouse/hello.html');
+
+    await setThrottlingMethod('devtools');
+
+    await clickStartButton();
+
+    const {lhr, reportEl} = await waitForResult();
+
+    assert.strictEqual(lhr.configSettings.throttlingMethod, 'devtools');
+
+    // [crbug.com/1347220] DevTools throttling can force resources to load slow enough for these audits to fail sometimes.
+    const flakyAudits = [
+      'server-response-time',
+      'render-blocking-resources',
+    ];
+
+    const {auditResults, erroredAudits, failedAudits} = getAuditsBreakdown(lhr, flakyAudits);
+    assert.strictEqual(auditResults.length, 165);
+    assert.deepStrictEqual(erroredAudits, []);
+    assert.deepStrictEqual(failedAudits.map(audit => audit.id), [
+      'installable-manifest',
+      'splash-screen',
+      'themed-omnibox',
+      'maskable-icon',
+      'document-title',
+      'html-has-lang',
+      'meta-description',
+      'bf-cache',
+    ]);
+
+    const viewTraceButton = await $textContent('View Trace', reportEl);
+    assert.ok(viewTraceButton);
+  });
+
+  it('successfully returns a Lighthouse report when settings changed', async () => {
+    await setDevToolsSettings({language: 'es'});
+    await navigateToLighthouseTab('lighthouse/hello.html');
+    await registerServiceWorker();
+
+    await setToolbarCheckboxWithText(false, 'Borrar almacenamiento');
+    await selectCategories(['performance', 'best-practices']);
+    await selectDevice('desktop');
+
+    await clickStartButton();
+
+    const {reportEl, lhr, artifacts} = await waitForResult();
+
+    const {innerWidth, innerHeight, devicePixelRatio} = artifacts.ViewportDimensions;
+    // TODO: Figure out why outerHeight can be different depending on OS
+    assert.strictEqual(innerHeight, 720);
+    assert.strictEqual(innerWidth, 1280);
+    assert.strictEqual(devicePixelRatio, 1);
+
+    const {erroredAudits} = getAuditsBreakdown(lhr);
+    assert.deepStrictEqual(erroredAudits, []);
+
+    assert.deepStrictEqual(Object.keys(lhr.categories), ['performance', 'best-practices']);
+    assert.strictEqual(lhr.configSettings.disableStorageReset, true);
+    assert.strictEqual(lhr.configSettings.formFactor, 'desktop');
+    assert.strictEqual(lhr.configSettings.throttling.rttMs, 40);
+    assert.strictEqual(lhr.configSettings.screenEmulation.disabled, true);
+    assert.notInclude(lhr.configSettings.emulatedUserAgent, 'Mobile');
+    assert.notInclude(lhr.environment.networkUserAgent, 'Mobile');
+
+    const viewTreemapButton = await $textContent('Ver gráfico de rectángulos', reportEl);
+    assert.ok(viewTreemapButton);
+
+    const footerIssueText = await reportEl.$eval('.lh-footer__version_issue', footerIssueEl => {
+      return footerIssueEl.textContent;
+    });
+    assert.strictEqual(lhr.i18n.rendererFormattedStrings.footerIssue, 'Notificar un problema');
+    assert.strictEqual(footerIssueText, 'Notificar un problema');
+
+    // Ensure service worker is not cleared because we disable the storage reset.
+    assert.strictEqual(await getServiceWorkerCount(), 1);
+  });
 });
diff --git a/test/e2e/lighthouse/snapshot_test.ts b/test/e2e/lighthouse/snapshot_test.ts
index 793783f..7fd996d 100644
--- a/test/e2e/lighthouse/snapshot_test.ts
+++ b/test/e2e/lighthouse/snapshot_test.ts
@@ -74,7 +74,7 @@
     });
 
     const {auditResults, erroredAudits, failedAudits} = getAuditsBreakdown(lhr);
-    assert.strictEqual(auditResults.length, 83);
+    assert.strictEqual(auditResults.length, 88);
     assert.deepStrictEqual(erroredAudits, []);
     assert.deepStrictEqual(failedAudits.map(audit => audit.id), [
       'document-title',
diff --git a/test/e2e/lighthouse/timespan_test.ts b/test/e2e/lighthouse/timespan_test.ts
index 7a0753f..729d168 100644
--- a/test/e2e/lighthouse/timespan_test.ts
+++ b/test/e2e/lighthouse/timespan_test.ts
@@ -81,12 +81,12 @@
     assert.strictEqual(devicePixelRatio, 1);
 
     const {auditResults, erroredAudits, failedAudits} = getAuditsBreakdown(lhr);
-    assert.strictEqual(auditResults.length, 46);
+    assert.strictEqual(auditResults.length, 45);
     assert.deepStrictEqual(erroredAudits, []);
     assert.deepStrictEqual(failedAudits.map(audit => audit.id), []);
 
     // Ensure the timespan captured the user interaction.
-    const interactionAudit = lhr.audits['experimental-interaction-to-next-paint'];
+    const interactionAudit = lhr.audits['interaction-to-next-paint'];
     assert.ok(interactionAudit.score);
     assert.ok(interactionAudit.numericValue);
     assert.strictEqual(interactionAudit.scoreDisplayMode, 'numeric');